PascalCoin %!s(int64=7) %!d(string=hai) anos
pai
achega
c963a77170

+ 2 - 1
PascalCoinWallet.dpr

@@ -38,7 +38,8 @@ uses
   UFRMMemoText in 'Units\Forms\UFRMMemoText.pas' {FRMMemoText},
   UChunk in 'Units\PascalCoin\UChunk.pas',
   UBaseTypes in 'Units\PascalCoin\UBaseTypes.pas',
-  UCommon in 'Units\Utils\UCommon.pas';
+  UCommon in 'Units\Utils\UCommon.pas',
+  UAccountKeyStorage in 'Units\PascalCoin\UAccountKeyStorage.pas';
 
 {$R *.res}
 

BIN=BIN
PascalCoinWallet.res


+ 1 - 1
PascalCoinWalletLazarus.dpr

@@ -49,7 +49,7 @@ uses
 
 begin
   Application.Initialize;
-  Application.MainFormOnTaskbar := True;
+  {$IFDEF WINDOWS}Application.MainFormOnTaskbar := True;{$ENDIF}
   Application.Title := 'Pascal Coin Wallet, Miner & Explorer';
   Application.CreateForm(TFRMWallet, FRMWallet);
   Application.Run;

BIN=BIN
PascalCoinWalletLazarus.ico


+ 5 - 1
PascalCoinWalletLazarus.lpi

@@ -20,7 +20,11 @@
       <EnableI18N LFM="False"/>
     </i18n>
     <VersionInfo>
-      <StringTable ProductVersion=""/>
+      <UseVersionInfo Value="True"/>
+      <MajorVersionNr Value="2"/>
+      <MinorVersionNr Value="1"/>
+      <RevisionNr Value="5"/>
+      <StringTable ProductVersion="0.0.0.0"/>
     </VersionInfo>
     <BuildModes Count="1">
       <Item1 Name="Default" Default="True"/>

BIN=BIN
PascalCoinWalletLazarus.res


+ 37 - 1
README.md

@@ -1,6 +1,6 @@
 # Pascal Coin: P2P Cryptocurrency without need of historical operations.  
   
-Copyright (c) 2016 Albert Molina  
+Copyright (c) 2016-2018 PascalCoin developers based on original Albert Molina source code
   
 THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only.  
   
@@ -34,6 +34,42 @@ Also, consider a donation at PascalCoin development account: "0-10"
 
 ## History:  
 
+### Build 2.1.5 - 2018-02-09
+- GUI changes:
+  - Allow massive accounts "change info" operation
+  - Added "account type" and "sale price" on accounts grid
+  - Show "account type" stats on search account form  
+  - Changed Icon to current PascalCoin icon
+- Pending operations buffer cached to file to allow daemon/app restart without losing pending operations
+- Less memory usage thanks to a Public keys centralised buffer
+- JSON-RPC changes
+  - Added param "n_operation" to "Operation Object" JSON-RPC call
+  - New method "findnoperation": Search an operation made to an account based on n_operation field
+    - Params:
+	  - "account" : Account
+	  - "n_operation" : n_operation field (n_operation is an incremental value to protect double spend)
+	- Result:
+	  - If success, returns an Operation Object	  
+  - New method "findnoperations": Search an operation made to an account based on n_operation 
+    - Params:
+	  - "account" : Account
+	  - "n_operation_min" : Min n_operation to search
+	  - "n_operation_max" : Max n_operation to search
+	  - "start_block" : (optional) Block number to start search. 0=Search all, including pending operations
+	- Result:
+	  - If success, returns an array of Operation Object
+  - New method "decodeophash": Decodes block/account/n_operation info of a 32 bytes ophash
+    - Params:
+      - "ophash" : HEXASTRING with an ophash (ophash is 32 bytes, so must be 64 hexa valid chars)
+    - Result:
+      - "block" : Integer. Block number. 0=unknown or pending
+      - "account" : Integer. Account number
+      - "n_operation" : Integer. n_operation used by the account. n_operation is an incremental value, cannot be used twice on same account.
+      - "md160hash" : HEXASTRING with MD160 hash
+- Solved bug that caused to delete blockchain when checking memory 
+- Solved bug in Network adjusted time on receiving connections caused by full entry buffer
+- Minor optimizations
+
 ### Build 2.1.3.0 - 2017-11-15
 - Fixed BUG when buying account assigning an invalid public key
 - Added maxim value to node servers buffer, deleting old node servers not used, this improves speed

+ 8 - 2
README.txt

@@ -1,6 +1,6 @@
 # Pascal Coin: P2P Cryptocurrency without need of historical operations.  
   
-Copyright (c) 2016 Albert Molina  
+Copyright (c) 2016-2018 PascalCoin developers based on original Albert Molina source code
   
 THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only.  
   
@@ -34,7 +34,12 @@ Also, consider a donation at PascalCoin development account: "0-10"
 
 ## History:  
 
-### Future Build 2.1.4 - 2017-12-22
+### Build 2.1.5 - 2018-02-09
+- GUI changes:
+  - Allow massive accounts "change info" operation
+  - Added "account type" and "sale price" on accounts grid
+  - Show "account type" stats on search account form  
+  - Changed Icon to current PascalCoin icon
 - Pending operations buffer cached to file to allow daemon/app restart without losing pending operations
 - Less memory usage thanks to a Public keys centralised buffer
 - JSON-RPC changes
@@ -62,6 +67,7 @@ Also, consider a donation at PascalCoin development account: "0-10"
       - "n_operation" : Integer. n_operation used by the account. n_operation is an incremental value, cannot be used twice on same account.
       - "md160hash" : HEXASTRING with MD160 hash
 - Solved bug that caused to delete blockchain when checking memory 
+- Solved bug in Network adjusted time on receiving connections caused by full entry buffer
 - Minor optimizations
 
 ### Build 2.1.3.0 - 2017-11-15

+ 55 - 0
README_daemon.txt

@@ -0,0 +1,55 @@
+# Pascal Coin: P2P Cryptocurrency without need of historical operations.  
+  
+Copyright (c) 2016 Albert Molina  
+  
+THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only.  
+  
+This software is a Node of the Pascal Coin P2P Cryptocurrency.  
+It can be used to Mine and Explore blocks and operations.  
+  
+Distributed under the MIT software license, see the accompanying file  
+LICENSE  or visit http://www.opensource.org/licenses/mit-license.php.  
+
+This product includes software developed by the OpenSSL Project and Denis  
+Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), and some  
+cryptographic functions inspirated in code written by Ladar Levison and   
+Marco Ferrante.  
+Original source code is written in Pascal Language and is available at   
+https://github.com/PascalCoin/PascalCoin  
+  
+# Using daemon version
+
+Note that daemon (pascalcoin_daemon) does not have a GUI to configure.
+To configure daemon, must use pascalcoin_daemon.ini file
+
+## pascalcoin_daemon.ini
+
+Please look example of available/documented configurations params.
+You can see example at GitHub file 
+https://github.com/PascalCoin/PascalCoin/blob/master/pascalcoin_daemon.ini
+
+## Install (linux only, tested on Ubuntu 16.04 64b)
+
+Basic instalation is easy:
+
+- Download/unzip in a fresh folder
+- Configure pascalcoin_daemon.ini with properly params values
+- Optional (new installation):
+  - Download blockchain zip file from sourceforge https://sourceforge.net/projects/pascalcoin/files/
+  - Unzip blockchain file and copy files (BlockChainStream.blocks and .bank) to $HOME/PascalCoin/Data
+  - Data folder contains blockchain and safebox
+  - Result will be: $HOME/PascalCoin/Data/ (blockchain + safebox)
+- In terminal mode, go to unziped PascalCoin folder (fresh folder)
+- Execute: nohup ./pascalcoin_daemon -r &
+- Wait some minutes until connected/updated blockchain
+
+## More info
+
+- Oficial channels are:
+  - Source code GitHub: https://github.com/PascalCoin/PascalCoin
+  - Wiki information Github
+  - Binaries/Installers SourceForge: https://sourceforge.net/projects/pascalcoin/files/
+
+
+
+

+ 132 - 126
Units/Forms/UFRMAbout.dfm

@@ -21,135 +21,141 @@ object FRMAbout: TFRMAbout
   object Image1: TImage
     Left = 15
     Top = 15
