Open blackmennewstyle opened 2 years ago
yes
How do i set it?
I tried to follow the example from the file equilibria.json
and i am gettting the error Invalid algorithm cryptonight_gpu
.
I managed to figure out the correct package, i needed to use "cryptonight-hashing": "git+https://github.com/ryo-currency/node-cryptonight-hashing.git",
However, now i'm getting that error:
2022-11-17 14:22:22 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Developer donation (devDonation) is set to 0%, Please consider raising it to 0.2% or higher !!!
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Pool spawned on 16 thread(s)
2022-11-17 14:22:23 [chartsDataCollector] Started
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [daemon] conceal found new hash 0ab987733aaed6d10a689c394efe1fb8bf09536b2b42d3a3c9eeeafdb3b53ac5
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [master] Starting Cryptonote Node.JS pool version v2.0.0
2022-11-17 14:22:23 [api] API started & listening on 0.0.0.0 port 4001
2022-11-17 14:22:23 [api] API started & listening on 0.0.0.0 port 4002 (SSL)
2022-11-17 14:22:23 [api] Error getting last block details: {"code":-32601,"message":"Method not found"}
2022-11-17 14:22:23 [api] Stat collection finished: 80 ms redis, 95 ms daemon
2022-11-17 14:22:23 [api] Error collecting all stats
2022-11-17 14:22:23 [pool] (Thread 3) Clear values for connected workers in redis database.
2022-11-17 14:22:23 [pool] (Thread 3) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:23 [pool] (Thread 3) Clear values for port 3374 in redis database.
2022-11-17 14:22:23 [pool] (Thread 3) Started server listening on port 3374
2022-11-17 14:22:23 [pool] (Thread 3) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:23 [pool] (Thread 3) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 4) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [unlocker] Started
2022-11-17 14:22:24 [pool] (Thread 4) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 4) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 4) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 4) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 4) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 8) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 1) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 13) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [unlocker] No blocks candidates in redis
2022-11-17 14:22:24 [pool] (Thread 5) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 1) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 1) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 1) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 1) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 1) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 8) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 8) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 8) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 8) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 8) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 16) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 5) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 13) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 5) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 5) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 13) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 13) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 5) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 13) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 5) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 13) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [payments] Started
2022-11-17 14:22:24 [pool] (Thread 15) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 11) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 2) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [payments] No workers' balances reached the minimum payment threshold
2022-11-17 14:22:24 [pool] (Thread 16) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 11) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 15) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 16) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 16) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 16) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 16) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 15) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 15) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 15) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 11) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 15) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 11) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 11) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 11) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 12) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 2) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 2) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 2) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 2) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 2) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 12) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 10) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 12) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 12) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 12) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 12) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 10) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 10) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 10) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 10) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 10) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 9) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 9) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 9) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 9) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 9) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 9) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 7) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 6) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 7) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 7) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 7) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 7) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 7) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 6) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 6) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 6) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 6) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 6) Started server listening on port 3375 (SSL)
2022-11-17 14:22:24 [pool] (Thread 14) Clear values for connected workers in redis database.
2022-11-17 14:22:24 [pool] (Thread 14) New conceal block to mine at height 303766 w/ difficulty of 291 (0 transactions)
2022-11-17 14:22:24 [pool] (Thread 14) Clear values for port 3374 in redis database.
2022-11-17 14:22:24 [pool] (Thread 14) Started server listening on port 3374
2022-11-17 14:22:24 [pool] (Thread 14) Clear values for SSL port 3375 in redis database.
2022-11-17 14:22:24 [pool] (Thread 14) Started server listening on port 3375 (SSL)
2022-11-17 14:22:28 [api] Error getting last block details: {"code":-32601,"message":"Method not found"}
2022-11-17 14:22:28 [api] Stat collection finished: 2 ms redis, 3 ms daemon
2022-11-17 14:22:28 [api] Error collecting all stats
2022-11-17 14:22:33 [api] Error getting last block details: {"code":-32601,"message":"Method not found"}
2022-11-17 14:22:33 [api] Stat collection finished: 1 ms redis, 2 ms daemon
2022-11-17 14:22:33 [api] Error collecting all stats
2022-11-17 14:22:38 [api] Error getting last block details: {"code":-32601,"message":"Method not found"}
2022-11-17 14:22:38 [api] Stat collection finished: 1 ms redis, 2 ms daemon
2022-11-17 14:22:38 [api] Error collecting all stats
walletd
is warning about some not found method:
2022-Nov-17 14:20:47.605807 WARNING [PaymentServiceJsonRpcServer] Requested method not found: getbalance
Here my config.json
, just in case:
{
"poolHost": "conceal.cedric-crispin.local",
"coin": "conceal",
"symbol": "CCX",
"coinUnits": 1000000,
"coinDecimalPlaces": 4,
"coinDifficultyTarget": 120,
"blockchainExplorer": "https://explorer.doc.axvultis.tk/block/{id}",
"transactionExplorer": "https://explorer.doc.axvultis.tk/tx/{id}",
"daemonType": "default",
"cnAlgorithm": "cryptonight_gpu",
"cnVariant": 11,
"cnBlobType": 5,
"isRandomX": false,
"includeHeight": false,
"logging": {
"files": {
"level": "info",
"directory": "logs",
"flushInterval": 5
},
"console": {
"level": "info",
"colors": true
}
},
"childPools": null,
"poolServer": {
"enabled": true,
"mergedMining": false,
"clusterForks": "auto",
"poolAddress": "ccx7BRXk4eubahkPNe4mmZ1PYwigPmqGT5ciBWib39aQQjWctY6vzA7RuBBkcoSKxEVBQArdvJi5YhEHRY29sSpS9EiD5c2nW5",
"intAddressPrefix": "25247",
"subAddressPrefix": "22944",
"blockRefreshInterval": 500,
"minerTimeout": 900,
"sslCert": "/etc/apache2/ssl/www.cedric-crispin.local.crt.pem",
"sslKey": "/etc/apache2/ssl/europa.cedric-crispin.com.key.pem",
"sslCA": "/etc/apache2/ssl/www.cedric-crispin.local.pem",
"ports": [
{
"port": 3374,
"difficulty": 5000,
"desc": "No SSL connection"
},
{
"port": 3375,
"difficulty": 5000,
"desc": "SSL connection",
"ssl": true
}
],
"varDiff": {
"minDiff": 100,
"maxDiff": 100000000,
"targetTime": 60,
"retargetTime": 30,
"variancePercent": 30,
"maxJump": 100
},
"paymentId": {
"addressSeparator": ".",
"validation": true,
"validations": ["1,16", "64"],
"ban": true
},
"fixedDiff": {
"enabled": true,
"addressSeparator": "."
},
"shareTrust": {
"enabled": true,
"min": 10,
"stepDown": 3,
"threshold": 10,
"penalty": 30
},
"banning": {
"enabled": true,
"time": 600,
"invalidPercent": 25,
"checkThreshold": 30
},
"slushMining": {
"enabled": false,
"weight": 300,
"blockTime": 60,
"lastBlockCheckRate": 1
}
},
"payments": {
"enabled": true,
"interval": 3600,
"maxAddresses": 50,
"mixin": 15,
"priority": 3,
"transferFee": 25,
"dynamicTransferFee": true,
"minerPayFee": true,
"minPayment": 100000,
"maxPayment": 50000000,
"maxTransactionAmount": null,
"denomination": 100
},
"blockUnlocker": {
"enabled": true,
"interval": 30,
"depth": 18,
"poolFee": 0.1,
"soloFee": 0.1,
"devDonation": 0,
"networkFee": 0,
"useFirstVout": true
},
"api": {
"enabled": true,
"hashrateWindow": 600,
"updateInterval": 5,
"bindIp": "0.0.0.0",
"port": 4001,
"blocks": 30,
"payments": 30,
"password": "!rxxtc9p#27",
"ssl": true,
"sslPort": 4002,
"sslCert": "/etc/apache2/ssl/www.cedric-crispin.local.crt.pem",
"sslKey": "/etc/apache2/ssl/europa.cedric-crispin.com.key.pem",
"sslCA": "/etc/apache2/ssl/www.cedric-crispin.local.pem",
"trustProxyIP": true
},
"daemon": {
"host": "127.0.0.1",
"port": 16600
},
"wallet": {
"host": "127.0.0.1",
"port": 8770
},
"redis": {
"host": "127.0.0.1",
"port": 6379,
"auth": null,
"db": 0,
"cleanupInterval": 15
},
"notifications": {
"emailTemplate": "email_templates/default.txt",
"emailSubject": {
"emailAdded": "Your email was registered",
"workerConnected": "Worker %WORKER_NAME% connected",
"workerTimeout": "Worker %WORKER_NAME% stopped hashing",
"workerBanned": "Worker %WORKER_NAME% banned",
"blockFound": "Block %HEIGHT% found !",
"blockUnlocked": "Block %HEIGHT% unlocked !",
"blockOrphaned": "Block %HEIGHT% orphaned !",
"payment": "We sent you a payment !"
},
"emailMessage": {
"emailAdded": "Your email has been registered to receive pool notifications.",
"workerConnected": "Your worker %WORKER_NAME% for address %MINER% is now connected from ip %IP%.",
"workerTimeout": "Your worker %WORKER_NAME% for address %MINER% has stopped submitting hashes on %LAST_HASH%.",
"workerBanned": "Your worker %WORKER_NAME% for address %MINER% has been banned.",
"blockFound": "Block found at height %HEIGHT% by miner %MINER% on %TIME%. Waiting maturity.",
"blockUnlocked": "Block mined at height %HEIGHT% with %REWARD% and %EFFORT% effort on %TIME%.",
"blockOrphaned": "Block orphaned at height %HEIGHT% :(",
"payment": "A payment of %AMOUNT% has been sent to %ADDRESS% wallet."
},
"telegramMessage": {
"workerConnected": "Your worker _%WORKER_NAME%_ for address _%MINER%_ is now connected from ip _%IP%_.",
"workerTimeout": "Your worker _%WORKER_NAME%_ for address _%MINER%_ has stopped submitting hashes on _%LAST_HASH%_.",
"workerBanned": "Your worker _%WORKER_NAME%_ for address _%MINER%_ has been banned.",
"blockFound": "*Block found at height* _%HEIGHT%_ *by miner* _%MINER%_*! Waiting maturity.*",
"blockUnlocked": "*Block mined at height* _%HEIGHT%_ *with* _%REWARD%_ *and* _%EFFORT%_ *effort on* _%TIME%_*.*",
"blockOrphaned": "*Block orphaned at height* _%HEIGHT%_ *:(*",
"payment": "A payment of _%AMOUNT%_ has been sent."
}
},
"email": {
"enabled": false,
"fromAddress": "your@email.com",
"transport": "sendmail",
"sendmail": {
"path": "/usr/sbin/sendmail"
},
"smtp": {
"host": "smtp.example.com",
"port": 587,
"secure": false,
"auth": {
"user": "username",
"pass": "password"
},
"tls": {
"rejectUnauthorized": false
}
},
"mailgun": {
"key": "your-private-key",
"domain": "mg.yourdomain"
}
},
"telegram": {
"enabled": false,
"botName": "",
"token": "",
"channel": "",
"channelStats": {
"enabled": false,
"interval": 30
},
"botCommands": {
"stats": "/stats",
"enable": "/enable",
"disable": "/disable"
}
},
"monitoring": {
"daemon": {
"checkInterval": 60,
"rpcMethod": "getblockcount"
},
"wallet": {
"checkInterval": 60,
"rpcMethod": "getbalance"
}
},
"prices": {
"source": "tradeogre",
"currency": "USD"
},
"charts": {
"pool": {
"hashrate": {
"enabled": false,
"updateInterval": 60,
"stepInterval": 1800,
"maximumPeriod": 86400
},
"miners": {
"enabled": false,
"updateInterval": 60,
"stepInterval": 1800,
"maximumPeriod": 86400
},
"workers": {
"enabled": false,
"updateInterval": 60,
"stepInterval": 1800,
"maximumPeriod": 86400
},
"difficulty": {
"enabled": false,
"updateInterval": 1800,
"stepInterval": 10800,
"maximumPeriod": 604800
},
"price": {
"enabled": false,
"updateInterval": 1800,
"stepInterval": 10800,
"maximumPeriod": 604800
},
"profit": {
"enabled": false,
"updateInterval": 1800,
"stepInterval": 10800,
"maximumPeriod": 604800
}
},
"user": {
"hashrate": {
"enabled": false,
"updateInterval": 180,
"stepInterval": 1800,
"maximumPeriod": 86400
},
"worker_hashrate": {
"enabled": false,
"updateInterval": 60,
"stepInterval": 60,
"maximumPeriod": 86400
},
"payments": {
"enabled": false
}
},
"blocks": {
"enabled": false,
"days": 30
}
}
}
I managed to fix all the issue above:
Conceal has different RPCmehod
name for getbalance: getBalance
and getblock: getblockbyheight
.
However, now i'm facing a different error message:
SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at /home/ceedii/cryptonote-nodejs-pool/lib/api.js:620:21
at /home/ceedii/cryptonote-nodejs-pool/lib/apiInterfaces.js:66:3
at IncomingMessage.<anonymous> (/home/ceedii/cryptonote-nodejs-pool/lib/apiInterfaces.js:41:5)
at IncomingMessage.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
2022-11-18 01:34:46 [master] API died, spawning replacement...
I got it all fixed and working.
In the config.json
just change "daemonType": "bytecoin",
, "intAddressPrefix": "31444",
, "rpcMethod": "getBalance"
and also "useFirstVout": false
. Remove "subAddressPrefix": "22944",
2022-11-18 02:14:00 [pool] (Thread 16) New conceal block to mine at height 304129 w/ difficulty of 346 (0 transactions)
2022-11-18 02:14:03 [api] Stat collection finished: 1 ms redis, 2 ms daemon
2022-11-18 02:14:03 [api] Broadcasting to 0 visitors and 0 address lookups
2022-11-18 02:14:03 [api] Stat collection broadcastLiveStats: 3 ms
2022-11-18 02:14:28 [unlocker] No blocks candidates in redis
2022-11-18 02:14:28 [api] Stat collection finished: 2 ms redis, 3 ms daemon
2022-11-18 02:14:28 [api] Broadcasting to 0 visitors and 0 address lookups
2022-11-18 02:14:28 [api] Stat collection broadcastLiveStats: 4 ms
2022-11-18 02:14:33 [api] Stat collection finished: 1 ms redis, 1 ms daemon
2022-11-18 02:14:33 [api] Broadcasting to 0 visitors and 0 address lookups
2022-11-18 02:14:33 [api] Stat collection broadcastLiveStats: 2 ms
Is CryptoNightGPU supported?