Hello everyone,
My Armory setup is playing up, and I was not able to figure it out in the last days.
I'll try to post as much hopefully relevant info as possible, please bear with me! :-)
I am running a bitcoin core node (non pruned) and ArmoryDB on a remote server, and connect to it via local Armory GUI (0.96.5-beta) (over local, wired ethernet).
This setup basically stayed the same for a long time. The server is running debian 12 bookworm, with 32 GB memory, a current i3-13100 (4 core 8 threads 4.5 Ghz boost), the bitcoin blockchain and armory DB are on a SATA HDD. The client is a debian 10 buster, which I only use for Armory.
Sometimes, maybe every twentieth try, I start Armory and within a second it is online.
Half of the time only the little splashscreen opens, and crashes after a few minutes. The other half of the times the Armory gui opens, but stays offline.
The server is completely idle, especially there's basically no CPU load and only little memory usage of ArmoryDB and bitcoin-core (checked with top). The disks are basically idle too, with only little usage from unrelated tasks (checked with iotop).
On the server, I kept an eye on the nginx and ArmoryDB logs:
/var/log/nginx/access.log192.168.0.100 - - [07/Jun/2024:12:40:38 +0200] "POST / HTTP/1.1" 200 44 "-" "-"
192.168.0.100 - - [07/Jun/2024:12:40:38 +0200] "POST / HTTP/1.1" 200 48 "-" "-"
/home/bitcoind/.armory/dbLog.txt-INFO - 12:40:38: (BDM_Server.cpp:1121) registered bdv: add89c28f658da1b1d55
-INFO - 12:45:38: (BDM_Server.cpp:1150) unregistered bdv: add89c28f658da1b1d55
To me, this looks like Armory client always manages to connect to nginx and to ArmoryDB.
The unstable behavior might have started when I played around with importing several wallets and several individual privatekeys.
After importing the first wallet, I remembered rescanning takes some time. I restarted Armory Client, it came back up offline, and I imported some more
wallets in one go before leaving it catching up over night.
The next day I tried to send a tx from one of the imported private keys with many small outputs to one of the imported wallets.
Sending that tx froze Armory, and I think after that my problems began.
Before that, I didn't use Armory much lately, bitcoin-core and ArmoryDB were running 24/7 as services though.
To remove possible factors, I then moved the armorydb folder and let it recreate it over night. It was 4.7GB before, and is 4.1GB now.
Also, I removed all wallets there were, stopping and restarting bitcoin-core, nginx and ArmoryDB several times on the way.
I run the Armory client with
python /opt/BitcoinArmory/ArmoryQt.py --debug --armorydb-ip=192.168.0.1 --armorydb-port=9002
Full (terminal) log when Armory came up online instantly:(INFO) ArmoryUtils.py:1164 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:689 - Executing popen: free -m
(INFO) ArmoryUtils.py:689 - Executing popen: ['cat', '/proc/cpuinfo']
(ERROR) ArmoryUtils.py:1262 - Error getting system details:
Traceback (most recent call last):
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1260, in
SystemSpecs = GetSystemDetails()
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1255, in GetSystemDetails
out.HddAvailB = getHddSize(BTC_HOME_DIR) / (1024**3)
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1252, in getHddSize
s = os.statvfs(adir)
OSError: [Errno 2] No such file or directory: '/home/user/.bitcoin'
(ERROR) ArmoryUtils.py:1263 - Skipping.
(INFO) ArmoryUtils.py:1281 -
(INFO) ArmoryUtils.py:1282 -
(INFO) ArmoryUtils.py:1283 -
(INFO) ArmoryUtils.py:1284 - ************************************************************
(INFO) ArmoryUtils.py:1285 - Invoked: /opt/BitcoinArmory/ArmoryQt.py --debug --armorydb-ip=192.168.0.1 --armorydb-port=9002
(INFO) ArmoryUtils.py:1286 - ************************************************************
(INFO) ArmoryUtils.py:1287 - Loading Armory Engine:
(INFO) ArmoryUtils.py:1288 - Armory Version : 0.96.5
(INFO) ArmoryUtils.py:1289 - Armory Build: : None
(INFO) ArmoryUtils.py:1290 - PyBtcWallet Version : 1.35
(INFO) ArmoryUtils.py:1291 - Detected Operating system: Linux
(INFO) ArmoryUtils.py:1292 - OS Variant : debian-10.13-
(INFO) ArmoryUtils.py:1293 - User home-directory : /home/user
(INFO) ArmoryUtils.py:1294 - Satoshi BTC directory : /home/user/.bitcoin
(INFO) ArmoryUtils.py:1295 - Armory home dir : /home/user/.armory/
(INFO) ArmoryUtils.py:1296 - Detected System Specs :
(INFO) ArmoryUtils.py:1297 - Total Available RAM : -1.00 GB
(INFO) ArmoryUtils.py:1298 - CPU ID string : Unknown
(INFO) ArmoryUtils.py:1299 - Number of CPU cores : -1 cores
(INFO) ArmoryUtils.py:1300 - System is 64-bit : Unknown
(INFO) ArmoryUtils.py:1301 - Preferred Encoding : UTF-8
(INFO) ArmoryUtils.py:1302 - Machine Arch : x86_64
(INFO) ArmoryUtils.py:1303 - Available HDD (ARM) : -1 GB
(INFO) ArmoryUtils.py:1304 - Available HDD (BTC) : -1 GB
(INFO) ArmoryUtils.py:1305 -
(INFO) ArmoryUtils.py:1306 - Network Name: Main Network
(INFO) ArmoryUtils.py:1307 - Satoshi Port: 8333
(INFO) ArmoryUtils.py:1308 - Do wlt check: True
(INFO) ArmoryUtils.py:1309 - Named options/arguments to armoryengine.py:
(INFO) ArmoryUtils.py:1311 - force_segwit : False
(INFO) ArmoryUtils.py:1311 - nettimeout : 2
(INFO) ArmoryUtils.py:1311 - rescan : False
(INFO) ArmoryUtils.py:1311 - force_fcgi : False
(INFO) ArmoryUtils.py:1311 - ignoreAllZC : False
(INFO) ArmoryUtils.py:1311 - rescanBalance : False
(INFO) ArmoryUtils.py:1311 - disableModules : False
(INFO) ArmoryUtils.py:1311 - port : None
(INFO) ArmoryUtils.py:1311 - interport : 8223
(INFO) ArmoryUtils.py:1311 - coverageOutputDir: None
(INFO) ArmoryUtils.py:1311 - forceWalletCheck: False
(INFO) ArmoryUtils.py:1311 - regtest : False
(INFO) ArmoryUtils.py:1311 - rebuild : False
(INFO) ArmoryUtils.py:1311 - thread_count : -1
(INFO) ArmoryUtils.py:1311 - datadir : DEFAULT
(INFO) ArmoryUtils.py:1311 - clearMempool : False
(INFO) ArmoryUtils.py:1311 - offline : False
(INFO) ArmoryUtils.py:1311 - armoryDBDir : DEFAULT
(INFO) ArmoryUtils.py:1311 - armorydb_port : 9002
(INFO) ArmoryUtils.py:1311 - satoshiPort : DEFAULT
(INFO) ArmoryUtils.py:1311 - disableConfPermis: False
(INFO) ArmoryUtils.py:1311 - useTorSettings : False
(INFO) ArmoryUtils.py:1311 - netlog : False
(INFO) ArmoryUtils.py:1311 - keypool : 100
(INFO) ArmoryUtils.py:1311 - coverageInclude : None
(INFO) ArmoryUtils.py:1311 - forceOnline : False
(INFO) ArmoryUtils.py:1311 - disableWalletCheck: False
(INFO) ArmoryUtils.py:1311 - redownload : False
(INFO) ArmoryUtils.py:1311 - rpcBindAddr : 127.0.0.1
(INFO) ArmoryUtils.py:1311 - armorydb_ip : 192.168.0.1
(INFO) ArmoryUtils.py:1311 - multisigFile : DEFAULT
(INFO) ArmoryUtils.py:1311 - ram_usage : -1
(INFO) ArmoryUtils.py:1311 - ignoreZC : False
(INFO) ArmoryUtils.py:1311 - logDisable : False
(INFO) ArmoryUtils.py:1311 - settingsPath : /home/user/.armory/ArmorySettings.txt
(INFO) ArmoryUtils.py:1311 - language : en
(INFO) ArmoryUtils.py:1311 - db_type : DB_FULL
(INFO) ArmoryUtils.py:1311 - doDebug : True
(INFO) ArmoryUtils.py:1311 - enableDetSign : True
(INFO) ArmoryUtils.py:1311 - mtdebug : False
(INFO) ArmoryUtils.py:1311 - testnet : False
(INFO) ArmoryUtils.py:1311 - rpcport : DEFAULT
(INFO) ArmoryUtils.py:1311 - satoshiHome : DEFAULT
(INFO) ArmoryUtils.py:1311 - satoshiRpcport : DEFAULT
(INFO) ArmoryUtils.py:1311 - logFile : /home/user/.armory/ArmoryQt.py.log.txt
(INFO) ArmoryUtils.py:1311 - verbosity : None
(INFO) ArmoryUtils.py:1312 - Other arguments:
(INFO) ArmoryUtils.py:1315 - ************************************************************
(INFO) ArmoryUtils.py:1720 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(ERROR) ArmoryUtils.py:3735 - Unsupported language specified. Defaulting to English (en)
(INFO) ArmoryUtils.py:3738 - Using Language: en
(INFO) BDM.py:353 - Using the asynchronous/multi-threaded BlockDataManager.
(INFO) BDM.py:354 - Blockchain operations will happen in the background.
(INFO) BDM.py:355 - Devs: check TheBDM.getState() before asking for data.
(INFO) BDM.py:356 - Registering addresses during rescans will queue them for
(INFO) BDM.py:357 - inclusion after the current scan is completed.
/opt/BitcoinArmory/armoryengine/Transaction.py:3126: SyntaxWarning: import * only allowed at module level
def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
(DEBUG) ArmoryQt.py:5966 - Checking for already open socket...
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(INFO) ArmoryQt.py:2060 - loadWalletsAndSettings
(INFO) ArmoryQt.py:2120 - Loading wallets...
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/databases is a directory.
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/wallets is a directory.
(INFO) ArmoryQt.py:2185 - Number of wallets read in: 0
(INFO) ArmoryQt.py:2195 - Loading Multisig Lockboxes
(INFO) ArmoryQt.py:1763 - acquiring process mutex...
(DEBUG) ArmoryQt.py:1286 - setupSystemTray
(INFO) ArmoryQt.py:1395 - setupUriRegistration
(INFO) ArmoryUtils.py:689 - Executing popen: gconftool-2 --get /desktop/gnome/url-handlers/bitcoin/command
(INFO) ArmoryUtils.py:689 - Executing popen: xdg-mime query default x-scheme-handler/bitcoin
(DEBUG) ArmoryQt.py:3742 - setupDashboard
(INFO) ArmoryQt.py:566 - Usermode: Expert
(INFO) ArmoryQt.py:1698 - Changing usermode:
(INFO) ArmoryQt.py:1699 - From: Expert
(INFO) ArmoryQt.py:1707 - To: Expert
(INFO) ArmoryQt.py:1836 - startBitcoindIfNecessary
(WARNING) ArmoryQt.py:1826 - DB is already running
(INFO) ArmoryQt.py:1923 - Setting netmode: 1
(INFO) ArmoryQt.py:1905 - loadBlockchainIfNecessary
(INFO) ArmoryQt.py:1923 - Setting netmode: 1
(INFO) ArmoryQt.py:4672 - Dashboard switched to "Scanning" mode
(INFO) ArmoryQt.py:4672 - Dashboard switched to "Scanning" mode
BDM is ready!
BDM is ready!
(DEBUG) ArmoryQt.py:4923 - Running finishLoadBlockchain
Here it hang a while at the splashscreen, then closed itself:(INFO) ArmoryUtils.py:1164 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:689 - Executing popen: free -m
(INFO) ArmoryUtils.py:689 - Executing popen: ['cat', '/proc/cpuinfo']
(ERROR) ArmoryUtils.py:1262 - Error getting system details:
Traceback (most recent call last):
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1260, in
SystemSpecs = GetSystemDetails()
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1255, in GetSystemDetails
out.HddAvailB = getHddSize(BTC_HOME_DIR) / (1024**3)
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1252, in getHddSize
s = os.statvfs(adir)
OSError: [Errno 2] No such file or directory: '/home/user/.bitcoin'
(ERROR) ArmoryUtils.py:1263 - Skipping.
(INFO) ArmoryUtils.py:1281 -
(INFO) ArmoryUtils.py:1282 -
(INFO) ArmoryUtils.py:1283 -
(INFO) ArmoryUtils.py:1284 - ************************************************************
(INFO) ArmoryUtils.py:1315 - ************************************************************
(INFO) ArmoryUtils.py:1720 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(ERROR) ArmoryUtils.py:3735 - Unsupported language specified. Defaulting to English (en)
(INFO) ArmoryUtils.py:3738 - Using Language: en
(INFO) BDM.py:353 - Using the asynchronous/multi-threaded BlockDataManager.
(INFO) BDM.py:354 - Blockchain operations will happen in the background.
(INFO) BDM.py:355 - Devs: check TheBDM.getState() before asking for data.
(INFO) BDM.py:356 - Registering addresses during rescans will queue them for
(INFO) BDM.py:357 - inclusion after the current scan is completed.
/opt/BitcoinArmory/armoryengine/Transaction.py:3126: SyntaxWarning: import * only allowed at module level
def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
(DEBUG) ArmoryQt.py:5966 - Checking for already open socket...
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(INFO) ArmoryQt.py:2060 - loadWalletsAndSettings
(INFO) ArmoryQt.py:2120 - Loading wallets...
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/databases is a directory.
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/wallets is a directory.
(INFO) ArmoryQt.py:2185 - Number of wallets read in: 0
(INFO) ArmoryQt.py:2195 - Loading Multisig Lockboxes
(INFO) ArmoryQt.py:1763 - acquiring process mutex...
(DEBUG) ArmoryQt.py:1286 - setupSystemTray
(INFO) ArmoryQt.py:1395 - setupUriRegistration
(INFO) ArmoryUtils.py:689 - Executing popen: gconftool-2 --get /desktop/gnome/url-handlers/bitcoin/command
(INFO) ArmoryUtils.py:689 - Executing popen: xdg-mime query default x-scheme-handler/bitcoin
(DEBUG) ArmoryQt.py:3742 - setupDashboard
(INFO) ArmoryQt.py:566 - Usermode: Expert
(INFO) ArmoryQt.py:1698 - Changing usermode:
(INFO) ArmoryQt.py:1699 - From: Expert
(INFO) ArmoryQt.py:1707 - To: Expert
(INFO) ArmoryQt.py:1836 - startBitcoindIfNecessary
(WARNING) ArmoryQt.py:1826 - DB is already running
(INFO) ArmoryQt.py:1923 - Setting netmode: 1
(ERROR) Traceback (most recent call last):
File "/opt/BitcoinArmory/ArmoryQt.py", line 5999, in
form = ArmoryMainWindow(splashScreen=SPLASH)
File "/opt/BitcoinArmory/ArmoryQt.py", line 685, in __init__
self.startBlockchainProcessingInitialization()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5761, in startBlockchainProcessingInitialization
self.completeBlockchainProcessingInitialization()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5785, in completeBlockchainProcessingInitialization
self.setupLedgerViews()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5834, in setupLedgerViews
self.lockboxLedgModel.setLedgerDelegate(TheBDM.bdv().getLedgerDelegateForLockboxes())
File "/opt/BitcoinArmory/CppBlockUtils.py", line 2797, in getLedgerDelegateForLockboxes
return _CppBlockUtils.BlockDataViewer_getLedgerDelegateForLockboxes(self)
RuntimeError: failed to connect socket
Traceback (most recent call last):
File "/opt/BitcoinArmory/ArmoryQt.py", line 5999, in
form = ArmoryMainWindow(splashScreen=SPLASH)
File "/opt/BitcoinArmory/ArmoryQt.py", line 685, in __init__
self.startBlockchainProcessingInitialization()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5761, in startBlockchainProcessingInitialization
self.completeBlockchainProcessingInitialization()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5785, in completeBlockchainProcessingInitialization
self.setupLedgerViews()
File "/opt/BitcoinArmory/ArmoryQt.py", line 5834, in setupLedgerViews
self.lockboxLedgModel.setLedgerDelegate(TheBDM.bdv().getLedgerDelegateForLockboxes())
File "/opt/BitcoinArmory/CppBlockUtils.py", line 2797, in getLedgerDelegateForLockboxes
return _CppBlockUtils.BlockDataViewer_getLedgerDelegateForLockboxes(self)
RuntimeError: failed to connect socket
and finally, here the Armory GUI opened, but stayed offline. please notice the last line, where the GUI got info about a new block too:(INFO) ArmoryUtils.py:1164 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:689 - Executing popen: free -m
(INFO) ArmoryUtils.py:689 - Executing popen: ['cat', '/proc/cpuinfo']
(ERROR) ArmoryUtils.py:1262 - Error getting system details:
Traceback (most recent call last):
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1260, in
SystemSpecs = GetSystemDetails()
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1255, in GetSystemDetails
out.HddAvailB = getHddSize(BTC_HOME_DIR) / (1024**3)
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 1252, in getHddSize
s = os.statvfs(adir)
OSError: [Errno 2] No such file or directory: '/home/user/.bitcoin'
(ERROR) ArmoryUtils.py:1263 - Skipping.
(INFO) ArmoryUtils.py:1281 -
(INFO) ArmoryUtils.py:1282 -
(INFO) ArmoryUtils.py:1283 -
(INFO) ArmoryUtils.py:1284 - ************************************************************
(INFO) ArmoryUtils.py:1315 - ************************************************************
(INFO) ArmoryUtils.py:1720 - C++ block utilities loaded successfully
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(ERROR) ArmoryUtils.py:3735 - Unsupported language specified. Defaulting to English (en)
(INFO) ArmoryUtils.py:3738 - Using Language: en
(INFO) BDM.py:353 - Using the asynchronous/multi-threaded BlockDataManager.
(INFO) BDM.py:354 - Blockchain operations will happen in the background.
(INFO) BDM.py:355 - Devs: check TheBDM.getState() before asking for data.
(INFO) BDM.py:356 - Registering addresses during rescans will queue them for
(INFO) BDM.py:357 - inclusion after the current scan is completed.
/opt/BitcoinArmory/armoryengine/Transaction.py:3126: SyntaxWarning: import * only allowed at module level
def PyCreateAndSignTx_old(srcTxOuts, dstAddrsVals):
(DEBUG) ArmoryQt.py:5966 - Checking for already open socket...
(INFO) ArmoryUtils.py:3578 - Using settings file: /home/user/.armory/ArmorySettings.txt
(INFO) ArmoryQt.py:2060 - loadWalletsAndSettings
(INFO) ArmoryQt.py:2120 - Loading wallets...
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/databases is a directory.
(DEBUG) ArmoryUtils.py:1134 - /home/user/.armory/wallets is a directory.
(INFO) ArmoryQt.py:2185 - Number of wallets read in: 0
(INFO) ArmoryQt.py:2195 - Loading Multisig Lockboxes
(INFO) ArmoryQt.py:1763 - acquiring process mutex...
(DEBUG) ArmoryQt.py:1286 - setupSystemTray
(INFO) ArmoryQt.py:1395 - setupUriRegistration
(INFO) ArmoryUtils.py:689 - Executing popen: gconftool-2 --get /desktop/gnome/url-handlers/bitcoin/command
(INFO) ArmoryUtils.py:689 - Executing popen: xdg-mime query default x-scheme-handler/bitcoin
(DEBUG) ArmoryQt.py:3742 - setupDashboard
(INFO) ArmoryQt.py:566 - Usermode: Expert
(INFO) ArmoryQt.py:1698 - Changing usermode:
(INFO) ArmoryQt.py:1699 - From: Expert
(INFO) ArmoryQt.py:1707 - To: Expert
(INFO) ArmoryQt.py:1836 - startBitcoindIfNecessary
(WARNING) ArmoryQt.py:1826 - DB is already running
(INFO) ArmoryQt.py:1923 - Setting netmode: 1
(INFO) ArmoryQt.py:1905 - loadBlockchainIfNecessary
(INFO) ArmoryQt.py:1923 - Setting netmode: 1
(INFO) ArmoryQt.py:4672 - Dashboard switched to "Scanning" mode
(INFO) ArmoryQt.py:4672 - Dashboard switched to "Scanning" mode
BDM is ready!
BDM is ready!
(ERROR) Traceback (most recent call last):
File "/opt/BitcoinArmory/ui/QtExecuteSignal.py", line 31, in methodSlot
_callable(*args)
File "/opt/BitcoinArmory/ArmoryQt.py", line 4909, in handleCppNotification
self.nodeStatus = TheBDM.bdv().getNodeStatus()
File "/opt/BitcoinArmory/CppBlockUtils.py", line 2836, in getNodeStatus
return _CppBlockUtils.BlockDataViewer_getNodeStatus(self)
RuntimeError: failed to connect socket
Traceback (most recent call last):
File "/opt/BitcoinArmory/ui/QtExecuteSignal.py", line 31, in methodSlot
_callable(*args)
File "/opt/BitcoinArmory/ArmoryQt.py", line 4909, in handleCppNotification
self.nodeStatus = TheBDM.bdv().getNodeStatus()
File "/opt/BitcoinArmory/CppBlockUtils.py", line 2836, in getNodeStatus
return _CppBlockUtils.BlockDataViewer_getNodeStatus(self)
RuntimeError: failed to connect socket
^CError in sys.excepthook:
Traceback (most recent call last):
File "/opt/BitcoinArmory/armoryengine/ArmoryUtils.py", line 992, in logexcept_override
def logexcept_override(_type, value, tback):
KeyboardInterrupt
Original exception was:
Traceback (most recent call last):
File "/opt/BitcoinArmory/ui/QtExecuteSignal.py", line 31, in methodSlot
_callable(*args)
File "/opt/BitcoinArmory/ArmoryQt.py", line 4909, in handleCppNotification
self.nodeStatus = TheBDM.bdv().getNodeStatus()
File "/opt/BitcoinArmory/CppBlockUtils.py", line 2836, in getNodeStatus
return _CppBlockUtils.BlockDataViewer_getNodeStatus(self)
RuntimeError: failed to connect socket
New Block: 846880
My big question is: if "failed to connect socket" is the fundamental problem, what "socket" is that?
If not the client connection to nginx nor the nginx connection to ArmoryDB?
Thank you for any hints!
Hattori