-    Width = 62
-    Height = 62
+    Width = 60
+    Height = 60
     AutoSize = True
     Picture.Data = {
-      0954506E67496D61676589504E470D0A1A0A0000000D494844520000003E0000
-      003E080600000073C1A8440000000473424954080808087C0864880000000970
+      0954506E67496D61676589504E470D0A1A0A0000000D494844520000003C0000
+      003C08060000003AFCD9720000000473424954080808087C0864880000000970
       48597300000B1200000B1201D2DD7EFC0000001C74455874536F667477617265
-      0041646F62652046697265776F726B7320435336E8BCB28C0000001674455874
-      4372656174696F6E2054696D650030362F30372F313610A27E9700000EDA4944
-      415478DACD9B095813D716804F4280A860E1A9A0A295A556AD0B88F6A9CF85A4
-      6E6D5DC08A05956A5050BFAA155EAD56AB125CD0BA22D65A5C58DCAAA012A5D5
-      F75C4AA2A2A8AD605D9E5A41A08A80A2AC822CC93B77320943329384B53DDF77
-      BE994C6692FBDF73EFB9E79E7B87A752A9A0B984C7E3F5C3C367A843511D506D
-      512D51F9B4AA68AD462D43CD45CD404D413D8165BBDF6C656B6A7084F5C2C322
-      54F7364241CEE01EF679A2BE9DCC5C9DDA594FF8673757AEE78ACA2A8B2FDE7D
-      F6F876E6CB925F7ECFA9C173C7AA6A652BFCEA1AEA0E2CE7B9BF1D38C2BE8B87
-      25A8939CECAD1FCE1ADDA37AE1F83EFDDE6A63D1B631BF9B915BFCF4C8C5F4C7
-      61F1A9EDCA2AAA49251C42DD8D65CEFE4BC111B8271E969BF179C3BD873A6786
-      CD78BFBB73C7B60E8DAE498E4AF05E7F3E2335E3C5DBF8F1206A2496FDCF1605
-      4760D257BF429DE733DCE556E4FCE1EE8DB56E032AC0053F8662F977B7083842
-      937E7AB47D5BE1EB6B5BBCEC9ACBC2C6E4DA83FC8713D7FCB72CBFA8FC117E9C
-      8F1CCF9B0D1CA1A760B35E279D36206F858FFBB0A68649CB2880C2B237E0686F
-      0D8E76D6D4B5CCFC12C8CC2B019B3696E0E6DC4EEF199F6FCFCBE32E6774C1D3
-      79C872A149C11158888725D6ADCCA79C5B33CE62500FBB778D3C411E621C19A2
-      52A26A46B1BA225A96088A3BCF2064EA00C0CAA5AE490FFF06A13FFE061E7D3A
-      817CFD04D67F4BBC9E756BD2BAB376354AD56AE4F9A129C137E1D034EE698C9F
-      03675F26803C335AC9399F055CA586D6C0AB6AE87325F5AD8D6F0C19D620E19B
-      31E035D891B332D88434FD512B7EAE29ADA88A3005DE203802932164AB95D07C
-      C49398E95D58A109209FC00AF0C8A7C1F9B4D2566705A75559435540614919D8
-      FA445377A56E9FAC6DD68EB30F43567E294407894032D2704323B14057FF43D9
-      25E555C7F16318B25536147C395ADA8FD3D27C735401AD66740530C0752DAE69
-      E25AF01A2DB83C3513C44B8FAB6F4B9C535B86096AA79D14361E447D3B1B3324
-      05DF4572E8095A7E23B2C5D61B9C38B2B6AD2D9665474D73D183A6AC8CD06602
-      063C0DCD8097AC8B87CCDC57750C5E7BA2A23FABCF9F3C2F86F49C42B06A650E
-      035C3A50D70AB1D9DF7A5C403D419A3A11D212886A9C1F9B90663F74C94901F6
-      F9395C0E8F151CA1BBA3F73E9BBCD1B352CF911168330B54731D8BD3AAB13836
-      7BDEE060A3166AA860080C419E7D399B3F717838DC91DA7145C652A3E0084DAC
-      7B7EC1F8DEAF77CC1DEAC10ECD04D785575B5C7EF31188E76D6B36708D74B3B3
-      02D937630D0D7585783A0D39CB8D814BEDDE6A3531EFE067FD75BE4058CB5A68
-      72A49A3B0B3C82C7245E01FF907DCD0EAE112E1F60EF772015839CEF90338A13
-      9C9E469E4DDFE35BAD179151C0960C8B6B2A80CDF26620DD9500A1BB8EB71838
-      FA21488B98ACD7F7497F1FBC5846203D90358F0B3C0E63EF0E47968C14D5799A
-      C0106801073C5F73ACB5B8482205C58DBB2D064EC4739023C8568CD1BBEEBEE8
-      C4258CED15C8BA520F1CA19DD1A15D2C383CD3BAAE17C7262EB0A4C12D6B2D2F
-      A0C1F9CC0AD0787933B01938158A4ACAD8AD63DD06DC7A3A82665C7F925700E9
-      7FE683556B4B18D0A32B5E57E2B542F4F22FEB0DFF78DF543DAB93898D4BE011
-      2C1CE5E8F274C1F7A1B59D59AD4D010B6BC105421DAB5BD4E9F38525E560EB3E
-      99B3701E83FA81FCE006E4AB06A8A982A0B0BDB0FDE019F014B9816C63205E7B
-      833EE22AF887C543D70E6D21E27331849FB8018ADB3946C1174DEC03E181FF62
-      B3FA65B4FA05E495EA821763DF2ED6EBDB4C68CD3905AFDB0A6AC1E5D7EF82D8
-      771167E142822420FDC28F06AF0491DFD7D82DEE41C83C2F90067C44814B2313
-      2134EA1C78B87603F9661F80EA0A08DA9504DB4FDD3608CE15D3D356E7236F67
-      2D38427FEA646F1D9CB177EAE03A7793E14BA08116D2A04206B04EF3A79B7C78
-      D409080E0DE72C5CF4D69520998C7D51594581DBF4FF04BBC56B48080F06AF11
-      7D2870D19C2DA0484D87108908A47E43287072DDD17F3F15C272097172854724
-      ACDF594D89FA5F5945F56C64BEAA01BFB2C66F608DDE54935890095EC7FA5C15
-      6001927FAF85D8B89F380B97747C3788B0B993665EF8AA006CDDBCA8EBA9F11B
-      C0AD7B478444C0F1CB202BF725447FFD094846F7C27B2BA8EBD20357A9D99A21
-      6186BC4C597BF4E6E595077FCD42663F124863C40125584B557AA1A906888216
-      D6B5BA80A302105CE43D1714577EE52E58FE1DCAD204449E7C5DDB2D5477E3B5
-      96E5B907A82B697B008ECF9DA86BE43BD9E5FB8053D00681D3CD9D4CBC3A10F0
-      81381139501A3FABA7DE9D4C6026AC990EB80E3CAF236732155CFBF48234B98C
-      067903E1BB0F60B78800D79E4E90766233755D9E9206E2C08D6A884B61D47D54
-      85A0122717BCE70AE7EF1B9AB713B198B437BBAA5AF90101DF32D2D561C0F9B5
-      E374C2535E2DA0B990012BD46F058C9690F9EC05380D18CBF9C79EE3C682ECC0
-      F76A186CBE412BBE85EDFB8E82E7A82120DBB184828B49B800FEABF642B78EB6
-      90796CA9169AA864D31988BDF080F3F76762EC1E8353582EC139BBE2C2ADA767
-      08F8953D0B47F003C6F41C54179CE9D85AB1589B5D65679361D2CC059C7F1CB2
-      EC4B902E594083A0139BE40F8A945408412F2FFDDC9BBA2EFDEE0884FE20038F
-      FEEF807C4780F65E72B499BC934A567089B1793BDDCF9F13F0CC532BC716EA25
-      FBB5E02CCDDCBC556D5F679EA34AB7EE85D04D3B39FF38E1C768F0FA48ACB5A0
-      4DF761E8D14B2161D72AF012BBAB2B636608287EBB0F21011F825442EE2D5777
-      8BF82B101CA90043C216C030859EB59911F0227406EC99953A0E8CADC9EBB708
-      AF598BE1E4995FB80B76E71A383AD851D0852F9F836D8F11D4F5D4C49DE8D11D
-      A8EB8EA3E743D6B302885E390D2463FB51D7D21E6441FFB9D106A1B94256A690
-      44858D6F4C05017F83E016FAB7F0580085463DBCDBE8E970EB2E771F54156523
-      4825D5BFE517AF80D85BED81557F9CD636675EDFA9D4B5A49DF341D4AF0BC814
-      6920592FC342BF3108656A96863761773101AF41703EEB1D7A7D9A0BBE7658E3
-      7519C4F9871E4307833CF1907A2843EF1DFE432C044BB7816B2F67483B194141
-      CBAFA68278F63AEAFEE8155321E6A71450A43D360A638AB519E095045C89E03C
-      D63B3471791DEBB2043334BCFCFA3D10FB2C30E9CF9B524832222DC21B6CDA58
-      98743F82D71806D74C5074C1758035814B8C2C09FC176F68516812A2CAC326B0
-      66608C815721B880FD0E1E7B88AA999D69A1D5E0D4301471E06F0D4D835711F0
-      72041772DE556726A681B7A803AC51D1CC55A0B87EDBF412344248B291F46943
-      439701F022029E8771BA907B85C48CB559D7998ED253529B21FED42CAB398558
-      3968625F83AB2A26803F25E0773080A936B45BA16EB3B6D09B869263615915D8
-      0E9BDB6CC0C4814946F6A052CAA63A3136A103186A7DE7F4BACFDEB75EFE697F
-      EED54F6D5AD992C5D202EA28BF9901E2391BB90BDEB9833A70A117121E653F83
-      A7F9AFA0BD8D15F4762663AF12725F14C383EC7C105A0860502F07ECBBEDB129
-      5B81A8B71DB839D9364905EE3B77FF5A40C4452A645D8593940FF42629BA4203
-      EAA79BD479B6F0B84B10BCF518E7E3D16BE78164E270EDF29168761886A50F20
-      24701C4803C6527373E9DE33101A755E9D75D9E24B073A95EA844513093D49F9
-      9980BB9B0BF8272A1302BA197D4A9B5165E6D6D5E0927571107BFA06E7A3497B
-      968068400FCAB2A054828D28088A4ACB21E1DB59E035AC179586122D8CC46025
-      1342660C05E9F44174A05369B458F511EB29D1F74A2BAABC0838F1E839E97B7C
-      5F9BB4BBA14E3A5993571780E88B282C7406E763AA1BDF6B170D0B8BCBC076D4
-      52EA7A6AF4227073B1A3ACEAE8B30DB2F28A20FACB31EA19564D15B0ADA33754
-      E838FD8D4AA5B2D3A49E4EAEF11BF80F937739305750CCD4B9749E780DE7EDAE
-      DD3B43DAFEC55A70F9CD3F40BC20525D218AD5EAA4232A6F6418752D698317F6
-      6BFB2685261216977AF99B0337F29179B206FCE33642C1E6D2F859BD4CFE15ED
-      AA8939643E2F0527BF48CE5B3D87BD07B2F57E5AF0F0B86408FEEE0CB8BAD843
-      DAEED9D452B11CE371F15771EACAE0481D35565C028FA464E416AF41E6D31A70
-      12B991E65E59AFCD3CF4A600594A164C5ACD9D5C0C99E981F36A0FD02C20643E
-      7B0599B985382C99ABA32EA57A6340DAA33CB5E3336186555FA1F36DA4EFF446
-      E6D7CCBCFAB2FECEED3FBEB9FD937A6FEA91FE7813420F73271713A493C06B68
-      77F507ED36107A6380767380B2C96199E2BBF182FCE8A5F464E45D41F132C049
-      EC978D562FABEF162EAFB567E1E4B54CCEEF1FC748C0D19E0E0C995B4140B311
-      A8798538B576D362F36B94AA919A5D91BA8B869BD0EA83EB6B75B72F8E6B772E
-      B0892A914474CD0FC825B4B5159AE5233670B262A748D9EC55657C4B57AD68F6
-      A9B089B1746F730BDDB7C98EE9BEC89ACB0A4EC3CFB07BAB5590DEC6000E91DF
-      CE01F1726EC7662CDDDBDC426F0CD8AEBB11880DBC351E623F1DE6DCFEE8D251
-      464B1C73E121F887CB39BFDF1630849A58FC15428FDBA5C8F891EE775C9B7FC8
-      8C80CCDA9E1B9CB541EDCE432E313501D8D44276420C5B7AAAB4BA463915191F
-      9A044EC30F31E3F36293377AAA0CF577CDCE432E797544D2A869644384B1D76D
-      19F29D62E533B2C1CFDB4A68BEFA49CC74CEAD9C9A6D986C6268C9B639A1BBFA
-      1FCA2A29AFDA8F1FB7215F4DBDC169F8D508EFCD064F36E0D9223897B4B44767
-      6CE9DC696C3FABA99B78E7B56D6D31F7ECEA8F5B339B3D014FCB78C1F91C73FB
-      754B4063F37E8ACD3B8E395E370A9C860FE4F37861B215639E1A73782D2DC491
-      8D0D395D82F0648D698FA1CDBB0D0127AB2D235137FB0C7779A9B749E82F9285
-      91C98A5DA7EFBD83E16820B29C31F5B986BC9AE18C879DD8EFDF3EBF769CA03E
-      115E530A89C8862C3E998FC109D9BEE5871C05F579BEC16F21D1EF97EDC2D8FE
-      D1B165A39C5AEADD14D297E7EEBC7413636F27FC48B29B0791A1B8DEE56FE4EB
-      5724D0218B658BB002EE61053837E7EB57CBF7DFF8E358728623366B92D58C68
-      F1D7AF582A80E48966A0CEC62EA05C36C5ADC077844BA35B01B1EE8E9FEEFC1E
-      75EE81E0715E0999D0EFA1819F35E6779B0C5CA712C812C77C54B185805F35BC
-      77A79CF7DEB685D16E0E36237A7772E20A84745FB14C799067575651DD11BF22
-      A9DBCD7FCB572C0D540249597F08EA976A891324413B19D8490C4BD25DE4CFC9
-      D04356FCC9AE3DE2A8D2519350FF839A83E56B96D4CCFF0184B915F49D084B6C
-      0000000049454E44AE426082}
+      0041646F62652046697265776F726B7320435336E8BCB28C00000FBA49444154
+      78DAD59B095C55D79DC77F7779F72DF0001F48004571C17D091A318AC11D9D8C
+      4B1A6B4D9A38666BBA24699A34B669D3345A5BA78E6DDA8C33934C938989ADCD
+      A2C4246615B728EA68558C1A10104454400494F5DD77DF5DE67FEE7B1AC4FB14
+      788A99FF87F7B9EFC33DF7DDFBBDE77FFEDB3987330C033752CA8A8F0E104521
+      9317F80C4972DCEA70B9539C2E770C3BE76D69BC207B1BCB149F7C48D7F45DAA
+      AAED48491D5674239F87BBDEC047F3F6B905811B27F0C2644110D20551E84BC0
+      71F4DD61B33B05872B8A734644996DBDCD0D90BD0D865FF66A243201D768AA56
+      4ADFF769BAB64DD78C3D43D3D21BBF91C0797B733304817F90C066F38210CF0B
+      2278D10EC12641147988BC0E49E0E170D8E1B43B03C03E2F649F0F8AAA43D579
+      A874D4FC0A74D5075D53E9A35513FC464DD357A78D9DB0EB1B01BC6FE7B63B09
+      7431414EA20F389B13ECE8305AE0F4D7C2E1AF865DA985A8D483D7BCE0743FDD
+      5437AF35381E066F832E38A14AD1F049B1906DF1F0DAE8C8B918300CBFD73CD2
+      673B81AF4CBF63F22737053877CBE7B792DAFEAB20F23379C1068340ED9C0FD1
+      4A05A2E512B8E40A882A69A3A1B1DB98700001D277F6172036CFD0173DF812D8
+      3F04A8A21B2D8E24D43BFAA15E4A82CFB083F3CB04ED07A9FC67A4EEBF983075
+      C6A12E03DEB1E99317785E789EA7C109D10527E745BC52048F5C483D7ADE6CA3
+      7322410A9DEC050DBCA19ADF655B37D43906A25A1A00AF4143416D219557355D
+      D7966566DDB9F486026FFE64632F9EE3FE4A2A9C09C10151E090A41523493E02
+      BB564F903613F47A0A03E70D3F7C42342A1CC35121A442D5E8993519A4E23B74
+      C35838EDCED9E5D71D78D387EF67F03CB79EC667822E3A41EF1DA9FE0388D22A
+      49211968E77AB3FDE0D4EBF0A3414844B16D34CEC3035E35C77795AE1BDFCE9A
+      7357BB8C5ABB803FDD903D8BE7F96CB2BC924196B7378EA3BF9A0781DEBECA49
+      61C370C1316DF528E639C3FC3345341468A44525621ACAD01F5CC0A22BBAAECF
+      FBA76FCDFB286CE08FB2D7CD1278FE03907562C669080E21D9288246BD6A800F
+      8F94EE2D3A6D686DC554AFFFD21B105DF432353266E4CEC87741F5EB08D83C1D
+      02F5F6296E00F271AB69CCC89A51ECA2CF9D356FFE55A1AF0AFCE1BA77C6D198
+      FD82136C36E66AD2F8FD48C049A87084071A14816073FEB70CCBDE3A6042FFEA
+      9E34648DEB0BDDAB80B78B7861F55EE4E49D46A2C785FF7A3C13F174D4FDDAA5
+      EB45C8A8227DCBD36F0BB830CDEFA7313D71CEFC057B3A0CBCE19DBFF710383E
+      8FE3C5EE048CD1E27E2472A708D61EB8305C5AFA01C1ED40D64FDE33A1983C92
+      D90BAF3E3F833ADA8EAA730D48BC6FCDA5E69B7F7907A64E1E06D5A75FA6FB22
+      7CA834927140BD8D01C3D0D5739AA1A77D6BC177CFB41BF8ED37D6C06E177753
+      FC3B4EE31D18251D410A5F1280656AE82035A4E809E1C42C64E1412ADAE7FE35
+      283B1B881EDFFEE1282C98D90F888EC3EE8355C8787A83F97FB743C4993F4D83
+      3B211A8889A3FB923F272DD074E3127499DE0F79CA70F03AF3D7FA1E9F4F1B7F
+      CF030BDB079CBDF66FE467F9252AB99E81D2498CB01D866A4826A018E5C0EE03
+      E558BAF600C289D2C8E2435634EC3C4A563EF83B63FAC6C01361632771EABC82
+      FCF2804F774902320678E014398CE81B8749E9FD31616802ECF42C46938FC075
+      889C1F87FD2350A8F486482E8B8CD89279F7DD7F859FBE02F8DD356F0E21D823
+      BA60E7E36C8D98E8D86B46433ABD55911EE6745523463FB60ED517BC61746FF8
+      92DA231A4FCC1D8E27EE1A616A9DE60B18BB2FE4B1A8F1BB298CF511B33EFC3B
+      FFB228FF5AC05B385E98C251F03F39623F6285F3D4BB22449B00992C66C68FB3
+      71B0A4E6A6C2B696AC51C9C85E321311928DC24F2FEAF46ED8DA3C86C6B34AE3
+      59DB4AC0534302BFF3E6EAE9F4963669BC13831DE54873E69BAACCD48F8F9030
+      FFB98FB17E57E9CD66BC42EE4A4FC686E5B329F862EE4A469E77080AE45E1075
+      2F1B76590B163D986309FCD6EAD77791551EEF100DCC88DA47C98062FA5AC16D
+      C7E2553BF087EC2F6F365B48C9F96526A64D19069D54DBA7D9F079433A649563
+      567BF7BD0F3E947105F04B2B56A47B3CDDF672921B2322CA30C25964F62E0B0C
+      3EDB5582452BB74092AE6F9CDC1161B14875BD0F3E55B73CFFC81D3DF1EA5319
+      506DD1E440C88035A7E2704B0A0CA51175B575639F7CF6D97D9701AF5CB6ECF5
+      F85B6E79D0E5B46366F401440A5E6864A840EADC50DF02B1B18EFA9A453A2CBA
+      BAB165A12B60E923512032E577B9C82DAAB36C33775402DE7F662C0564026C1E
+      0F9A75173EBD300A2D5E1FAAABCEAE5EFCEBE71FBA04BCF03BF7BA060F4A3D95
+      98DCC793EABE8009EEA3A6A1BA286662AF2AD0EBCE51DEA77F1DFC0685E10BF4
+      6238DB55424D3FAB6A189D0A58D8353CF9E2494B77E08B63B5966DEEBE2D11D9
+      CFDC0E5FA30F9CDD01C913835D4DC351D440595679695D7E4161F2DAF5EFB698
+      C03F7AF87BD313136ED9D4B34F2AA6C616A29774F632E00035C1F8C9D95B40B3
+      AFAC4C535CD51CF2A17B789C8821B766E81DD70EB3870978E26F766247E13580
+      9BFDE6F3490E01A72286616BDD2094971C43456555D62BAB5FCF31817FF8D0C3
+      BF4F4848FCF9E0FEBD303BFE30C5530AAB415CF9AB046DF8AFEC69BBCB868FFF
+      5181592FEE0DF9D0B9BF9A808CC171F0C96A27FA98EEE11431F5B7B9D89A6FED
+      122F0346208F56A4687CAC4E417E51392A2B4EAFF8EF37DF78D6047E74D1035B
+      137BF69E3C616034A6C7159805B59062016D774B58F2D65758BAA1D0F292187A
+      21252BA7520F4BF06B3A3A230C781A8DE12D5FB50F98898D82E1CDC644E496CA
+      4CADB7BDF6D73553B82913EEE8D72725656B52AFFEBDE60E0346C75036A45DC3
+      1AB781B6474A98B3620F36E6555936CF48F520F7854C283EB5D3E68E69D1D465
+      3BDBDDC3E635E456F7EB23F1E109374E9F282C2F292D9DC2CDCA9AF1487CF7EE
+      7F4A4E498D5C38B219FD226B09B81DD58B203477A186525115839EDD8EB29A16
+      CBA68F4FEF8355DF4B2383A2740ED64ED92F4B349ECEC199F3720780FD28D67A
+      E16F279371F2784153F5B9734F71B367CC7C232E36EEBE3EFDFA8BDF4FBB8078
+      7BD3D555BA0DB4080D855F9DC0909F6FB99404B495F79F4CC75C824653078183
+      36A2A959C14FD71CC15FB69F0CD9F4AED109D8B078DCE52ACD6938AB7BF05A59
+      2A8E1F2F54CFD5D4AC65C0876263E3460CECDF97FBD1A83A44893EB2D0ED771E
+      22E5B41B728EE1EEDF6D0AD966DAD0EE88A571AE77D04233DE669F86BCB27A54
+      5C90AFDA767E7A12DEFD29F570AB972A703A1A8D08BC5236100545A5464DCDB9
+      C34CA5EB6363BB470D1B9882C708D841518AD611E068079EFBCF5C2C7FE760C7
+      7AEF3ACBAA85C3F1F8ACD436C00645D676BC7C62208E149D444D4D7503033608
+      182307F53681454E25D5EC003059DE998B3FC0E7074EDD34D8F8283B0AFE6D2A
+      A2C957ABADBC002BFBAB9C0D2F970D425E61396A6BAA1116308BAE7C7E0DFD1F
+      7E0B676A9BDB75CDF516365FF5C9E2DB3175E42D81F1DBEAD14301775AA5458A
+      6FF34B6B30F407EFDE14D8F47EDDF012A9F2ED2CA0611EA0CD635BAA7438464B
+      A4B4F1ED4F0B70EF8ACD21DBB8296010B9E00C1259F106EFD79156149DE3E91C
+      334E32B91DAF12A84832CD61D7B576DA46B03793631D18D3B79B992CCC18110F
+      5EE4E16B512DAB8A96462B1CB7C40CD6337FFE027F7CCF3A4FEED1CD817D4B32
+      61A7A442A0F1B52EF7141E7D3DD036292670CE21F1B091A67C77D53FF0F1A1B3
+      E6B9451392F1E7876F85D2CA0031601B017B226D00FD16A921FC5E35A42B6462
+      E9966665CDA4C023AEC381077BA1824BC2E4A7DEC3F6C315966D66520F7C4A31
+      B4410FC6915B7AF29583F8F74D818AC92452C36D4B3341D93AABA1A3FFE22D97
+      029797178DC00FE60C80D1C66FB33098552ADBEBDD2C038F4E8596AC77E96D37
+      79FDE8F7D0DF2931B72EE83D470FFDDBFB8799E38B859F3FF99F43782908BC7C
+      FE60FCE2DB83A1B5F8D142C069CF6D47497533F52287FDBF9988E1BDA32914D5
+      AEF91C5707B6082D3B9C3C5C0476D870A8F02CD21E5F1FB24DF68FC7E0EEF13D
+      4DEBC9D140F513D8FE1317CC1A597ADF1873EC328D14681C56D679517CB6D974
+      31437AB8CDB6E18A441E27476F933C74283D6C0D1CE5C09B1F1CC1032F6EB33C
+      CF0C4FFEEFA7604062247CAD8C912805868B9F7AEFD2F8A3031BE7601F1A9B17
+      DB8723AC3AA3704E7C644C47C1F153A83CD32A3D6C5701A02D70B4134FACDC82
+      FFD878D4F27CDFEE2E1398416A9D48FAC315893AED24DF17DBF5F1283FCE0A00
+      955F1700AE55E2692BA6C122956635EADD05D629A15963FAD9E5C17C5703E70A
+      93705C4D4245D9F1BAFCFCC2E4B5D9C1120F9390453C0B61AB72EA1B7DE84306
+      EB7C93CFB2CDD2BB07E1D7F70CE9744A188E0894C1357391D824FEB375118F49
+      A832AD25B0D3867D472A31965C5228D9F8F458CC1A93444141D7F7B09DE2AB43
+      C2181CE547C290EBADCBB44CAC0AF1BAC5A43733587F597F08DF5FB5C3F2862C
+      40285C31057DE25D146B876F6D3B22AC776532569B6DB321EB029B42B52EC433
+      0935D572053045588F2ECFC1AB9F1558DE742059E6A3CB279BDFBBDA60D90D19
+      07A50C1CE38742D49AAF3ED5C224D464DAA50BD844B62462CC63EBB0BFF89CE5
+      4DAD92F1AE109BA1A05648C00EC79DD055FFB527D382C0D6D3A541D56606ABF6
+      82D734588D5EEBF1B962C110FC6CDEA02E3558E6AC08C94ED71CD4C2034E95DB
+      375DCA24E4843802097FCE9E32643D177AEDC8A6C5E3303D2D013E6FD7192CC9
+      F0E24B17B921713804B5B9FD13E24CAEB6E481250C39BB4BF0DA077981D98836
+      2252A0F1E27DC3D09D5247B59335E88E8A5D6F41A9330D5F3A330996DCA9A675
+      6CC90393908B5A0CBB39390E7F23D0D418840E2EA60A8A4AD95167E7913A2A12
+      C1563806212F72065964854D84777C51CB45B9EAB22502D5EBCFC3686EB4ECE9
+      1B2F06C17A51E91C8C2FA366909162CB9694CE2F5BBA28A117A64930782108DD
+      C0A618BB0C952D3E150D1F4E45DE866351934C8B0CCD1FFEC2B48B1272E92161
+      ABBCBD4B7B5AD07DE622D652CF2494BBD2983566C0D76FE9E145B15E5CBA1F51
+      5A157482561B1A6E28349B0D64B0F5AE1494C64EC7795B2278A5E9C62C2EBD28
+      96CB87D562242947C95236107413B416EF7585662BE8055D81CF1E8B2ACF7854
+      46A59906117EEF8D5D3EDC5A2C1788FB8B112B17C1565B0283ACB74EAA1FD602
+      712D10B4F89CF1A8F38C424D741ABC7C24C07AB5AB1688B716EB2D000AA2D50A
+      B8AB0FC279BED8DCE7009D051FBC69E0CCD5B7E60459AB3D008661AE8EE57456
+      E520BFCDDBA0DA63E075A7A0A1DB303444F6838F92014E612BE11556F0EBFA2D
+      00ADC56A93077931D8D54638BC5570349F86D4520541AE85E06F06C77A4E0F96
+      70D84B102468B608688E5828AE04C8113D213B294A13DDAC27E97D7903C79BBD
+      C9A3AD586EE3B13928D1B007B6F130474663DE214970DA03CB8FBD3E19B25F81
+      A21AE4DB85C0361E85ACB0B9A1E31BBA8DA7AD5C73A3564414E77405376AB534
+      406EF97FBA512B94B47B2B9EAAEF52B51BBF15EFFF000BB1F477942997640000
+      000049454E44AE426082}
   end
   object Label1: TLabel
     Left = 90

+ 135 - 136
Units/Forms/UFRMAbout.lfm

@@ -15,136 +15,142 @@ object FRMAbout: TFRMAbout
   Font.Name = 'Tahoma'
   OnCreate = FormCreate
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.4.0'
+  LCLVersion = '1.8.0.6'
   object Image1: TImage
     Left = 15
-    Height = 62
+    Height = 60
     Top = 15
