|
|
|
@ -89,7 +89,7 @@ string AccountFromValue(const Value& value)
@@ -89,7 +89,7 @@ string AccountFromValue(const Value& value)
|
|
|
|
|
Value getnewaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -168,7 +168,7 @@ CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
@@ -168,7 +168,7 @@ CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
|
|
|
|
|
Value getaccountaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -200,7 +200,7 @@ Value getaccountaddress(const Array& params, bool fHelp)
@@ -200,7 +200,7 @@ Value getaccountaddress(const Array& params, bool fHelp)
|
|
|
|
|
Value getrawchangeaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -235,7 +235,7 @@ Value getrawchangeaddress(const Array& params, bool fHelp)
@@ -235,7 +235,7 @@ Value getrawchangeaddress(const Array& params, bool fHelp)
|
|
|
|
|
Value setaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -281,7 +281,7 @@ Value setaccount(const Array& params, bool fHelp)
@@ -281,7 +281,7 @@ Value setaccount(const Array& params, bool fHelp)
|
|
|
|
|
Value getaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -313,7 +313,7 @@ Value getaccount(const Array& params, bool fHelp)
@@ -313,7 +313,7 @@ Value getaccount(const Array& params, bool fHelp)
|
|
|
|
|
Value getaddressesbyaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -381,7 +381,7 @@ static void SendMoney(const CTxDestination &address, CAmount nValue, bool fSubtr
@@ -381,7 +381,7 @@ static void SendMoney(const CTxDestination &address, CAmount nValue, bool fSubtr
|
|
|
|
|
Value sendtoaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 2 || params.size() > 5) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -437,7 +437,7 @@ Value sendtoaddress(const Array& params, bool fHelp)
@@ -437,7 +437,7 @@ Value sendtoaddress(const Array& params, bool fHelp)
|
|
|
|
|
Value listaddressgroupings(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -489,7 +489,7 @@ Value listaddressgroupings(const Array& params, bool fHelp)
@@ -489,7 +489,7 @@ Value listaddressgroupings(const Array& params, bool fHelp)
|
|
|
|
|
Value signmessage(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -545,7 +545,7 @@ Value signmessage(const Array& params, bool fHelp)
@@ -545,7 +545,7 @@ Value signmessage(const Array& params, bool fHelp)
|
|
|
|
|
Value getreceivedbyaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -603,7 +603,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp)
@@ -603,7 +603,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp)
|
|
|
|
|
Value getreceivedbyaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -692,7 +692,7 @@ CAmount GetAccountBalance(const string& strAccount, int nMinDepth, const isminef
@@ -692,7 +692,7 @@ CAmount GetAccountBalance(const string& strAccount, int nMinDepth, const isminef
|
|
|
|
|
Value getbalance(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -767,7 +767,7 @@ Value getbalance(const Array& params, bool fHelp)
@@ -767,7 +767,7 @@ Value getbalance(const Array& params, bool fHelp)
|
|
|
|
|
Value getunconfirmedbalance(const Array ¶ms, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 0) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -783,7 +783,7 @@ Value getunconfirmedbalance(const Array ¶ms, bool fHelp)
@@ -783,7 +783,7 @@ Value getunconfirmedbalance(const Array ¶ms, bool fHelp)
|
|
|
|
|
Value movecmd(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 3 || params.size() > 5) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -853,7 +853,7 @@ Value movecmd(const Array& params, bool fHelp)
@@ -853,7 +853,7 @@ Value movecmd(const Array& params, bool fHelp)
|
|
|
|
|
Value sendfrom(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 3 || params.size() > 6) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -916,7 +916,7 @@ Value sendfrom(const Array& params, bool fHelp)
@@ -916,7 +916,7 @@ Value sendfrom(const Array& params, bool fHelp)
|
|
|
|
|
Value sendmany(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 2 || params.size() > 5) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -991,9 +991,11 @@ Value sendmany(const Array& params, bool fHelp)
@@ -991,9 +991,11 @@ Value sendmany(const Array& params, bool fHelp)
|
|
|
|
|
totalAmount += nAmount; |
|
|
|
|
|
|
|
|
|
bool fSubtractFeeFromAmount = false; |
|
|
|
|
BOOST_FOREACH(const Value& addr, subtractFeeFromAmount) |
|
|
|
|
if (addr.get_str() == s.name_) |
|
|
|
|
for (unsigned int idx = 0; idx < subtractFeeFromAmount.size(); idx++) { |
|
|
|
|
const Value& addr = subtractFeeFromAmount[idx]; |
|
|
|
|
if (addr.get_str() == name_) |
|
|
|
|
fSubtractFeeFromAmount = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CRecipient recipient = {scriptPubKey, nAmount, fSubtractFeeFromAmount}; |
|
|
|
|
vecSend.push_back(recipient); |
|
|
|
@ -1026,7 +1028,7 @@ extern CScript _createmultisig_redeemScript(const Array& params);
@@ -1026,7 +1028,7 @@ extern CScript _createmultisig_redeemScript(const Array& params);
|
|
|
|
|
Value addmultisigaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 2 || params.size() > 3) |
|
|
|
|
{ |
|
|
|
@ -1207,7 +1209,7 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -1207,7 +1209,7 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
Value listreceivedbyaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1244,7 +1246,7 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
@@ -1244,7 +1246,7 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
|
|
|
|
|
Value listreceivedbyaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1374,7 +1376,7 @@ void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Ar
@@ -1374,7 +1376,7 @@ void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Ar
|
|
|
|
|
Value listtransactions(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 4) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1494,7 +1496,7 @@ Value listtransactions(const Array& params, bool fHelp)
@@ -1494,7 +1496,7 @@ Value listtransactions(const Array& params, bool fHelp)
|
|
|
|
|
Value listaccounts(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1574,7 +1576,7 @@ Value listaccounts(const Array& params, bool fHelp)
@@ -1574,7 +1576,7 @@ Value listaccounts(const Array& params, bool fHelp)
|
|
|
|
|
Value listsinceblock(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1665,7 +1667,7 @@ Value listsinceblock(const Array& params, bool fHelp)
@@ -1665,7 +1667,7 @@ Value listsinceblock(const Array& params, bool fHelp)
|
|
|
|
|
Value gettransaction(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1743,7 +1745,7 @@ Value gettransaction(const Array& params, bool fHelp)
@@ -1743,7 +1745,7 @@ Value gettransaction(const Array& params, bool fHelp)
|
|
|
|
|
Value backupwallet(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1769,7 +1771,7 @@ Value backupwallet(const Array& params, bool fHelp)
@@ -1769,7 +1771,7 @@ Value backupwallet(const Array& params, bool fHelp)
|
|
|
|
|
Value keypoolrefill(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1813,7 +1815,7 @@ static void LockWallet(CWallet* pWallet)
@@ -1813,7 +1815,7 @@ static void LockWallet(CWallet* pWallet)
|
|
|
|
|
Value walletpassphrase(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1873,7 +1875,7 @@ Value walletpassphrase(const Array& params, bool fHelp)
@@ -1873,7 +1875,7 @@ Value walletpassphrase(const Array& params, bool fHelp)
|
|
|
|
|
Value walletpassphrasechange(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1919,7 +1921,7 @@ Value walletpassphrasechange(const Array& params, bool fHelp)
@@ -1919,7 +1921,7 @@ Value walletpassphrasechange(const Array& params, bool fHelp)
|
|
|
|
|
Value walletlock(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (pwalletMain->IsCrypted() && (fHelp || params.size() != 0)) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -1958,7 +1960,7 @@ Value walletlock(const Array& params, bool fHelp)
@@ -1958,7 +1960,7 @@ Value walletlock(const Array& params, bool fHelp)
|
|
|
|
|
Value encryptwallet(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2015,7 +2017,7 @@ Value encryptwallet(const Array& params, bool fHelp)
@@ -2015,7 +2017,7 @@ Value encryptwallet(const Array& params, bool fHelp)
|
|
|
|
|
Value lockunspent(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2099,7 +2101,7 @@ Value lockunspent(const Array& params, bool fHelp)
@@ -2099,7 +2101,7 @@ Value lockunspent(const Array& params, bool fHelp)
|
|
|
|
|
Value listlockunspent(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 0) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2148,7 +2150,7 @@ Value listlockunspent(const Array& params, bool fHelp)
@@ -2148,7 +2150,7 @@ Value listlockunspent(const Array& params, bool fHelp)
|
|
|
|
|
Value settxfee(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() < 1 || params.size() > 1) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2177,7 +2179,7 @@ Value settxfee(const Array& params, bool fHelp)
@@ -2177,7 +2179,7 @@ Value settxfee(const Array& params, bool fHelp)
|
|
|
|
|
Value getwalletinfo(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 0) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2217,7 +2219,7 @@ Value getwalletinfo(const Array& params, bool fHelp)
@@ -2217,7 +2219,7 @@ Value getwalletinfo(const Array& params, bool fHelp)
|
|
|
|
|
Value resendwallettransactions(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 0) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2242,7 +2244,7 @@ Value resendwallettransactions(const Array& params, bool fHelp)
@@ -2242,7 +2244,7 @@ Value resendwallettransactions(const Array& params, bool fHelp)
|
|
|
|
|
Value listunspent(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
return Value::null; |
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
@ -2280,7 +2282,7 @@ Value listunspent(const Array& params, bool fHelp)
@@ -2280,7 +2282,7 @@ Value listunspent(const Array& params, bool fHelp)
|
|
|
|
|
+ HelpExampleRpc("listunspent", "6, 9999999 \"[\\\"1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg\\\",\\\"1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP\\\"]\"") |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
RPCTypeCheck(params, boost::assign::list_of(int_type)(int_type)(array_type)); |
|
|
|
|
RPCTypeCheck(params, boost::assign::list_of(UniValue::VNUM)(UniValue::VNUM)(UniValue::VARR)); |
|
|
|
|
|
|
|
|
|
int nMinDepth = 1; |
|
|
|
|
if (params.size() > 0) |
|
|
|
@ -2293,7 +2295,8 @@ Value listunspent(const Array& params, bool fHelp)
@@ -2293,7 +2295,8 @@ Value listunspent(const Array& params, bool fHelp)
|
|
|
|
|
set<CBitcoinAddress> setAddress; |
|
|
|
|
if (params.size() > 2) { |
|
|
|
|
Array inputs = params[2].get_array(); |
|
|
|
|
BOOST_FOREACH(Value& input, inputs) { |
|
|
|
|
for (unsigned int idx = 0; idx < inputs.size(); idx++) { |
|
|
|
|
const Value& input = inputs[idx]; |
|
|
|
|
CBitcoinAddress address(input.get_str()); |
|
|
|
|
if (!address.IsValid()) |
|
|
|
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Bitcoin address: ")+input.get_str()); |
|
|
|
|