-    Width = 62
+    Width = 60
     AutoSize = True
     Picture.Data = {
-      1754506F727461626C654E6574776F726B477261706869630A0F000089504E47
-      0D0A1A0A0000000D494844520000003E0000003E080600000073C1A844000000
+      1754506F727461626C654E6574776F726B47726170686963E20F000089504E47
+      0D0A1A0A0000000D494844520000003C0000003C08060000003AFCD972000000
       0473424954080808087C086488000000097048597300000B1200000B1201D2DD
       7EFC0000001C74455874536F6674776172650041646F62652046697265776F72
-      6B7320435336E8BCB28C00000016744558744372656174696F6E2054696D6500
-      30362F30372F313610A27E9700000E62494441546881CD9B7D9C54D579C7BFE7
-      CEECEEC0BE22B02F2CB033B3C2F2EA0ED0801491B56068ADBCA40511492DD12A
-      A468C57CAC298444AC1113623EB15A6391A8D40815431B8C2FA9489301444113
-      1844C00576980576D91D0177667760999DB9A77FDCBB77EFECBCEDABEDEFF339
-      9FB973EFB9E79CDF739EE7B9CF7913524AFA0B42881B80BF016600A5C020200B
-      50F424F51401424003E0050E00FF25A5FCBCDFDAD6D7C485100B818780C9D936
-      6BFD8D15458D55134B2C958EC1B9F3A69655267B2F100A07F71EBB70E6A8EF72
-      F3EF3EAD8FEE3D76C1DE165107000781E7A494EFF7693BFB82B8106234F028F0
-      0D4751EEC97B6EAD883C78FB841BF2B333F37A53AEB72158F7FADE9A331B7E75
-      7870A8353200D80ABC28A53CDBEB36F786B810620CB0D6A288998B66387D1BEE
-      FEDA2867715E696F1B9508DE8660DDA2A7767B0F7B2F8E045E03364929CFF5B4
-      BC1E1117420C02FE1158B96466F9914DAB664EEE6DEF7615260194038F4B295F
-      EC4939DD262E84A804B60FC9B35D39F8D38585FDD5C3E970B0DA7F72FE13EF85
-      FC81ABA7815552CA2FBAF37EB7880B21165B14F1E4FABBA634AE5B32F9A6EE36
-      361D3CDE4B3485AE612FCAC55E980B80CFDF8CAFB19982EC2C5CCEC171EF2CF9
-      F16EF71B1F7887032BA594FFD3D5BA94AE641242D884103FC81D90F183FD1B17
-      C8F4A40508058405146B6C128AF63C01566FFE905BD6BECD96DD278D7B5B769F
-      E496B56FB37AF38709DFD9FEDD3955BFF9FEDC904511BF1442ACEC0A1FE82271
-      E0896C9BF5CE73AF2C1B39ADA27074C21C4268C42C5960CD02AB2D41CAEAF8B5
-      649904A1C173E612404CCFBA8FD60350357158D2C6CD9B5A56B97FE382E61C5B
-      C63F74957C4AE2428801428817726C19B7D56DF9666942072614B06480A59D98
-      89744622F29D8460C9024B264D57DA0884C200869A83A6EA00F6A2DCB8AACD98
-      565138FAFC9665A5B90332560921D60B21327B4C1C7838DB669D757ECBB2E109
-      492B197AC36D897BD992E6BF21A82C3CBEA051ACB9C76BFD2DBA3072D23415F2
-      B333F3CEBDB26C648E2D6331B03455DEA4CE4D08B1386F60E69AB32FDF551E47
-      5A283A69ABF6AB5841B1E836ADFF0A85E54FFE0A5FC3971DEF49F385D4FF6BD7
-      E7BF085253DF44CE800CA6940F05244DA1304774F57F6CE91443282EE7E018AD
-      E88C83D5FE93331E7DD31A55E5FDC91C5E42E24288511645ECDABF714138CEA6
-      8502964C4DBD0DD266E765D105A3206E7C3869E37A8B4AC760562F98C8F2D989
-      5DCE5B1FD71E99FFC47BB940A594B2A5F3F338551742E4015BBF7DDBB8DAE4A4
-      CD292B36E92AEFF6F43AAA4C8923672EF1AD67DCD8EFDD86C77B29EEF9BCA965
-      9577DCE43C0BFC520831A0F3F34436FE9DC2FC01D6E756CC981573570813D98C
-      8E6B6B668CADB6DBAFAF3198A0E8BE47ADBF85490FFDA7E1FDCDD8FEDD395585
-      F903CA4860EF31C4F561E4CA8F9E5E5018578A92614A995A4AD6F3D62C7C0D4D
-      7DC7AE0B58F8E42EE30B60C66FBE3F371B7854085164BEDFB9C7D72D99597E22
-      2E0C55AC1DCECC92614A26D2E65EB764E1FE43BF0DA51322100AB3FAC58FE2EE
-      4FAB281C3DC939C40F3C60BE6F38372184D3A288BD97B6FD6D6EAC17171D0187
-      35CB445427AD98D4BF5D408A85823F594AA03994B091F9B9D9B8C6D8D13CBBE4
-      7CE3256ACEF9C91998C5948A1180CAF9C6266AEA2F775B00675E5A1AE7F1BD0D
-      C1BAF2FB5EB7A239BA4688EDF1EF2D9AE13C15F7E952F44F94D9735B4C6A1FD3
-      FB9A709A426D494903B8C695E3DEF613DCAFFD08F7AB3FE4F659DAA76AF6D4B1
-      B8373D8CFBE70FB06EF96C00460CCDE3D78F2D60568AC8CD8C67DE3C1A77CF59
-      9C573AC939E414F06D8396E9F9E20D777F6D54DC5B8A0584D524800C530C9E41
-      BC97CFC473F27CCAC6554D9F1CE3283DD5B59A40C6D80DE1B6FB08E7B0412CBC
-      A902F7C6453C347F625AE2893C3CC08E35731CC0FD31C4851077388A728FC5D9
-      B631D050620394CEDFEE4E42F09C3893B271F691238C50154B269ECF7D3A7187
-      519EFBB05713D224871E1B587866C54CCAD24470EDF17E67388BF34AB36DD626
-      21C4748338B0FA9E5B2B2271B985253625251FABF29E13A753132F1B61984B53
-      4B2B81E62BDAFDD222A30EDF052DE2B3175F6704440885E5B32B5296DD1EEF27
-      C23F2D725D0256012842080BE07AF0F60937C41357B4EFB7503A7ADFF84D2200
-      2503DFF986948DAB9AF9A7BA63B4E2F9BCD6B8EF1A576E945BDBA039367BC975
-      3175271A93771577CDBADE01FC851042518049D9366B6DE2919799B41223F9D8
-      7BB182D8F3E11F92565E39616C4CA8EB3951A3DD1FE330CA72FFB1633C5E35D9
-      691AC30B7CFEB8E83306B32694247DE62CCE2BCDB02A2D80430196DE5851D498
-      90B45E59CC35ED5A904028C282AF2E756FDBCB46EA31BDE6307DE7B5AAEDC38B
-      0D82BE0B5A6F97150F32699D9692392FA3FC34C3D79BC7979C011629C0F43B6F
-      2EB7C56769AFACF33526219885A391F77C762A65C5AE1B26749041C1734CEB5D
-      4DCDB57A7CF51735122566B5D6EAD97920B5E34C3561A13D2FB100D3ACC0B0A2
-      820129E2CB04D3444224BE063C9F9D4859B146BC43909E639AA05C639D467DEE
-      4FB4A8AF6ACAF531F53FF3EB43299D1740D5C4E4AA0E50E9189C0B14588141F3
-      A6969525CFDA3E76360D5F63AED598BC69894F1CA7BD2F254D812081667DA261
-      787B282DF1D56B13A6F692EB681FC47B6A1A7878D39E94652F98664F394E07B8
-      797C8903685580046A8ED1386375CB206F4A52D5F3A820A320557C67EB52566C
-      1F51026A146414CFD18E78DE35C661D4597B41B3637BF12090929D1F9CA0EA3B
-      DB52960BB07AC184B47974276EB302D6C45924A0EAA4CC044D8958D2A8518E1C
-      AB4E5AE9AC193742B40DD43650238676548E751AE5B83FFECCC8EFBB7099AACD
-      EFB2C793DAAE41EBED74F66D824D00AA7CEBFEC4F3BD964CD37C996986D49829
-      B5C50C60DC1F1FE796250F242CAA3F51569883E7D9451464A79C5F3420E6BD18
-      4DD2DB3A8CDEEC94543D8908A8FA373CAAE03B973A46EF0FE46767B2F37B73BB
-      4CBA1D0A104DFA54464155759B543B08CB28A8119011ED574FE9ECBBAF919F9D
-      897BC3BC9E4473AA156D513E71CF4B69EAE5881678A851CD468502510B9AEC34
-      4B711FF0F49C453751E918CCCE755F4FEBC593E08A15080642E170D2D54E43AD
-      75F2BA5A77C4EDC2F896B7879FFD89FCEC4C56CF9FC8FABBA6F4A698162BF0C5
-      DE63172249772B18BD6DD1ED59271B8D5D036B0A868C51567FA0AC3087E5B32B
-      58BD6062B7EDD98CB73EAE3D029A8A9F3DEABB9C3B6F6A8A18468DE8443BC7E6
-      0223C038EE4DDDF06143B19716D2BE9070FAEC05EAFC5F32A42087F1CE61804A
-      C3C520D567FDD832AD4C1B5B8ACB39047B610E55E30B713906F598AC19FEC0D5
-      56E00B2B70E0779FD6FFD9DA3B2625CF2D555DCD15888AF86752E2F93C35F1F5
-      7FFFD72C9F3FD38801AAEEDD409DFF4B562D9EC5FABF9B0BD136D6FFE2B73CFE
-      F26EA68D2DC5FDD33B2112866858F3297D84FFD853D30AECB5026FEF3D76E19E
-      B46FA8914EA3341D06F1DA646F02602FCA83482BA082AAE2A9D6161C5CD71741
-      E41AA811DC87B4098CAACAE1A640A7EF48031CACF60F05762AC0F1B6889AE76D
-      08A6FF1645DB40D57B211AD61A1C0D43F41ABEFAD4C3C52A975D231EB9465353
-      138196AB80BE32DA5E46FBACCBD06CFD5EDF920E84C2C196D6B6A152CA538A94
-      B215D8B76DCFE9F47121688D899AC847AF41F41A7B3CC955BD72D4309DB496CC
-      66E1720ED6CB0853DB1800C03E74A04EBA6FB7A23DFFCEB14F817DD031E7B6E9
-      473B3C5D8F02D4B60ED29130BE3A7FCAECF6A2824EC43535AF2C2F32B4A05DCD
-      01AAC6EB4EB08FF1D2FBD556E025E8085C76855A2343BC0DC1BA2E6FE6512346
-      48EB3999DA4A5CE54375FBD6465F0BA73B71399651909DA1094F8DE2B2E7F3FB
-      A7E6771AE6F61DBC0DC13A6F43B01870834E5C4A191142FC6CD153BB6F3BF42F
-      7FD5F55D4C5285A88AE774EAE92697E33A9DB8F68E7D880DFBE0422D4688B482
-      1AA5C026A89A50DC33565DC0DA573F3905EC97525E81D805857F3DECBD38A14B
-      4EAE133C3517533E77D9F34DAA7EADE33A7A4DB3E57EEAE5760442E1E08EFDDE
-      E180B127CE202EA56C067EB1E8A9DD5D737226245AA534C33E382B96ACDAA68F
-      01FA6F03B1192B9EDF7728AACAADE6ADA09D574B9F3DECBD587AB0DA7F926EE0
-      4892D50B689FEEFD6A082682B72158B77D5FCD04E0DFCCF76388EB7B43D7CF7F
-      E2BDE42B7E9D906841DE8C74D3BDFD8DE98FBCE9071E9152C638A2443B2276F8
-      03576B96FC78B7BB2B05A79BE077397ABEF2D15B6C78E3F007FEC0D54629E5BF
-      777E16475CF77AF7BFF1817774FB4826157C8DA9EDBB374B3EBDC1C16AFFC9C7
-      B6FD7120DADEF93824DCE726A5FC1258F48D27770D4C67EFE954DDE51CD2C5A6
-      F61D02A17070CEBA772291A8FAB8943261FB936EF093527E1455E5DA39EBDE89
-      0642E1A43B79922DCB823669D09BB1734F1008858323BEB5B5B6A5B5ED15E09D
-      64F952EE6C9452EE68696DDB317CF9D6BA44E49B42E1942B1B5FB57DEBA4CF36
-      5F6DFBB994F2692965D2F9C42E6DDB1642ACCC1B98B962D73FDF36D0BCF7AD29
-      14C6E34D1EBC98B75FF73702A17070F8F2AD752DAD6D6F4829D7A7CBDFE5FDEA
-      4288FB142136EC5CF7F5BA54876AFE2F70B0DA7F72EE63EF360742E15780CD52
-      CAD40B6C748FB802CC069E5E32B3FCF2EB8FCEAEEA556BFB080F6EDABFE78577
-      8F5F1F55E57D52CADF76F5BD9E1CCD7002CFE7D83246EEFEE15F5A93EE5FEF67
-      781B8275D31F79D3EF0F5C6D04BE29A54C3D13D2093D3E85A49F2F7B619273C8
-      E91D6BE638BEAAB329815038B8E2F97D87B6EFAB71001B81D7A494DDDE3FDADB
-      E35783D0760C3E34C939E4F88E35739CFD79FC6AEDAB9F9CDAB1DF6B8FAA7207
-      F0EC577EFC2AAE106D9FE8DDC0BD39B60C75CD62D7A53B6F2EEFB5160442E1E0
-      736F7FF6E9CBEF575BCF34368F0236A311BED0EB36F7C311CB29685BAA6EC9B4
-      2A6D33C797D48F1B39885B5DA505378F2F71245BB1E97CC4F240756361A83552
-      0C7C023CFDFFF28865D2C2852803FE1CED50ED686018900B64A2CDFE48200C5C
-      035A8046A006F83DF0DF40BD94FD334BF1BFCAF3090585D7E9BD000000004945
-      4E44AE426082
+      6B7320435336E8BCB28C00000F5C494441546881D59B7D8C5DC579879F7766CE
+      39F7DEFDBE8B1D7B8D61B13160B05D2F5027C68E8190409B929084006D5A42A3
+      5651D4964655152591924292A65594A66A451B45AA541250207C8990A4348921
+      14624330181BB049B0F1DAF1826D6C76D7FB79EF39673EFAC75DDB6B7BEFB26B
+      AF4DFB938E567B66CE9C79EECCBCF3CE9C772484C0A9D4AEED5BCE3346AF515A
+      AD8AE3C2F242A9A9B3586A6A05A88C0E1DAC568676656975B3777EBDB5EEA9CE
+      454BB69DCAFAC84C036FD9B4A1496B59A995BE526BBD421BBDC0187D86D6BA10
+      25455D28354BB1A11980CAC820D5CA60C8AB15E79CAB5AEBDE72D6753BE73638
+      EF9EF02E3C7351D78AA199ACDF8C016F7A76DD2AADD5A7B4D61F525ACF56DAA0
+      4C828E628C5118E589B5A25048282645002A69856A9A92598FF50A6B3D2ECFF0
+      36C53B8B776EBF73EEC7CEF93BBBDEBD7AFD4CD4F3A48137FCF2890F6AAD3EA7
+      B4BE42698D444594D614C228C5BC9742BE9F24EBC564032857417C8E040F4010
+      4550115E17B1710B69DC4E359A4D256AA72A25BC7384BC82770EEFDCFF38E7BF
+      B9E2BD573EFA8E00AF7BFC67CBB5D2FFA88DFA3DA5234254249194966C0F2DD5
+      1D94AA7B307608820384200A50040464AC90004200FCD88F104034D634315AE8
+      60A0B09081B8833424485EC5BB1C67DD4F9D775F5C7DD5359B4F1BF0533F7FF4
+      36A5F49795311A53A228156667DB28575FA590F703E0C510449F489D90E050C1
+      02508DDAE82B9CCFFEF83C2AA10876146FADF3DE7D6DCDD51FFCCAF4CB9E06F0
+      638FFEF82C2572B7D66A0DBA80D14287DB4E47F56512378097082F66BA759854
+      2A5854C849750B7B0A4BD9A317615D0057C539FF940FE1E6F77FF043BBA75ADE
+      94817FFEA31FAE524A1E545ACFF1A6481B7D2CCA37D2ECF6E289F027D89A5395
+      0A0E45CEA09ECBF6E812FA29A36C05EFDC3EEFC3C7AFFEF047A664D4A604FCDF
+      0F3F74AD52EA21A54D1C4CC2D9BCC6B976133A58ACC4270D2363637AA2AA8800
+      010E259990E1C4B0C374B18B73919A45CFBCF7D7FFFE47AFFFC9DBBEEBED807F
+      F2D003D76AA51E411BA574C4856C667ED8862322A0A689768C42C01423C65B31
+      5BC90FFF02A61483F3A01564169B7B6A36CFA3C9E991F37885E5789783B3DE79
+      7FDDB5D7DF3029F4A4C03F7AE0BE954AE449D151A4B4A64B3DCF1C7E8BA57072
+      A063D2C588B5BFDAC5D7EEDD08085FFAC32EAE5EB9005FC95089E1B63B9F65ED
+      A6D7995B2EF1EDBF5AC3EC72099FBBC3CF1BAAECE36C36F94B6B5398CB731FC2
+      E51FBEE1A667EABDB36E133D7CDF3DF308E191808A028AE5F21C73D87D18564E
+      F6129048F34F0FBDC8BAADFB58B7752F0FAEDD8284149DC4BC796098AFDDBB91
+      5FFDE64D1E7E7A275BB774A33447FA3F60293087DD2C97E70828022A2284471E
+      BEEF9E79D302FEC177EF02CF030166E51896E897982B3D58925A374C0CBA2146
+      974EE26A4C20736CDF3370F8BDEFBFE80C183D08B1A3FBCD231E6553C1B0627E
+      030CF7611A0CA621412B19834E982B3D2CD12F6131049885E7811F7CF7EE0981
+      279C43A248DD06ACCC8839DFECA45377634302014C7391A737EEE62BDFDFC8C9
+      78694A09D5CCB17BFFF0E17BDFFA593777AEEB01A5E8E9CF0EDF773E70FDBF6F
+      A46884650BCEE08A15E7B2FAA23924CD05C2708AF5319DBA9B41D3C8ABD9D918
+      AA2BA3486E038E9BA78F1BC3F7DFF5BD0B95522F7B9DA833A2212E2F3C8B10F0
+      41611A225EDF37C4257FF900FB0F564E187626B4685E0BB75EB7945B3FB20C42
+      C0A53563F764F5DDBC9537A15CEABDF74B6FFCE42DAF8C7F6EA22E7D474094C2
+      F33BF1AFD1E2F0284CACA9562DD7FDDDA3EF382CC0F63706F8EB6FAFE39A2FFC
+      98E1D4A2E2188D6579FC0A0A4F401470C7B1CF1D057CDFF7EEFC4020BC2F2762
+      61D443BBEEC50683520205C3CDFFB0961776BC75DAA0A6A29FBFD0C3CD7FFF53
+      C4809384B2EE6361D4434E0484F7DDF7BD3B3F303EFF51C0DE87DB435094A4CA
+      05C92E7C3008A01A623E77C7533CB8BEFB34A24C5D3FDCD0C363BFD8822E28BC
+      445C90ECA224557C50781F6E1F9FF7F018FED76F7C6345B9DCF6ACC44D2C6BD8
+      C5B2E2366C8831C5889FAEDFC12DDF7C9C389E593F793A1281FD0329A9F513A6
+      FFF97BCFE43FFE6615366AC1A89C974616F1D26827211BA2AFB7EFDD9FFDC217
+      36C0382B9D65D9677C8092CA3827DE4B184BB2A965C5A2596CFFD6D5283CB5A1
+      716AB7858E9500716278DFD7D7B16E5BDF84790E8C58A856F1C339A15C664161
+      1FAF563B180D9065F9678023C037DFF847A5C5172CBACE4BC4DCA88F263D820D
+      63BF850FB4B636228D31BEEF00F843D0471400AD0489267135738FF501A99F63
+      526015EBC373EF44D24A4029425A25EFEBA3B1ECE988FBD9566D21CBB3EBFEF8
+      E33796BEFFE0FDA306A0A9A9719573BE8C28CE4A0E1C5798770E7404AD67E0FA
+      0ED4FCDB711E8F085453C7F6DF8ED4ADD0BC7291D68688E0A7DF3B04887D9870
+      71719CC6A043FF01E637EC67BB2AE39C2B373535AE02D61A8010FC553E40834A
+      99150DE2C3044B3DEF218A51E559E35ABA061D1723D63EB7876BFFF9D9BAF558
+      F7A5D5AC5A7C0669D54E1B388C511B3DC5FEA11436CD690FDD9454273E2882F7
+      57016B1580736E85174D9B19A6A8527CBD8EE73D32068D5247D6735A786EE7C1
+      BAEF6F2D452C9EDB88CF27363853954C633C783114F3015A7D1F5E199CF72B00
+      D455EF5DB3D07BBF30A02947C3206F53A989A07DE0855D03751FB9685E13E596
+      02D69D04B0C8D4BAF43829F194E903D178EF175EBEF2B285AA542A5D1942282B
+      8156330253312BE3A0B5D1A4C3292FF70CD6CDDED5D902B13A61DB9E249ABC6A
+      7975EFF0DB673E4A424B38880878EFCB0D0D0D571A11591D0205AD024D268330
+      C57E33066D66BD8B1D5B77B2BBB7BEBBF9FE0B6741292299AEC11AEBC3C32319
+      7F7BD7CBBCD15FAD5F9D099ADFA36894510C9E000544561B6079001D89A7A0EC
+      D481A166B89A8ABC32A0267CE121FDDB633BB9F7D937F0D304168191D4B169D7
+      007B0ED6870588B43A6E907B84826418B184209AC0721342382704C4284FA4FC
+      F4BB9D82E75F9BDCBF7E6CEBF153DD4C6BCDF9ED13DC152271185CED1FC2390A
+      6806D012D012A60F6C3D1B5F3BF54093697673C22756CDC7558E9EF242008D1F
+      CFD57C52BB705A09D5C12A5B764DECEE9D0EC55A71CF5F5C42B925C1D6F1B3C7
+      4B0183002E082EC8B45C3F8934DDFB0679A3B7BE87752AB562611B4F7E793557
+      75CD211DC98F9B6044C0A1C6730D1A11D929C232EB95E45E519C4E9BC79A9776
+      4EDEBA4D458391B12F48213038AEDB35170D4AA4E69AE69E4A56DB91D44A682A
+      9AA3D628815A6BCE6F2FF0BB0BDAB8EEE2395CB36C36CA28D2A1ACCE6C1AC883
+      C6A2C78A909D06D82C70511E94A97A43B354A76EA995F0FCF6FAE3775E5B810D
+      B7AF218914BA6078605D0F9FFECF1701E868ADA515624594183E71C773FCD7E6
+      3701F893CBCEE45FFE6C39D9F0917DAD40CD12971B2328187081BC62C9735BD7
+      755004AA21C606834870089B4D08AC13E17AE7A571C8C6CC2E4CCD6C09403EB9
+      C15A3ABF998EB98D848A459A62B6BC7E6427F2BCB98DCCEB6884D4E1AC67EBB8
+      B4F72C6CA3B539211CB33A0A21905B8F1FCA988A149EE150C2A210A812C23A35
+      3A3AF28488F4F900076D03535DEB6AAD183E58E195DFF6D7CD7349672B0099F5
+      901FEDA15FBD64160470D6336AFDE1A55FA485CBCE2B132A3999F5475DB90B4C
+      6F2A0F0C482B218052AA6F6464E409F3F82F9FDAF1E95BFE7487E0CEEACB5B20
+      4C7110479AD7BADF62FF407D0FEBE2CE160ED5301BC9F9FAC717F3D14BE6A294
+      B062412BD9484608508C354F7CF132B6BF39C2ECE6840BE73591A5AE6EB953C7
+      55F45186504529B5E3C9679EDE6100B4D61B547057F6DB462A3E2121ABBF623A
+      A458F362776FDD64AD84256736C3D80A29844012292E5F320B803C7587BD3397
+      7BE6978BCC7F5703B8409A9D3CACC2334A03FDD2860A3D68A536D4EE0322EA71
+      2530E2130EE4CD2899C20B65728375767B91B3DB8B47CD8DCE07D2AA25ADDAA3
+      5D5181D47AD28A9D11580083E580CCA242A91677A0D4E330063C3434BC5E6BD5
+      47F0EC4E67BD6D6102905A5E98C4A55C3ABF99A421C29DC00EC74CA947CE2204
+      8FD6AA6F6870783D8C01DF7DFFBDA351143DA242CEDEBCCC906B404FB22ED646
+      31D03FCAAF7BEA1BAC8B3B5B61923DA853298D63505AD8A73A502E258EE247BE
+      FFD0FDA3306E5F3A8EE3EF2881D4C7ECCCE6224CB21513695E7D6380FEE1B46E
+      968B3B5BC0BD33AD6BC8D9A9CE25A5801288E3E83B87D20E037FF6F39FDF608C
+      79DA90D39D7650F1A5DAB6EC448A349BBBEB77E7482B2EEA68827C66C6E374A4
+      710C4B33BBF4799890618C79FAD09E341CF3E54129B95DC4331A0AFC26ED4449
+      9D56162635580B669798DF5EAC059F9C669990B3CD2C65541A50389492DBC7A7
+      1F057CD32D9F5A2BC82F227276E4F3E975ED9863A04580AA65D324DF9896CD6F
+      C6944EBFC18A42C601DDC1CE6831514801F9C54DB77C6AEDF83C137919B70AC1
+      7B142F668B71411FD5B5B556F4F68EF0EAEBF577292F3DA7754A5B63332985C7
+      89E1E5C265781442F0C0ADC7E73B46377EF2965744E4AB11965EDFC656BBF8E8
+      AE9D185EE8EE65A892D77D79D7592D604F6FEB9A90B2B5B8923E3D07137244E4
+      ABC77E1B863A110079EEBF9224EA9A986CE56BF61C9AD5309D6A079684102078
+      C70D97CEA96DD31E5BA012969ED58C9B2107622A4AFC28DDC52E7626CB886D05
+      07CFE47998304AAF6E14CFC3F7DD334F8BDA24CACC121D718979BE16E711124C
+      A4211F82E1A131E8B160AA31D98A3DE1EF48D355EC47D953B8804D8DD7105C46
+      70F6800BBEEBA3377DE28D89F29F78D89252F8817EC2C8D0842D7DEA15887D85
+      BDC5C5BCD87C0DDE3A82CB4E3C6C09E0C337DCF40C221F53780F8117E53DF4C8
+      F91852C43B544B1BD2D004FEF4CEB7121C91AFB0BBF1525E6EFB03080185F388
+      7C6C32D8DAB327137A88C3AAE4B4B6B4F6295E22BACB57B0BBD485D82ADEE633
+      177A78481307973E4FB3DB8757097670F09442AB60D13E65A0D44977FB07E88F
+      E6A2B2E153135C7A4813860FDBED74645B48FC20767018375A995168F139DA67
+      A4493BFBCA97B1B7B90BEB03E495531B3E3C5E130688E7DB69AF6E23EADD4118
+      1EC29BE4E402C45D6DDF2A2DCEA6AF7C316FB57451518D900D9FBE00F1F19AF8
+      0840468BDD43D3FE1728F66FC76403E073401194AE45DFCAA1684BA8C5050704
+      8F78077850113669A5D2D4C960DB12061B17924A11C946F136C3597FFA8F008C
+      D744873C741491D8210A957D14465E271EDD87AEF6A2F311C46547ACBAD2041D
+      E3A2065CA19DAC34876AC399548B73484D13DE5A7C5EA9FD7DA70F791CAB098F
+      F14405749CD48EF1E088B55088638A492D22B79256A9E619990D5874ED184F96
+      E2F3EAFFDD633CC7EA6D0F6A35344BB13476506B7490EAE8FFD3835AF534E5A3
+      78D6AFB7EED41FC5FB5F0935D0C88CEACBC00000000049454E44AE426082
     }
   end
   object Label1: TLabel
@@ -244,23 +250,17 @@ object FRMAbout: TFRMAbout
     Width = 478
     BorderStyle = bsNone
     Lines.Strings = (
-      'Copyright (c) 2016 - 2017 Albert Molina'
+      'Copyright (c) 2016 - 2018 PascalCoin developers'
+      'Based on Albert Molina original source code'
       ''
-      'Pascal Coin is P2P cryptocurrency without the need for historical operations. This software '
-      'comprises a node within the Pascal Coin network and can be used to Mine and Explore blocks and '
-      'operations.'
+      'Pascal Coin is P2P cryptocurrency without the need for historical operations. This software comprises a node within the PascalCoin network.'
       ''
-      'Distributed under the MIT software license, see the accompanying file LICENSE  or visit '
-      'http://www.opensource.org/licenses/mit-license.php.'
+      'Distributed under the MIT software license, see the accompanying file LICENSE  or visit http://www.opensource.org/licenses/mit-license.php.'
       ''
       'THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only.'
       ''
-      'This product includes software developed by the OpenSSL Project and Denis Grinyuk '
-      '(https://github.com/Arvur/OpenSSL-Delphi), some cryptographic functions inspirated in code '
-      'written by Ladar Levison and Marco Ferrante, and Synapse Socket code copyright of Lukas '
-      'Gebauer.'
-      'Original source code is written in Pascal Language and is available at '
-      'https://github.com/PascalCoin/PascalCoin'
+      'This product includes software developed by the OpenSSL Project and Denis Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic functions inspirated in code written by Ladar Levison and Marco Ferrante, and Synapse Socket code copyright of Lukas Gebauer.'
+      'Original source code is written in Pascal Language and is available at https://github.com/PascalCoin/PascalCoin'
       ''
       'If you like it, consider a donation using BitCoin:'
       '16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk'
@@ -269,7 +269,6 @@ object FRMAbout: TFRMAbout
     ReadOnly = True
     ScrollBars = ssVertical
     TabOrder = 0
-    WordWrap = False
   end
   object bbClose: TBitBtn
     Left = 456

+ 11 - 5
Units/Forms/UFRMAccountSelect.dfm

@@ -25,7 +25,6 @@ object FRMAccountSelect: TFRMAccountSelect
     Align = alRight
     BevelOuter = bvNone
     TabOrder = 0
-    ExplicitLeft = 331
     object cbOnlyForSale: TCheckBox
       Left = 10
       Top = 65
@@ -184,7 +183,6 @@ object FRMAccountSelect: TFRMAccountSelect
     Align = alBottom
     BevelOuter = bvNone
     TabOrder = 1
-    ExplicitWidth = 537
     DesignSize = (
       657
       40)
@@ -235,7 +233,6 @@ object FRMAccountSelect: TFRMAccountSelect
       Kind = bkOK
       ParentDoubleBuffered = False
       TabOrder = 0
-      ExplicitLeft = 330
     end
     object bbCancel: TBitBtn
       Left = 554
@@ -247,7 +244,17 @@ object FRMAccountSelect: TFRMAccountSelect
       Kind = bkCancel
       ParentDoubleBuffered = False
       TabOrder = 1
-      ExplicitLeft = 434
+    end
+    object bbTypeStats: TBitBtn
+      Left = 340
+      Top = 5
+      Width = 95
+      Height = 30
+      Caption = 'Type stats'
+      DoubleBuffered = True
+      ParentDoubleBuffered = False
+      TabOrder = 2
+      OnClick = bbTypeStatsClick
     end
   end
   object dgAccounts: TDrawGrid
@@ -257,6 +264,5 @@ object FRMAccountSelect: TFRMAccountSelect
     Height = 282
     Align = alClient
     TabOrder = 2
-    ExplicitWidth = 331
   end
 end

+ 13 - 2
Units/Forms/UFRMAccountSelect.lfm

@@ -14,7 +14,7 @@ object FRMAccountSelect: TFRMAccountSelect
   OnCreate = FormCreate
   OnDestroy = FormDestroy
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.0.4'
+  LCLVersion = '1.8.0.6'
   object pnlAccountsTop: TPanel
     Left = 395
     Height = 282
@@ -193,7 +193,6 @@ object FRMAccountSelect: TFRMAccountSelect
       Width = 95
       Anchors = [akTop, akRight]
       Caption = 'Select'
-      Default = True
       Kind = bkOK
       ModalResult = 1
       TabOrder = 0
@@ -242,6 +241,18 @@ object FRMAccountSelect: TFRMAccountSelect
       Caption = '000'
       ParentColor = False
     end
+    object bbTypeStats: TBitBtn
+      Left = 288
+      Height = 30
+      Top = 5
+      Width = 95
+      Anchors = [akTop, akRight]
+      Caption = 'Type Stats'
+      Default = True
+      Kind = bkOK
+      ModalResult = 1
+      TabOrder = 2
+    end
   end
   object dgAccounts: TDrawGrid
     Left = 0

+ 110 - 2
Units/Forms/UFRMAccountSelect.pas

@@ -90,6 +90,7 @@ type
     cbMyAccounts: TCheckBox;
     cbMyPrivateKeys: TComboBox;
     cbOnlyForPublicSale: TCheckBox;
+    bbTypeStats: TBitBtn;
     procedure bbSearchClick(Sender: TObject);
     procedure cbMyAccountsChange(Sender: TObject);
     procedure cbMyAccountsClick(Sender: TObject);
@@ -98,6 +99,7 @@ type
     procedure ebMinBalanceExit(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
+    procedure bbTypeStatsClick(Sender: TObject);
   private
     FAllowSelect: Boolean;
     FDefaultAccount: Int64;
@@ -137,7 +139,7 @@ implementation
   {$R *.lfm}
 {$ENDIF}
 
-Uses strutils;
+Uses strutils, UFRMMemoText;
 
 { TSearchThread }
 
@@ -207,7 +209,7 @@ begin
       FIsReadyForSearch:=False;
       FDoStopSearch:=False;
       SearchFilteredInThread;
-    end;
+    end else sleep(1);
   end;
 end;
 
@@ -278,6 +280,7 @@ begin
   cbOnlyForPublicSale.OnClick:=cbMyAccountsClick;
   cbAccountsBalance.OnClick:=cbMyAccountsClick;
   cbAccountsName.OnClick:=cbMyAccountsClick;
+  bbTypeStats.OnClick:=bbTypeStatsClick;
   UpdateControls;
   AllowSelect:=False;
 end;
@@ -287,6 +290,111 @@ begin
   SearchFiltered;
 end;
 
+procedure TFRMAccountSelect.bbTypeStatsClick(Sender: TObject);
+Type
+  TAccTypeStats = Record
+    accounts:Integer;
+    balance:Int64;
+  end;
+Const
+  TAccTypeStats_NUL : TAccTypeStats = (accounts:0;balance:0);
+Var i,j,k : Integer;
+  account : TAccount;
+  c : Cardinal;
+  s_0,s_inv : TAccTypeStats;
+  s_5 : Array[0..6] of Array[1..4,0..9] of TAccTypeStats;
+  FRM : TFRMMemoText;
+  sl : TStringList;
+begin
+  c := 0;
+  s_0 := TAccTypeStats_NUL;
+  s_inv := TAccTypeStats_NUL;
+  for i := low(s_5) to high(s_5) do
+    for j := 1 to 4 do
+      for k := 0 to 9 do
+        s_5[i,j,k] := TAccTypeStats_NUL;
+
+
+  while (c<FSafeBox.AccountsCount) do begin
+    account := FSafeBox.Account(c);
+    if (account.account_type=0) then begin
+      inc(s_0.accounts);
+      inc(s_0.balance,account.balance);
+    end else if (account.account_type<10000) then begin
+      inc(s_inv.accounts);
+      inc(s_inv.balance,account.balance);
+    end;
+    k := ((account.account_type MOD 100000) DIV 10000); // k is 0..6 because account.account_type is a word 0..65535
+    if (k<0) or (k>6) then k:=0;
+    for i := 0 to 9 do begin
+      j := ((account.account_type MOD 10000) DIV 1000); // j is 0..9
+      if (j=i) then begin
+        inc(s_5[k][1][j].accounts);
+        inc(s_5[k][1][j].balance,account.balance);
+      end;
+    end;
+    for i := 0 to 9 do begin
+      j := ((account.account_type MOD 1000) DIV 100); // j is 0..9
+      if (j=i) then begin
+        inc(s_5[k][2][j].accounts);
+        inc(s_5[k][2][j].balance,account.balance);
+      end;
+    end;
+    for i := 0 to 9 do begin
+      j := ((account.account_type MOD 100) DIV 10); // j is 0..9
+      if (j=i) then begin
+        inc(s_5[k][3][j].accounts);
+        inc(s_5[k][3][j].balance,account.balance);
+      end;
+    end;
+    for i := 0 to 9 do begin
+      j := ((account.account_type MOD 10) DIV 1); // j is 0..9
+      if (j=i) then begin
+        inc(s_5[k][4][j].accounts);
+        inc(s_5[k][4][j].balance,account.balance);
+      end;
+    end;
+    inc(c);
+  end;
+  sl := TStringList.Create;
+  Try
+    sl.Add('*** Account type stats ***');
+    sl.Add(Format('Current block:%d accounts:%d coins:%s',[FSafeBox.BlocksCount,FSafeBox.AccountsCount,TAccountComp.FormatMoney(FSafeBox.TotalBalance)]));
+    sl.Add('');
+    sl.Add('** Basic stats **');
+    sl.Add(Format('Account type=0 accounts:%d coins:%s',[s_0.accounts,TAccountComp.FormatMoney(s_0.balance)]));
+    sl.Add(Format('Account type [1..9999] accounts:%d coins:%s',[s_inv.accounts,TAccountComp.FormatMoney(s_inv.balance)]));
+    sl.Add('');
+    sl.Add('*** Stats by group ***');
+    for k := 0 to 6 do begin
+      // Note: Account type is a Word [0..65535], so left digit can be only 0..6, deprecating 6 to not fill, result for stats is 0..5
+      sl.Add('');
+      sl.Add(Format('** Group [%d..%d] **',[(k)*10000,((k+1)*10000)-1]));
+      for j := 0 to 9 do begin
+        sl.Add(Format('Account type like %d%d*** accounts:%d coins:%s',[k,j,s_5[k][1][j].accounts,TAccountComp.FormatMoney(s_5[k][1][j].balance)]));
+      end;
+      for j := 0 to 9 do begin
+        sl.Add(Format('Account type like %d*%d** accounts:%d coins:%s',[k,j,s_5[k][2][j].accounts,TAccountComp.FormatMoney(s_5[k][2][j].balance)]));
+      end;
+      for j := 0 to 9 do begin
+        sl.Add(Format('Account type like %d**%d* accounts:%d coins:%s',[k,j,s_5[k][3][j].accounts,TAccountComp.FormatMoney(s_5[k][3][j].balance)]));
+      end;
+      for j := 0 to 9 do begin
+        sl.Add(Format('Account type like %d***%d accounts:%d coins:%s',[k,j,s_5[k][4][j].accounts,TAccountComp.FormatMoney(s_5[k][4][j].balance)]));
+      end;
+    end;
+    FRM := TFRMMemoText.Create(Self);
+    Try
+      FRM.InitData('Account Type Stats',sl.Text);
+      FRM.ShowModal;
+    Finally
+      FRM.Free;
+    End;
+  Finally
+    sl.Free;
+  End;
+end;
+
 procedure TFRMAccountSelect.cbMyAccountsChange(Sender: TObject);
 begin
   SearchFiltered;

+ 1 - 1
Units/Forms/UFRMMemoText.lfm

@@ -13,7 +13,7 @@ object FRMMemoText: TFRMMemoText
   Font.Name = 'Tahoma'
   OnCreate = FormCreate
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.4.0'
+  LCLVersion = '1.8.0.6'
   object pnlBottom: TPanel
     Left = 0
     Height = 55

+ 2 - 2
Units/Forms/UFRMMemoText.pas

@@ -21,7 +21,7 @@ type
     { Private declarations }
   public
     { Public declarations }
-    Procedure InitData(Title : String; text : String);
+    Procedure InitData(const Title : String; const text : String);
   end;
 
 implementation
@@ -37,7 +37,7 @@ begin
   Memo.Clear;
 end;
 
-procedure TFRMMemoText.InitData(Title, text: String);
+procedure TFRMMemoText.InitData(const Title, text: String);
 begin
   Caption := Title;
   Memo.Lines.Text := text;

+ 2 - 2
Units/Forms/UFRMNodesIp.lfm

@@ -14,7 +14,7 @@ object FRMNodesIp: TFRMNodesIp
   Font.Name = 'Tahoma'
   OnCreate = FormCreate
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.0.4'
+  LCLVersion = '1.8.0.6'
   object Label1: TLabel
     Left = 30
     Height = 13
@@ -78,7 +78,7 @@ object FRMNodesIp: TFRMNodesIp
     Left = 35
     Height = 19
     Top = 285
-    Width = 201
+    Width = 164
     Caption = 'Connect ONLY to these nodes'
     OnClick = cbTryOnlyWithThisServersClick
     TabOrder = 3

+ 1 - 1
Units/Forms/UFRMNodesIp.pas

@@ -112,7 +112,7 @@ begin
     TNode.DecodeIpStringToNodeServerAddressArray(ips,nsarr);
   end else begin
     cbTryOnlyWithThisServers.Checked := false;
-    nsarr := TNetData.NetData.GetValidNodeServers(false,0);
+    nsarr := TNetData.NetData.NodeServersAddresses.GetValidNodeServers(false,0);
   end;
   for i := low(nsarr) to high(nsarr) do begin
     aux := nsarr[i].ip;

+ 32 - 0
Units/Forms/UFRMOperation.dfm

@@ -108,6 +108,10 @@ object FRMOperation: TFRMOperation
     TabOrder = 1
     object tsOperation: TTabSheet
       TabVisible = False
+      ExplicitLeft = 0
+      ExplicitTop = 0
+      ExplicitWidth = 0
+      ExplicitHeight = 0
       object lblFee: TLabel
         Left = 15
         Top = 188
@@ -292,6 +296,10 @@ object FRMOperation: TFRMOperation
         OnChange = PageControlOpTypeChange
         object tsTransaction: TTabSheet
           Caption = 'Transaction'
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object lblDestAccount: TLabel
             Left = 13
             Top = 32
@@ -378,6 +386,10 @@ object FRMOperation: TFRMOperation
         object tsChangePrivateKey: TTabSheet
           Caption = 'Change key'
           ImageIndex = 1
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object gbChangeKey: TGroupBox
             Left = 7
             Top = 6
@@ -527,6 +539,10 @@ object FRMOperation: TFRMOperation
         object tsListForSale: TTabSheet
           Caption = 'List account for sale'
           ImageIndex = 3
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object gbSaleType: TGroupBox
             Left = 7
             Top = 5
@@ -670,6 +686,10 @@ object FRMOperation: TFRMOperation
         object tsDelist: TTabSheet
           Caption = 'Delist account'
           ImageIndex = 3
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object lblDelistErrors: TLabel
             Left = 13
             Top = 10
@@ -690,6 +710,10 @@ object FRMOperation: TFRMOperation
         object tsBuyAccount: TTabSheet
           Caption = 'Buy account'
           ImageIndex = 4
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object lblAccountToBuy: TLabel
             Left = 13
             Top = 32
@@ -867,6 +891,10 @@ object FRMOperation: TFRMOperation
         end
         object tsChangeInfo: TTabSheet
           Caption = 'Change Info'
+          ExplicitLeft = 0
+          ExplicitTop = 0
+          ExplicitWidth = 0
+          ExplicitHeight = 0
           object lblChangeInfoErrors: TLabel
             Left = 13
             Top = 10
@@ -932,6 +960,10 @@ object FRMOperation: TFRMOperation
     object tsGlobalError: TTabSheet
       ImageIndex = 1
       TabVisible = False
+      ExplicitLeft = 0
+      ExplicitTop = 0
+      ExplicitWidth = 0
+      ExplicitHeight = 0
       object lblGlobalErrors: TLabel
         Left = 40
         Top = 50

+ 1 - 1
Units/Forms/UFRMOperation.lfm

@@ -15,7 +15,7 @@ object FRMOperation: TFRMOperation
   OnCreate = FormCreate
   OnDestroy = FormDestroy
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.0.4'
+  LCLVersion = '1.8.0.6'
   object lblAccountCaption: TLabel
     Left = 25
     Height = 13

+ 60 - 33
Units/Forms/UFRMOperation.pas

@@ -27,7 +27,7 @@ uses
 {$ENDIF}
   Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, UNode, UWalletKeys, UCrypto, Buttons, UBlockChain,
-  UAccounts, UFRMAccountSelect, ActnList, ComCtrls, Types, UCommon;
+  UAccounts, UFRMAccountSelect, ActnList, ComCtrls, Types, UCommon, UFRMMemoText;
 
 Const
   CM_PC_WalletKeysChanged = WM_USER + 1;
@@ -312,11 +312,14 @@ loop_start:
         {%endregion}
       end else if (PageControlOpType.ActivePage = tsChangeInfo) then begin
         {%region Operation: Change Info}
-        if not UpdateOpChangeInfo(account,signerAccount,_changeName,_newName,_changeType,_newType,errors) then raise Exception.Create(errors);
-        if signerAccount.balance>DefaultFee then _fee := DefaultFee
-        else _fee := signerAccount.balance;
-        op := TOpChangeAccountInfo.CreateChangeAccountInfo(signerAccount.account,signerAccount.n_operation+1,account.account,wk.PrivateKey,false,CT_TECDSA_Public_Nul,
-           _changeName,_newName,_changeType,_newType,_fee,FEncodedPayload);
+        if not UpdateOpChangeInfo(account,signerAccount,_changeName,_newName,_changeType,_newType,errors) then begin
+          If Length(_senderAccounts)=1 then raise Exception.Create(errors);
+        end else begin
+          if signerAccount.balance>DefaultFee then _fee := DefaultFee
+          else _fee := signerAccount.balance;
+          op := TOpChangeAccountInfo.CreateChangeAccountInfo(signerAccount.account,signerAccount.n_operation+1,account.account,wk.PrivateKey,false,CT_TECDSA_Public_Nul,
+             _changeName,_newName,_changeType,_newType,_fee,FEncodedPayload);
+        end;
         {%endregion}
       end else begin
         raise Exception.Create('No operation selected');
@@ -345,13 +348,31 @@ loop_start:
     end;
     i := FNode.AddOperations(nil,ops,Nil,errors);
     if (i=ops.OperationsCount) then begin
-      Application.MessageBox(PChar('Successfully executed '+inttostr(i)+' operations!'+#10+#10+operation_to_string),PChar(Application.Title),MB_OK+MB_ICONINFORMATION);
+      operationstxt := 'Successfully executed '+inttostr(i)+' operations!'+#10+#10+operation_to_string;
+      If i>1 then begin
+        With TFRMMemoText.Create(Self) do
+        Try
+          InitData(Application.Title,operationstxt);
+          ShowModal;
+        finally
+          Free;
+        end;
+      end else begin
+        Application.MessageBox(PChar('Successfully executed '+inttostr(i)+' operations!'+#10+#10+operation_to_string),PChar(Application.Title),MB_OK+MB_ICONINFORMATION);
+      end;
       ModalResult := MrOk;
     end else if (i>0) then begin
-      Application.MessageBox(PChar('One or more of your operations has not been executed:'+#10+
+      operationstxt := 'One or more of your operations has not been executed:'+#10+
         'Errors:'+#10+
         errors+#10+#10+
-        'Total successfully executed operations: '+inttostr(i)),PChar(Application.Title),MB_OK+MB_ICONWARNING);
+        'Total successfully executed operations: '+inttostr(i);
+      With TFRMMemoText.Create(Self) do
+      Try
+        InitData(Application.Title,operationstxt);
+        ShowModal;
+      finally
+        Free;
+      end;
       ModalResult := MrOk;
     end else begin
       raise Exception.Create(errors);
@@ -818,18 +839,18 @@ begin
   lblChangeInfoErrors.Caption:='';
   if not (PageControlOpType.ActivePage=tsChangeInfo) then exit;
   try
-    if SenderAccounts.Count<>1 then begin
-      errors := 'Cannot change info with multioperations. Use only 1 account';
-      exit;
-    end;
     if (TAccountComp.IsAccountLocked(TargetAccount.accountInfo,FNode.Bank.BlocksCount)) then begin
       errors := 'Account '+TAccountComp.AccountNumberToAccountTxtNumber(TargetAccount.account)+' is locked until block '+IntToStr(TargetAccount.accountInfo.locked_until_block);
       exit;
     end;
     // Signer:
-    If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,auxC) then begin
-      errors := 'Invalid signer account';
-      exit;
+    if SenderAccounts.Count=1 then begin
+      If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,auxC) then begin
+        errors := 'Invalid signer account';
+        exit;
+      end;
+    end else begin
+       auxC := TargetAccount.account;
     end;
     if (auxC<0) Or (auxC >= FNode.Bank.AccountsCount) then begin
       errors := 'Signer account does not exists '+TAccountComp.AccountNumberToAccountTxtNumber(auxC);
@@ -848,21 +869,23 @@ begin
       errors := 'This operation needs PROTOCOL 2 active';
       exit;
     end;
-    // New name and type
-    newName := LowerCase( Trim(ebChangeName.Text) );
-    If newName<>TargetAccount.name then begin
-      changeName:=True;
-      If newName<>'' then begin
-        if (Not TPCSafeBox.ValidAccountName(newName,errors)) then begin
-          errors := '"'+newName+'" is not a valid name: '+errors;
-          Exit;
-        end;
-        i := (FNode.Bank.SafeBox.FindAccountByName(newName));
-        if (i>=0) then begin
-          errors := 'Name "'+newName+'" is used by account '+TAccountComp.AccountNumberToAccountTxtNumber(i);
-          Exit;
+    // New name and type (only when single operation)
+    If (SenderAccounts.Count=1) then begin
+      newName := LowerCase( Trim(ebChangeName.Text) );
+      If newName<>TargetAccount.name then begin
+        changeName:=True;
+        If newName<>'' then begin
+          if (Not TPCSafeBox.ValidAccountName(newName,errors)) then begin
+            errors := '"'+newName+'" is not a valid name: '+errors;
+            Exit;
+          end;
+          i := (FNode.Bank.SafeBox.FindAccountByName(newName));
+          if (i>=0) then begin
+            errors := 'Name "'+newName+'" is used by account '+TAccountComp.AccountNumberToAccountTxtNumber(i);
+            Exit;
+          end;
         end;
-      end;
+      end else changeName := False;
     end else changeName := False;
     val(ebChangeType.Text,newType,errCode);
     if (errCode>0) then begin
@@ -871,7 +894,7 @@ begin
     end;
     changeType := TargetAccount.account_type<>newType;
     //
-    If (newName=TargetAccount.name) And (newType=TargetAccount.account_type) then begin
+    If (SenderAccounts.Count=1) And (newName=TargetAccount.name) And (newType=TargetAccount.account_type) then begin
       errors := 'Account name and type are the same. Not changed';
       Exit;
     end;
@@ -882,7 +905,9 @@ begin
       lblChangeInfoErrors.Caption := errors;
     end else begin
       lblChangeInfoErrors.Font.Color := clGreen;
-      lblChangeInfoErrors.Caption := TAccountComp.AccountNumberToAccountTxtNumber(TargetAccount.account)+' can be updated';
+      If (SenderAccounts.Count=1) then
+        lblChangeInfoErrors.Caption := TAccountComp.AccountNumberToAccountTxtNumber(TargetAccount.account)+' can be updated'
+      else lblChangeInfoErrors.Caption := IntToStr(SenderAccounts.Count)+' accounts can be updated'
     end;
   end;
 end;
@@ -1099,11 +1124,13 @@ begin
     rbEncryptedWithEC.Caption := 'Encrypted with target public key';
   end;
   ebSignerAccount.Enabled:= ((PageControlOpType.ActivePage=tsChangePrivateKey) And (FNode.Bank.SafeBox.CurrentProtocol>=CT_PROTOCOL_2))
-    Or (PageControlOpType.ActivePage=tsChangeInfo)
+    Or ((PageControlOpType.ActivePage=tsChangeInfo) And (SenderAccounts.Count=1))
     Or (PageControlOpType.ActivePage=tsListForSale)
     Or (PageControlOpType.ActivePage=tsDelist);
   sbSearchSignerAccount.Enabled:=ebSignerAccount.Enabled;
   lblSignerAccount.Enabled := ebSignerAccount.Enabled;
+  lblChangeName.Enabled:= (PageControlOpType.ActivePage=tsChangeInfo) And (SenderAccounts.Count=1);
+  ebChangeName.Enabled:= lblChangeName.Enabled;
   //
   UpdatePayload(sender_account, e);
 end;

+ 158 - 165
Units/Forms/UFRMWallet.dfm

@@ -30,135 +30,141 @@ object FRMWallet: TFRMWallet
     object Image1: TImage
       Left = 15
       Top = 15
-      Width = 62
-      Height = 62
+      Width = 60
+      Height = 60
       AutoSize = True
       Picture.Data = {
-        0954506E67496D61676589504E470D0A1A0A0000000D494844520000003E0000
-        003E080600000073C1A8440000000473424954080808087C0864880000000970
+        0954506E67496D61676589504E470D0A1A0A0000000D494844520000003C0000
+        003C08060000003AFCD9720000000473424954080808087C0864880000000970
         48597300000B1200000B1201D2DD7EFC0000001C74455874536F667477617265
-        0041646F62652046697265776F726B7320435336E8BCB28C0000001674455874
-        4372656174696F6E2054696D650030362F30372F313610A27E9700000EDA4944
-        415478DACD9B095813D716804F4280A860E1A9A0A295A556AD0B88F6A9CF85A4
-        6E6D5DC08A05956A5050BFAA155EAD56AB125CD0BA22D65A5C58DCAAA012A5D5
-        F75C4AA2A2A8AD605D9E5A41A08A80A2AC822CC93B77320943329384B53DDF77
-        BE994C6692FBDF73EFB9E79E7B87A752A9A0B984C7E3F5C3C367A843511D506D
-        512D51F9B4AA68AD462D43CD45CD404D413D8165BBDF6C656B6A7084F5C2C322
-        54F7364241CEE01EF679A2BE9DCC5C9DDA594FF8673757AEE78ACA2A8B2FDE7D
-        F6F876E6CB925F7ECFA9C173C7AA6A652BFCEA1AEA0E2CE7B9BF1D38C2BE8B87
-        25A8939CECAD1FCE1ADDA37AE1F83EFDDE6A63D1B631BF9B915BFCF4C8C5F4C7
-        61F1A9EDCA2AAA49251C42DD8D65CEFE4BC111B8271E969BF179C3BD873A6786
-        CD78BFBB73C7B60E8DAE498E4AF05E7F3E2335E3C5DBF8F1206A2496FDCF1605
-        4760D257BF429DE733DCE556E4FCE1EE8DB56E032AC0053F8662F977B7083842
-        937E7AB47D5BE1EB6B5BBCEC9ACBC2C6E4DA83FC8713D7FCB72CBFA8FC117E9C
-        8F1CCF9B0D1CA1A760B35E279D36206F858FFBB0A68649CB2880C2B237E0686F
-        0D8E76D6D4B5CCFC12C8CC2B019B3696E0E6DC4EEF199F6FCFCBE32E6774C1D3
-        79C872A149C11158888725D6ADCCA79C5B33CE62500FBB778D3C411E621C19A2
-        52A26A46B1BA225A96088A3BCF2064EA00C0CAA5AE490FFF06A13FFE061E7D3A
-        817CFD04D67F4BBC9E756BD2BAB376354AD56AE4F9A129C137E1D034EE698C9F
-        03675F26803C335AC9399F055CA586D6C0AB6AE87325F5AD8D6F0C19D620E19B
-        31E035D891B332D88434FD512B7EAE29ADA88A3005DE203802932164AB95D07C
-        C49398E95D58A109209FC00AF0C8A7C1F9B4D2566705A75559435540614919D8
-        FA445377A56E9FAC6DD68EB30F43567E294407894032D2704323B14057FF43D9
-        25E555C7F16318B25536147C395ADA8FD3D27C735401AD66740530C0752DAE69
-        E25AF01A2DB83C3513C44B8FAB6F4B9C535B86096AA79D14361E447D3B1B3324
-        05DF4572E8095A7E23B2C5D61B9C38B2B6AD2D9665474D73D183A6AC8CD06602
-        063C0DCD8097AC8B87CCDC57750C5E7BA2A23FABCF9F3C2F86F49C42B06A650E
-        035C3A50D70AB1D9DF7A5C403D419A3A11D212886A9C1F9B90663F74C94901F6
-        F9395C0E8F151CA1BBA3F73E9BBCD1B352CF911168330B54731D8BD3AAB13836
-        7BDEE060A3166AA860080C419E7D399B3F717838DC91DA7145C652A3E0084DAC
-        7B7EC1F8DEAF77CC1DEAC10ECD04D785575B5C7EF31188E76D6B36708D74B3B3
-        02D937630D0D7585783A0D39CB8D814BEDDE6A3531EFE067FD75BE4058CB5A68
-        72A49A3B0B3C82C7245E01FF907DCD0EAE112E1F60EF772015839CEF90338A13
-        9C9E469E4DDFE35BAD179151C0960C8B6B2A80CDF26620DD9500A1BB8EB71838
-        FA21488B98ACD7F7497F1FBC5846203D90358F0B3C0E63EF0E47968C14D5799A
-        C0106801073C5F73ACB5B8482205C58DBB2D064EC4739023C8568CD1BBEEBEE8
-        C4258CED15C8BA520F1CA19DD1A15D2C383CD3BAAE17C7262EB0A4C12D6B2D2F
-        A0C1F9CC0AD0787933B01938158A4ACAD8AD63DD06DC7A3A82665C7F925700E9
-        7FE683556B4B18D0A32B5E57E2B542F4F22FEB0DFF78DF543DAB93898D4BE011
-        2C1CE5E8F274C1F7A1B59D59AD4D010B6BC105421DAB5BD4E9F38525E560EB3E
-        99B3701E83FA81FCE006E4AB06A8A982A0B0BDB0FDE019F014B9816C63205E7B
-        833EE22AF887C543D70E6D21E27331849FB8018ADB3946C1174DEC03E181FF62
-        B3FA65B4FA05E495EA821763DF2ED6EBDB4C68CD3905AFDB0A6AC1E5D7EF82D8
-        771167E142822420FDC28F06AF0491DFD7D82DEE41C83C2F90067C44814B2313
-        2134EA1C78B87603F9661F80EA0A08DA9504DB4FDD3608CE15D3D356E7236F67
-        2D38427FEA646F1D9CB177EAE03A7793E14BA08116D2A04206B04EF3A79B7C78
-        D409080E0DE72C5CF4D69520998C7D51594581DBF4FF04BBC56B48080F06AF11
-        7D2870D19C2DA0484D87108908A47E43287072DDD17F3F15C272097172854724
-        ACDF594D89FA5F5945F56C64BEAA01BFB2C66F608DDE54935890095EC7FA5C15
-        6001927FAF85D8B89F380B97747C3788B0B993665EF8AA006CDDBCA8EBA9F11B
-        C0AD7B478444C0F1CB202BF725447FFD094846F7C27B2BA8EBD20357A9D99A21
-        6186BC4C597BF4E6E595077FCD42663F124863C40125584B557AA1A906888216
-        D6B5BA80A302105CE43D1714577EE52E58FE1DCAD204449E7C5DDB2D5477E3B5
-        96E5B907A82B697B008ECF9DA86BE43BD9E5FB8053D00681D3CD9D4CBC3A10F0
-        81381139501A3FABA7DE9D4C6026AC990EB80E3CAF236732155CFBF48234B98C
-        067903E1BB0F60B78800D79E4E90766233755D9E9206E2C08D6A884B61D47D54
-        85A0122717BCE70AE7EF1B9AB713B198B437BBAA5AF90101DF32D2D561C0F9B5
-        E374C2535E2DA0B990012BD46F058C9690F9EC05380D18CBF9C79EE3C682ECC0
-        F76A186CBE412BBE85EDFB8E82E7A82120DBB184828B49B800FEABF642B78EB6
-        90796CA9169AA864D31988BDF080F3F76762EC1E8353582EC139BBE2C2ADA767
-        08F8953D0B47F003C6F41C54179CE9D85AB1589B5D65679361D2CC059C7F1CB2
-        EC4B902E594083A0139BE40F8A945408412F2FFDDC9BBA2EFDEE0884FE20038F
-        FEEF807C4780F65E72B499BC934A567089B1793BDDCF9F13F0CC532BC716EA25
-        FBB5E02CCDDCBC556D5F679EA34AB7EE85D04D3B39FF38E1C768F0FA48ACB5A0
-        4DF761E8D14B2161D72AF012BBAB2B636608287EBB0F21011F825442EE2D5777
-        8BF82B101CA90043C216C030859EB59911F0227406EC99953A0E8CADC9EBB708
-        AF598BE1E4995FB80B76E71A383AD851D0852F9F836D8F11D4F5D4C49DE8D11D
-        A8EB8EA3E743D6B302885E390D2463FB51D7D21E6441FFB9D106A1B94256A690
-        44858D6F4C05017F83E016FAB7F0580085463DBCDBE8E970EB2E771F54156523
-        4825D5BFE517AF80D85BED81557F9CD636675EDFA9D4B5A49DF341D4AF0BC814
-        6920592FC342BF3108656A96863761773101AF41703EEB1D7A7D9A0BBE7658E3
-        7519C4F9871E4307833CF1907A2843EF1DFE432C044BB7816B2F67483B194141
-        CBAFA68278F63AEAFEE8155321E6A71450A43D360A638AB519E095045C89E03C
-        D63B3471791DEBB2043334BCFCFA3D10FB2C30E9CF9B524832222DC21B6CDA58
-        98743F82D71806D74C5074C1758035814B8C2C09FC176F68516812A2CAC326B0
-        66608C815721B880FD0E1E7B88AA999D69A1D5E0D4301471E06F0D4D835711F0
-        72041772DE556726A681B7A803AC51D1CC55A0B87EDBF412344248B291F46943
-        439701F022029E8771BA907B85C48CB559D7998ED253529B21FED42CAB398558
-        3968625F83AB2A26803F25E0773080A936B45BA16EB3B6D09B869263615915D8
-        0E9BDB6CC0C4814946F6A052CAA63A3136A103186A7DE7F4BACFDEB75EFE697F
-        EED54F6D5AD992C5D202EA28BF9901E2391BB90BDEB9833A70A117121E653F83
-        A7F9AFA0BD8D15F4762663AF12725F14C383EC7C105A0860502F07ECBBEDB129
-        5B81A8B71DB839D9364905EE3B77FF5A40C4452A645D8593940FF42629BA4203
-        EAA79BD479B6F0B84B10BCF518E7E3D16BE78164E270EDF29168761886A50F20
-        24701C4803C6527373E9DE33101A755E9D75D9E24B073A95EA844513093D49F9
-        9980BB9B0BF8272A1302BA197D4A9B5165E6D6D5E0927571107BFA06E7A3497B
-        968068400FCAB2A054828D28088A4ACB21E1DB59E035AC179586122D8CC46025
-        1342660C05E9F44174A05369B458F511EB29D1F74A2BAABC0838F1E839E97B7C
-        5F9BB4BBA14E3A5993571780E88B282C7406E763AA1BDF6B170D0B8BCBC076D4
-        52EA7A6AF4227073B1A3ACEAE8B30DB2F28A20FACB31EA19564D15B0ADA33754
-        E838FD8D4AA5B2D3A49E4EAEF11BF80F937739305750CCD4B9749E780DE7EDAE
-        DD3B43DAFEC55A70F9CD3F40BC20525D218AD5EAA4232A6F6418752D698317F6
-        6BFB2685261216977AF99B0337F29179B206FCE33642C1E6D2F859BD4CFE15ED
-        AA8939643E2F0527BF48CE5B3D87BD07B2F57E5AF0F0B86408FEEE0CB8BAD843
-        DAEED9D452B11CE371F15771EACAE0481D35565C028FA464E416AF41E6D31A70
-        12B991E65E59AFCD3CF4A600594A164C5ACD9D5C0C99E981F36A0FD02C20643E
-        7B0599B985382C99ABA32EA57A6340DAA33CB5E3336186555FA1F36DA4EFF446
-        E6D7CCBCFAB2FECEED3FBEB9FD937A6FEA91FE7813420F73271713A493C06B68
-        77F507ED36107A6380767380B2C96199E2BBF182FCE8A5F464E45D41F132C049
-        EC978D562FABEF162EAFB567E1E4B54CCEEF1FC748C0D19E0E0C995B4140B311
-        A8798538B576D362F36B94AA919A5D91BA8B869BD0EA83EB6B75B72F8E6B772E
-        B0892A914474CD0FC825B4B5159AE5233670B262A748D9EC55657C4B57AD68F6
-        A9B089B1746F730BDDB7C98EE9BEC89ACB0A4EC3CFB07BAB5590DEC6000E91DF
-        CE01F1726EC7662CDDDBDC426F0CD8AEBB11880DBC351E623F1DE6DCFEE8D251
-        464B1C73E121F887CB39BFDF1630849A58FC15428FDBA5C8F891EE775C9B7FC8
-        8C80CCDA9E1B9CB541EDCE432E313501D8D44276420C5B7AAAB4BA463915191F
-        9A044EC30F31E3F36293377AAA0CF577CDCE432E797544D2A869644384B1D76D
-        19F29D62E533B2C1CFDB4A68BEFA49CC74CEAD9C9A6D986C6268C9B639A1BBFA
-        1FCA2A29AFDA8F1FB7215F4DBDC169F8D508EFCD064F36E0D9223897B4B44767
-        6CE9DC696C3FABA99B78E7B56D6D31F7ECEA8F5B339B3D014FCB78C1F91C73FB
-        754B4063F37E8ACD3B8E395E370A9C860FE4F37861B215639E1A73782D2DC491
-        8D0D395D82F0648D698FA1CDBB0D0127AB2D235137FB0C7779A9B749E82F9285
-        91C98A5DA7EFBD83E16820B29C31F5B986BC9AE18C879DD8EFDF3EBF769CA03E
-        115E530A89C8862C3E998FC109D9BEE5871C05F579BEC16F21D1EF97EDC2D8FE
-        D1B165A39C5AEADD14D297E7EEBC7413636F27FC48B29B0791A1B8DEE56FE4EB
-        5724D0218B658BB002EE61053837E7EB57CBF7DFF8E358728623366B92D58C68
-        F1D7AF582A80E48966A0CEC62EA05C36C5ADC077844BA35B01B1EE8E9FEEFC1E
-        75EE81E0715E0999D0EFA1819F35E6779B0C5CA712C812C77C54B185805F35BC
-        77A79CF7DEB685D16E0E36237A7772E20A84745FB14C799067575651DD11BF22
-        A9DBCD7FCB572C0D540249597F08EA976A891324413B19D8490C4BD25DE4CFC9
-        D04356FCC9AE3DE2A8D2519350FF839A83E56B96D4CCFF0184B915F49D084B6C
-        0000000049454E44AE426082}
+        0041646F62652046697265776F726B7320435336E8BCB28C00000FBA49444154
+        78DAD59B095C55D79DC77F7779F72DF0001F48004571C17D091A318AC11D9D8C
+        4B1A6B4D9A38666BBA24699A34B669D3345A5BA78E6DDA8C33934C938989ADCD
+        A2C4246615B728EA68558C1A10104454400494F5DD77DF5DE67FEE7B1AC4FB14
+        788A99FF87F7B9EFC33DF7DDFBBDE77FFEDB3987330C033752CA8A8F0E104521
+        9317F80C4972DCEA70B9539C2E770C3BE76D69BC207B1BCB149F7C48D7F45DAA
+        AAED48491D5674239F87BBDEC047F3F6B905811B27F0C2644110D20551E84BC0
+        71F4DD61B33B05872B8A734644996DBDCD0D90BD0D865FF66A243201D768AA56
+        4ADFF769BAB64DD78C3D43D3D21BBF91C0797B733304817F90C066F38210CF0B
+        2278D10EC12641147988BC0E49E0E170D8E1B43B03C03E2F649F0F8AAA43D579
+        A874D4FC0A74D5075D53E9A35513FC464DD357A78D9DB0EB1B01BC6FE7B63B09
+        7431414EA20F389B13ECE8305AE0F4D7C2E1AF865DA985A8D483D7BCE0743FDD
+        5437AF35381E066F832E38A14AD1F049B1906DF1F0DAE8C8B918300CBFD73CD2
+        673B81AF4CBF63F22737053877CBE7B792DAFEAB20F23379C1068340ED9C0FD1
+        4A05A2E512B8E40A882A69A3A1B1DB98700001D277F6172036CFD0173DF812D8
+        3F04A8A21B2D8E24D43BFAA15E4A82CFB083F3CB04ED07A9FC67A4EEBF983075
+        C6A12E03DEB1E99317785E789EA7C109D10527E745BC52048F5C483D7ADE6CA3
+        7322410A9DEC050DBCA19ADF655B37D43906A25A1A00AF4143416D219557355D
+        D7966566DDB9F486026FFE64632F9EE3FE4A2A9C09C10151E090A41523493E02
+        BB564F903613F47A0A03E70D3F7C42342A1CC35121A442D5E8993519A4E23B74
+        C35838EDCED9E5D71D78D387EF67F03CB79EC667822E3A41EF1DA9FE0388D22A
+        49211968E77AB3FDE0D4EBF0A3414844B16D34CEC3035E35C77795AE1BDFCE9A
+        7357BB8C5ABB803FDD903D8BE7F96CB2BC924196B7378EA3BF9A0781DEBECA49
+        61C370C1316DF528E639C3FC3345341468A44525621ACAD01F5CC0A22BBAAECF
+        FBA76FCDFB286CE08FB2D7CD1278FE03907562C669080E21D9288246BD6A800F
+        8F94EE2D3A6D686DC554AFFFD21B105DF432353266E4CEC87741F5EB08D83C1D
+        02F5F6296E00F271AB69CCC89A51ECA2CF9D356FFE55A1AF0AFCE1BA77C6D198
+        FD82136C36E66AD2F8FD48C049A87084071A14816073FEB70CCBDE3A6042FFEA
+        9E34648DEB0BDDAB80B78B7861F55EE4E49D46A2C785FF7A3C13F174D4FDDAA5
+        EB45C8A8227DCBD36F0BB830CDEFA7313D71CEFC057B3A0CBCE19DBFF710383E
+        8FE3C5EE048CD1E27E2472A708D61EB8305C5AFA01C1ED40D64FDE33A1983C92
+        D90BAF3E3F833ADA8EAA730D48BC6FCDA5E69B7F7907A64E1E06D5A75FA6FB22
+        7CA834927140BD8D01C3D0D5739AA1A77D6BC177CFB41BF8ED37D6C06E177753
+        FC3B4EE31D18251D410A5F1280656AE82035A4E809E1C42C64E1412ADAE7FE35
+        283B1B881EDFFEE1282C98D90F888EC3EE8355C8787A83F97FB743C4993F4D83
+        3B211A8889A3FB923F272DD074E3127499DE0F79CA70F03AF3D7FA1E9F4F1B7F
+        CF030BDB079CBDF66FE467F9252AB99E81D2498CB01D866A4826A018E5C0EE03
+        E558BAF600C289D2C8E2435634EC3C4A563EF83B63FAC6C01361632771EABC82
+        FCF2804F774902320678E014398CE81B8749E9FD31616802ECF42C46938FC075
+        889C1F87FD2350A8F486482E8B8CD89279F7DD7F859FBE02F8DD356F0E21D823
+        BA60E7E36C8D98E8D86B46433ABD55911EE6745523463FB60ED517BC61746FF8
+        92DA231A4FCC1D8E27EE1A616A9DE60B18BB2FE4B1A8F1BB298CF511B33EFC3B
+        FFB228FF5AC05B385E98C251F03F39623F6285F3D4BB22449B00992C66C68FB3
+        71B0A4E6A6C2B696AC51C9C85E321311928DC24F2FEAF46ED8DA3C86C6B34AE3
+        59DB4AC0534302BFF3E6EAE9F4963669BC13831DE54873E69BAACCD48F8F9030
+        FFB98FB17E57E9CD66BC42EE4A4FC686E5B329F862EE4A469E77080AE45E1075
+        2F1B76590B163D986309FCD6EAD77791551EEF100DCC88DA47C98062FA5AC16D
+        C7E2553BF087EC2F6F365B48C9F96526A64D19069D54DBA7D9F079433A649563
+        567BF7BD0F3E947105F04B2B56A47B3CDDF672921B2322CA30C25964F62E0B0C
+        3EDB5582452BB74092AE6F9CDC1161B14875BD0F3E55B73CFFC81D3DF1EA5319
+        506DD1E440C88035A7E2704B0A0CA51175B575639F7CF6D97D9701AF5CB6ECF5
+        F85B6E79D0E5B46366F401440A5E6864A840EADC50DF02B1B18EFA9A453A2CBA
+        BAB165A12B60E923512032E577B9C82DAAB36C33775402DE7F662C0564026C1E
+        0F9A75173EBD300A2D5E1FAAABCEAE5EFCEBE71FBA04BCF03BF7BA060F4A3D95
+        98DCC793EABE8009EEA3A6A1BA286662AF2AD0EBCE51DEA77F1DFC0685E10BF4
+        6238DB55424D3FAB6A189D0A58D8353CF9E2494B77E08B63B5966DEEBE2D11D9
+        CFDC0E5FA30F9CDD01C913835D4DC351D440595679695D7E4161F2DAF5EFB698
+        C03F7AF87BD313136ED9D4B34F2AA6C616A29774F632E00035C1F8C9D95B40B3
+        AFAC4C535CD51CF2A17B789C8821B766E81DD70EB3870978E26F766247E13580
+        9BFDE6F3490E01A72286616BDD2094971C43456555D62BAB5FCF31817FF8D0C3
+        BF4F4848FCF9E0FEBD303BFE30C5530AAB415CF9AB046DF8AFEC69BBCB868FFF
+        5181592FEE0DF9D0B9BF9A808CC171F0C96A27FA98EEE11431F5B7B9D89A6FED
+        122F0346208F56A4687CAC4E417E51392A2B4EAFF8EF37DF78D6047E74D1035B
+        137BF69E3C616034A6C7159805B59062016D774B58F2D65758BAA1D0F292187A
+        21252BA7520F4BF06B3A3A230C781A8DE12D5FB50F98898D82E1CDC644E496CA
+        4CADB7BDF6D73553B82913EEE8D72725656B52AFFEBDE60E0346C75036A45DC3
+        1AB781B6474A98B3620F36E6555936CF48F520F7854C283EB5D3E68E69D1D465
+        3BDBDDC3E635E456F7EB23F1E109374E9F282C2F292D9DC2CDCA9AF1487CF7EE
+        7F4A4E498D5C38B219FD226B09B81DD58B203477A186525115839EDD8EB29A16
+        CBA68F4FEF8355DF4B2383A2740ED64ED92F4B349ECEC199F3720780FD28D67A
+        E16F279371F2784153F5B9734F71B367CC7C232E36EEBE3EFDFA8BDF4FBB8078
+        7BD3D555BA0DB4080D855F9DC0909F6FB99404B495F79F4CC75C824653078183
+        36A2A959C14FD71CC15FB69F0CD9F4AED109D8B078DCE52ACD6938AB7BF05A59
+        2A8E1F2F54CFD5D4AC65C0876263E3460CECDF97FBD1A83A44893EB2D0ED771E
+        22E5B41B728EE1EEDF6D0AD966DAD0EE88A571AE77D04233DE669F86BCB27A54
+        5C90AFDA767E7A12DEFD29F570AB972A703A1A8D08BC5236100545A5464DCDB9
+        C34CA5EB6363BB470D1B9882C708D841518AD611E068079EFBCF5C2C7FE760C7
+        7AEF3ACBAA85C3F1F8ACD436C00645D676BC7C62208E149D444D4D7503033608
+        182307F53681454E25D5EC003059DE998B3FC0E7074EDD34D8F8283B0AFE6D2A
+        A2C957ABADBC002BFBAB9C0D2F970D425E61396A6BAA1116308BAE7C7E0DFD1F
+        7E0B676A9BDB75CDF516365FF5C9E2DB3175E42D81F1DBEAD14301775AA5458A
+        6FF34B6B30F407EFDE14D8F47EDDF012A9F2ED2CA0611EA0CD635BAA7438464B
+        A4B4F1ED4F0B70EF8ACD21DBB8296010B9E00C1259F106EFD79156149DE3E91C
+        334E32B91DAF12A84832CD61D7B576DA46B03793631D18D3B79B992CCC18110F
+        5EE4E16B512DAB8A96462B1CB7C40CD6337FFE027F7CCF3A4FEED1CD817D4B32
+        61A7A442A0F1B52EF7141E7D3DD036292670CE21F1B091A67C77D53FF0F1A1B3
+        E6B9451392F1E7876F85D2CA0031601B017B226D00FD16A921FC5E35A42B6462
+        E9966665CDA4C023AEC381077BA1824BC2E4A7DEC3F6C315966D66520F7C4A31
+        B4410FC6915B7AF29583F8F74D818AC92452C36D4B3341D93AABA1A3FFE22D97
+        029797178DC00FE60C80D1C66FB33098552ADBEBDD2C038F4E8596AC77E96D37
+        79FDE8F7D0DF2931B72EE83D470FFDDBFB8799E38B859F3FF99F43782908BC7C
+        FE60FCE2DB83A1B5F8D142C069CF6D47497533F52287FDBF9988E1BDA32914D5
+        AEF91C5707B6082D3B9C3C5C0476D870A8F02CD21E5F1FB24DF68FC7E0EEF13D
+        4DEBC9D140F513D8FE1317CC1A597ADF1873EC328D14681C56D679517CB6D974
+        31437AB8CDB6E18A441E27476F933C74283D6C0D1CE5C09B1F1CC1032F6EB33C
+        CF0C4FFEEFA7604062247CAD8C912805868B9F7AEFD2F8A3031BE7601F1A9B17
+        DB8723AC3AA3704E7C644C47C1F153A83CD32A3D6C5701A02D70B4134FACDC82
+        FFD878D4F27CDFEE2E1398416A9D48FAC315893AED24DF17DBF5F1283FCE0A00
+        955F1700AE55E2692BA6C122956635EADD05D629A15963FAD9E5C17C5703E70A
+        93705C4D4245D9F1BAFCFCC2E4B5D9C1120F9390453C0B61AB72EA1B7DE84306
+        EB7C93CFB2CDD2BB07E1D7F70CE9744A188E0894C1357391D824FEB375118F49
+        A832AD25B0D3867D472A31965C5228D9F8F458CC1A93444141D7F7B09DE2AB43
+        C2181CE547C290EBADCBB44CAC0AF1BAC5A43733587F597F08DF5FB5C3F2862C
+        40285C31057DE25D146B876F6D3B22AC776532569B6DB321EB029B42B52EC433
+        0935D572053045588F2ECFC1AB9F1558DE742059E6A3CB279BDFBBDA60D90D19
+        07A50C1CE38742D49AAF3ED5C224D464DAA50BD844B62462CC63EBB0BFF89CE5
+        4DAD92F1AE109BA1A05648C00EC79DD055FFB527D382C0D6D3A541D56606ABF6
+        82D734588D5EEBF1B962C110FC6CDEA02E3558E6AC08C94ED71CD4C2034E95DB
+        375DCA24E4843802097FCE9E32643D177AEDC8A6C5E3303D2D013E6FD7192CC9
+        F0E24B17B921713804B5B9FD13E24CAEB6E481250C39BB4BF0DA077981D98836
+        2252A0F1E27DC3D09D5247B59335E88E8A5D6F41A9330D5F3A330996DCA9A675
+        6CC90393908B5A0CBB39390E7F23D0D418840E2EA60A8A4AD95167E7913A2A12
+        C1563806212F72065964854D84777C51CB45B9EAB22502D5EBCFC3686EB4ECE9
+        1B2F06C17A51E91C8C2FA366909162CB9694CE2F5BBA28A117A64930782108DD
+        C0A618BB0C952D3E150D1F4E45DE866351934C8B0CCD1FFEC2B48B1272E92161
+        ABBCBD4B7B5AD07DE622D652CF2494BBD2983566C0D76FE9E145B15E5CBA1F51
+        5A157482561B1A6E28349B0D64B0F5AE1494C64EC7795B2278A5E9C62C2EBD28
+        96CB87D562242947C95236107413B416EF7585662BE8055D81CF1E8B2ACF7854
+        46A59906117EEF8D5D3EDC5A2C1788FB8B112B17C1565B0283ACB74EAA1FD602
+        712D10B4F89CF1A8F38C424D741ABC7C24C07AB5AB1688B716EB2D000AA2D50A
+        B8AB0FC279BED8DCE7009D051FBC69E0CCD5B7E60459AB3D008661AE8EE57456
+        E520BFCDDBA0DA63E075A7A0A1DB303444F6838F92014E612BE11556F0EBFA2D
+        00ADC56A93077931D8D54638BC5570349F86D4520541AE85E06F06C77A4E0F96
+        70D84B102468B608688E5828AE04C8113D213B294A13DDAC27E97D7903C79BBD
+        C9A3AD586EE3B13928D1B007B6F130474663DE214970DA03CB8FBD3E19B25F81
+        A21AE4DB85C0361E85ACB0B9A1E31BBA8DA7AD5C73A3564414E77405376AB534
+        406EF97FBA512B94B47B2B9EAAEF52B51BBF15EFFF000BB1F477942997640000
+        000049454E44AE426082}
     end
     object lblCurrentBlockCaption: TLabel
       Left = 90
@@ -368,16 +374,17 @@ object FRMWallet: TFRMWallet
     Top = 91
     Width = 849
     Height = 432
-    ActivePage = tsNodeStats
+    ActivePage = tsMyAccounts
     Align = alClient
     TabOrder = 2
     OnChange = PageControlChange
     object tsMyAccounts: TTabSheet
       Caption = 'Accounts Explorer'
       object Splitter1: TSplitter
-        Left = 380
+        Left = 411
         Top = 66
         Height = 338
+        ExplicitLeft = 380
       end
       object pnlMyAccountsTop: TPanel
         Left = 0
@@ -498,7 +505,7 @@ object FRMWallet: TFRMWallet
       object pnlAccounts: TPanel
         Left = 0
         Top = 66
-        Width = 380
+        Width = 411
         Height = 338
         Align = alLeft
         BevelOuter = bvNone
@@ -506,13 +513,14 @@ object FRMWallet: TFRMWallet
         object dgAccounts: TDrawGrid
           Left = 0
           Top = 0
-          Width = 380
+          Width = 411
           Height = 304
           Align = alClient
           TabOrder = 0
           OnClick = dgAccountsClick
           OnColumnMoved = dgAccountsColumnMoved
           OnFixedCellClick = dgAccountsFixedCellClick
+          ExplicitWidth = 401
           ColWidths = (
             64
             64
@@ -523,13 +531,14 @@ object FRMWallet: TFRMWallet
         object pnlAccountsInfo: TPanel
           Left = 0
           Top = 304
-          Width = 380
+          Width = 411
           Height = 34
           Align = alBottom
           BevelOuter = bvNone
           TabOrder = 1
+          ExplicitWidth = 401
           DesignSize = (
-            380
+            411
             34)
           object Label17: TLabel
             Left = 5
@@ -560,7 +569,7 @@ object FRMWallet: TFRMWallet
             Caption = '000'
           end
           object bbAccountsRefresh: TBitBtn
-            Left = 302
+            Left = 333
             Top = 6
             Width = 75
             Height = 25
@@ -597,27 +606,32 @@ object FRMWallet: TFRMWallet
             ParentDoubleBuffered = False
             TabOrder = 0
             OnClick = bbAccountsRefreshClick
+            ExplicitLeft = 323
           end
         end
       end
       object pcAccountsOptions: TPageControl
-        Left = 383
+        Left = 414
         Top = 66
-        Width = 458
+        Width = 427
         Height = 338
         ActivePage = tsAccountOperations
         Align = alClient
         TabOrder = 2
+        ExplicitLeft = 404
+        ExplicitWidth = 437
         object tsAccountOperations: TTabSheet
           Caption = 'Operations of selected Account'
+          ExplicitWidth = 429
           object dgAccountOperations: TDrawGrid
             Left = 0
             Top = 0
-            Width = 450
+            Width = 419
             Height = 310
             Align = alClient
             TabOrder = 0
             OnDblClick = MiDecodePayloadClick
+            ExplicitWidth = 429
             RowHeights = (
               24
               24
@@ -629,14 +643,11 @@ object FRMWallet: TFRMWallet
         object tsMultiSelectAccounts: TTabSheet
           Caption = 'Selected accounts for massive operations'
           ImageIndex = 1
-          ExplicitLeft = 0
-          ExplicitTop = 0
-          ExplicitWidth = 0
-          ExplicitHeight = 0
+          ExplicitWidth = 429
           object dgSelectedAccounts: TDrawGrid
             Left = 41
             Top = 31
-            Width = 320
+            Width = 310
             Height = 253
             Align = alLeft
             TabOrder = 0
@@ -650,7 +661,7 @@ object FRMWallet: TFRMWallet
           object pnlSelectedAccountsTop: TPanel
             Left = 0
             Top = 0
-            Width = 450
+            Width = 419
             Height = 31
             Align = alTop
             BevelOuter = bvNone
@@ -661,6 +672,7 @@ object FRMWallet: TFRMWallet
             Font.Style = [fsBold]
             ParentFont = False
             TabOrder = 1
+            ExplicitWidth = 429
             object Label15: TLabel
               Left = 41
               Top = 4
@@ -672,11 +684,12 @@ object FRMWallet: TFRMWallet
           object pnlSelectedAccountsBottom: TPanel
             Left = 0
             Top = 284
-            Width = 450
+            Width = 419
             Height = 26
             Align = alBottom
             BevelOuter = bvNone
             TabOrder = 2
+            ExplicitWidth = 429
             object Label20: TLabel
               Left = 41
               Top = 6
@@ -748,7 +761,7 @@ object FRMWallet: TFRMWallet
             end
           end
           object bbSelectedAccountsOperation: TBitBtn
-            Left = 367
+            Left = 357
             Top = 31
             Width = 75
             Height = 61
@@ -822,10 +835,6 @@ object FRMWallet: TFRMWallet
     object tsPendingOperations: TTabSheet
       Caption = 'Pending Operations'
       ImageIndex = 5
-      ExplicitLeft = 0
-      ExplicitTop = 0
-      ExplicitWidth = 0
-      ExplicitHeight = 0
       object dgPendingOperations: TDrawGrid
         Left = 0
         Top = 86
@@ -873,10 +882,6 @@ object FRMWallet: TFRMWallet
     object tsBlockChain: TTabSheet
       Caption = 'BlockChain Explorer'
       ImageIndex = 1
-      ExplicitLeft = 0
-      ExplicitTop = 0
-      ExplicitWidth = 0
-      ExplicitHeight = 0
       object Panel2: TPanel
         Left = 0
         Top = 0
@@ -922,10 +927,6 @@ object FRMWallet: TFRMWallet
     object tsOperations: TTabSheet
       Caption = 'Operations Explorer'
       ImageIndex = 1
-      ExplicitLeft = 0
-      ExplicitTop = 0
-      ExplicitWidth = 0
-      ExplicitHeight = 0
       object Panel1: TPanel
         Left = 0
         Top = 0
@@ -971,10 +972,6 @@ object FRMWallet: TFRMWallet
     object tsLogs: TTabSheet
       Caption = 'Logs'
       ImageIndex = 2
-      ExplicitLeft = 0
-      ExplicitTop = 0
-      ExplicitWidth = 0
-      ExplicitHeight = 0
       object pnlTopLogs: TPanel
         Left = 0
         Top = 0
@@ -1069,10 +1066,6 @@ object FRMWallet: TFRMWallet
     object tsMessages: TTabSheet
       Caption = 'Messages'
       ImageIndex = 6
-      ExplicitLeft = 0
-      ExplicitTop = 0
-      ExplicitWidth = 0
-      ExplicitHeight = 0
       DesignSize = (
         841
         404)
@@ -1312,7 +1305,7 @@ object FRMWallet: TFRMWallet
     Left = 105
     Top = 180
     Bitmap = {
-      494C010102000800140210003000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C0101020008002C0210003000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000003000000001002000000000000030
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000002A292929D60B0B0BF4111111EE0000006B000000000000

+ 150 - 144
Units/Forms/UFRMWallet.lfm

@@ -16,7 +16,7 @@ object FRMWallet: TFRMWallet
   OnCreate = FormCreate
   OnDestroy = FormDestroy
   Position = poOwnerFormCenter
-  LCLVersion = '1.6.4.0'
+  LCLVersion = '1.8.0.6'
   object pnlTop: TPanel
     Left = 0
     Height = 91
@@ -29,133 +29,139 @@ object FRMWallet: TFRMWallet
     TabOrder = 0
     object Image1: TImage
       Left = 15
-      Height = 62
+      Height = 60
       Top = 15
-      Width = 62
+      Width = 60
       AutoSize = True
       Picture.Data = {
-        1754506F727461626C654E6574776F726B477261706869630A0F000089504E47
-        0D0A1A0A0000000D494844520000003E0000003E080600000073C1A844000000
+        1754506F727461626C654E6574776F726B47726170686963E20F000089504E47
+        0D0A1A0A0000000D494844520000003C0000003C08060000003AFCD972000000
         0473424954080808087C086488000000097048597300000B1200000B1201D2DD
         7EFC0000001C74455874536F6674776172650041646F62652046697265776F72
-        6B7320435336E8BCB28C00000016744558744372656174696F6E2054696D6500
-        30362F30372F313610A27E9700000E62494441546881CD9B7D9C54D579C7BFE7
-        CEECEEC0BE22B02F2CB033B3C2F2EA0ED0801491B56068ADBCA40511492DD12A
-        A468C57CAC298444AC1113623EB15A6391A8D40815431B8C2FA9489301444113
-        1844C00576980576D91D0177667760999DB9A77FDCBB77EFECBCEDABEDEFF339
-        9FB973EFB9E79CDF739EE7B9CF7913524AFA0B42881B80BF016600A5C020200B
-        50F424F51401424003E0050E00FF25A5FCBCDFDAD6D7C485100B818780C9D936
-        6BFD8D15458D55134B2C958EC1B9F3A69655267B2F100A07F71EBB70E6A8EF72
-        F3EF3EAD8FEE3D76C1DE165107000781E7A494EFF7693BFB82B8106234F028F0
-        0D4751EEC97B6EAD883C78FB841BF2B333F37A53AEB72158F7FADE9A331B7E75
-        7870A8353200D80ABC28A53CDBEB36F786B810620CB0D6A288998B66387D1BEE
-        FEDA2867715E696F1B9508DE8660DDA2A7767B0F7B2F8E045E03364929CFF5B4
-        BC1E1117420C02FE1158B96466F9914DAB664EEE6DEF7615260194038F4B295F
-        EC4939DD262E84A804B60FC9B35D39F8D38585FDD5C3E970B0DA7F72FE13EF85
-        FC81ABA7815552CA2FBAF37EB7880B21165B14F1E4FABBA634AE5B32F9A6EE36
-        361D3CDE4B3485AE612FCAC55E980B80CFDF8CAFB19982EC2C5CCEC171EF2CF9
-        F16EF71B1F7887032BA594FFD3D5BA94AE641242D884103FC81D90F183FD1B17
-        C8F4A40508058405146B6C128AF63C01566FFE905BD6BECD96DD278D7B5B769F
-        E496B56FB37AF38709DFD9FEDD3955BFF9FEDC904511BF1442ACEC0A1FE82271
-        E0896C9BF5CE73AF2C1B39ADA27074C21C4268C42C5960CD02AB2D41CAEAF8B5
-        649904A1C173E612404CCFBA8FD60350357158D2C6CD9B5A56B97FE382E61C5B
-        C63F74957C4AE2428801428817726C19B7D56DF9666942072614B06480A59D98
-        89744622F29D8460C9024B264D57DA0884C200869A83A6EA00F6A2DCB8AACD98
-        565138FAFC9665A5B90332560921D60B21327B4C1C7838DB669D757ECBB2E109
-        492B197AC36D897BD992E6BF21A82C3CBEA051ACB9C76BFD2DBA3072D23415F2
-        B333F3CEBDB26C648E2D6331B03455DEA4CE4D08B1386F60E69AB32FDF551E47
-        5A283A69ABF6AB5841B1E836ADFF0A85E54FFE0A5FC3971DEF49F385D4FF6BD7
-        E7BF085253DF44CE800CA6940F05244DA1304774F57F6CE91443282EE7E018AD
-        E88C83D5FE93331E7DD31A55E5FDC91C5E42E24288511645ECDABF714138CEA6
-        8502964C4DBD0DD266E765D105A3206E7C3869E37A8B4AC760562F98C8F2D989
-        5DCE5B1FD71E99FFC47BB940A594B2A5F3F338551742E4015BBF7DDBB8DAE4A4
-        CD292B36E92AEFF6F43AAA4C8923672EF1AD67DCD8EFDD86C77B29EEF9BCA965
-        9577DCE43C0BFC520831A0F3F34436FE9DC2FC01D6E756CC981573570813D98C
-        8E6B6B668CADB6DBAFAF3198A0E8BE47ADBF85490FFDA7E1FDCDD8FEDD395585
-        F903CA4860EF31C4F561E4CA8F9E5E5018578A92614A995A4AD6F3D62C7C0D4D
-        7DC7AE0B58F8E42EE30B60C66FBE3F371B7854085164BEDFB9C7D72D99597E22
-        2E0C55AC1DCECC92614A26D2E65EB764E1FE43BF0DA51322100AB3FAC58FE2EE
-        4FAB281C3DC939C40F3C60BE6F38372184D3A288BD97B6FD6D6EAC17171D0187
-        35CB445427AD98D4BF5D408A85823F594AA03994B091F9B9D9B8C6D8D13CBBE4
-        7CE3256ACEF9C91998C5948A1180CAF9C6266AEA2F775B00675E5A1AE7F1BD0D
-        C1BAF2FB5EB7A239BA4688EDF1EF2D9AE13C15F7E952F44F94D9735B4C6A1FD3
-        FB9A709A426D494903B8C695E3DEF613DCAFFD08F7AB3FE4F659DAA76AF6D4B1
-        B8373D8CFBE70FB06EF96C00460CCDE3D78F2D60568AC8CD8C67DE3C1A77CF59
-        9C573AC939E414F06D8396E9F9E20D777F6D54DC5B8A0584D524800C530C9E41
-        BC97CFC473F27CCAC6554D9F1CE3283DD5B59A40C6D80DE1B6FB08E7B0412CBC
-        A902F7C6453C347F625AE2893C3CC08E35731CC0FD31C4851077388A728FC5D9
-        B631D050620394CEDFEE4E42F09C3893B271F691238C50154B269ECF7D3A7187
-        519EFBB05713D224871E1B587866C54CCAD24470EDF17E67388BF34AB36DD626
-        21C4748338B0FA9E5B2B2271B985253625251FABF29E13A753132F1B61984B53
-        4B2B81E62BDAFDD222A30EDF052DE2B3175F6704440885E5B32B5296DD1EEF27
-        C23F2D725D0256012842080BE07AF0F60937C41357B4EFB7503A7ADFF84D2200
-        2503DFF986948DAB9AF9A7BA63B4E2F9BCD6B8EF1A576E945BDBA039367BC975
-        3175271A93771577CDBADE01FC851042518049D9366B6DE2919799B41223F9D8
-        7BB182D8F3E11F92565E39616C4CA8EB3951A3DD1FE330CA72FFB1633C5E35D9
-        691AC30B7CFEB8E83306B32694247DE62CCE2BCDB02A2D80430196DE5851D498
-        90B45E59CC35ED5A904028C282AF2E756FDBCB46EA31BDE6307DE7B5AAEDC38B
-        0D82BE0B5A6F97150F32699D9692392FA3FC34C3D79BC7979C011629C0F43B6F
-        2EB7C56769AFACF33526219885A391F77C762A65C5AE1B26749041C1734CEB5D
-        4DCDB57A7CF51735122566B5D6EAD97920B5E34C3561A13D2FB100D3ACC0B0A2
-        820129E2CB04D3444224BE063C9F9D4859B146BC43909E639AA05C639D467DEE
-        4FB4A8AF6ACAF531F53FF3EB43299D1740D5C4E4AA0E50E9189C0B14588141F3
-        A6969525CFDA3E76360D5F63AED598BC69894F1CA7BD2F254D812081667DA261
-        787B282DF1D56B13A6F692EB681FC47B6A1A7878D39E94652F98664F394E07B8
-        797C8903685580046A8ED1386375CB206F4A52D5F3A820A320557C67EB52566C
-        1F51026A146414CFD18E78DE35C661D4597B41B3637BF12090929D1F9CA0EA3B
-        DB52960BB07AC184B47974276EB302D6C45924A0EAA4CC044D8958D2A8518E1C
-        AB4E5AE9AC193742B40DD43650238676548E751AE5B83FFECCC8EFBB7099AACD
-        EFB2C793DAAE41EBED74F66D824D00AA7CEBFEC4F3BD964CD37C996986D49829
-        B5C50C60DC1F1FE796250F242CAA3F51569883E7D9451464A79C5F3420E6BD18
-        4DD2DB3A8CDEEC94543D8908A8FA373CAAE03B973A46EF0FE46767B2F37B73BB
-        4CBA1D0A104DFA54464155759B543B08CB28A8119011ED574FE9ECBBAF919F9D
-        897BC3BC9E4473AA156D513E71CF4B69EAE5881678A851CD468502510B9AEC34
-        4B711FF0F49C453751E918CCCE755F4FEBC593E08A15080642E170D2D54E43AD
-        75F2BA5A77C4EDC2F896B7879FFD89FCEC4C56CF9FC8FABBA6F4A698162BF0C5
-        DE63172249772B18BD6DD1ED59271B8D5D036B0A868C51567FA0AC3087E5B32B
-        58BD6062B7EDD98CB73EAE3D029A8A9F3DEABB9C3B6F6A8A18468DE8443BC7E6
-        0223C038EE4DDDF06143B19716D2BE9070FAEC05EAFC5F32A42087F1CE61804A
-        C3C520D567FDD832AD4C1B5B8ACB39047B610E55E30B713906F598AC19FEC0D5
-        56E00B2B70E0779FD6FFD9DA3B2625CF2D555DCD15888AF86752E2F93C35F1F5
-        7FFFD72C9F3FD38801AAEEDD409DFF4B562D9EC5FABF9B0BD136D6FFE2B73CFE
-        F26EA68D2DC5FDD33B2112866858F3297D84FFD853D30AECB5026FEF3D76E19E
-        B46FA8914EA3341D06F1DA646F02602FCA83482BA082AAE2A9D6161C5CD71741
-        E41AA811DC87B4098CAACAE1A640A7EF48031CACF60F05762AC0F1B6889AE76D
-        08A6FF1645DB40D57B211AD61A1C0D43F41ABEFAD4C3C52A975D231EB9465353
-        138196AB80BE32DA5E46FBACCBD06CFD5EDF920E84C2C196D6B6A152CA538A94
-        B215D8B76DCFE9F47121688D899AC847AF41F41A7B3CC955BD72D4309DB496CC
-        66E1720ED6CB0853DB1800C03E74A04EBA6FB7A23DFFCEB14F817DD031E7B6E9
-        473B3C5D8F02D4B60ED29130BE3A7FCAECF6A2824EC43535AF2C2F32B4A05DCD
-        01AAC6EB4EB08FF1D2FBD556E025E8085C76855A2343BC0DC1BA2E6FE6512346
-        48EB3999DA4A5CE54375FBD6465F0BA73B71399651909DA1094F8DE2B2E7F3FB
-        A7E6771AE6F61DBC0DC13A6F43B01870834E5C4A191142FC6CD153BB6F3BF42F
-        7FD5F55D4C5285A88AE774EAE92697E33A9DB8F68E7D880DFBE0422D4688B482
-        1AA5C026A89A50DC33565DC0DA573F3905EC97525E81D805857F3DECBD38A14B
-        4EAE133C3517533E77D9F34DAA7EADE33A7A4DB3E57EEAE5760442E1E08EFDDE
-        E180B127CE202EA56C067EB1E8A9DD5D737226245AA534C33E382B96ACDAA68F
-        01FA6F03B1192B9EDF7728AACAADE6ADA09D574B9F3DECBD587AB0DA7F926EE0
-        4892D50B689FEEFD6A082682B72158B77D5FCD04E0DFCCF76388EB7B43D7CF7F
-        E2BDE42B7E9D906841DE8C74D3BDFD8DE98FBCE9071E9152C638A2443B2276F8
-        03576B96FC78B7BB2B05A79BE077397ABEF2D15B6C78E3F007FEC0D54629E5BF
-        777E16475CF77AF7BFF1817774FB4826157C8DA9EDBB374B3EBDC1C16AFFC9C7
-        B6FD7120DADEF93824DCE726A5FC1258F48D27770D4C67EFE954DDE51CD2C5A6
-        F61D02A17070CEBA772291A8FAB8943261FB936EF093527E1455E5DA39EBDE89
-        0642E1A43B79922DCB823669D09BB1734F1008858323BEB5B5B6A5B5ED15E09D
-        64F952EE6C9452EE68696DDB317CF9D6BA44E49B42E1942B1B5FB57DEBA4CF36
-        5F6DFBB994F2692965D2F9C42E6DDB1642ACCC1B98B962D73FDF36D0BCF7AD29
-        14C6E34D1EBC98B75FF73702A17070F8F2AD752DAD6D6F4829D7A7CBDFE5FDEA
-        4288FB142136EC5CF7F5BA54876AFE2F70B0DA7F72EE63EF360742E15780CD52
-        CAD40B6C748FB802CC069E5E32B3FCF2EB8FCEAEEA556BFB080F6EDABFE78577
-        8F5F1F55E57D52CADF76F5BD9E1CCD7002CFE7D83246EEFEE15F5A93EE5FEF67
-        781B8275D31F79D3EF0F5C6D04BE29A54C3D13D2093D3E85A49F2F7B619273C8
-        E91D6BE638BEAAB329815038B8E2F97D87B6EFAB71001B81D7A494DDDE3FDADB
-        E35783D0760C3E34C939E4F88E35739CFD79FC6AEDAB9F9CDAB1DF6B8FAA7207
-        F0EC577EFC2AAE106D9FE8DDC0BD39B60C75CD62D7A53B6F2EEFB5160442E1E0
-        736F7FF6E9CBEF575BCF34368F0236A311BED0EB36F7C311CB29685BAA6EC9B4
-        2A6D33C797D48F1B39885B5DA505378F2F71245BB1E97CC4F240756361A83552
-        0C7C023CFDFFF28865D2C2852803FE1CED50ED686018900B64A2CDFE48200C5C
-        035A8046A006F83DF0DF40BD94FD334BF1BFCAF3090585D7E9BD000000004945
-        4E44AE426082
+        6B7320435336E8BCB28C00000F5C494441546881D59B7D8C5DC579879F7766CE
+        39F7DEFDBE8B1D7B8D61B13160B05D2F5027C68E8190409B929084006D5A42A3
+        5651D4964655152591924292A65594A66A451B45AA541250207C8990A4348921
+        14624330181BB049B0F1DAF1826D6C76D7FB79EF39673EFAC75DDB6B7BEFB26B
+        AF4DFB938E567B66CE9C79EECCBCF3CE9C772484C0A9D4AEED5BCE3346AF515A
+        AD8AE3C2F242A9A9B3586A6A05A88C0E1DAC568676656975B3777EBDB5EEA9CE
+        454BB69DCAFAC84C036FD9B4A1496B59A995BE526BBD421BBDC0187D86D6BA10
+        25455D28354BB1A11980CAC820D5CA60C8AB15E79CAB5AEBDE72D6753BE73638
+        EF9EF02E3C7351D78AA199ACDF8C016F7A76DD2AADD5A7B4D61F525ACF56DAA0
+        4C828E628C5118E589B5A25048282645002A69856A9A92598FF50A6B3D2ECFF0
+        36C53B8B776EBF73EEC7CEF93BBBDEBD7AFD4CD4F3A48137FCF2890F6AAD3EA7
+        B4BE42698D444594D614C228C5BC9742BE9F24EBC564032857417C8E040F4010
+        4550115E17B1710B69DC4E359A4D256AA72A25BC7384BC82770EEFDCFF38E7BF
+        B9E2BD573EFA8E00AF7BFC67CBB5D2FFA88DFA3DA5234254249194966C0F2DD5
+        1D94AA7B307608820384200A50040464AC90004200FCD88F104034D634315AE8
+        60A0B09081B8833424485EC5BB1C67DD4F9D775F5C7DD5359B4F1BF0533F7FF4
+        36A5F49795311A53A228156667DB28575FA590F703E0C510449F489D90E050C1
+        02508DDAE82B9CCFFEF83C2AA10876146FADF3DE7D6DCDD51FFCCAF4CB9E06F0
+        638FFEF82C2572B7D66A0DBA80D14287DB4E47F56512378097082F66BA759854
+        2A5854C849750B7B0A4BD9A317615D0057C539FF940FE1E6F77FF043BBA75ADE
+        94817FFEA31FAE524A1E545ACFF1A6481B7D2CCA37D2ECF6E289F027D89A5395
+        0A0E45CEA09ECBF6E812FA29A36C05EFDC3EEFC3C7AFFEF047A664D4A604FCDF
+        0F3F74AD52EA21A54D1C4CC2D9BCC6B976133A58ACC4270D2363637AA2AA8800
+        010E259990E1C4B0C374B18B73919A45CFBCF7D7FFFE47AFFFC9DBBEEBED807F
+        F2D003D76AA51E411BA574C4856C667ED8862322A0A689768C42C01423C65B31
+        5BC90FFF02A61483F3A01564169B7B6A36CFA3C9E991F37885E5789783B3DE79
+        7FDDB5D7DF3029F4A4C03F7AE0BE954AE449D151A4B4A64B3DCF1C7E8BA57072
+        A063D2C588B5BFDAC5D7EEDD08085FFAC32EAE5EB9005FC95089E1B63B9F65ED
+        A6D7995B2EF1EDBF5AC3EC72099FBBC3CF1BAAECE36C36F94B6B5398CB731FC2
+        E51FBEE1A667EABDB36E133D7CDF3DF308E191808A028AE5F21C73D87D18564E
+        F6129048F34F0FBDC8BAADFB58B7752F0FAEDD8284149DC4BC796098AFDDBB91
+        5FFDE64D1E7E7A275BB774A33447FA3F60293087DD2C97E70828022A2284471E
+        BEEF9E79D302FEC177EF02CF030166E51896E897982B3D58925A374C0CBA2146
+        974EE26A4C20736CDF3370F8BDEFBFE80C183D08B1A3FBCD231E6553C1B0627E
+        030CF7611A0CA621412B19834E982B3D2CD12F6131049885E7811F7CF7EE0981
+        279C43A248DD06ACCC8839DFECA45377634302014C7391A737EEE62BDFDFC8C9
+        78694A09D5CCB17BFFF0E17BDFFA593777AEEB01A5E8E9CF0EDF773E70FDBF6F
+        A46884650BCEE08A15E7B2FAA23924CD05C2708AF5319DBA9B41D3C8ABD9D918
+        AA2BA3486E038E9BA78F1BC3F7DFF5BD0B95522F7B9DA833A2212E2F3C8B10F0
+        41611A225EDF37C4257FF900FB0F564E187626B4685E0BB75EB7945B3FB20C42
+        C0A53563F764F5DDBC9537A15CEABDF74B6FFCE42DAF8C7F6EA22E7D474094C2
+        F33BF1AFD1E2F0284CACA9562DD7FDDDA3EF382CC0F63706F8EB6FAFE39A2FFC
+        98E1D4A2E2188D6579FC0A0A4F401470C7B1CF1D057CDFF7EEFC4020BC2F2762
+        61D443BBEEC50683520205C3CDFFB0961776BC75DAA0A6A29FBFD0C3CD7FFF53
+        C4809384B2EE6361D4434E0484F7DDF7BD3B3F303EFF51C0DE87DB435094A4CA
+        05C92E7C3008A01A623E77C7533CB8BEFB34A24C5D3FDCD0C363BFD8822E28BC
+        445C90ECA224557C50781F6E1F9FF7F018FED76F7C6345B9DCF6ACC44D2C6BD8
+        C5B2E2366C8831C5889FAEDFC12DDF7C9C389E593F793A1281FD0329A9F513A6
+        FFF97BCFE43FFE6615366AC1A89C974616F1D26827211BA2AFB7EFDD9FFDC217
+        36C0382B9D65D9677C8092CA3827DE4B184BB2A965C5A2596CFFD6D5283CB5A1
+        716AB7858E9500716278DFD7D7B16E5BDF84790E8C58A856F1C339A15C664161
+        1FAF563B180D9065F9678023C037DFF847A5C5172CBACE4BC4DCA88F263D820D
+        63BF850FB4B636228D31BEEF00F843D0471400AD0489267135738FF501A99F63
+        526015EBC373EF44D24A4029425A25EFEBA3B1ECE988FBD9566D21CBB3EBFEF8
+        E33796BEFFE0FDA306A0A9A9719573BE8C28CE4A0E1C5798770E7404AD67E0FA
+        0ED4FCDB711E8F085453C7F6DF8ED4ADD0BC7291D68688E0A7DF3B04887D9870
+        71719CC6A043FF01E637EC67BB2AE39C2B373535AE02D61A8010FC553E40834A
+        99150DE2C3044B3DEF218A51E559E35ABA061D1723D63EB7876BFFF9D9BAF558
+        F7A5D5AC5A7C0669D54E1B388C511B3DC5FEA11436CD690FDD9454273E2882F7
+        57016B1580736E85174D9B19A6A8527CBD8EE73D32068D5247D6735A786EE7C1
+        BAEF6F2D452C9EDB88CF27363853954C633C783114F3015A7D1F5E199CF72B00
+        D455EF5DB3D07BBF30A02947C3206F53A989A07DE0855D03751FB9685E13E596
+        02D69D04B0C8D4BAF43829F194E903D178EF175EBEF2B285AA542A5D1942282B
+        8156330253312BE3A0B5D1A4C3292FF70CD6CDDED5D902B13A61DB9E249ABC6A
+        7975EFF0DB673E4A424B38880878EFCB0D0D0D571A11591D0205AD024D268330
+        C57E33066D66BD8B1D5B77B2BBB7BEBBF9FE0B6741292299AEC11AEBC3C32319
+        7F7BD7CBBCD15FAD5F9D099ADFA36894510C9E000544561B6079001D89A7A0EC
+        D481A166B89A8ABC32A0267CE121FDDB633BB9F7D937F0D304168191D4B169D7
+        007B0ED6870588B43A6E907B84826418B184209AC0721342382704C4284FA4FC
+        F4BB9D82E75F9BDCBF7E6CEBF153DD4C6BCDF9ED13DC152271185CED1FC2390A
+        6806D012D012A60F6C3D1B5F3BF54093697673C22756CDC7558E9EF242008D1F
+        CFD57C52BB705A09D5C12A5B764DECEE9D0EC55A71CF5F5C42B925C1D6F1B3C7
+        4B0183002E082EC8B45C3F8934DDFB0679A3B7BE87752AB562611B4F7E793557
+        75CD211DC98F9B6044C0A1C6730D1A11D929C232EB95E45E519C4E9BC79A9776
+        4EDEBA4D458391B12F48213038AEDB35170D4AA4E69AE69E4A56DB91D44A682A
+        9AA3D628815A6BCE6F2FF0BB0BDAB8EEE2395CB36C36CA28D2A1ACCE6C1AC883
+        C6A2C78A909D06D82C70511E94A97A43B354A76EA995F0FCF6FAE3775E5B810D
+        B7AF218914BA6078605D0F9FFECF1701E868ADA515624594183E71C773FCD7E6
+        3701F893CBCEE45FFE6C39D9F0917DAD40CD12971B2328187081BC62C9735BD7
+        755004AA21C606834870089B4D08AC13E17AE7A571C8C6CC2E4CCD6C09403EB9
+        C15A3ABF998EB98D848A459A62B6BC7E6427F2BCB98DCCEB6884D4E1AC67EBB8
+        B4F72C6CA3B539211CB33A0A21905B8F1FCA988A149EE150C2A210A812C23A35
+        3A3AF28488F4F900076D03535DEB6AAD183E58E195DFF6D7CD7349672B0099F5
+        901FEDA15FBD64160470D6336AFDE1A55FA485CBCE2B132A3999F5475DB90B4C
+        6F2A0F0C482B218052AA6F6464E409F3F82F9FDAF1E95BFE7487E0CEEACB5B20
+        4C7110479AD7BADF62FF407D0FEBE2CE160ED5301BC9F9FAC717F3D14BE6A294
+        B062412BD9484608508C354F7CF132B6BF39C2ECE6840BE73591A5AE6EB953C7
+        55F45186504529B5E3C9679EDE6100B4D61B547057F6DB462A3E2121ABBF623A
+        A458F362776FDD64AD84256736C3D80A29844012292E5F320B803C7587BD3397
+        7BE6978BCC7F5703B8409A9D3CACC2334A03FDD2860A3D68A536D4EE0322EA71
+        2530E2130EE4CD2899C20B65728375767B91B3DB8B47CD8DCE07D2AA25ADDAA3
+        5D5181D47AD28A9D11580083E580CCA242A91677A0D4E330063C3434BC5E6BD5
+        47F0EC4E67BD6D6102905A5E98C4A55C3ABF99A421C29DC00EC74CA947CE2204
+        8FD6AA6F6870783D8C01DF7DFFBDA351143DA242CEDEBCCC906B404FB22ED646
+        31D03FCAAF7BEA1BAC8B3B5B61923DA853298D63505AD8A73A502E258EE247BE
+        FFD0FDA3306E5F3A8EE3EF2881D4C7ECCCE6224CB21513695E7D6380FEE1B46E
+        968B3B5BC0BD33AD6BC8D9A9CE25A5801288E3E83B87D20E037FF6F39FDF608C
+        79DA90D39D7650F1A5DAB6EC448A349BBBEB77E7482B2EEA68827C66C6E374A4
+        710C4B33BBF4799890618C79FAD09E341CF3E54129B95DC4331A0AFC26ED4449
+        9D56162635580B669798DF5EAC059F9C669990B3CD2C65541A50389492DBC7A7
+        1F057CD32D9F5A2BC82F227276E4F3E975ED9863A04580AA65D324DF9896CD6F
+        C6944EBFC18A42C601DDC1CE6831514801F9C54DB77C6AEDF83C137919B70AC1
+        7B142F668B71411FD5B5B556F4F68EF0EAEBF577292F3DA7754A5B63332985C7
+        89E1E5C265781442F0C0ADC7E73B46377EF2965744E4AB11965EDFC656BBF8E8
+        AE9D185EE8EE65A892D77D79D7592D604F6FEB9A90B2B5B8923E3D07137244E4
+        ABC77E1B863A110079EEBF9224EA9A986CE56BF61C9AD5309D6A079684102078
+        C70D97CEA96DD31E5BA012969ED58C9B2107622A4AFC28DDC52E7626CB886D05
+        07CFE47998304AAF6E14CFC3F7DD334F8BDA24CACC121D718979BE16E711124C
+        A4211F82E1A131E8B160AA31D98A3DE1EF48D355EC47D953B8804D8DD7105C46
+        70F6800BBEEBA3377DE28D89F29F78D89252F8817EC2C8D0842D7DEA15887D85
+        BDC5C5BCD87C0DDE3A82CB4E3C6C09E0C337DCF40C221F53780F8117E53DF4C8
+        F91852C43B544B1BD2D004FEF4CEB7121C91AFB0BBF1525E6EFB03080185F388
+        7C6C32D8DAB327137A88C3AAE4B4B6B4F6295E22BACB57B0BBD485D82ADEE633
+        177A78481307973E4FB3DB8757097670F09442AB60D13E65A0D44977FB07E88F
+        E6A2B2E153135C7A4813860FDBED74645B48FC20767018375A995168F139DA67
+        A4493BFBCA97B1B7B90BEB03E495531B3E3C5E130688E7DB69AF6E23EADD4118
+        1EC29BE4E402C45D6DDF2A2DCEA6AF7C316FB57451518D900D9FBE00F1F19AF8
+        0840468BDD43D3FE1728F66FC76403E073401194AE45DFCAA1684BA8C5050704
+        8F78077850113669A5D2D4C960DB12061B17924A11C946F136C3597FFA8F008C
+        D744873C741491D8210A957D14465E271EDD87AEF6A2F311C46547ACBAD2041D
+        E3A2065CA19DAC34876AC399548B73484D13DE5A7C5EA9FD7DA70F791CAB098F
+        F14405749CD48EF1E088B55088638A492D22B79256A9E619990D5874ED184F96
+        E2F3EAFFDD633CC7EA6D0F6A35344BB13476506B7490EAE8FFD3835AF534E5A3
+        78D6AFB7EED41FC5FB5F0935D0C88CEACBC00000000049454E44AE426082
       }
     end
     object lblCurrentBlockCaption: TLabel
@@ -392,7 +398,7 @@ object FRMWallet: TFRMWallet
       ClientHeight = 440
       ClientWidth = 857
       object Splitter1: TSplitter
-        Left = 380
+        Left = 400
         Height = 374
         Top = 66
         Width = 5
@@ -521,17 +527,17 @@ object FRMWallet: TFRMWallet
         Left = 0
         Height = 374
         Top = 66
-        Width = 380
+        Width = 400
         Align = alLeft
         BevelOuter = bvNone
         ClientHeight = 374
-        ClientWidth = 380
+        ClientWidth = 400
         TabOrder = 1
         object dgAccounts: TDrawGrid
           Left = 0
           Height = 340
           Top = 0
-          Width = 380
+          Width = 400
           Align = alClient
           ExtendedSelect = False
           TabOrder = 0
@@ -544,11 +550,11 @@ object FRMWallet: TFRMWallet
           Left = 0
           Height = 34
           Top = 340
-          Width = 380
+          Width = 400
           Align = alBottom
           BevelOuter = bvNone
           ClientHeight = 34
-          ClientWidth = 380
+          ClientWidth = 400
           TabOrder = 1
           object Label17: TLabel
             Left = 5
@@ -583,7 +589,7 @@ object FRMWallet: TFRMWallet
             ParentColor = False
           end
           object bbAccountsRefresh: TBitBtn
-            Left = 302
+            Left = 322
             Height = 25
             Top = 6
             Width = 75
@@ -623,10 +629,10 @@ object FRMWallet: TFRMWallet
         end
       end
       object pcAccountsOptions: TPageControl
-        Left = 385
+        Left = 405
         Height = 374
         Top = 66
-        Width = 472
+        Width = 452
         ActivePage = tsAccountOperations
         Align = alClient
         TabIndex = 0
@@ -634,12 +640,12 @@ object FRMWallet: TFRMWallet
         object tsAccountOperations: TTabSheet
           Caption = 'Operations of selected Account'
           ClientHeight = 348
-          ClientWidth = 464
+          ClientWidth = 444
           object dgAccountOperations: TDrawGrid
             Left = 0
             Height = 348
             Top = 0
-            Width = 464
+            Width = 444
             Align = alClient
             ExtendedSelect = False
             TabOrder = 0
@@ -651,12 +657,12 @@ object FRMWallet: TFRMWallet
         end
         object tsMultiSelectAccounts: TTabSheet
           Caption = 'Selected accounts for massive operations'
-          ClientHeight = 368
-          ClientWidth = 472
+          ClientHeight = 348
+          ClientWidth = 444
           ImageIndex = 1
           object dgSelectedAccounts: TDrawGrid
             Left = 41
-            Height = 253
+            Height = 291
             Top = 31
             Width = 320
             Align = alLeft
@@ -670,11 +676,11 @@ object FRMWallet: TFRMWallet
             Left = 0
             Height = 31
             Top = 0
-            Width = 450
+            Width = 444
             Align = alTop
             BevelOuter = bvNone
             ClientHeight = 31
-            ClientWidth = 450
+            ClientWidth = 444
             Font.Color = clWindowText
             Font.Height = -13
             Font.Name = 'Tahoma'
@@ -693,12 +699,12 @@ object FRMWallet: TFRMWallet
           object pnlSelectedAccountsBottom: TPanel
             Left = 0
             Height = 26
-            Top = 284
-            Width = 450
+            Top = 322
+            Width = 444
             Align = alBottom
             BevelOuter = bvNone
             ClientHeight = 26
-            ClientWidth = 450
+            ClientWidth = 444
             TabOrder = 2
             object Label20: TLabel
               Left = 41
@@ -735,12 +741,12 @@ object FRMWallet: TFRMWallet
           end
           object pnlSelectedAccountsLeft: TPanel
             Left = 0
-            Height = 253
+            Height = 291
             Top = 31
             Width = 41
             Align = alLeft
             BevelOuter = bvNone
-            ClientHeight = 253
+            ClientHeight = 291
             ClientWidth = 41
             TabOrder = 3
             object sbSelectedAccountsAdd: TSpeedButton

+ 16 - 8
Units/Forms/UFRMWallet.pas

@@ -31,7 +31,8 @@ uses
   Dialogs, ExtCtrls, ComCtrls, UWalletKeys, StdCtrls,
   ULog, Grids, UAppParams,
   UBlockChain, UNode, UGridUtils, UAccounts, Menus, ImgList,
-  UNetProtocol, UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect;
+  UNetProtocol, UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect,
+  UConst;
 
 Const
   CM_PC_WalletKeysChanged = WM_USER + 1;
@@ -217,6 +218,7 @@ type
     procedure MiFindOperationbyOpHashClick(Sender: TObject);
     procedure MiAccountInformationClick(Sender: TObject);
   private
+    FLastNodesCacheUpdatedTS : TDateTime;
     FBackgroundPanel : TPanel;
     FMinersBlocksFound: Integer;
     procedure SetMinersBlocksFound(const Value: Integer);
@@ -251,7 +253,7 @@ type
     Procedure OnNewAccount(Sender : TObject);
     Procedure OnReceivedHelloMessage(Sender : TObject);
     Procedure OnNetStatisticsChanged(Sender : TObject);
-    procedure OnNewLog(logtype : TLogType; Time : TDateTime; ThreadID : Cardinal; Const sender, logtext : AnsiString);
+    procedure OnNewLog(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : AnsiString);
     procedure OnWalletChanged(Sender : TObject);
     procedure OnNetConnectionsUpdated(Sender : TObject);
     procedure OnNetNodeServersUpdated(Sender : TObject);
@@ -293,7 +295,7 @@ implementation
   {$R *.lfm}
 {$ENDIF}
 
-Uses UFolderHelper, UOpenSSL, UOpenSSLdef, UConst, UTime, UFileStorage,
+Uses UFolderHelper, UOpenSSL, UOpenSSLdef, UTime, UFileStorage,
   UThread, UOpTransaction, UECIES, UFRMPascalCoinWalletConfig,
   UFRMAbout, UFRMOperation, UFRMWalletKeys, UFRMPayloadDecoder, UFRMNodesIp, UFRMMemoText;
 
@@ -829,6 +831,7 @@ end;
 procedure TFRMWallet.FormCreate(Sender: TObject);
 Var i : Integer;
 begin
+  FLastNodesCacheUpdatedTS := Now;
   FBackgroundPanel := Nil;
   FMustProcessWalletChanged := false;
   FMustProcessNetConnectionUpdated := false;
@@ -1303,7 +1306,7 @@ begin
     strings.BeginUpdate;
     Try
       strings.Clear;
-      strings.Add('BlackList Updated: '+DateTimeToStr(now)+' by TID:'+IntToHex(TThread.CurrentThread.ThreadID,8));
+      strings.Add('BlackList Updated: '+DateTimeToStr(now)+' by TID:'+IntToHex(PtrInt(TThread.CurrentThread.ThreadID),8));
       j := 0; n:=0;
       for i := 0 to l.Count - 1 do begin
         P := l[i];
@@ -1352,6 +1355,10 @@ begin
         P := l[i];
         if Not (P^.is_blacklisted) then begin
           s := Format('Server IP:%s:%d',[P^.ip,P^.port]);
+          if (P^.last_connection_by_me>0) then begin
+            s := s + ' [Server] ';
+          end;
+
           if Assigned(P.netConnection) then begin
             If P.last_connection>0 then  s := s+ ' ** ACTIVE **'
             else s := s+' ** TRYING TO CONNECT **';
@@ -1413,7 +1420,7 @@ begin
   end;
 end;
 
-procedure TFRMWallet.OnNewLog(logtype: TLogType; Time : TDateTime; ThreadID : Cardinal; const sender,logtext: AnsiString);
+procedure TFRMWallet.OnNewLog(logtype: TLogType; Time : TDateTime; ThreadID : TThreadID; const sender,logtext: AnsiString);
 Var s : AnsiString;
 begin
   if (logtype=ltdebug) And (Not cbShowDebugLogs.Checked) then exit;
@@ -1427,7 +1434,7 @@ begin
       memoLogs.Lines.EndUpdate;
     end;
   end;
-  memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(ThreadID,8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext);
+  memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(ThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext);
   //
 end;
 
@@ -1463,9 +1470,10 @@ Var nsarr : TNodeServerAddressArray;
   i : Integer;
   s : AnsiString;
 begin
-  //CheckMining;
+  If (FLastNodesCacheUpdatedTS + EncodeTime(0,5,0,0) > Now) then exit; // Prevent continuous saving
+  FLastNodesCacheUpdatedTS := Now;
   // Update node servers Peer Cache
-  nsarr := TNetData.NetData.GetValidNodeServers(true,0);
+  nsarr := TNetData.NetData.NodeServersAddresses.GetValidNodeServers(true,0);
   s := '';
   for i := low(nsarr) to High(nsarr) do begin
     if (s<>'') then s := s+';';

+ 5 - 4
Units/PascalCoin/UConst.pas

@@ -26,6 +26,7 @@ interface
 type
   PtrInt = integer;
   PtrUInt = cardinal;
+  TThreadID = Cardinal;
 {$ENDIF}
 
 Const
@@ -73,10 +74,10 @@ Const
   CT_MaxFutureBlockTimestampOffset = 15;
   CT_MinNodesToCalcNAT = 4;
 
-  CT_MinServersConnected = 3;
+  CT_MinServersConnected = 2;
   CT_MaxServersConnected = 5;
 
-  CT_MaxClientsConnected = 100;
+  CT_MaxClientsConnected = {$IFDEF FPC}140{$ELSE}80{$ENDIF};
 
   CT_BankToDiskEveryNBlocks = {$IFDEF PRODUCTION}100{$ELSE}10{$ENDIF}; // Build 1.5 changed from 500 to 100;
 
@@ -135,9 +136,9 @@ Const
   CT_OpSubtype_ChangeKeySigned            = 71;
   CT_OpSubtype_ChangeAccountInfo          = 81;
 
-  CT_ClientAppVersion : AnsiString = {$IFDEF PRODUCTION}'2.1.4'{$ELSE}{$IFDEF TESTNET}'TESTNET 2.1.4'{$ELSE}{$ENDIF}{$ENDIF};
+  CT_ClientAppVersion : AnsiString = {$IFDEF PRODUCTION}'2.1.5'{$ELSE}{$IFDEF TESTNET}'TESTNET 2.1.5'{$ELSE}{$ENDIF}{$ENDIF};
 
-  CT_Discover_IPs =  'bpascal1.dynamic-dns.net;bpascal2.dynamic-dns.net;pascalcoin2.ddns.net;pascalcoin1.dynamic-dns.net;pascalcoin1.dns1.us';
+  CT_Discover_IPs =  'bpascal1.dynamic-dns.net;bpascal2.dynamic-dns.net;pascalcoin1.dynamic-dns.net;pascalcoin2.dynamic-dns.net;pascalcoin1.dns1.us;pascalcoin2.dns1.us;pascalcoin1.dns2.us;pascalcoin2.dns2.us';
 
   CT_TRUE_FALSE : Array[Boolean] Of AnsiString = ('FALSE','TRUE');
 

+ 4 - 4
Units/PascalCoin/ULog.pas

@@ -20,13 +20,13 @@ unit ULog;
 interface
 
 uses
-  Classes, UThread, SyncObjs;
+  Classes, UThread, SyncObjs, UConst;
 
 type
   TLogType = (ltinfo, ltupdate, lterror, ltdebug);
   TLogTypes = set of TLogType;
 
-  TNewLogEvent = procedure(logtype : TLogType; Time : TDateTime; ThreadID : Cardinal; Const sender, logtext : AnsiString) of object;
+  TNewLogEvent = procedure(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : AnsiString) of object;
 
   TLog = Class;
 
@@ -44,7 +44,7 @@ type
   TLogData = Record
     Logtype : TLogType;
     Time : TDateTime;
-    ThreadID : Cardinal;
+    ThreadID : TThreadID;
     Sender, Logtext : AnsiString
   End;
 
@@ -159,7 +159,7 @@ begin
   try
     if assigned(FFileStream) And (logType in FSaveTypes) then begin
       if TThread.CurrentThread.ThreadID=MainThreadID then tid := ' MAIN:' else tid:=' TID:';
-      s := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',now)+tid+IntToHex(TThread.CurrentThread.ThreadID,8)+' ['+CT_LogType[logtype]+'] <'+sender+'> '+logtext+#13#10;
+      s := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',now)+tid+IntToHex(PtrInt(TThread.CurrentThread.ThreadID),8)+' ['+CT_LogType[logtype]+'] <'+sender+'> '+logtext+#13#10;
       FFileStream.Write(s[1],length(s));
     end;
     if Assigned(FOnInThreadNewLog) then begin

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 521 - 260
Units/PascalCoin/UNetProtocol.pas


+ 1 - 1
Units/PascalCoin/URPC.pas

@@ -2690,7 +2690,7 @@ begin
     GetResultObject.GetAsObject('netstats').GetAsVariant('tservers').Value:=TNetData.NetData.NetStatistics.TotalServersConnections;
     GetResultObject.GetAsObject('netstats').GetAsVariant('breceived').Value:=TNetData.NetData.NetStatistics.BytesReceived;
     GetResultObject.GetAsObject('netstats').GetAsVariant('bsend').Value:=TNetData.NetData.NetStatistics.BytesSend;
-    nsaarr := TNetData.NetData.GetValidNodeServers(true,20);
+    nsaarr := TNetData.NetData.NodeServersAddresses.GetValidNodeServers(true,20);
     for i := low(nsaarr) to High(nsaarr) do begin
       jso := GetResultObject.GetAsArray('nodeservers').GetAsObject(i);
       jso.GetAsVariant('ip').Value := nsaarr[i].ip;

+ 3 - 1
Units/PascalCoin/UTCPIP.pas

@@ -146,7 +146,6 @@ type
   private
     FNetTcpIpServerServer : TNetTcpIpServer;
     FServerSocket: TTCPBlockSocket;
-    FTcpIpSocketsThread : TPCThreadList;
   protected
     procedure BCExecute; override;
   public
@@ -320,6 +319,9 @@ begin
     DebugStep := '';
     FLock.Acquire;
     Try
+      if Not FConnected then begin
+        exit; // Protection inside lock thread to prevent double disconnect sessions
+      end;
       DebugStep := 'disconnecting';
       if Not FConnected then exit;
       DebugStep := 'Closing socket';

+ 8 - 5
Units/PascalCoin/UThread.pas

@@ -43,7 +43,7 @@ Type
     {$IFDEF HIGHLOG}
     procedure Acquire; override;
     procedure Release; override;
-    function TryEnter: Boolean; override;
+    function TryEnter: Boolean;
     {$ENDIF}
     Property CurrentThread : Cardinal read FCurrentThread;
     Property WaitingForCounter : Integer read FWaitingForCounter;
@@ -99,15 +99,19 @@ uses
 { TPCThread }
 
 Var _threads : TPCThreadList;
+    _threadsCount : Integer;
 
 constructor TPCThread.Create(CreateSuspended: Boolean);
 begin
+  inc(_threadsCount);
+  {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Created Thread '+IntToHex(PtrInt(Self),8)+' Total: '+IntToStr(_threadsCount));{$ENDIF}
   inherited Create(CreateSuspended);
-  {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Created Thread '+IntToHex(PtrInt(Self),8));{$ENDIF}
 end;
 
 destructor TPCThread.Destroy;
 begin
+  dec(_threadsCount);
+  {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Destroying Thread '+IntToHex(PtrInt(Self),8)+' Total: '+IntToStr(_threadsCount));{$ENDIF}
   inherited;
 end;
 
@@ -357,7 +361,7 @@ begin
   end;
   logged := false;
   Repeat
-    continue := inherited TryEnter;
+    continue := TryEnter;
     if (Not continue) then begin
       If (not logged) And ((FStartedTimestamp>0) And ((FStartedTimestamp+1000)<GetTickCount)) then begin
         logged := true;
@@ -379,8 +383,6 @@ begin
     FCounterLock.Release;
   end;
   FCurrentThread := TThread.CurrentThread.ThreadID;
-  FStartedTimestamp := GetTickCount;
-  inherited;
 end;
 {$ENDIF}
 
@@ -433,6 +435,7 @@ end;
 
 initialization
   _threads := TPCThreadList.Create('GLOBAL_THREADS');
+  _threadsCount := 0;
 finalization
   FreeAndNil(_threads);
 end.

+ 3 - 3
Units/PascalCoin/upcdaemon.pas

@@ -73,7 +73,7 @@ Type
   TPCDaemonMapper = Class(TCustomDaemonMapper)
   private
     FLog : TLog;
-    procedure OnPascalCoinInThreadLog(logtype : TLogType; Time : TDateTime; AThreadID : Cardinal; Const sender, logtext : AnsiString);
+    procedure OnPascalCoinInThreadLog(logtype : TLogType; Time : TDateTime; AThreadID : TThreadID; Const sender, logtext : AnsiString);
   protected
     Procedure DoOnCreate; override;
     Procedure DoOnDestroy; override;
@@ -323,13 +323,13 @@ end;
 { TPCDaemonMapper }
 
 procedure TPCDaemonMapper.OnPascalCoinInThreadLog(logtype: TLogType;
-  Time: TDateTime; AThreadID: Cardinal; const sender, logtext: AnsiString);
+  Time: TDateTime; AThreadID: TThreadID; const sender, logtext: AnsiString);
 Var s : AnsiString;
 begin
 //  If Not SameText(sender,TPCDaemonThread.ClassName) then exit;
   If logtype in [lterror,ltinfo] then begin
     if AThreadID=MainThreadID then s := ' MAIN:' else s:=' TID:';
-    WriteLn(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(AThreadID,8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext);
+    WriteLn(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(AThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext);
   end;
 end;
 

+ 4 - 4
Units/Utils/UFolderHelper.pas

@@ -57,7 +57,7 @@ uses
   Windows, ShlObj,
   {$DEFINE FILEVERSIONINFO}
 {$ELSE}
-  {$IFnDEF LINUX}
+  {$IFDEF WIN}
   Windows,
   {$DEFINE FILEVERSIONINFO}
   {$ENDIF}
@@ -77,10 +77,10 @@ function SHGetFolderPath; external 'SHFolder.dll' name 'SHGetFolderPathW';
 class function TFolderHelper.GetAppDataFolder: string;
 begin
   {$IFDEF FPC}
-  {$IFDEF LINUX}
-  Result :=GetEnvironmentVariable('HOME');
-  {$ELSE}
+  {$IFDEF WINDOWS}
   Result :=GetEnvironmentVariable('APPDATA');
+  {$ELSE}
+  Result :=GetEnvironmentVariable('HOME');
   {$ENDIF}
   {$ELSE}
   Result := GetFolder(CSIDL_APPDATA); // c:\Users\(User Name)\AppData\Roaming

+ 34 - 29
Units/Utils/UGridUtils.pas

@@ -31,7 +31,7 @@ uses
 Type
   // TAccountsGrid implements a visual integration of TDrawGrid
   // to show accounts information
-  TAccountColumnType = (act_account_number,act_account_key,act_balance,act_updated,act_n_operation,act_updated_state,act_name,act_type);
+  TAccountColumnType = (act_account_number,act_account_key,act_balance,act_updated,act_n_operation,act_updated_state,act_name,act_type,act_saleprice);
   TAccountColumn = Record
     ColumnType : TAccountColumnType;
     width : Integer;
@@ -195,7 +195,7 @@ uses
 { TAccountsGrid }
 
 Const CT_ColumnHeader : Array[TAccountColumnType] Of String =
-  ('Account N.','Key','Balance','Updated','N Oper.','State','Name','Type');
+  ('Account N.','Key','Balance','Updated','N Op.','S','Name','Type','Price');
 
 function TAccountsGrid.AccountNumber(GridRow: Integer): Int64;
 begin
@@ -220,17 +220,21 @@ begin
   FShowAllAccounts := false;
   FAccountsList := TOrderedCardinalList.Create;
   FDrawGrid := Nil;
-  SetLength(FColumns,5);
+  SetLength(FColumns,7);
   FColumns[0].ColumnType := act_account_number;
-  FColumns[0].width := 70;
+  FColumns[0].width := 65;
   FColumns[1].ColumnType := act_name;
-  FColumns[1].width := 110;
+  FColumns[1].width := 80;
   FColumns[2].ColumnType := act_balance;
-  FColumns[2].width := 70;
+  FColumns[2].width := 80;
   FColumns[3].ColumnType := act_n_operation;
-  FColumns[3].width := 50;
-  FColumns[4].ColumnType := act_updated_state;
-  FColumns[4].width := 50;
+  FColumns[3].width := 40;
+  FColumns[4].ColumnType := act_type;
+  FColumns[4].width := 40;
+  FColumns[5].ColumnType := act_saleprice;
+  FColumns[5].width := 45;
+  FColumns[6].ColumnType := act_updated_state;
+  FColumns[6].width := 25;
   FNodeNotifyEvents := TNodeNotifyEvents.Create(Self);
   FNodeNotifyEvents.OnOperationsChanged := OnNodeNewOperation;
 end;
@@ -478,6 +482,26 @@ begin
           Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfRight,tfVerticalCenter,tfSingleLine]);
         End;
         act_updated_state : Begin
+          if TAccountComp.IsAccountBlockedByProtocol(account.account,Node.Bank.BlocksCount) then begin
+            DrawGrid.Canvas.Brush.Color := clRed;
+          end else if ndiff=0 then begin
+            DrawGrid.Canvas.Brush.Color := RGB(255,128,0);
+          end else if ndiff<=8 then begin
+            DrawGrid.Canvas.Brush.Color := FromColorToColor(RGB(253,250,115),ColorToRGB(clGreen),ndiff-1,8-1);
+          end else begin
+            DrawGrid.Canvas.Brush.Color := clGreen;
+          end;
+          DrawGrid.Canvas.Ellipse(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1);
+        End;
+        act_name : Begin
+          s := account.name;
+          Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfLeft,tfVerticalCenter,tfSingleLine]);
+        end;
+        act_type : Begin
+          s := IntToStr(account.account_type);
+          Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfRight,tfVerticalCenter,tfSingleLine]);
+        end;
+        act_saleprice : Begin
           if TAccountComp.IsAccountForSale(account.accountInfo) then begin
             // Show price for sale
             s := TAccountComp.FormatMoney(account.accountInfo.price);
@@ -490,26 +514,7 @@ begin
             end else begin
               DrawGrid.Canvas.Font.Color := clGrayText
             end;
-            Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfRight,tfVerticalCenter,tfSingleLine]);
-          end else begin
-            if TAccountComp.IsAccountBlockedByProtocol(account.account,Node.Bank.BlocksCount) then begin
-              DrawGrid.Canvas.Brush.Color := clRed;
-            end else if ndiff=0 then begin
-              DrawGrid.Canvas.Brush.Color := RGB(255,128,0);
-            end else if ndiff<=8 then begin
-              DrawGrid.Canvas.Brush.Color := FromColorToColor(RGB(253,250,115),ColorToRGB(clGreen),ndiff-1,8-1);
-            end else begin
-              DrawGrid.Canvas.Brush.Color := clGreen;
-            end;
-            DrawGrid.Canvas.Ellipse(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1);
-          end;
-        End;
-        act_name : Begin
-          s := account.name;
-          Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfLeft,tfVerticalCenter,tfSingleLine]);
-        end;
-        act_type : Begin
-          s := IntToStr(account.account_type);
+          end else s := '';
           Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfRight,tfVerticalCenter,tfSingleLine]);
         end;
       else

+ 1 - 1
pascalcoin_daemon.ini

@@ -32,7 +32,7 @@ RPC_SERVERMINER_B58_PUBKEY=
 RPC_SERVERMINER_MAX_CONNECTIONS=1000
 ;RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK : Integer
 ;Max operations included per block
-RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK=5000
+RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK=10000
 ;RPC_SERVERMINER_MAX_ZERO_FEE_OPERATIONS : Integer
 ;Max operations without fee that can be included in a block
 ;Note: Operations with fee>0 are processed first (have more priority)

+ 0 - 1
pascalcoin_daemon.pp

@@ -2,7 +2,6 @@ program pascalcoin_daemon;
 
 {$mode objfpc}{$H+}
 {$define usecthreads}
-{$apptype gui}
 
 uses
   {$IFDEF UNIX}{$IFDEF UseCThreads}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio