QRL API Introduction
The QRL API is organized around GRPC . GRPC uses protocol buffers for serializing structured data.
Every function requires an object as parameter and returns another object as response. Our qrl.proto file lists the different objects as messages in two categories, request (named *Req) and response (named *Resp).
Use the language tabs above to select between code examples. They will show here. If you don't see something you would like, please contact us!
QRL is under active development, code may change, site layout is fluid. Please see the QRL documentation at https://docs.theqrl.org or drop a line to support@theqrl.org
This is an open source project.
We are looking for contributers. If you would like to help your fellow developers out, send any commits to the code hosted at github.com/theqrl/api.theqrl.org . As a community we can only get stronger.
Jump right in to the code, find the main QRL repository at GitHub . QRL is an open source project, we encourage open collaboration. Our Discord server has a thriving community, and we are ready to help you build something great on the QRL network.
Basic Connection ## Python Code will be shown here.
#shell Code Here
Some basic connection details.
// required libraries
let grpc = require ( 'grpc' );
let temp = require ( 'temp' ). track ();
let fs = require ( "fs-extra" );
let qrllib = require ( './node_modules/qrllib/build/libjsqrl.js' );
async function fetchRemoteProto ( nodeAddr ) {
let protoDescriptor = grpc . load ( 'qrlbase.proto' );
let client = new protoDescriptor . qrl . Base ( nodeAddr , grpc . credentials . createInsecure ());
return new Promise ( ( resolve ) => {
client . getNodeInfo ({}, function ( err , nodeInfo ) {
if ( err ) {
throw err ;
}
// path to the timestamp.proto file
let requiredFile = '/tmp/google/protobuf/timestamp.proto' ;
if ( ! fs . existsSync ( requiredFile ))
{
fs . ensureDirSync ( '/tmp/google/protobuf' );
fs . copySync ( 'timestamp.proto' , requiredFile , { overwrite : true });
}
temp . open ( 'proto' , ( err , info ) => {
if ( ! err ) {
fs . write ( info . fd , nodeInfo . grpcProto );
fs . close ( info . fd , function () {
let remoteProtoDescriptor = grpc . load ( info . path );
resolve ( remoteProtoDescriptor );
});
}
});
});
});
}
Connecting to the QRL network is simple. The network consists of various nodes, communicating via P2P communication protocols. All nodes sync with each other, sharing the blockchain data and validating each block.
For security reasons, it is recommended that you run a private QRL node for your application to connect to. You can find the qrl api running at 127.0.0.1:19009
on a local node. You can configure this to another port, or make it available to the public by modifying the config.yml file found in the default qrl directory. For more information please see the documentation for running a full node , and setting up a configuration file .
OTS Keys
QRL uses XMSS to extend the available OTS keys. You need to be cognizant that you don't run out of available keys in a wallet. By default the Web and Desktop wallet will not allow you to make transactions with the same key. Best practice is to track your OTS manually.
Warning! If you use all OTS keys the remaining funds will be locked. This is a central feature that is necessary to maintain quantum resistance of the ledger. By default the web and desktop wallets will warn you as you approach the last 50 OTS keys. This will allow you to transfer the remaining funds to a new address.
Please see the documentation at docs.theqrl.org
The WalletAPI has been re-developed to support slave files by default, adding some automation and extending the available transactions (Signatures) that an address can make. If you use the wallet daemon and generate an address with slaves, the last 5 keys will not be consumed, allowing you to transfer the remaining funds to a new wallet.
See the documentation for more information slave.json documentation
API's
See the list of API's detailed below.
Functions
Here are some required functions to make the examples below work.
getQRLClient() ## ## Enter Python code here
async function getQRLClient ( nodeAddr ) {
return new Promise ( resolve => {
const remoteProto = fetchRemoteProto ( nodeAddr );
remoteProto . then ( function ( remoteProto ) {
let client = new remoteProto . qrl . PublicAPI ( nodeAddr , grpc . credentials . createInsecure ());
resolve ( client );
});
});
}
Connection to the QRL client according to the provide API URL.
stringToBytes() ## Enter Python code here
stringToBytes = ( convertMe ) => {
// Convert String to Binary First
const thisBinary = qrllib . hstr2bin ( convertMe )
// Now convert to Bytes
return binaryToBytes ( thisBinary )
}
StringToBytes function converts a string to a byte array. This function requires the hstr2bin function from the qrllib.
binaryToBytes() ## ## Enter Python code here
// Convert Binary object to Bytes
binaryToBytes = ( convertMe ) => {
// Convert Binary to Bytes
const thisBytes = new Uint8Array ( convertMe . size ())
for ( let i = 0 ; i < convertMe . size (); i += 1 ) {
thisBytes [ i ] = convertMe . get ( i )
}
return thisBytes
}
binaryToBytes converts a binary to a byte array.
toBuffer() ## ## Enter Python code here
function toBuffer ( ab ) {
const buffer = Buffer . from ( ab )
return buffer
}
toBuffer creates a new Buffer and append the given object to it.
Connecting to the API ## Enter Python code here
// Connecting to the API
let qrlClient = getQRLClient ( '127.0.0.1:10002' );
qrlClient variable defines the API URL with the corresponding port. In the example, the API is running locally on port 10002.
concatenateTypedArrays() ## Enter Python code here
// Concatenates multiple typed arrays into one.
concatenateTypedArrays = ( resultConstructor , ... arrays ) => {
let totalLength = 0
for ( let arr of arrays ) {
totalLength += arr . length
}
let result = new resultConstructor ( totalLength )
let offset = 0
for ( let arr of arrays ) {
result . set ( arr , offset )
offset += arr . length
}
return result
}
concatenateTypedArrays function is necessary for some API function calls that requires a concatenated array (that is signed later on in the code).
toBigendianUint64BytesUnsigned() ## Enter Python code here
// Take input and convert to unsigned uint64 bigendian bytes
toBigendianUint64BytesUnsigned = ( input ) => {
if ( ! Number . isInteger ( input )) {
input = parseInt ( input )
}
const byteArray = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]
for ( let index = 0 ; index < byteArray . length ; index ++ ) {
const byte = input & 0xff
byteArray [ index ] = byte
input = ( input - byte ) / 256
}
byteArray . reverse ()
const result = new Uint8Array ( byteArray )
return result
}
toBigendianUint64BytesUnsigned takes the provided input and converts to an array of unsigned uint64 bigendian bytes.
Initiating Test Wallets ## Enter Python code here
// initiating the test wallets to use
var testfromaddress = '0105006d232eb403a0248f9d4c0476c06a7d7a1d0425420df2dd915b7fb46cf7da132699c27b93'
var testfromaddress_bytes = stringToBytes ( testfromaddress );
Example providing a wallet address (as hex) and the corresponding address as byte using the stringToBytes() function.
QRL Protocol Overview
Our API's protocol data structure is defined in the qrl.proto file found in the source code in our github repo . Our PublicAPI service lists the functions available in our API.
PublicAPI
This service describes the Public API used by clients wallet, cli, etc
GetAddressFromPK GetAddressFromPKReq message GetAddressFromPKReq {
bytes pk = 1;
}
Field
Type
Label
Description
pk
bytes
GetAddressFromPKResp message GetAddressFromPKResp {
bytes address = 1;
}
Field
Type
Label
Description
address
bytes
GetAddressState GetAddressStateReq message GetAddressStateReq {
bytes address = 1;
}
Field
Type
Label
Description
address
bytes
GetAddressStateResp message GetAddressStateResp {
AddressState state = 1;
}
GetKnownPeers GetKnownPeersReq message GetKnownPeersReq { }
Represents a query to get known peers
GetKnownPeersResp message GetKnownPeersResp {
NodeInfo node_info = 1;
repeated Peer known_peers = 2;
}
Represents the reply message to known peers query
Field
Type
Label
Description
node_info
NodeInfo
NodeInfo object containing node state information
known_peers
Peer
repeated
List of Peer objects containing peer nodes detailed information
GetLatestData GetLatestDataReq message GetLatestDataReq {
enum Filter {
ALL = 0;
BLOCKHEADERS = 1;
TRANSACTIONS = 2;
TRANSACTIONS_UNCONFIRMED = 3;
}
Filter filter = 1;
uint32 offset = 2; // Offset in the result list (works backwards in this case)
uint32 quantity = 3; // Number of items to retrive. Capped at 100
}
Field
Type
Label
Description
filter
GetLatestDataReq.Filter
offset
uint32
Offset in the result list (works backwards in this case)
quantity
uint32
Number of items to retrive. Capped at 100
GetLatestDataResp message GetLatestDataResp {
repeated BlockHeaderExtended blockheaders = 1;
repeated TransactionExtended transactions = 2;
repeated TransactionExtended transactions_unconfirmed = 3;
}
GetMessageTxn MessageTxnReq
GetNodeState GetNodeStateReq message GetNodeStateReq { }
Represents a query to get node state
GetNodeStateResp message GetNodeStateResp {
NodeInfo info = 1;
}
Represents the reply message to node state query
Field
Type
Label
Description
info
NodeInfo
GetObject GetObjectReq message GetObjectReq { bytes query = 1; }
Field
Type
Label
Description
query
bytes
GetObjectResp message GetObjectResp {
bool found = 1;
oneof result {
AddressState address_state = 2;
TransactionExtended transaction = 3;
BlockExtended block_extended = 4;
}
}
message GetPeersStatReq { }
Represents a query to get connected peers stat
message GetPeersStatResp {
repeated PeerStat peers_stat = 1;
Represents the reply message to peers stat query
Field
Type
Label
Description
peers_stat
PeerStat
repeated
PeerState object contains peer_ip, port and peer state information
GetSlaveTxn SlaveTxnReq
GetStats GetStatsReq message GetStatsReq {
bool include_timeseries = 1;
}
Represents a query to get statistics about node
Field
Type
Label
Description
include_timeseries
bool
Boolean to define if block timeseries should be included in reply or not
GetStatsResp message GetStatsResp {
NodeInfo node_info = 1; // NodeInfo object containing node state information
uint64 epoch = 2; // Current epoch
uint64 uptime_network = 3; // Indicates uptime in seconds
uint64 block_last_reward = 4; // Block reward
uint64 block_time_mean = 5; // Blocktime average
uint64 block_time_sd = 6; // Blocktime standrad deviation
uint64 coins_total_supply = 7; // Total coins supply
uint64 coins_emitted = 8; // Total coins emitted
repeated BlockDataPoint block_timeseries = 9;
}
Represents the reply message to get statistics about node
Field
Type
Label
Description
node_info
NodeInfo
NodeInfo object containing node state information
epoch
uint64
Current epoch
uptime_network
uint64
Indicates uptime in seconds
block_last_reward
uint64
Block reward
block_time_mean
uint64
Blocktime average
block_time_sd
uint64
Blocktime standrad deviation
coins_total_supply
uint64
Total coins supply
coins_emitted
uint64
Total coins emitted
block_timeseries
BlockDataPoint
repeated
GetTokenTxn TokenTxnReq
GetTransferTokenTxn TransferTokenTxnReq
PushTransaction PushTransactionReq message PushTransactionReq { Transaction transaction_signed = 1; }
Field
Type
Label
Description
transaction_signed
Transaction
PushTransactionResp message PushTransactionResp {
enum ResponseCode {
UNKNOWN = 0;
ERROR = 1;
VALIDATION_FAILED = 2;
SUBMITTED = 3;
}
ResponseCode error_code = 1;
string error_description = 2;
bytes tx_hash = 3;
}
TransferCoins TransferCoinsReq message TransferCoinsReq {
bytes master_addr = 1; // Transaction source address
repeated bytes addresses_to = 2; // Transaction destination address
repeated uint64 amounts = 3; // Amount. It should be expressed in Shor
uint64 fee = 4; // Fee. It should be expressed in Shor
bytes xmss_pk = 5; // XMSS Public key
}
Field
Type
Label
Description
master_addr
bytes
Transaction source address
addresses_to
bytes
repeated
Transaction destination address
amounts
uint64
repeated
Amount. It should be expressed in Shor
fee
uint64
Fee. It should be expressed in Shor
xmss_pk
bytes
XMSS Public key
TransferCoinsResp message TransferCoinsResp {
TransactionExtended extended_transaction_unsigned = 1;
}
AdminAPI
This is a place holder for testing/instrumentation APIs
Method Name
Request Type
Response Type
Description
AddressAmount
Field
Type
Label
Description
address
bytes
amount
uint64
AddressList
Field
Type
Label
Description
addresses
bytes
repeated
AddressState Enter Python code here
testaddress = stringToBytes('01050048a8b31d8dda8a25c5c0d02994fe87e54032ba67910657ade9114d0cdff2eeb5f6285446');
qrlClient.then( function (qrlClient) {
qrlClient.getAddressState({address : testaddress}, (err, res) => {
if (err){
console.log("Error: ", err.message);
return;
}
// res is a GetAddressStateResp object
console.log(res);
// the resulting GetAddressStateResp object contains the following attributes
console.log(res.state);
console.log(res.state.address);
console.log(res.state.balance);
console.log(res.state.nonce);
console.log(res.state.ots_bitfield);
console.log(res.state.transaction_hashes);
console.log(res.state.tokens);
console.log(res.state.latticePK_list);
console.log(res.state.slave_pks_access_type);
console.log(res.state.ots_counter);
});
});
AddressState.SlavePksAccessTypeEntry
AddressState.TokensEntry
Block
BlockDataPoint
BlockDataPoint message definition
Field
Type
Label
Description
number
uint64
Block number
difficulty
string
Block difficulty
timestamp
uint64
Block timestamp
time_last
uint64
time_movavg
uint64
hash_power
float
Hash power
header_hash
bytes
Block header hash
header_hash_prev
bytes
Previous block's header hash
BlockExtended
BlockHeightData
Field
Type
Label
Description
block_number
uint64
block_headerhash
bytes
cumulative_difficulty
bytes
Field
Type
Label
Description
block_difficulty
bytes
cumulative_difficulty
bytes
child_headerhashes
bytes
repeated
last_N_headerhashes
bytes
repeated
Keeps last N headerhashes, for measurement of timestamp difference
Field
Type
Label
Description
block_number_hashes
BlockMetaData
repeated
BlockNumberMapping
Field
Type
Label
Description
headerhash
bytes
prev_headerhash
bytes
Empty
Empty message definition
EncryptedEphemeralMessage
EncryptedEphemeralMessage.Channel
Field
Type
Label
Description
enc_aes256_symkey
bytes
aes256_symkey encrypted by kyber
GenesisBalance
Field
Type
Label
Description
address
bytes
Address is string only here to increase visibility
balance
uint64
GetBlockReq
Field
Type
Label
Description
index
uint64
Indicates the index number in mainchain
after_hash
bytes
request the node that comes after hash
GetBlockResp
GetLocalAddressesReq GetLocalAddressesResp
Field
Type
Label
Description
addresses
bytes
repeated
LRUStateCache LatticePK
Field
Type
Label
Description
txhash
bytes
dilithium_pk
bytes
kyber_pk
bytes
NodeChainState
Field
Type
Label
Description
block_number
uint64
headerhashes
bytes
repeated
NodeInfo
P2PAcknowledgement
Field
Type
Label
Description
bytes_processed
uint32
Peer
Field
Type
Label
Description
ip
string
PeerInfo
PeerStat
Peers
Field
Type
Label
Description
peer_info_list
PeerInfo
repeated
StateLoader
Field
Type
Label
Description
addresses
bytes
repeated
token_txhash
bytes
repeated
txhash
bytes
repeated
total_coin_supply
uint64
StateObjects
Field
Type
Label
Description
state_loaders
bytes
repeated
StoredPeers
Field
Type
Label
Description
peers
Peer
repeated
TokenList
Field
Type
Label
Description
token_txhash
bytes
repeated
Field
Type
Label
Description
token_txhash
bytes
transfer_token_tx_hashes
bytes
repeated
Transaction
Transaction.CoinBase
Field
Type
Label
Description
addr_to
bytes
amount
uint64
Transaction.LatticePublicKey
Field
Type
Label
Description
kyber_pk
bytes
dilithium_pk
bytes
Transaction.Message
Field
Type
Label
Description
message_hash
bytes
Transaction.Slave
Field
Type
Label
Description
slave_pks
bytes
repeated
access_types
uint32
repeated
Transaction.Token
Transaction.Transfer
Field
Type
Label
Description
addrs_to
bytes
repeated
amounts
uint64
repeated
Transaction.TransferToken
Field
Type
Label
Description
token_txhash
bytes
addrs_to
bytes
repeated
amounts
uint64
repeated
TransactionCount
TransactionCount.CountEntry
TransactionExtended
GetLatestDataReq.Filter
Name
Number
Description
ALL
0
BLOCKHEADERS
1
TRANSACTIONS
2
TRANSACTIONS_UNCONFIRMED
3
NodeInfo.State
Name
Number
Description
UNKNOWN
0
UNSYNCED
1
SYNCING
2
SYNCED
3
FORKED
4
PushTransactionResp.ResponseCode
Name
Number
Description
UNKNOWN
0
ERROR
1
VALIDATION_FAILED
2
SUBMITTED
3
Wallet API
This service describes the Wallet API. This is intended to simplify programmatic interaction with the QRL wallet. This will allow further development with automated services limiting the amount of tracking needed. Each address will continue to generate new slave trees as the OTS keys are used.
The walletAPI has been improved to include automatic slave tree generation and OTS key management. Please see the Automatic Wallet API section below for more details.
For more information drop a line to info@theqrl.org
Getting Started # Install qrl node Ubuntu
apt update && apt upgrade -y
apt-get -y install swig3.0 python3-dev python3-pip build-essential cmake pkg-config libssl-dev libffi-dev libhwloc-dev libboost-dev
pip3 install -U setuptools
pip3 install -U qrl
# Run the wallet daemon
qrl_walletd
# go get the walletd-rest-proxy
go get github.com/theQRL/walletd-rest-proxy
cd $GOPATH/src/github.com/theQRL/walletd-rest-proxy
go build
# Run the wallet-rest-proxy
./walletd-rest-proxy -serverIPPort 127.0.0.1:5359 -walletServiceEndpoint 127.0.0.1:19010`
# Update the wallet-rest-proxy
cd $GOPATH/src/github.com/theQRL/walletd-rest-proxy
go get -u github.com/theQRL/walletd-rest-proxy
go build
Interfacing with the qrlWalletAPI is simple and straight forward. Follow the steps below to get started. This instruction set assumes you are installing on Ubuntu.
Install the QRL Node and sync
Run the QRL wallet daemon
Install golang-go v1.8 or greater
Clone walletd-rest-proxy from the repo hosted at https://github.com/theQRL/walletd-rest-proxy
go get github.com/theQRL/walletd-rest-proxy
Start the wallet-rest-proxy
This allows connection to the WalletDaemon
Send commands using cURL and begin using the QRL!
serverIPPort
indicates the IP:Port
at which REST API service will be provided.
walletServiceEndpoint
indicates the IP:Port
at which the WalletAPIService is running.
If you have not changed the host and port at config.yml of QRL Node, then the above command should work fine.
# Alternate paramaters may be passed to the API
curl -XPOST http://127.0.0.1:5359/api/{ METHOD} -d '{"{PARAMATER1}":"{SETTING1}","{PARAMATER2}":"{SETTING2}"}'
# Example adding an address to a wallet with height 18 and hash_function sha_256
curl -XPOST http://127.0.0.1:5359/api/AddNewAddress -d '{"height":"18","hash_function":"sha2_256"}'
Alternative parameters may be sent via curl
by calling the -d
flag and using the syntax shown to the right. You may call multiple parameters separated by ,
WalletAPI Methods
AddNewAddress
Use only if you need a single address without slaves. Requires maintaining OTS index and new address generation when OTS is exhausted. For automatic OTS key generation using slave trees, see the Automatic Wallet API section below.
# AddNewAddress Request
curl -XPOST http://127.0.0.1:5359/api/AddNewAddress
# AddNewAddress Response
{ "address" :"Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25" }
def addNewAddress ():
import requests
import json
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/AddNewAddress" )
response = QRLrequest . text
NewAddressResp = json . loads ( response )
jsonResponse = NewAddressResp
return ( jsonResponse )
addNewAddress ()
# Response
{ 'address' : 'Q010500529aa61cb19c88c3bcf780385228c6afd0fd4735497aef8c5245b692c08e87d35522452d' }
Adds new randomly generated address to the wallet. This will create a single address, with no slave trees and adds it to the ~/.qrl/walletd.json file.
Request
Parameter
Type
Description
Default
height
UInt64
Height of the newly generated XMSS tree
10
hash_function
String
Hash function for XMSS. Possible values are shake128, shake256, sha2_256.
shake128
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
address
String
Return the newly added QRL address
ChangePassphrase
This requires the old passphrase used for encryption of the walletd.json file. Use only if you have previously encrypted the wallet using the EncryptWallet function.
# ChangePassphrase Request
curl -XPOST http://127.0.0.1:5359/api/ChangePassphrase -d '
{
"oldPassphrase": "demo123",
"newPassphrase": "demo234"
}'
# ChangePassphrase Response
{}
def changePassphrase ( oldPassphrase , newPassphrase ):
import requests
import json
payload = { 'oldPassphrase' : oldPassphrase , 'newPassphrase' : newPassphrase }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/ChangePassphrase" , json = payload )
response = QRLrequest . text
lockWalletResp = json . loads ( response )
jsonResponse = lockWalletResp
return ( jsonResponse )
changePassphrase ( demo123 , demo234 )
# Response
{}
Change the passphrase that encrypts the wallet file. This will change the passphrase encrypting the entire ~/.qrl/walletd.json file.
Request
Parameter
Type
Description
oldPassphrase
String
Old Passphrase
newPassphrase
String
New Passphrase
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
EncryptWallet # EncryptWallet Request
curl -XPOST http://127.0.0.1:5359/api/EncryptWallet -d '
{
"passphrase": "demo123"
}'
# EncryptWallet Response
{}
def encryptWallet ( passphrase ):
import requests
import json
payload = { 'passphrase' : passphrase }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/EncryptWallet" , json = payload )
response = QRLrequest . text
encryptWalletResp = json . loads ( response )
jsonResponse = encryptWalletResp
return ( jsonResponse )
encryptWallet ( "test123" )
# response
{}
Encrypts the wallet with the given passphrase using AES encryption. This API only needs to called once for encrypting the wallet first time, and will encrypt the entire ~/.qrl/walletd.json file
Request
Parameter
Type
Description
passphrase
String
Passphrase to encrypt the wallet
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
GetAddressFrom PK # Request
curl -XPOST http://127.0.0.1:5359/api/GetAddressFromPK -d '
{
"pk": "01020016ecb9f39b9f4275d5a49e232346a15ae2fa8c50a2927daeac189b8c5f2d18bc4e3983bd564298c49ae2e7fa6e28d4b954d8cd59398f1225b08d6144854aee0e"
}'
# Response
{
"address" : "Q010200670246b0026436b717f199e3ec5320ba6ab61d5eddff811ac199a9e9b871d3280178b343"
}
def getAddressFromPK ( pk ):
import requests
import json
payload = { 'pk' : pk ,}
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetAddressFromPK" , json = payload )
response = QRLrequest . text
getAddressFromPKResp = json . loads ( response )
jsonResponse = getAddressFromPKResp
return ( jsonResponse )
getAddressFromPK ( "01020016ecb9f39b9f4275d5a49e232346a15ae2fa8c50a2927daeac189b8c5f2d18bc4e3983bd564298c49ae2e7fa6e28d4b954d8cd59398f1225b08d6144854aee0e" )
# Response
{ 'address' : 'Q010200670246b0026436b717f199e3ec5320ba6ab61d5eddff811ac199a9e9b871d3280178b343' }
Get QRL address for a given private key.
Request
Parameter
Type
Description
pk
Bytes
Public key
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
address
String
QRL Address
GetBalance # GetBalance Request
curl -XPOST http://127.0.0.1:5359/api/GetBalance -d '
{
"address": "Q010600a9313090b8b7c63f55b1e98eb098d2a7a844ba283a1efc34c8da9fd68378365af3213673"
}'
# GetBalance Response
{
"balance" : "53599233943462"
}
def getBalance ( address ):
import requests
import json
payload = { 'address' : address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetBalance" , json = payload )
response = QRLrequest . text
getBalance = json . loads ( response )
jsonResponse = getBalance [ 'balance' ]
return ( jsonResponse )
getBalance ( "Q010600a9313090b8b7c63f55b1e98eb098d2a7a844ba283a1efc34c8da9fd68378365af3213673" )
# Response
'0'
Get the balance of the given QRL address.
Request
Parameter
Type
Description
address
String
QRL Address
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
balance
UInt64
Balance in Shor
GetBlock # GetBlock Request
curl -XPOST http://127.0.0.1:5359/api/GetBlock -d '
{
"header_hash": "1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000"
}'
# GetBlock Response
{
"block" :{
"header" :{
"hash_header" :"1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000" ,
"block_number" :"550" ,
"timestamp_seconds" :"1530024245" ,
"hash_header_prev" :"e7203a9aef557a3d322409750c716f236104e09ffa9ddba3cfe6555d1f000000" ,
"reward_block" :"6655741376" ,
"reward_fee" :"1000000" ,
"merkle_root" :"8a3b8d2ca74959cf3e2c6ec61e8ff23cf4d61052fb7c31a1b4bd7935427cae44" ,
"mining_nonce" :672940259,
"extra_nonce" :"110212678400"
} ,
"transactions" :[
{
"master_addr" :"Q0000000000000000000000000000000000000000000000000000000000000000" ,
"nonce" :"551" ,
"transaction_hash" :"931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc" ,
"coinbase" :{
"addr_to" :"Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361" ,
"amount" :"6656741376"
}
} ,
{
"master_addr" :"Q010600286a4c7bcc7f701dc7cf0389fd9be402b610894e306aad35078539599398f9681c64e56c" ,
"fee" :"1000000" ,
"public_key" :"0106005b94df4799061319e8f60aa4564bf4a795cf6c8eb24970a2feb34ce7219fd6f721354d7eda03d4a3b2be25febad599d5507b8aca6879c26fd32ca493713b2f01" ,
"signature" :"00000001199e2094ce0ff52671bfb53032fce70109e4cec831d100e68811f0fd1a00c92d015a98c9d2f9e917564b2211668406486813c0e0fb25bcaa3f885fe04177ef1496de41154604c595f9b740b0f5e78f269d6376dec4b8063aded4aa83e4f4b5e1e5ff8d84f2c804d498537b6b68441209354662976e5d9f4d6e1bf8f01ab60092c5b80cb876b2929e7d4b26a084550502475ae25fe831bd6a5abc1cf75e2daccb5af3536041416bb5444900ca18f7c3bb8bc1c377da0b2401de85ad261405281b2e6e72e6518a4bb05113eda3fa64ffd481607183e293c454dde579ee450708efcc01b262e35c0a9bd224aa498c656161bafda6f7255f7479f3eb7ed3607eca10a9124b2f97bbacd135862a91bf15ee02e1addecc830ac6d0f4a011dddd91c7c31e10bd63534ac481af8ca2d16d6a547e6d7637ec568e8249e14605e9c9add8b16249863ee61fe047c7d3eb7c0f94d6c7574c7ccec1813c02ee3fb2a76382187d56277f8c5f2cbf7efaac37a9175d7ce125029202db587f3ec931323d7fa2e562c5b83526e954376360854db383c5d2c2b2272181f7c83820471cdc51c1b1df6471defc708f6582f955ef659d5df1edc52685c966dc99816555bac2baaedfdc7cb435fe5dc9067b191237dba0dcdcc4ab6b729d014c476091de472337301754b64250f9658cf933a2b6dbda0881ba79088034785a15c9fe9cca815e977bb4a16987704abe41467b81bf665198a9b875d3a38183d59b85f1ac8c52433083611381ab96e33792ad0b613b492e06de843f9385aa2bf201863fea0eaf80c4397c3794ed2abc571ce0ff4ed392c286d7bd9350bdebedcac3f4f8cc002a5306b44fd63b57ea01addab333bec6af05b92f05b55efb2a37831267b69fd82d788b920a671a2a9c4ee42882036157127c660eeae9dc56990b5dc58788229dca52626a40375febac7af57ee061a1f02e73f8aaab67b9e5085c74381e01a88a9eaecd1741956ff8cb6f0e4a5d7b68f7aa1377a7719355c50246446370468202be2de93643b5a0157738e03b6aa01c223a1b6760a52611c8e71457694455fc4059f122a682330e90e5128c899dadb6d2757330a9b86f5f4d75f1a7198c403747a31140d121cd39a373b48458d64dcc200734f62e71e1b455506442b043762d9f1024f5af5b72559a106f3b42b392cff70474d2bf3f6a98bfb593de31fbd5de42734196aeee6d575bfc25ddec065b1e2bf2f64d5bb342b024cca00281118ed9916ab425af88d0fef7ee67119e95472265e7a3406956b3bfbb5f0cd97b39d2fc669e4013abfac4cf648136f06bd3a02c652b21bafb4f7986d1fbac773ef0adde6119c123f65d85740e8364e48904dc1cb8d5f68b112a8f513d8f6fc302739f9060770bbe7c5544edb0128e6f9b301b9ae966b2e2be047d50afe1c3793601f0a5152800a810275a90cfd3b945d56366f77a8e8107586767e2db6a03f09bc4da848af249367cbc18be363ee553db985d37252fd317c35255427d1eb896a8789b2037adfce8b66f481ba2fc84ae479fb4a40d9ba5e7e92cbcbfe7d0d4fab57ce39337038230bef7a7181cc425119e908e6ad4dc10537a1904037c0951703fd544f45e71c6dfbe29df44c81ed0e8fa2a4a8dad859e9aca8f85f26be64e78ef317b1ab571d85dffd8a5080f37ff911558c7aed6852ba4f8ff17291f489ccd859f2cf805ee22e85032d318f0247d4da6bbe7f2a6f9b9743c4582589ab3a9c40b05b2a58a92679bf410c3f49975ebdd87bc355000fb8a3a5e5c2f6c80c83243c8ced7f67a5a56decc0c569c5d7133aebf82e5713f5eacb10ce97dd393520ff522a94744117f97cb00a1d84064edf597c9152d8688e880b996ff9965a99b72c97cd836f703994a217cbae039adb96dd5a435fa6922114f21c69b126e5267fbf9b54450277408dd5d5df1e80da12d02cbf0c6bd90c2d6fad051f79a5617b182ca5b07d8b14d6e366ceaf90d438a7fd3d8a84249e554f264c2a8e7a56e0efba689b70bfaf5d67753099e9041ddc8210415485d1afe92f743b0537e2219bbe47331565ef25f1969fc8836befa399aa6cf4f1720be2d51140225ef09859545de1a1b70b3690a998084ce9a1dbfd0b5fc75440369f11def095f26c5577fd40b52a2c11e5558fde4513b4972e1ede3f250988d7f68efc46e83f6c1a42d67b355e7579cf1817df118d41f77f8431a83eb289eebe9aad0e88aa73ad5e441e0e7d6afa98240e5965ca7717576ea7ae10f848c7003615669f7aca1a1b6dfea83f0fd1b7a334a6313e6ae783c0b190459f0dceb35f141223181f657a8c192e2b4e3121a61ce1584584cb9c1d298c9c7bddeab24e2068eae96f73578bd2ded6adaebc8af1d7a466a8f07dcd4c8cb48d9e7a39e0b922e9a6b2f6f2dfb5e84dbb9f587b1cfd0520c05ea246cbc3696b613ce165100dbfed3d27e45c2aed2638ca2f06431931288dc56011072363a3f91cf2f5e3b0e0bdc03d844ef281979cdc532693148251ce40b48bb2533e2536afc69b3bfd561a72c6b9de81d1ba6d8a27151fab6e273dba241f54316a3c7d8648521a32d3ba9a8aead1be99b04d02735760b120a3128928b46375af82ced65b8f9dc03838ae01bf5b1d6651587bd5c23f257f341fafdae18f95a487887bf46ddb7df05a6af31cb89b0af9ba9e1bfe286837ca25eceec36f6cacb0fcb8525cdf1c64bd2e92fc6169b88194b9e66b4101e6c0d9039f39f03c4c4f77420786338fa65d8dc34789f6059f5b4c3ba8f8c4c14c852e40062dee499f260221cdcd4a75c26b97c18766d833e252f20240eae8cc64872c0e4861652e2a2b7096926e30283ea0e8f11827ad2e3ee08083a1a2419a945fa92db6fdcdef3f20c4d3fe389436a992b513b4b984d710cd5a49cda86942a58d6c2025076e93ae973e0c0a77ba4f857b2b8178f9b7b8f9582f294ec9e13aff15ce7a978465d08b83c5062a308955d38ff6901507bae94ce6824c8d425b05b2d7b01d87e75035930cc2bc6297db838f9f78db9a0a7202b06a687f8691f8fbe70ffbd4b21521526ba84eb5919f3c36727977418f862975878f8dacc742123643214834330c4d7d2b8651d27ca07dc21028fd081320fd1c0ce1d1b1917a93d84243475b65bfcd0e3ce64e76fce7dcaa02eedfbc151ae49fff6f5faa4018908e4c2494820d46a82a033421d0fd1be0fa00d98b219b32021c64a4e2fd30f56baf274600ce08c6bad8c730ba6792f6f1b9d5d4cedeea1f820d8113d0f687e1cc083432b528300abfbf8a0bf8843a75ec6f11fb1bb3e15bbd7d2862d2168c60ea2889e930bd8026b9cc253fc36d8301f8bd6ae627199d3ee082db860974430c218a65c9b263ffc076415ffc180f509b24a0d181bd638fb875020e7bd0335e50478b90a01354e34df9a2062ad3c0f3484370f0baeb82401131090acb9a82a13fe241652afabde308324be8621921aa4020b8d41cb484db3cc1601c78a1b032bd24a2b0273aadf1020e4250d65265e9ccaaa9620f6e6a51bc77b94a53f92321e311aa59b428c45cd801043aa5acec50b6f2cc1008bae77afde64c392d51437dd9e54ad8c6e527e648ea385b59fb1b858d2d60fcffb7f70" ,
"nonce" :"2" ,
"transaction_hash" :"487f5840082a6f1c8f9f9b9ae70ef4646cc680254b6a43d51e064f71527d0cbd" ,
"signer_addr" :"Q0106003c0e74139c585f6d5eb9997892a47b6dea4e563c034cce999443e7c20514d823511fcc04" ,
"transfer" :{
"addrs_to" :[
"Q01050050ece4e02cc6133ec7eb015b7184347a09204416b5faf62af301bd6e43c9f5b01b296738"
] ,
"amounts" :[
"5000000000"
]
}
}
]
}
}
def getBlock ( header_hash ):
import requests
import json
payload = { 'header_hash' : header_hash ,}
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetBlock" , json = payload )
response = QRLrequest . text
getBlockResp = json . loads ( response )
jsonResponse = getBlockResp
return ( jsonResponse )
getBlock ( "1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000" )
Get block details for a given header hash.
Request
Parameter
Type
Description
header_hash
String
Block Header Hash
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
block
Block
Block Details
GetBlockByNumber # GetBlockByNumber Request
curl -XPOST http://127.0.0.1:5359/api/GetBlockByNumber -d '
{
"block_number": 550
}'
# GetBlockByNumber Response
{
"block" :{
"header" :{
"hash_header" :"1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000" ,
"block_number" :"550" ,
"timestamp_seconds" :"1530024245" ,
"hash_header_prev" :"e7203a9aef557a3d322409750c716f236104e09ffa9ddba3cfe6555d1f000000" ,
"reward_block" :"6655741376" ,
"reward_fee" :"1000000" ,
"merkle_root" :"8a3b8d2ca74959cf3e2c6ec61e8ff23cf4d61052fb7c31a1b4bd7935427cae44" ,
"mining_nonce" :672940259,
"extra_nonce" :"110212678400"
} ,
"transactions" :[
{
"master_addr" :"Q0000000000000000000000000000000000000000000000000000000000000000" ,
"nonce" :"551" ,
"transaction_hash" :"931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc" ,
"coinbase" :{
"addr_to" :"Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361" ,
"amount" :"6656741376"
}
} ,
{
"master_addr" :"Q010600286a4c7bcc7f701dc7cf0389fd9be402b610894e306aad35078539599398f9681c64e56c" ,
"fee" :"1000000" ,
"public_key" :"0106005b94df4799061319e8f60aa4564bf4a795cf6c8eb24970a2feb34ce7219fd6f721354d7eda03d4a3b2be25febad599d5507b8aca6879c26fd32ca493713b2f01" ,
"signature" :"00000001199e2094ce0ff52671bfb53032fce70109e4cec831d100e68811f0fd1a00c92d015a98c9d2f9e917564b2211668406486813c0e0fb25bcaa3f885fe04177ef1496de41154604c595f9b740b0f5e78f269d6376dec4b8063aded4aa83e4f4b5e1e5ff8d84f2c804d498537b6b68441209354662976e5d9f4d6e1bf8f01ab60092c5b80cb876b2929e7d4b26a084550502475ae25fe831bd6a5abc1cf75e2daccb5af3536041416bb5444900ca18f7c3bb8bc1c377da0b2401de85ad261405281b2e6e72e6518a4bb05113eda3fa64ffd481607183e293c454dde579ee450708efcc01b262e35c0a9bd224aa498c656161bafda6f7255f7479f3eb7ed3607eca10a9124b2f97bbacd135862a91bf15ee02e1addecc830ac6d0f4a011dddd91c7c31e10bd63534ac481af8ca2d16d6a547e6d7637ec568e8249e14605e9c9add8b16249863ee61fe047c7d3eb7c0f94d6c7574c7ccec1813c02ee3fb2a76382187d56277f8c5f2cbf7efaac37a9175d7ce125029202db587f3ec931323d7fa2e562c5b83526e954376360854db383c5d2c2b2272181f7c83820471cdc51c1b1df6471defc708f6582f955ef659d5df1edc52685c966dc99816555bac2baaedfdc7cb435fe5dc9067b191237dba0dcdcc4ab6b729d014c476091de472337301754b64250f9658cf933a2b6dbda0881ba79088034785a15c9fe9cca815e977bb4a16987704abe41467b81bf665198a9b875d3a38183d59b85f1ac8c52433083611381ab96e33792ad0b613b492e06de843f9385aa2bf201863fea0eaf80c4397c3794ed2abc571ce0ff4ed392c286d7bd9350bdebedcac3f4f8cc002a5306b44fd63b57ea01addab333bec6af05b92f05b55efb2a37831267b69fd82d788b920a671a2a9c4ee42882036157127c660eeae9dc56990b5dc58788229dca52626a40375febac7af57ee061a1f02e73f8aaab67b9e5085c74381e01a88a9eaecd1741956ff8cb6f0e4a5d7b68f7aa1377a7719355c50246446370468202be2de93643b5a0157738e03b6aa01c223a1b6760a52611c8e71457694455fc4059f122a682330e90e5128c899dadb6d2757330a9b86f5f4d75f1a7198c403747a31140d121cd39a373b48458d64dcc200734f62e71e1b455506442b043762d9f1024f5af5b72559a106f3b42b392cff70474d2bf3f6a98bfb593de31fbd5de42734196aeee6d575bfc25ddec065b1e2bf2f64d5bb342b024cca00281118ed9916ab425af88d0fef7ee67119e95472265e7a3406956b3bfbb5f0cd97b39d2fc669e4013abfac4cf648136f06bd3a02c652b21bafb4f7986d1fbac773ef0adde6119c123f65d85740e8364e48904dc1cb8d5f68b112a8f513d8f6fc302739f9060770bbe7c5544edb0128e6f9b301b9ae966b2e2be047d50afe1c3793601f0a5152800a810275a90cfd3b945d56366f77a8e8107586767e2db6a03f09bc4da848af249367cbc18be363ee553db985d37252fd317c35255427d1eb896a8789b2037adfce8b66f481ba2fc84ae479fb4a40d9ba5e7e92cbcbfe7d0d4fab57ce39337038230bef7a7181cc425119e908e6ad4dc10537a1904037c0951703fd544f45e71c6dfbe29df44c81ed0e8fa2a4a8dad859e9aca8f85f26be64e78ef317b1ab571d85dffd8a5080f37ff911558c7aed6852ba4f8ff17291f489ccd859f2cf805ee22e85032d318f0247d4da6bbe7f2a6f9b9743c4582589ab3a9c40b05b2a58a92679bf410c3f49975ebdd87bc355000fb8a3a5e5c2f6c80c83243c8ced7f67a5a56decc0c569c5d7133aebf82e5713f5eacb10ce97dd393520ff522a94744117f97cb00a1d84064edf597c9152d8688e880b996ff9965a99b72c97cd836f703994a217cbae039adb96dd5a435fa6922114f21c69b126e5267fbf9b54450277408dd5d5df1e80da12d02cbf0c6bd90c2d6fad051f79a5617b182ca5b07d8b14d6e366ceaf90d438a7fd3d8a84249e554f264c2a8e7a56e0efba689b70bfaf5d67753099e9041ddc8210415485d1afe92f743b0537e2219bbe47331565ef25f1969fc8836befa399aa6cf4f1720be2d51140225ef09859545de1a1b70b3690a998084ce9a1dbfd0b5fc75440369f11def095f26c5577fd40b52a2c11e5558fde4513b4972e1ede3f250988d7f68efc46e83f6c1a42d67b355e7579cf1817df118d41f77f8431a83eb289eebe9aad0e88aa73ad5e441e0e7d6afa98240e5965ca7717576ea7ae10f848c7003615669f7aca1a1b6dfea83f0fd1b7a334a6313e6ae783c0b190459f0dceb35f141223181f657a8c192e2b4e3121a61ce1584584cb9c1d298c9c7bddeab24e2068eae96f73578bd2ded6adaebc8af1d7a466a8f07dcd4c8cb48d9e7a39e0b922e9a6b2f6f2dfb5e84dbb9f587b1cfd0520c05ea246cbc3696b613ce165100dbfed3d27e45c2aed2638ca2f06431931288dc56011072363a3f91cf2f5e3b0e0bdc03d844ef281979cdc532693148251ce40b48bb2533e2536afc69b3bfd561a72c6b9de81d1ba6d8a27151fab6e273dba241f54316a3c7d8648521a32d3ba9a8aead1be99b04d02735760b120a3128928b46375af82ced65b8f9dc03838ae01bf5b1d6651587bd5c23f257f341fafdae18f95a487887bf46ddb7df05a6af31cb89b0af9ba9e1bfe286837ca25eceec36f6cacb0fcb8525cdf1c64bd2e92fc6169b88194b9e66b4101e6c0d9039f39f03c4c4f77420786338fa65d8dc34789f6059f5b4c3ba8f8c4c14c852e40062dee499f260221cdcd4a75c26b97c18766d833e252f20240eae8cc64872c0e4861652e2a2b7096926e30283ea0e8f11827ad2e3ee08083a1a2419a945fa92db6fdcdef3f20c4d3fe389436a992b513b4b984d710cd5a49cda86942a58d6c2025076e93ae973e0c0a77ba4f857b2b8178f9b7b8f9582f294ec9e13aff15ce7a978465d08b83c5062a308955d38ff6901507bae94ce6824c8d425b05b2d7b01d87e75035930cc2bc6297db838f9f78db9a0a7202b06a687f8691f8fbe70ffbd4b21521526ba84eb5919f3c36727977418f862975878f8dacc742123643214834330c4d7d2b8651d27ca07dc21028fd081320fd1c0ce1d1b1917a93d84243475b65bfcd0e3ce64e76fce7dcaa02eedfbc151ae49fff6f5faa4018908e4c2494820d46a82a033421d0fd1be0fa00d98b219b32021c64a4e2fd30f56baf274600ce08c6bad8c730ba6792f6f1b9d5d4cedeea1f820d8113d0f687e1cc083432b528300abfbf8a0bf8843a75ec6f11fb1bb3e15bbd7d2862d2168c60ea2889e930bd8026b9cc253fc36d8301f8bd6ae627199d3ee082db860974430c218a65c9b263ffc076415ffc180f509b24a0d181bd638fb875020e7bd0335e50478b90a01354e34df9a2062ad3c0f3484370f0baeb82401131090acb9a82a13fe241652afabde308324be8621921aa4020b8d41cb484db3cc1601c78a1b032bd24a2b0273aadf1020e4250d65265e9ccaaa9620f6e6a51bc77b94a53f92321e311aa59b428c45cd801043aa5acec50b6f2cc1008bae77afde64c392d51437dd9e54ad8c6e527e648ea385b59fb1b858d2d60fcffb7f70" ,
"nonce" :"2" ,
"transaction_hash" :"487f5840082a6f1c8f9f9b9ae70ef4646cc680254b6a43d51e064f71527d0cbd" ,
"signer_addr" :"Q0106003c0e74139c585f6d5eb9997892a47b6dea4e563c034cce999443e7c20514d823511fcc04" ,
"transfer" :{
"addrs_to" :[
"Q01050050ece4e02cc6133ec7eb015b7184347a09204416b5faf62af301bd6e43c9f5b01b296738"
] ,
"amounts" :[
"5000000000"
]
}
}
]
}
}
def getBlockByNumber ( block_number ):
import requests
import json
payload = { 'block_number' : block_number ,}
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetBlockByNumber" , json = payload )
response = QRLrequest . text
getBlockByNumberResp = json . loads ( response )
jsonResponse = getBlockByNumberResp
return ( jsonResponse )
getBlockByNumber ( 150 )
Get block details for a given block number.
Request
Parameter
Type
Description
block_number
UInt64
Block Number
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
block
Block
Block Details
GetHeight # GetHeight Request
curl -XGET http://127.0.0.1:5359/api/GetHeight
# GetHeight Response
{
"height" : "11854"
}
def getHeight ():
import requests
import json
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/GetHeight" )
response = QRLrequest . text
heightResp = json . loads ( response )
jsonResponse = heightResp [ 'height' ]
return ( jsonResponse )
getHeight ()
Get current blockchain height from the local node.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
height
UInt64
Current Height of the blockchain
GetNodeInfo # GetNodeInfo Request
curl -XGET http://127.0.0.1:5359/api/GetNodeInfo
# GetNodeInfo Response
{
"version" : "1.1.4" ,
"num_connections" : "1" ,
"num_known_peers" : "5" ,
"uptime" : "1748" ,
"block_height" : "18098" ,
"block_last_hash" : "8f1e7bc73fab84421351219b8d5dd0d279479b426aa0eae7274c8843284f1e70" ,
"network_id" : "The sleeper must awaken"
}
def getNodeInfo ():
import requests
import json
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/GetNodeInfo" )
response = QRLrequest . text
nodeInfoResp = json . loads ( response )
jsonResponse = nodeInfoResp
return ( jsonResponse )
getNodeInfo ()
# Response
{
'block_height' : '126706' ,
'network_id' : 'The sleeper must awaken' ,
'version' : '1.1.6' ,
'block_last_hash' : '50bc0ada04055b9ee19d3e5a0086bddbfd039c7b3351d8c7851c0d170c000000' ,
'num_connections' : '15' ,
'num_known_peers' : '481' ,
'uptime' : '15835'
}
Get QRL node information.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
version
String
Node version
num_connections
String
Number of connections to Node
num_known_peers
String
Number of known peers
uptime
String
Node Uptime in seconds
block_height
String
Current block height
block_last_hash
String
Block headerhash for last block
network_id
String
Network ID
GetOTS
Enter a slave tree address in order to see the slave tree OTS index
# GetOTS Request
curl -XPOST http://127.0.0.1:5359/api/GetOTS -d '
{
"address": "Q010600a9313090b8b7c63f55b1e98eb098d2a7a844ba283a1efc34c8da9fd68378365af3213673"
}'
# GetOTS Response
{
"ots_bitfield" :
[
"Aw==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
"AA==" ,
~~ Shortened for simplicity ~~
"AA==" ,
"AA==" ,
"AA=="
] ,
"next_unused_ots_index" : "2"
}
def getOTS ( address ):
import requests
import json
payload = { 'address' : address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetOTS" , json = payload )
response = QRLrequest . text
getOTSResp = json . loads ( response )
jsonResponse = getOTSResp
return ( jsonResponse )
getOTS ( "Q010600a9313090b8b7c63f55b1e98eb098d2a7a844ba283a1efc34c8da9fd68378365af3213673" )
Get OTS bitfield and next unused OTS key index for a given QRL address.
To see the OTS bitfield of an address using slave trees, provide the address of the slave for OTS bitfield.
Request
Parameter
Type
Description
address
String
QRL Address
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
ots_bitfield
byte
Ots bitfield data. Each 0 bit represent the ots key index is unused, while 1 indicates the ots key index has been used.
next_unused_ots_index
UInt64
Next Unused OTS Index
GetRecoverySeeds # GetRecoverySeeds Request
curl -XPOST http://127.0.0.1:5359/api/GetRecoverySeeds -d '
{
"address": "Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25"
}'
# GetRecoverySeeds Response
{
"hexseed" : "010500f215b136baaeb8e089bf002cdd7df9969ee284981058c8a0dd0ab1eeb6579b370bba299726de70593a26eddf65336f71" ,
"mnemonic" : "absorb filled verge gather damp prize river angle sash admire syrup taut nor unite lyric locus fulfil memory sword prompt update has orange insane roman ohio chalky took furry petrol unfair warn cried way"
}
def getRecoverySeeds ( address ):
import requests
import json
payload = { 'address' : address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetRecoverySeeds" , json = payload )
response = QRLrequest . text
recoverySeedResp = json . loads ( response )
jsonResponse = recoverySeedResp
return ( jsonResponse )
getRecoverySeeds ( "Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25" )
Get hexseeds and mnemonic seeds for an address that exist in the wallet.
Request
Parameter
Type
Description
address
String
QRL Address
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
hexseed
String
Hexseed for the given address
mnemonic
String
Mnemonic words for the given address
GetTotalBalance # GetTotalBalance Request
curl -XGET http://127.0.0.1:5359/api/GetTotalBalance
# GetTotalBalance Response
{
"balance" : "6000000000000"
}
def GetTotalBalance ():
import requests
import json
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/GetTotalBalance" )
response = QRLrequest . text
GetTotalBalance = json . loads ( response )
jsonResponse = GetTotalBalance
return ( jsonResponse )
GetTotalBalance ()
Get sum of balances of all the QRL addresses in Wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
balance
String
Total Balance in Shor
GetTransaction # GetTransaction Request
curl -XPOST http://127.0.0.1:5359/api/GetTransaction -d '
{
"tx_hash": "931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc"
}'
# GetTransaction Response
{
"tx" :{
"master_addr" :"Q0000000000000000000000000000000000000000000000000000000000000000" ,
"nonce" :"551" ,
"transaction_hash" :"931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc" ,
"coinbase" :{
"addr_to" :"Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361" ,
"amount" :"6656741376"
}
} ,
"confirmations" :"2498" ,
"block_number" :"550" ,
"block_header_hash" :"1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000"
}
def getTransaction ( tx_hash ):
import requests
import json
payload = { 'tx_hash' : tx_hash }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetTransaction" , json = payload )
response = QRLrequest . text
getTransactionByAddressResp = json . loads ( response )
jsonResponse = getTransactionByAddressResp
return ( jsonResponse )
getTransaction ( "931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc" )
# Response
{
'confirmations' : '126173' ,
'block_number' : '550' ,
'block_header_hash' : '1a57bee559af234a157b0429e2d2e3b7b3013ae5a52fd092eeeb22201c000000' ,
'tx' :{
'coinbase' :{
'addr_to' : 'Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361' ,
'amount' : '6656741376'
},
'nonce' : '551' ,
'transaction_hash' : '931c33d9fe1900d3f6093a951ce04e9da31380cdd7bf1f6e23c58c2c8eecdfbc' ,
'master_addr' : 'Q0000000000000000000000000000000000000000000000000000000000000000'
}
}
Get transaction details for a given transaction hash with number of confirmations if any.
Request
Parameter
Type
Description
tx_hash
String
Transaction hash
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Transaction Details
confirmations
UInt64
The number of confirmations if any
GetTransactionsByAddress # GetTransactionsByAddress Request
curl -XPOST http://127.0.0.1:5359/api/GetTransactionsByAddress -d '
{
"address": "Q010500c66bf9e74721c58fd76dc945ac7c35a2e290c6653cc5e4a4fba762cf1254602437bf156e"
}'
# GetTransactionsByAddress Response
{
"mini_transactions" :[
{
"transaction_hash" :"27d27c36a85f012ec8b906fd3d38de7bc2ec0f01a1dc2cab3bea1b71868dde61" ,
"amount" :"100000"
} ,
{
"transaction_hash" :"aad2ba0626c7f1bcf47ea19342bfb888df19e875fcf86b80279be2a9ebdaeb0b" ,
"out" :true,
"amount" :"12"
}
] ,
"balance" :"99988"
}
def getTransactionsByAddress ( address ):
import requests
import json
payload = { 'address' : address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/GetTransactionsByAddress" , json = payload )
response = QRLrequest . text
getTransactionByAddressResp = json . loads ( response )
jsonResponse = getTransactionByAddressResp
return ( jsonResponse )
getTransactionsByAddress ( "Q010500c66bf9e74721c58fd76dc945ac7c35a2e290c6653cc5e4a4fba762cf1254602437bf156e" )
Get transactions hash and other details for a given address.
Request
Parameter
Type
Description
address
String
QRL address
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
mini_transactions
MiniTransaction
List of MiniTransations which includes, transaction_hash, amount and out.
balance
UInt64
Total balance
GetWalletInfo # GetWalletInfo Request
curl -XGET http://127.0.0.1:5359/api/GetWalletInfo
# GetWalletInfo Response
{
"version" : 1,
"address_count" : "4" ,
"is_encrypted" : true
}
def getWalletInfo ():
import requests
import json
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/GetWalletInfo" )
response = QRLrequest . text
walletLSResp = json . loads ( response )
jsonResponse = walletLSResp
return ( jsonResponse )
getWalletInfo ()
Get wallet information.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
version
UInt32
Wallet version number
address_count
UInt64
Number of addresses into the wallet
is_encrypted
Boolean
True if wallet is already encryptedFalse if wallet is not encrypted
IsValidAddress # IsValidAddress Request
curl -XPOST http://127.0.0.1:5359/api/IsValidAddress -d '
{
"address": "Q01080032f6456a56624c6ede775b4165acc640dd48f89a122ac5a69c6244ba08012c863568cb76"
}'
# IsValidAddress Response
{
"valid" : "True"
}
def getWalletInfo ( address ):
import requests
import json
payload = { 'address' : address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/IsValidAddress" , json = payload )
response = QRLrequest . text
walletInfoResp = json . loads ( response )
jsonResponse = walletInfoResp
return ( jsonResponse )
getWalletInfo ( "Q01080032f6456a56624c6ede775b4165acc640dd48f89a122ac5a69c6244ba08012c863568cb76" )
# Response
{ 'valid' : 'True' }
Checks if a given QRL Address is valid.
Request
Parameter
Type
Description
address
String
QRL Address
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
valid
String
Returns True for valid QRL address otherwise False.
ListAddresses # ListAddresses Request
curl -XGET http://127.0.0.1:5359/api/ListAddresses
# ListAddresses Response
{
"addresses" : [ "Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25" , ”Q0105005e6f4e2e95e77fde716e5defb23c4b7cb23124ab6966c9af5adc0ea9f26a12ce67f8c4ed”]
}
def listAddresses ():
import requests
import json
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/ListAddresses" )
response = QRLrequest . text
listAddressesResp = json . loads ( response )
jsonResponse = listAddressesResp
return ( jsonResponse )
listAddresses ()
## Response
{
'addresses' : [
'Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25' ,
'Q0105005e6f4e2e95e77fde716e5defb23c4b7cb23124ab6966c9af5adc0ea9f26a12ce67f8c4ed'
]
}
List all addresses into the wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
addresses
String
Return list of addresses added into your wallet
LockWallet # LockWallet Request
curl -XGET http://127.0.0.1:5359/api/LockWallet
# LockWallet Response
{}
def lockWallet ():
import requests
QRLrequest = requests . get ( "http://127.0.0.1:5359/api/LockWallet" )
response = QRLrequest . text
return ( response )
lockWallet ()
Locks the wallet and removes the passphrase from the memory of wallet daemon.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
RelayMessageTxn
This relays a message to the network using an OTS key from the master address.
# RelayMessageTxn Request
curl -XPOST http://127.0.0.1:5359/api/RelayMessageTxn -d '
{
"message": "Hello World!!!",
"fee": 1000000000,
"signer_address": "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b",
"ots_index": 11
}'
# RelayMessageTxn Response
{
"tx" :{
"fee" :"1000000000" ,
"public_key" :"010500cdabb6ddde4aa16f776cfc10665fcf7efdd86b4197ecd7729dd3309468e819bc4b1cb8081185236cc191b0eec3ed7af1a462f7f7f2f2c7039604d9e9115ff1ac" ,
"signature" :"0000000b114b22d3faca2dd6ae9cb066c102e00ca5438e19be86fca6f70c5265c8802129ffb296b519c5270481c4bf01b9f5abe61a4c2c5b9092946c12df8c6e3c525cb1d8ae15f9799ede4dbc14e5045f2b72166967cee0d03a27a6cce1e7350b7750a1c9d8af5d034325191f40d1712d01600111ab53de3907dab80cfa01af6b149d22821a5431cbabbddb338519e1562158df0dd926d7a16f359d792769358cb171051f9724e171dde49cb0553ac57a718a3f4e95e482d7bc8200b5cf6a20dfa9e6b794c578a14d47ce04991caae4be5343401777f2141b4bd8ecf57f43161e932cd5ab9d34faf68c586e605f6fb1cc5fbc22c6e3478817ca6061474030612a3a9284fd412c86c56634867280bdf32565c38a0cbfc4ce4224955bf2221cd08b09b33b521be6b668959249776fda21e8a577d6e3bd56bf8bd94cf7f58d36997c2ce14121121975476d73bb4c9dafe649f0c856436c0067b5d2609e19cbe505e09b59a61f009f4424539a63d5118208af5b93d0229f615737b83cfe3b102012dc433d919700b7516dd26025994b80f0a68d374e2bd97f2bfed7e0131d1d10ab58d3ea5bb3cfc6767a9e0d30775e33960f5f7587d7e0763724e4ad9ddd10f3b4f77183e3352ec62855c30ea4ccdb63cd62475a7bd4ad1ec6835c8099efee8ee03d493a4723878500e4e5154cb0df94f896175bf135c05551d4fdb7fe1b0e1e162a7b589997d42cd0ef7eb89bdb4b107cd59bb8c77c0cd433ab3eda893b25f8b2968c30aa7156a1f1b9f09530d4dcc0614acdc1fcdffcb3f6b3794f3921e0b2163c975a4fb7a5d7a548a3e4572d7bebea9de3c6e82b0ad1031b864c4921315a3c3be94816a4ac7852df2d23953f74d36b871d1022fe2a60de40f4e45315ebbcee94665571621f64a9f2faad887fe24a231d07eb485d83018fb94ffca8fdd72f44e3119bc0ecf1461b5b49e20ee87ee1146ecc4f15ef4b01959e8da1b63652c2ecd6c3ef78f70cec9d917f31a4f31b436b2b9f0d97b3a3beaa05035d10974a83abdcf2a170a3edd84b5455fd22346b16f7c889d82b3ea624056909f0ad97ea85e1ea3111f666b349421c7230b35a1db7a4f494bcfb73a4058aeeff964850239a968165ecf3f65a361eb660923a35a390c76e4f0a043c982b43e9e50d87a69e338aaa99db1e6a92b6c1acbc7a765f48f4a3d48bbb271492118499a9750ecc4a17146e7955e461b3dcb8734c9962b1e762ae825dcbdfd237ac849713c10b55280aef5763fc5f17fae9ed7bba0eb6da1d5a5fc54e30a8cfe92fa1dedc76b4063af091574200167d2ee659040eb89284dcae02f93b095b1411c83cb41afafb849a9bbd0552cdcf16d83203c3bc593c013b5851481c79e26f8917f1573ab47b8fce809fa4120c52ade22bd35ae3c357bce3707d4357479698662b9abb89238408a42dbe51fd11f471e12737ceaef41db485e24dd248c82c526f45bce0d56ed787a2dfa74ee3aef2d5b398c300b2952dbf263c49becbab651affc7c112eeb00d4fc1c326c89368d675ff4a4da76b4a527201e4d963d6a26a4216c147eb49c22f81f35e43eb4fe65c000669a02fbc95f070a75641373b8ff341d6260bcb10e266020d54074d8452561a52ce8c75f51c6ddd5578ce6146e491baf27252439dd95f639fe60fa7eb0aad00d3f329b6f7209efba406d6aaa9cd08170484ded0c21aecfb1267c5f7eef03bbf5fb8cc5637e7d34db2237331df8e11bc0f1faaa05365198be79e6a72e9dd4e0a3fc53b0e406ab49bfb4f02909d8b6d90a487de465f85f5aacdb8480a4ac39669334cefc2e9631a4874514301d855e7f82e0eb4a3a8b21ef626ad16ee08eb250e4f7c6f6db84300132fbb71c72cec96acd781abfba21bd4fdb82638af2495db2ab13d40c60709431df23db619286b4bb453026f2f08b03bae2f9f64516103b7a88e53e363016eea0303b317a451a49f4b0956435f841b25b9252df42ca97b3c9f873a859012eb6536876ac39525928f06fc56cbb5595fcdd589dc92b2233a33b5139770116b6093cd9ae095b74e413c75780a904d5415a445b0d6a628edcaf532c5a2498f81113575dc74940a28a37139945770f1fcdc645cfc344915306bb80cbbf5c50612dc5c227b4c26226a9948dcf072c9051906e9a1ce544aec7c33c4d58ef48b8937bcb5cb6f9836099e8398caf36be08751c615f32bfa6d2b46b5767efe7baf41fb071e095552a20baaab962b41cacd7485ba25fb9cf350f1a9df23ae9eca1378b72d58c81713077ef73b37f828262243b534fd279d76705ce3f611ec0c80db17b32182ab27c4eb14fa6bac8a905833ffbee502844d159650238d8c92a8c6a0e9f69e4ab4b66a0fa7b935307c611108282f8a2f472acb7c0b5582a0276363a22f124010b00a164a2c00ea8a4115f69d6a7a5a04953e80fc27c1fd65037ae480b9e13d20812a47a22edc8fd23ae24285be0f8af1ad168189a4b68e98d79f4e20dd74a5d835db1901a6e1e68abf624750c6655df53290d84b63a51859fcb6a01a3cff394de4543e746166c95b0773e1fdda720a46a65b3c27229631248967f542f75fd1dd1ffe30c2b5b104b99aa1a8a10312d42646e85223487cd9c61c4f5704f88589c9a3dd00ce4d8a362fa583e8671c1621769efc242415c3272f368563879b5c23e555365f817372241bc4a6e574224730d851c014c3ce06553d0e1211ddb4b3f133abb7c8a7900fa8c344a97c75035ebc2b961c47f44c3f049b3b2812dbbbf58aae33ea71f6db0240a49c3402ca09b725d13169d07f0e236c26629a137e972f5e9f0be856374508ed89ae0eed81790107e72ac7e1bda45cc85c1e5dfb1bb0de27f4cfd64f5548376dca06cf761dfd54256fdeee2275efb26e7cb0267457e61e9909a3321ea81ca2a3b2958b998639b9b7f8ff1c70b745ec70aff3c464695d8079d9dbdf68669de3778b3f1b9954d7f76d7f37b6f7844925926b625c33812600e24522ad8d01f4593db4e5660f87a8d4ae56746d3274ae4b12e80f0d767afa9871c768a1d951c0574d4bbacfc3d3f805da69838ea2b61313db42f72fd421beb75bde0db6e411267f890258ee37b28a9921cf14be5d6ab536bd93ff019970e847580a3e0dbd1dcf436163894c8e883bce4acaa8e48c0d880a948569cc003c775de42b282416e7aa93b5af5a6a9a615bcea65eea484cc6910d8e6a9edf522d397b4b199e251d66e354c31788df70c44e04310296d2a881ac8a82c3d8cfbcf217ed85e418637d8277069daa4dba30d9823d6074642de7b03620677c4045845b32ec97418e1f2683d891652fc178b71a3cc0fd3e5220848daa3e9a0241acd190341c89e1e333b338a52bac42ae0282646dac719d677573eee1c3ac8316028ba96f4b4132c40a75d0311aa473d90972982b730a102e34f883218b61cd2424da52f6a4ae8e84cb7d68e2829355f362795e6b44d143d53a436e96cc065abac9b3c4c609909d527e855b3d575793dc43769da9d58f3f030a1a689e987ad6" ,
"transaction_hash" :"6153f790da13cba0422a379a10bc1f0243536906028abb1211a4a7eb8a977373" ,
"signer_addr" :"Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" ,
"message" :{
"message_hash" :"Hello World!!!"
}
}
}
def relayMessageTxn ( message , fee , signer_address , ots_index ):
import requests
import json
payload = { 'message' : message , 'fee' : fee , 'signer_address' : signer_address , 'ots_index' : ots_index }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelayMessageTxn" , json = payload )
response = QRLrequest . text
relayMessageTxnResp = json . loads ( response )
jsonResponse = relayMessageTxnResp
return ( jsonResponse )
relayMessageTxn ( "Hello World!!!" , 1000000000 , "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" , 11 )
Creates the signed message transaction and relay it to the network. Signer address is used to sign the transaction and the signer address must exist in the wallet.
Request
Parameter
Type
Description
message
String
String Message of maximum 80 bytes.
fee
UInt64
Transaction Fee in Shor
master_address
String
This is an optional field, only need to be filled with QRL address, if the transaction is signed from slave address.
signer_address
String
QRL Address signing the transaction. QRL Address must be already added into wallet.
ots_index
UInt64
One Time Signature Index to be used to sign the transaction.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelaySlaveTxn
Use for addresses you have manually created slave trees for, if you are using the automatic slave tree functions, please use RelaySlaveTxnBySlave
# RelaySlaveTxn Request
curl -XPOST http://127.0.0.1:5359/api/RelaySlaveTxn -d '
{
"slave_pks": ["AQYAPYdez4/TrVmOUecaVLlpZnn1a+ltrfzMPCtQnhZzBtBxEEmp4/Qk199XQs0NMRcttHJ3JSI4qs5XSxEUKbXzWQ=="],
"access_types": [0],
"fee": 100000,
"signer_address": "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b",
"ots_index": 16
}'
# RelaySlaveTxn Response
{
"tx" :{
"fee" :"100000" ,
"public_key" :"010500cdabb6ddde4aa16f776cfc10665fcf7efdd86b4197ecd7729dd3309468e819bc4b1cb8081185236cc191b0eec3ed7af1a462f7f7f2f2c7039604d9e9115ff1ac" ,
"signature" :"000000105654043347641efccd1be09db1883c92b3f0d859309b0c83d7bed26fb2ebfc4847c45c490b1f1de254f2d61c0033c35750ef76c7ea248e9e1e2a8eea680c49bb0df608bc31ddab7866e512588d77d0ec5d32df91eff581a55665668b774fb2adec7054ec6d2c6210f4ee1376c060459f0aa1a42b90d4fef2106e6edd15746b65084ddf51aecf44330a135f509fa292c3ba8a40feb1f48f4f1d95f52bdcfaf490273026e9ecbbb94925546b13905abfc276e4c9f42ba34f7b94e55ed472216cd9a3a22cf3c0bc9c1885dd01fc0dff4ebbe30258243a8ab3b94aaa54fd5bf7fcbafa8e88e18323f5416ce19fc66ff52898bb3994795a9ebd9f36985717fdbc269295feb3cd6aaf34e7e29f4cfc9e2e20cf877aa4de7104d4161a24807862996b35f45fcd4c09bd6e314e1b9ce1ef2bbe1fcf42183e28021b00590127cb0b2754c760bd31632c6beb43cfb19a92833a3bda32129b48f9e7c7d9284a25f2764ed31815d2fe465d671b842a7b10d9ebb6336a45e11473c129aecb22b24835dce21fc64e9f633c4997f0d82167598a90d5b9ad332a7e8db096cd58aa99da8d42694cabf3349def4f29c754d030f35673d626261d38d41068630ea5d1e20cbb64d5540c2232b9ec114d9db6164a786e9a52227c7793451b979a6275c88b325d6fdb0b80ae098eb26c52d361a76dd87ecfd987eb8e79643a495172b53f5941ae782f10d76a2c2514d4523e7068a5108db844e73486ffd6709ec0ae4cfb76790534fc33433546e65d7aa5a65c7257c468206d9159266234ab4518707e41ca6ec5771ba2589da595161705914e556ef6de8c64b972b24789b005eb17198a643a946f27e58d20385a3b4abc3760c0a9728e32c7f0ac313b7d24889fdbde03a4d56a7709eb1696b04b905398358ce0262beeb284bc91fc742ac264502765a781743280103e692f1a6877c15faed814cb059b916a0b5e663e1a2a06bc63eddeb7652eb6ee5f961ea98ad62da12c2d880148d1a838df36dcdd479289fc9675ad965acb222a9a90ccfd8444e2581bb84f092543073e55e31170a58f42bba86a98c35118ff9b69eaec40ea33626a59630485f4d2154c64b3d14ff9041d681650c28a87a42fec1b675f4eacb8560df5da556a63e779f4abb927d7b96e390adf9404594b285d04dada1091544e94d7de3f9f37bf394866b30db0913a0dd8bfc0ebba6d56fd73b720d9c3891e54b5bbccf97c0ce7e120edf50d9e414662817e2ec112603f2e6d82b58e0975c70c5295b32132495cca725259ed593dd8f656f5c79a592036d5d02163ac5356a528958b1a995b3ce034a6cb3bb9baadb5d4a5aaa56fa5dbb737ae33b5c01d560f90147d20b42becf17dfc84f73464bf0a6a8c6136ad10878e5df6879ac8ecf26853a0c433717c972f55924f9400626ae4e132faa16d9c3632a7deeab3272af93183d7fd879cb7c1cd60cf1efbf0eaadb408e3990403f18bb958dcd6edacb464d8472cc6e78fd37e88636e2fe3d6f6172350f88e0f849ebb64de621e1b98a7b8ffa8eb5b1a80008c0d50d14f98db202a391c7108ad694768578c8e8154112edce8df541d363bc0019206331617fe01f865f00692a37e16ac01f345e020c13b2f627efd9c995a0a56f95c99e53acb330911c242d03bb25926573346d9a60b5fe209baf6258ff4db6893e9b7d057b9f30e878dc05625ba1a73978b573fcc5b68e27a1714da4bc57850ba87aa54387d158efe25ebc1343f77a4b081d2322aac6bbf1bf68c6517c25e0b02c123e78ffe6a6fedac958822064d7ee0b2a1c26cc66aaa2f2c4f7e6efad0666eab4cffb3701b1899ab3f0aea3485518226517505a5ed95075d2fceb31568dce531edf8e26b8c28203e71d7f522119816fb024d1c4713327bcbe9d54ecc520515aa46267aa380aa01e887cd4f041d2b1c58cfe8ee4dd34a7d36e57d7f76bbadacb504a77bbb7d31055680b57716907ce0f18a37f5a62a533c901eccbe7666ba3de5cba22071d52ae4a97b454c6fc502bb32905318eff7a2eb2946785e347d107e3c759c08ea036095cc2ae2144e9a77bd439725aabfb58440d5a027053a2fe20068eede65edde58248837d0798335160cc2cd9c34540eb058d6d3b87d0cdac331629c98e4000a8e69ae86a9ccc61aa12791ded0220ba0bd3b8f77bd6b41b2f522bad18c3eb81519ebaaf5a849d2b7b9347b456435333dcb19fecb1ff358c74fba66e02d1e3201b0ad5900da8c1e3a5bcbd41bff54c3922f22c4493f3195845ea8149ff48420a929c520d2247efd08c16ee29bfa8194607e502901b3aa6a908305e38c8f0ca3c3f30d4073df919a444d65e48718bdbbd50fe55ad3ec0ee5cde561cd8d0cea31220de09200da9d256b52c3365f209a471dcbd3a97cbc177027312c1d5c058d75e45fe2ad148892f16c785cfeece83684e19b95801be048fb1a084cb4c6e99a22ecf727d2c75f532cf37743f451731dca83111c16c873157d0bf386bef3245f5fc6490434c6e17ce6989dbdc26ae9b125e4115d071813afc4b31fd40a651dcfaf6f6564049e811bc030c88ab4ee7e37a122cef8ec5c87b1f218b10ab6ea9f33e67e290506f09747e00946c79f20ff1ebf1f30ecc2399133b5626e8a7da4338f581bb01569cc6a27ce77f5dc90f0e1f87748f3d385b006920f1da22617ed533819b6927449df6a0b0ab282db81d531018ef72455ad2a6aa759f13eff4e4c8eb39c6c57906c0082493c381d28325c7ee9b01872ac41ff6115a75a0f085ef6e435f731fd0c59c3096eb19c4dbd51e019616ca774b6835cda54eec19e60b56b1cc1c268480da61f1f0799443c9ff80dfa942643b3eabf1ea224bce40e65f1c2ed7beeda9ddf6ddac9df0a982d7ac5494b111d9f0f193537aa6bae03548146dcc98348d99db755bde2ca33bcbb332abca5c3f345811ff988fb35fc675facbbbd2e1d9cecd7913985657968608f777a61690fd172bc2f3938f3e39d0810140e4d7b1f7f309a170a0da48600f921ac1b3a3dc2b00fc578a659cd56f7e82d3c04710e0148bfbd97305db5732d5d9e43e14aae7b42b935eb93b86fb8db0d722d2517df09f769a401f33d71c7695846dd846e3a50683f4984c57ad24274f97c9cc5ae0063cbebd19c66b59dbc24f81747236eb655d9b605710b854dd529d30e8847a86aaa4264035a77c311ce4a4965c9228adf5ffab81535b17cff12683879a41a3d381d5c12ac834223f48f1cf3a98003dc14feb0726f7ea5ace41343d6a01b2380ebf4682decb1fb18a4129f6b4ebf5a9ae7285d4045845b32ec97418e1f2683d891652fc178b71a3cc0fd3e5220848daa3e9a0241acd190341c89e1e333b338a52bac42ae0282646dac719d677573eee1c3ac8316028ba96f4b4132c40a75d0311aa473d90972982b730a102e34f883218b61cd2424da52f6a4ae8e84cb7d68e2829355f362795e6b44d143d53a436e96cc065abac9b3c4c609909d527e855b3d575793dc43769da9d58f3f030a1a689e987ad6" ,
"transaction_hash" :"b342a5d491e5295a80c0d530f2a2795d08700c2bd0a2f0d4dad2c318da2d65dd" ,
"signer_addr" :"Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" ,
"slave" :{
"slave_pks" :[
"0106003d875ecf8fd3ad598e51e71a54b9696679f56be96dadfccc3c2b509e167306d0711049a9e3f424d7df5742cd0d31172db47277252238aace574b111429b5f359"
] ,
"access_types" :[
0
]
}
}
}
def relaySlaveTxn ( slave_pks , access_types , fee , signer_address , ots_index ):
import requests
import json
payload = { 'slave_pks' : '[' slave_pks ']' , 'access_types' : '[' access_types ']' , 'fee' : fee , 'signer_address' : signer_address , 'ots_index' : ots_index }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelaySlaveTxn" , json = payload )
response = QRLrequest . text
relaySlaveTxnResp = json . loads ( response )
jsonResponse = relaySlaveTxnResp
return ( jsonResponse )
relayMessageTxn ( "AQYAPYdez4/TrVmOUecaVLlpZnn1a+ltrfzMPCtQnhZzBtBxEEmp4/Qk199XQs0NMRcttHJ3JSI4qs5XSxEUKbXzWQ==" , 0 , 100000 , "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" , 16 )
Creates the signed slave transaction and relay it to the network. Signer address is used to sign the transaction and the signer address must exist into the wallet.
Request
Parameter
Type
Description
slave_pks
Bytes
List of Base64 encoded Public Keys which are allowed to act as slave
access_types
UInt64
Current supported access_type is 0
fee
UInt64
Transaction Fee in Shor
master_address
String
This is an optional field, only need to be filled with QRL address, if the transaction is signed from slave address.
signer_address
String
QRL Address signing the transaction. QRL Address must be already added into wallet.
ots_index
UInt64
One Time Signature Index to be used to sign the transaction.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTokenTxn
Use for Token Transactions that are not using slave trees.
# RelayTokenTxn Request
curl -XPOST http://127.0.0.1:5359/api/RelayTokenTxn -d '
{
"symbol": "TEST",
"name": "TEST TOKEN",
"owner": "Q01050045b3ebced076801784baf88d9b710ca5ef035f28ca27494e3709f550fffd840f9ea2c18d",
"decimals": 5,
"addresses": ["Q01050045b3ebced076801784baf88d9b710ca5ef035f28ca27494e3709f550fffd840f9ea2c18d", "Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"],
"amounts": [100000, 100000],
"fee": 1000000000,
"signer_address": "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b",
"ots_index": 12
}'
# RelayTokenTxn Response
{
"tx" :{
"fee" :"1000000000" ,
"public_key" :"010500cdabb6ddde4aa16f776cfc10665fcf7efdd86b4197ecd7729dd3309468e819bc4b1cb8081185236cc191b0eec3ed7af1a462f7f7f2f2c7039604d9e9115ff1ac" ,
"signature" :"0000000c745f4c245db55a57c5c844378df4e2331b34f58337b216826ab1da5861fdadd71de44f28b8eda55eab20f1e686c1888b27ddcf622e59c1150b2fab88b845a595b1611adf36df91c87f5deef2677b4bfbc723e25252a372a28fb1f8e8ee09e77ee6755dac694dcf6e4e72f0633e0c60f9a0604331fabc853b3d80e8b59a5358ad3a8fbfdb6b8875131bb1213a60effec36facf9212abab091ec2d4de9da1ccf8735c3422d85c6833731a0a0de081408869d1364f207d01a52143d8d907c69658a9635517b05e0a9845f83588293614755f47c4e80e2f7c9327339c37ffa05f11a158a9024bd2f952ab7302ad57ce69ad7137d8ecd841fa69d59221c5c2bd510b15bc33c03db81b8c9de0d1229238ea74203f3404b854be029e132be7b4d49171f465bb5bdc771d6e7ba9d23591081b33ee4ba7908d102e475600251d5404d9be28a2c427cadc3b9208ca8b2f03980f3bdb94468439f93e4273efab70a8b68174a625858757c940ed8d1324e4be9a1bf9dc7fd705c5caf05fefe8fd4a3c1931b91c99f99e020d62ebbde25163967121b65c85c949b522dd7ab64d2cbac2e30803722b3c49f0bd4c5a281ac76095578b8f49cf363136e4022d9b44ab3d209bced12c7589bdcf23f20020a163671b7e718850e52a59eacf3d97909763720a3214fcd39d50e83f7a7fe11995ca7f24eeced74ce2c8e89e34b3a350f4a4efa3207b6efdd96d4cc89fc3ef27e540d3567d74f59c233214c3f750d44e55775089b168d69533a649398006004a2fb98b82bf01bd3652d025f2e871677b4ad2300262466b07f19c029d46d8474913c42ef2287f60bd13c472a353982ca3c5bbed915738aa8a786513b923148f74225e4eac76450dcfeb54e93532c565ee83f4b95e64b91623b16e27566e2658cd07527033afa9c7d04c1a7aa10589e3d391b2a2fd7fffd7e963c9c8bf108578f1b8509bd8d17991ec3fd89a7ee85c061fa5997df696a344c606843a37cfb9c8aa7ff17a8c57cbfd8036472f9cbd23b16cfbadc735a74950ba5d233217ce2352248e67a81db36db0e14019b4275ef8d4d83b9f701bfab9675e1a084cb44f521c3e8fa335db3a36b8471d69117147046138104128a9fe76ed5f93b883dab8384957ab5e288b311533e476ce07ee45514a730f8c292145da8b03241e5e7ae5b1be886e8ddcb1fc5ba4e5f94f38236bd42e6e5957916f1261ec3caf2be4500089deb2b17df2ad8692d9426020210314845f6ced9b02cd99afcd982c0d01061ca53763b71cb97810da51ab7ca1bbe5aebd63cdbb9e5c661db72b0d69261f31a090ef2ee9f3c3ece1598ca6a78cc84e6111c674a5a079cbfaa98e952afcb86d23871d923dfc4c210e05dae3b0e37692c50f87c47115b082e11af9f6808ffbe03d85cc26fe7a53b386030bb0ea09791b26b71f77cd006469cdecdb903bd21dcbcd9ec777f362cb785f61a2c15f5d9eed88e1ee02a4a8dfdb91d7bc88b1e64d6b17a278e5942db361ce3ed307aa0276552ac5305187a21dcc6dfb82ac88e40b8e1120961cd4a516c15b13d737fd908894fd707108b52e36adc1e41f1813954efd48fff9d8ef96966572730abb2f4cb5c412665ddbd508047345ace9b4cbda610bcbe670ed410895a21df22074a9fb575d122a1d3a084cba558160d719df51216c4ddd68b59ee066594fd5783546fcc030dd8c07ca82ea8aa7843e882d1872bfca656e226273dff6aa1ff64b167852b22255c0e37a704c68ada9783468f4cbaaf8ff6a0f81dbaea47a9dd834c004146121bdf0f4839c14f4d2bcc3ed99cab582bbdc4eec9bea84b0af724ddcb422e75acc2980915dff5f2a8a5ed3eada88eee8ea326840af6242af4eee0ed37da40894fe6a6b0d27068aae8e3d79f84af920569155f6af94684bc66ed6b3fb91afed4d3e9dc435582d341072316d05b615eb3b9d9d833f02a70748e0df6af3c20b019e8ceabfb3f629e94b68c6c7110d794ca5d052e25c1e1ae6e45bd0bddeaf782b8fb314ed0704800dfd06f33d4775ef9c2d197d89bd18d1ae1d056105b1918e9320e370d9fb42180398602a2b544402706f71537c6b2efed803aecbf027a8b612157e3b1e9bc332b9c89b6773f44751c19904bce75d0febcde3ab3330888ad5c9e6a73ba5b3d3ac16d29f76c323c8b69cb9e5f06d58b946e1a2370b116240b70df26f3e3700ad283115a64a72ff28f1a74a25f1f344ea915d82d06cf7a521908dbc45af5d4d9bdf938cc59969b2ed953962c29a0e64ce472884f5ad1aefeaecc35b7b281879639209e4bed32630287b7a6a9ffefc268c60b5be2cfa19eb7e580a56d477d2b928045f2c1086128bb33db6e2e87a115d692bd989ac392051ad79dd7565fc5a360433c9f54cdceb568030f25516272262460ded81f12130273f24fe40c5bd72fcf6e0566642b3648b35378a2ea4ed2722bf2ab3a6fd07019b1bba282ae7e749ddb83362d9b3172b4a6b07e138f66b8b58dbdf404efc001c9e822fe89dddfd9e54f4331b7cef2a5dddb0829b754d963b95266c1668d74938fac9e1cd0a33dce14bff33a5d9ab23bb7835f18cbfff28524959405b20ac723951d609730bd92f8400ff1862f1f45aba0cf5fe8eca21da749503e46482ccef03171f6c4776340d0adcb57b4692905fe379250d40273e08526609764f71bd07c051bba52671969ec7ee396d6fbdbff485cb23b86f82fffc64305bcf16a8db16e7c9881d9969a90212eb207f7cb93cd0e0f8dee2ea6dd31b8c78c5eb4574f1a8675684d97e2988379cb3164163dc718307e88d2253595f9b2748fdfaf528a5edb1b820f3a7d8fd78ba92fd0cd8301283a8bca6d35c0332bd10c9761060a2c69473b44b7d47cb77b4bf52682bb44c62e51e93a22e5deec113e1de9dedb1d74de24c10b8e7aae3a9d21d4251f4874b57e87580b0625ebc8d3493554d3684ade469a9ccb9f6d85f4905e66481972c65c1f85f0eba489b477a7ec26e74952f611ca7b205fed3e6bff0b44161e6898e58f187d96c7d8e5ea9d83fc4345633ce9a21dedb971c156a31b5aeecf72ab73cb2740d2607a05689c9ab33e8cf58f222c73048b277eb9ce1d90eee5fab1d42b72b04ed4c3e5cb81794926f348c63d70f0916971854922e9788b38e124b9afaecc895bfd93331849a49ef00877e542592a5aa12738a0edfd44dea0bdd4cd8f71c81b13f15def9edf522d397b4b199e251d66e354c31788df70c44e04310296d2a881ac8a82c3d8cfbcf217ed85e418637d8277069daa4dba30d9823d6074642de7b03620677c4045845b32ec97418e1f2683d891652fc178b71a3cc0fd3e5220848daa3e9a0241acd190341c89e1e333b338a52bac42ae0282646dac719d677573eee1c3ac8316028ba96f4b4132c40a75d0311aa473d90972982b730a102e34f883218b61cd2424da52f6a4ae8e84cb7d68e2829355f362795e6b44d143d53a436e96cc065abac9b3c4c609909d527e855b3d575793dc43769da9d58f3f030a1a689e987ad6" ,
"transaction_hash" :"f4dc69594ea9046d30a39212f3d686830d34c8c19339e21cb89bd6229391ff70" ,
"signer_addr" :"Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" ,
"token" :{
"symbol" :"TEST" ,
"name" :"TEST TOKEN" ,
"owner" :"Q01050045b3ebced076801784baf88d9b710ca5ef035f28ca27494e3709f550fffd840f9ea2c18d" ,
"decimals" :"5" ,
"initial_balances" :[
{
"address" :"01050045b3ebced076801784baf88d9b710ca5ef035f28ca27494e3709f550fffd840f9ea2c18d" ,
"amount" :"100000"
} ,
{
"address" :"01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9" ,
"amount" :"100000"
}
]
}
}
}
Creates the signed token transaction and relay it to the network. Signer address is used to sign the transaction and the signer address must exist into the wallet.
Request
Parameter
Type
Description
symbol
String
Symbol of the token
name
String
Name of the token
owner
String
QRL Address of the token owner
decimals
UInt64
Maximum supported decimals
addresses
String
List of address to whom initial token will be assigned
amounts
UInt64
List of amounts of token to be assigned to addresses. Must be in same order as of addresses
fee
UInt64
Transaction Fee in Shor
master_address
String
This is an optional field, only need to be filled with QRL address, if the transaction is signed from slave address.
signer_address
String
QRL Address signing the transaction. QRL Address must be already added into wallet.
ots_index
UInt64
One Time Signature Index to be used to sign the transaction.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTransferTxn
Use for addresses not utilizing slave trees. This will consume the OTS index of the master address
# RelayTransferTxn Request
curl -XPOST http://127.0.0.1:5359/api/RelayTransferTxn -d '
{
"addresses_to": ["Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd", "Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575"],
"amounts": [1000000000, 10000000000],
"fee": 1000000000,
"signer_address": "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b",
"ots_index": 4
}'
# RelayTransferTxn Response
{
"tx" :{
"fee" :"1000000000" ,
"public_key" :"010500cdabb6ddde4aa16f776cfc10665fcf7efdd86b4197ecd7729dd3309468e819bc4b1cb8081185236cc191b0eec3ed7af1a462f7f7f2f2c7039604d9e9115ff1ac" ,
"signature" :"00000004d571da0ae2a2726773881bb65901b04c643e9d3bd811bfe3965c6f65c0eeb2b0cefe77322b983ac83262a57dcab7ac822d30923c46cd4a4c01bc9a76dc5f69e133c93da01021252dda1c7cbfa1360c1e4cbc07fc2c789959b7688cc3a7bd857046994b8980ebc77f035c13e03f0b1f33bed313bb350f44f73a97c846488ce7e8f1b7080cf183a12f9c96f7fbf8b1e939ac8ea4abf4b90ffb9a2e977d46126f47791bbfc2e1b3e45b933fdf8ef993fdeb5bb64903450c46b881acbdc9d92148595a003a79163fba352f60a07c3b3bb9d9bfcce3c0f14495f81c77f8df4f667ef5e9fcc9a94ea14a09bc578fe5906d4f9e5b47496f5f34be4405f83e3ed75724cdea2d022a7219ce45cb8fddcd92663a608431e45f2be9596f39f9637ac77600375ed8ea51ed506ed56c9c7081fb4e3d89c18c1da0ac0ee71f03040ef67e55e33c6c21e35b1ce10efec1373226b6e67986117826023c4694925cd46b519726c8de4dbb5d3b9b0a7bc21430c0e71c6f56372a021b66179e5e9808e665b95028f48c187f26c8c38802faa4e9ff19df5f99a23d54370300f2862d53a089c720e5ee9e81df45d364bdc67f1d459d445e9be91e670279aeba324cdbc190fbfec44cf91b490f71ce7ee2b2340f6b3ff75a18fdeae36bf7d1d982953f9251d877b5a8eb24e2fa43cadc1add51ae2869fc55a7d2035f911f8a15dabc39e819f7179a4fc1fdd629cb4bf326e3cf4d14b9f430bf879ae9853028537152dd7a6ec6b58f9db7f80c235d2b5df51939be95f4ad0f8532f358a7e31d10305f4edc3da061647e8b57d679ac3e6e455312e900c8c600b35714bd8b06d238517e08060cbb4e178e4d63342612e4c96381e14a4c4362121ee0a38830877df18fa0a3c05a531f2417e709f1d4e150a46c2ec7e30a94bace5b1ddff19404fdede3a7c0591d451c5c9c0b5a28f8dbd9c0a63408ce94614489d3a80b3778ba2d934d3a0618a2ebfd395fd58161a409b4dada99827ae5c383c1d4cadd61aadc1c55a771e981cc815f7ea84d4af1853614859da39b2ffaea20303231cb78444aa64ed500f071ad4570667b9b70b2a3ea82fb62f49507cc82feca52716bfc79ebeaec2d81302fdef30cd23ad14967292cd8923acf11e8c7e81ae8e96d5d8cf65d99b438a9b9c11df7e31eff40f68a6c558536a5373c37b257bc89528d5361cff0a20e3f216fde1bad6ee5659f7a80d0ce6057d4789e4e19a6a0514f3f34775fb804014c3739aadc22c594a2c21922dacc7450dadaed46e15732ffd367290954203ab6ac47e4b586752f75530ba610e179ce3e75d948c3b652a001d43a2fd3cefc85247e4a638a5e53f7b85decc07c35b782bb7629970dcb7f15656b8741b3c715ac1dab604a548116ad0711ac47b3c03bf68ef05e2fd4fe6e2bd3dd0cc99cd2bf7d0b20a9e215e40c253f6c1e2f79f3275d803a3f67761d8d539dfa849be5b6752aa023358c0ce26be33171749b0e19dbbe8e7b13b1e15d52b93eb927baf9c4a0800f5b2679c222e1aad23adf404fb8e45ac8d10f6385475798ce1543cd0ee41b8f0ae0ed99bb443d13dc9d6628ba561697c747439fd7f7ecf169af03472046a8a34c5085d5ee4ecacdf986ef9cda316457d5d47b064424ed82e41e36a0081080605f53510f53589d9e277ac49b66dd6a7c91a45e5c5adaf109667bd67ad458aea1db01787bbc2b3f9fc27b00de07ac49bfaab2c889516abf9415fd9432bac7210ecb5f8a3e0f3556e931d4369d8cb713f907f5d3e2f82629300b9e94f43e3fe3f1da58e4620cd4c43f7d213b7952450bd0d747af787bc60e6c3a0ae90a9b71d743c50c63a44d5d7ee76b321cc31f4983b229756c068061c83264c1154fbc40d62f00f36ef40c80fa9f5b4560f64876dc1213aefb901068c7aa788a61ad1694daa488bdd64f396224c193f7eb2157c41755f70a71f71472574912bfc0156b24fd418d8a16f30393d7bf195f4353bb87af4d28c716ba308766fcf382eaf560fe80d9c92cbdfb2857386741fe5d531c7307b0f885ef9004c3c996dce6f3f880ea225a12f61ceeb0f7658c54733701a3a36218044e9beee9a71262816dda82af97e7e2c610e10723266d57c37541b8dae51268c1ff084facf74c7b84cf0d5654db1138ef0ac462298aa3721ce81c9e4771646d85894d69273196c8713b62a77f785f952b7ceb3b12fe8694f4193c3002f686ac840fa321b2d86c7f6d0d228819a6d810c68cdb8fbc1d6183ba8cd9910d439696f7f9b095d1979db4a415b2ced70a188ef5aee8154601f0dc5649e1f35b1d874ad189fea0ab91adf5f4bbec2e62efe59106496f85053cab5874d7d5ff02bd4c7a06fb7581149aa03ac34b7c957e130c2646cec656801fc2d9a641737bec54bb5a9148af3d815cc2c57535b2d0759ed69a9159dff122492bfa946d312893a2435ebb984aad9c49c2450819f47f4dd40123c63081cb29ead531cccd44aba6277e5d5ebc666f47f49aaed7c631244dfd26d76e323c26ef677f014cc1b97edae855c441212a7b5348fc7aa710ce7381e5cbc61b3985c3b453c9ee2b4f289d08595f816f2b2d1d3aa8596273a18836913b60d83dc517897eea020492c8e763612363fd9a9577a0f6811c41de2b11f8af2f5caaa447ce84c2e71a9e7c3dd1cb281091e8f6bb183cc48f1a3042c2a68a3079c7ae3a6184ac513b8e9c2d525d2996d4ccaf4e56d02112abf43d2fa91af112ce524e83d1939b45cbf0ef97449065851e61b56fbd70c010c5523cfd35d18b28b088eb78a8b5705c74507d4919e99608aef6e0fa2647b8a2b6c3b884fe5f2f21d1abd62ba65981ddabdb94782512487a3618e8b14b057bf4746458234fd54a596358a528b49dac1491c2ad76fbc316bb3d947007375151fa46fcd9da8d29dd85cd086f2dc19daa5a14c9fe1ad17ad81b9559edab5ed297a83e1f13e62b81b49a1db1ef857a46b6fc4aa1bb83531a70e88d32c4769154ea9ec297e4988e423d6895c95f2b0fb217f4f786ae7225ef44c88fedc8d1321ea1426a26bbb6b597480f1e7ca646a0f2b543c900fe6a4ad87798bd05203ea90859f9c731cb861c5a441e190a08c5a40c91a3663d8360f25f658e95d4e61b421dd2130dd537f204e67944e345c7455dd77660ada17d450e1cada1f0673dc4c8260ff87f3bf03b75ec43d24f17c5434efe4276e4f6f0b566832fe3582d93e4c2e8724e1298306bc1e4bf3845a712574533a83f82b415be7cc8a8d8cfbcf217ed85e418637d8277069daa4dba30d9823d6074642de7b03620677c4045845b32ec97418e1f2683d891652fc178b71a3cc0fd3e5220848daa3e9a0241acd190341c89e1e333b338a52bac42ae0282646dac719d677573eee1c3ac8316028ba96f4b4132c40a75d0311aa473d90972982b730a102e34f883218b61cd2424da52f6a4ae8e84cb7d68e2829355f362795e6b44d143d53a436e96cc065abac9b3c4c609909d527e855b3d575793dc43769da9d58f3f030a1a689e987ad6" ,
"transaction_hash" :"1f5648aca9b23cf18fb6f9bbac132e976ceb76c11c2dca47fb33ccda04448c16" ,
"signer_addr" :"Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" ,
"transfer" :{
"addrs_to" :[
"Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd" ,
"Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575"
] ,
"amounts" :[
"1000000000" ,
"10000000000"
]
}
}
}
def relayTransferTxn ( addresses_to , amounts , fee , signer_address , ots_index ):
import requests
import json
payload = { 'addresses_to' : '[' addresses_to ']' , 'amounts' '[' amounts ']' , 'fee' fee , 'signer_address' signer_address , 'ots_index' ots_index }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelayTransferTxn" , json = payload )
response = QRLrequest . text
relayTransferTxnResp = json . loads ( response )
jsonResponse = relayTransferTxnResp
return ( jsonResponse )
relayTransferTxn ([ "Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd" , "Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575" ], [ "1000000000" , "10000000000" ], "1000000000" , Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b , 4 )
Creates the signed transfer transaction and relays it to the network. Signer address is used to sign the transaction and the signer address must exist into the wallet.
Request
Parameter
Type
Description
addresses_to
String
List of receiver's address
amounts
UInt64
List of amounts in Shor to be received by receiver. Must be in same order as of addresses_to
fee
UInt64
Transaction Fee in Shor
master_address
String
This is an optional field, only need to be filled with QRL address, if the transaction is signed from slave address.
signer_address
String
QRL Address signing the transaction. QRL Address must be already added into wallet.
ots_index
UInt64
One Time Signature Index to be used to sign the transaction.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTransferTokenTxn
This will use an OTS from the master seed or main address, if you wish to use slave trees, please see the Automatic Wallet API section
# RelayTransferTokenTxn Request
curl -XPOST http://127.0.0.1:5359/api/RelayTransferTokenTxn -d '
{
"addresses_to": ["Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"],
"amounts": [10000],
"token_txhash": "b83c82f71b44d3b080e2f511ae7097c67b9a80300414a8bd1d8b06c01cde8522",
"fee": 100000,
"signer_address": "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b",
"ots_index": 14
}'
# RelayTransferTokenTxn Response
{
"tx" :{
"fee" :"100000" ,
"public_key" :"010500cdabb6ddde4aa16f776cfc10665fcf7efdd86b4197ecd7729dd3309468e819bc4b1cb8081185236cc191b0eec3ed7af1a462f7f7f2f2c7039604d9e9115ff1ac" ,
"signature" :"0000000e0242bd91fca4b09a3f29e2e335e29ac5a82f5a4591598b1e4ecc7ae45e5a86a13e6eff6ee63e450b019283c15a475aa6ae2867fe531ac566083548f65e406cf7a1212951eb2d653240170496845a3bcb9a8dced44d00eb39381491959fc25090f9ab186013c394a091b136f631d347ff74266a8f231f6067699b12a0854c876ebab3abe5e24f01e3f742f2c0ed2ad614ce027127f3c0910cd80335fabbc0233669ceb5382061073dc03cc311d77534d0ff5fdca73161e7285580ee88de9379f03a1e8a251f06e27b637376a59d24848653144552a4428d83b9b1a392b7c814b80b2a22aeb50c533bc080550f2610e1f931f1cb9b81cba44cf6c7bdeb15e1da4658a52f0c532fe18c9c4b24c5a57ee32e58c754a005029048e818e671284484ef05360b97800e27734da25a07c150e5b41f6496e335eff752904e74f890dbc9bffdf7cec52e3138d26facbfb07c56ef9084c6cb86f99e15b1882ea12aed8d418a051cff91ed398f7f598896e9423475596f6344ba72b46aeb56ffe8773f7d0b030684c8e31736732e7b81fcc8f0003685b77a2817ae4df05ba0325f87cd9ab1c1c0670a2be6b8df2e85554a8218a9b3d6f30c60a81858de82c7504ad13779a642507898819a621a7f41e52dda03f6d0ea975e3d69583790b1fea39ff5c42895b996f6d95045b43d9153bff4a3f7801d7683c23bfb4a4a0ecbd6075144085438c86fff381fbcd8cf828576fbcf114e11f5a7c9e71db4ddefc8d5f0721da97015547d5eb5cd701c41deea0b619e72ebe5778da20c49d2cf767a372169932ca8ea5924d359ff2c32102348b2ebe0ede2db37ac11d4280fea8d72c76dcbdeec94cc6b3f00bbcdd6dcfa66459ce77817926e8ab3d029b0c28673e86997af8a96c8e62beea7f1a878ad9c2b5cbd7d369f8ae1c230f591770d39e4b7b489b3129afad4b79a6fbf790e48533b3e10fbe25a23e442fbc7b471946087b75653d1fc46b338688bac3842f3582644321e304e441f2ab7e364836d43851496f199cf890e88d8a8d63436ac96f08f6ecc40773c81262efd9abb81317cd96f21c0a3528a1a1c866d384db993a532990967c20dfb9f9f2f401f8aeb846ec8ec782fdcc0468cd4811223256db756667e16dfe6f83837e21f31ebf2fb9d5942a9b21cc77a3590a5591f14490649b0cfe48b50c63271207fd1d43c68db7824ee7c732c74f35c74e9c486d2a1d3bd3e449e8c9ccea8a14792ab0bd33e0c9a206eb6455295a060b925469da5072bacc52afe9fa71397a01789970a6bbcaccf0f339583e3bf62721437ebe0594e764d5b617e763ea3d958227e2848029001ae6e1e04ffe4a6307a300e882683d1d523dca566ca9e911cf069f8838d61a7900d45917d5c53a39513b71752ff7c6aac591c406b2d6fd7133faaa68289c174324c5dc5e77bd9e2131a1d19e3e12b6380590fe6e558477b798c8200b507731eebfcc8828194866a589e050cbc7ba8bd738a95535ecb0b9fea195c9a23d44ddfc7eb05f8c41c1f11f39d150ec77915da92f683c7eb8f00250274d5053c0341cfab7c79d3470dbca5a1233d3b5b726c89f0a204575788ee49fb15557e03a671fa85d82396a913f0296d0c10d7ef08309f64ed2c2ac8dd4f4e31c27e36dae88b7848b9fe04d5dff4580f341291273d02c81977733d3b48a9b625e73421a90e9c45d819edd6bf6bce82107fedfca843f471ebc6cb8b62c39ddad4ae5717914fa5122a27f2e9d6974e9d824a1657b846eb24a94111aba778edeee65b70d6e3165dc309bc9cde097e8b6a0f60fd715ae96822922acfc0f129ef27e4ce9f067c73be893fc63f940999c114d68201c0ab3a0c9cfae5e9a27273e58257005cea0b976e60f108cf7172dde58957817987875b1be9965f2d33e1f0bf2cd20e5b88705a350a26ba25df086ea61f3db03f51a6d82086a134e9115fe1c08d345a551dcac623974b09f706a5d170d53c16457116220cfb8dfe1d352e2c61ea32bcfb9bc2071fa70ea65e8215d7d1f9caa0c07ca14f29e08b1321afb24ab4a6fc6bb18445c7c678ee16c1cdb4e82ff8402c5b9e0b4b39593214a75942600db03c2dff76ff3815cf002606d2ed51352d8e1a99f692f129151c055815228d107322faf3eddf675943d5e5bf554a545070f0c731f9ba8504b6e0e27e0a489e0d285622aab89227135c5d88c8b8f89f8bfb0dc283534f9311e19a8331b15de01efb3e3411c5ce01d7d35479123931e670855de946b4ed51bf834d6c935238d73a891430c8f11c27add888a0657d820edf5c8a46fa7a65c1358af580b5c70276b1ce1e11108c6b842c5e92816c94aa45bdcfaf0bfeb7b99b9731557d90e67fb69c5474ba4cb565a5c026a8e410395c9c0ecd23f0c2dcc5ffb5759323bd50ef92cc3870658359a3f9ae0bba83043bd8e9d5aaf45f0004b75813fd13218ec63f36ec06e4327894e67431d379579bc1c84eac5d8f3cb4bbd385b6663b764ec493be48eef77562b1a6912ae77a5576b8fd3fad2947a596c0e222ec8f403c8e0a354c4eeae90b94ac517227a9e579da5a9c33dab16364e2e2f2a4bda36f5715b98d110a88b433064c5884ade8856d4a3108c1eec6102bbd30785b9603e8e32be90cd59f3621a474e391a4b6139faaae407fe5e8cf5b7cea39bffafc55d4199cb4d251a01099ee8c7da86ee92c3c8947ea3b522df517a41019b3c95beb89f928df81f40c29781791b57162801a6e2bac829b9d66e16837a3df11412f7fd7da5b1403fcda3e27686b79712440e44700eb766e81f6652807176503d94dde7e1c847e610b5e26f7f9e4bfe2b5b85e9f8116204509a8b7346211c08fbc5269e62773bdb1cdd8bb17900ba436f4e7b47049e2402c7488d093d410df3d9f110a7a3b6c863ba4541dd5f5170b2bc24d8a02475023696d1be147f285bce41e7f803263cdcab11fd6aa40cdc73be9d4235172075c3f3d9ca6d0e9a5959deb580b094b385d866ec7588cda37031bcd7e468ae1573c652244150ea103745333f12058bea1343b165469877b8a781ebda4bd0a604e02323ffbb44120f758fce5d9aee9997ad7edb7006b517b3185ba53c589f26b1460196a5afa4af883b7529952efcfd5224bb3fa3b91669f62529c8fc8b557ddf546b02689fb673c4645e6d79e1849a49ef00877e542592a5aa12738a0edfd44dea0bdd4cd8f71c81b13f15def9edf522d397b4b199e251d66e354c31788df70c44e04310296d2a881ac8a82c3d8cfbcf217ed85e418637d8277069daa4dba30d9823d6074642de7b03620677c4045845b32ec97418e1f2683d891652fc178b71a3cc0fd3e5220848daa3e9a0241acd190341c89e1e333b338a52bac42ae0282646dac719d677573eee1c3ac8316028ba96f4b4132c40a75d0311aa473d90972982b730a102e34f883218b61cd2424da52f6a4ae8e84cb7d68e2829355f362795e6b44d143d53a436e96cc065abac9b3c4c609909d527e855b3d575793dc43769da9d58f3f030a1a689e987ad6" ,
"transaction_hash" :"054d93386468571118aaa7992a76eff28feb25a486b2c47b811527a49c6b52fa" ,
"signer_addr" :"Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" ,
"transfer_token" :{
"token_txhash" :"b83c82f71b44d3b080e2f511ae7097c67b9a80300414a8bd1d8b06c01cde8522" ,
"addrs_to" :[
"Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"
] ,
"amounts" :[
"10000"
]
}
}
}
def relayTransferTokenTxn ( addresses_to , amounts , token_txhash , fee , signer_address , ots_index ):
import requests
import json
payload = { 'addresses_to' : '[' addresses_to ']' , 'amounts' : '[' amounts ']' , 'token_txhash' : token_txhash , 'fee' : fee , 'signer_address' : signer_address , 'ots_index' : ots_index }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/TransferTokenTxn" , json = payload )
response = QRLrequest . text
relayTransferTokenTxnResp = json . loads ( response )
jsonResponse = relayTransferTokenTxnResp
return ( jsonResponse )
relayTransferTokenTxn ( "Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9" , "10000" , "b83c82f71b44d3b080e2f511ae7097c67b9a80300414a8bd1d8b06c01cde8522" , 100000 , "Q01050073e3a3f64c912b63b9e89ae1e0176b5a794f6c69cec07e59fa1d4d2322b1349ade09c68b" , 14 )
Creates the signed transfer token transaction and relay it to the network. Signer address is used to sign the transaction and the signer address must exist in the wallet.
Request
Parameter
Type
Description
token_txhash
String
Token transaction hash is the transaction hash by which the token has been created. This is used to uniquely identify each created token in QRL network.
addresses_to
String
List of receiver's address
amounts
UInt64
List of Amounts to be received by receiver. Must be in same order as of addresses_to
fee
UInt64
Transaction Fee in Shor
master_address
String
This is an optional field, only need to be filled with QRL address, if the transaction is signed from slave address.
signer_address
String
QRL Address signing the transaction. QRL Address must be already added into wallet.
ots_index
UInt64
One Time Signature Index to be used to sign the transaction.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RemoveAddress
Use to remove a single address from a wallet.
# RemoveAddress Request
curl -XPOST http://127.0.0.1:5359/api/RemoveAddress -d '
{
"address": "Q010500063bcadecc409dd914eec179e3a3cec6cbb7f4e35c7a6af274aa14b3b4349f55a3c2cc25"
}'
# RemoveAddress Response
{}
Removes the address from the wallet. The remaining addresses contained in the wallet will remain.
Request
Parameter
Type
Description
address
String
QRL address to be removed from the wallet
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
UnlockWallet # UnlockWallet Request
curl -XPOST http://127.0.0.1:5359/api/UnlockWallet -d '
{
"passphrase": "demo123"
}'
# UnlockWallet Response
{}
def unlockWallet ( passphrase ):
import requests
import json
payload = { 'passphrase' : passphrase }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/UnlockWallet" , json = payload )
response = QRLrequest . text
unlockWalletResp = json . loads ( response )
jsonResponse = unlockWalletResp
return ( jsonResponse )
unlockWallet ( "demo123" )
Unlocks the wallet and the passphrase is kept into the memory of wallet daemon.
Request
Parameter
Type
Description
passphrase
String
Passphrase to unlock the wallet
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
Automatic Wallet API
The automatic functions have been developed to assist the automatic integration of addresses into large commercial systems. This simplifies programming by allowing an address to be used for an almost infinite number of signatures. You no longer need to validate and track the state of an address, as the system handles this for you.
This service describes the Wallet API automatic functions. This is intended to simplify the programmatic interaction with the QRL wallet and will allow further development with automated services.
The WalletAPI
and Wallet Daemon
now include automatic slave key transactions and lockout management. When using these automatic features, the wallet functionality has been increased dramatically. The last 5 slave keys are not automatically consumed, slave trees are automatically generated when you get close to running out. This creates an almost infinite amount OTS keys for a given master address!
Auto Wallet Getting Started
Using the functions defined below you will have, automatic OTS key management, automatic slave tree generation, and additional OTS usage protection saving 5 OTS keys from being used by the automated system.
See the WalletAPI section for installation and additional instructions of the daemon.
Automatic WalletAPI Methods
Additional methods are available by using the walletAPI .
AddNewAddressWithSlaves
Use this function to add wallets in an automated system with slave trees automatically generated. This will automatically re-generate new slave trees when the current OTS trees are used, giving nearly infinite transactions per address.
# AddNewAddressWithSlaves Request
curl -XPOST http://127.0.0.1:5359/api/AddNewAddressWithSlaves
# AddNewAddressWithSlaves Response
{ "address" :"Q01050064972e6af06b1073172d7e7b27f3d437d4f50ec1587f491e18d545c249ec3a6e484dfe17" }
## AddNewAddressWithSlaves Request
curl -XPOST http://127.0.0.1:5359/api/AddNewAddressWithSlaves -d '
{
"height": 10,
"number_of_slaves": 100
}'
# AddNewAddressWithSlaves Response
{ "address" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" }
def addNewAddressWithSlaves ( height , number_of_slaves , hash_function ):
import requests
import json
payload = { 'height' : height , 'number_of_slaves' : number_of_slaves , 'hash_function' : hash_function }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/AddNewAddressWithSlaves" , json = payload )
response = QRLrequest . text
addNewAddressWithSlavesResp = json . loads ( response )
jsonResponse = addNewAddressWithSlavesResp
return ( jsonResponse )
# Add address with height 18, and 100 slaves using sha2_256
addNewAddressWithSlaves ( 10 , 100 , "sha2_256" )
# Response
{ 'address' : 'Q00050097a8a01a5269f570ff3c3914aaff0cf0a8e9869804c9190768fe123a6b547cc739a9558d' }
Adds new randomly generated address to the wallet with slaves. This function is intended to be automated for high volume transaction accounts for multiple users.
When the OTS available count reaches less than 100, the API will automatically re-generate new slave trees and broadcast to the network.
The API will not allow the last 5 OTS to be used for the given address.
By default the command without any options will add or create a wallet at ~/.qrl/walletd.json with the height of 10, 3 slave trees, using the shake128 hash_function.
Request
Parameter
Type
Description
Default
height
UInt64
Height of the newly generated XMSS tree (Min 8)
10
number_of_slaves
UInt64
Number of slaves to be generated (Max 100)
3
hash_function
String
Hash function for XMSS. Possible values are shake128, shake256, sha2_256.
shake128
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
address
String
Return the newly added QRL address
RelayMessageTxnBySlave
Use this to relay a message on the network using a slave OTS key. The address must have slave trees, and have been created using the AddNewAddressWithSlaves or this will fail.
# RelayMessageTxnBySlave Request
curl -XPOST http://127.0.0.1:5359/api/RelayMessageTxnBySlave -d '
{
"message": "Hello World!!!",
"fee": 1000000000,
"master_address": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781"
}'
# RelayMessageTxnBySlave Response
{
"tx" :{
"master_addr" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"fee" :"1000000000" ,
"public_key" :"0105003e5b1733a685fdd5b88759b76ec638f3a621ab59bce5b8ccc32e14369177c6043fde8e602478b5ccdb015fe017eafe284a3a5b5677c17481562f02de4a4cbb33" ,
"signature" :"00000011785cd11a4b8f5e32aa66659b3f4c8c65ff18ce42f8845eace12ae001e93760ba3dc5112108050c7fc93300dda2f6e39128244746c419375b450e1244db8a990af046903126b141736546a3118c980a24bd89b6d28afd77afc3bbd0c38a9bc01f0b8739d23ea0aa5b547006559f3f3a3b7447878283aff74b644dcfcd75a172e09cfcec409cbda9abae86503635a902a48f9570cc0deba5d9dcf0cfbb0d637ea6f6dd0475039b542dfe53d6e803316b87fab469cba5373652a782b154c787b5c98436664cda2187e1cdf0fb222496ed95b81a7c50960a374ebc3fcf406dfadb728f51c7f9c352f1c6c297ce4269df52b5a4a83a4d97dedbfd40a6f4e2007347a953531a1ef57eee7886e15e4afa9a44565fd162c1e3783f42adbac0eee4424ed65a8f2411d850fb1e6c5474b832187a9f0c306a6673c26118652d0abd4467267ec4bb35ad29762e4d07135fe2d8f0b47c7d17f3d6584c6ee0f9a3287cbd5332925e4ee5d7200d0bcce7efbc39dff775e43ca19defa0b7e8ab0d9d109a17625de3dd040b14d19f161de6cba3f2324427bbfb37c66081fabbe06d981e761811fc3908fdcb5c0b8e64f2d8d71ad5499cf48db035f7a5b27d001f87afa1a5e44e56b5a10bec606c42120f5fa4d4525683c9b1b00afce289801177c0abf37e70e7e738cda929bcd57cda550cd69323c23add0e034630980f6c64692190dc95cb001b03519268bd8a75a213f1ffd1afb6c6489fab96ab179e32aed11ed5ebdb578751ee364db49982281c9aa4502332dc93f7e85d31e063ae1291038a80b9dff4770e867ae7c29093614330692f16c8655eb0583b0a45ca6496075214bd40fd83b19ab87c3c037a9595993a9c5923dd98b562301f0ed1c1df499c5bc110800dac0ae1cd7adee943fc1da2bac692c1950b3fc77be5ce62fb0b88c81efb1fa48c48a942606e88f8ba8bfee944d17558b68116e03cd64f1a560ad9043aca099de95127d7313b3e3360724b3e51bd5bf50909b86e18b9b5d37e3b9f1ebb7e011b3fdeff324d0daca8a8509eefca0c8b939accbe3df69dc02384706ed36bb43b3805e9cb75cf3ae4769aa546a0a18ee51135e670005e02563a139eacd6a17af48ceb413ae10df875462b2cbb1f8e37d218b9a9f7912ec1b94feca578604ca5029529d64f4822149a897bb1f53cf79312b7eb16f8f36502bcf26f4da0dc22eed0e250fa21789eb3ae11a708899fba46b8879ec424cf84905c797bd29f70d0c84545930948031bb95214a8c9b9efc55a854022c18354a2356917a960b119f49722d911361fd49ad1365f5421d0e9ee307c265b765e2b416d3a36ab80a4f4c3092890c72df553b854d670a8e51a2e7d025bf879936d8afc64fe2eec1dff5e9f9433d0eb516b767e00cb96dffd5fb72995c3c7c84ed27e940c5f6add2af217dfebd55f745f49abaedb5a428ec70aeaf43338ea1bb88f08a2772ec6dc7f0188b5a2fa878e394619d94bbf715acb5535bed55ddf631ffd828c6f1591333f49dea00ede24a9abd393c736ae74c086f99c5c78bec4d346a37bb59a01367bd1a1883557daacbed07e20305952566f4b8acb01a871f12490493b49a037270858993783474426bcabf10790dfa92f359a87a5d77aa0f495fbbaff7078871da62a1002323e86bfa326de13ee7f11388f8da56dc05b52613203641cf6637cc35459c11a92328f59599e43cad700e2ac67326c7858632d3cbcf8683677699c1f00eba29cd87e7350bf7873c47188e370c010085efccf87221eea4c95e85d83b670f62acdd70e238166da92938650410430b80b95d202b928c197f2db69fad8cbc8d231fc7d4aa1125fce48fdc775b3f2f8c959cfe724e21079c120c2510180fad517fc6ddb2df7bb50998b71eb23d4e8c0ad67e3d56dade8078d6ff7c4a4cd1470ec38cf47e2f217b22358ce09eaee3a19a20efffbf3db2694bb579b393a5bea02f764f4e37cf6f26b010b625f87749acd0774efd3baa494a548ace0348cf05bcf98b5cefdbaa61b19b2e24c365db9eec57c101741b11e7ca18f9e685dfb5ce690acaa06cb84b5f5b547a9dfc3b11448e1fe55340bc2aebff997043c260629aff15feb04f5951949a095ec2f4d7071af250fce6483c7c6a31b2c8bf788251defe8893112933f92d7d7f23785236cb26593783040c592059825224649bcef1c36726d7c0208a8b6c058e3e4a28cb0857bc018bc7b4b7b671b2d75af044b1e741c977e07ebcfedf8333cda809934367ca5cba285d7fb1052d752c53d65dd845acdffeecc536179b72e6d408a866d9af2c0b36992bfe3229daea4bc32b40f0d5383ac7bbae919355e1276fe660b71133bc20b41a2a2678750fdfb2a26e458b73596e4f4c8cb731260d4ad0dbed4807a0a41bef28b0380783a572e17e4fbed601d7d6fdca0deb7f78c9e050b0fa23ebfbd90f4bf102e00039dad8d5062c3fd459692ff24344cc8c6a211cf1472562578dfc8b9f208a7e601ce78922c97ea480ca9a37c8ba2aa2d232a73173a703c7026782a8206b32ad6b90ec99278108e45fe551f602c20f7f78682d5e7a252035fe0430b4114ad7aef63eda0d7b50b60b6b0b5b273c577b2f0bb0337849a96f1858e3c52e21c80b7e37d7a5479f6f621aa62c4bd1fd3dbfca36bdd2f50dc06c757b88d6b74ab55428a251657b1aa7dfd9ead47f74688a194db3843de7dff0e0057820eca877b62a0687c765adf5931d685edf23755a42aead73d8ece2b2660fb3f8098dad5f157407e4067fc2a5c8fbd128191821f8221865d7d94df47d9b304c886718398e389ed3af2f39ccd755ba332be6fd0b14f2cfce06cd4fa7fb97e14fbb4e34563f70b6744b22b8b29afef94d78b7de8a73992eb8f3892fdb58b54ff7c17e066c5d6f6e16156b9f9afb8c5bfbe5d12fa60e4bbfa618c19e9b97e29a7ffba7cf16fd1ac05ae76be69e4d92090210d43123024aed6f175b59571c9f39f484a6208ec31bf522712b85c2eff33b1fc526478232bc68e44dcdb8fa95485c021b0104b330458ec1816eb5bf92f389dbafafdc87c38c84b15238d4b9d3407a7368ef7e14bd070b1320ed6c7181093f0aca400c320f930d90571c27ca0d6d71c559471d8c20ad6cf2a1c9381c9f57754696dc39685609cee743509e34771a2c81ce922068d2f394fa6343d3a537c24e61f5817eac6fd5f373bf00d73bb049cde9bca02639653231affe3d848df0081981df1b4bc115c42643626b31bbfacb27b5dbbcf818f3507d6a25dd5502c82b9468ccab58834e2951c9b9ba2dc0afea5d0449c18f42f6721bd979d25bf5aff85110f0fbc8d24c02dc71c63a99146b17517083fa005d36f8f12069005c871318e0057507a58caaab24538120b1b9384d7f0140ed92999c0bbdd3395dbbb69eaf6d7020e9dbf59d27ad390ee65881814487938cf59e12c4a072f76e363a3291b8d4a68b3c62c29bba0dcc49d9695e786dd0e5e750c7ddb9eecf77559da6d80206541d4905cf02d17eb9b35fde6169a6d4d6fbe" ,
"transaction_hash" :"73558b2dc301ab599bb1a8718de5140b6bc0ae6b921387fa2690055c769e7a8b" ,
"signer_addr" :"Q010500f088acc8eca008c7b9a1407076f413996777d12a802e9fd86e7d36f658275c8ae15ca6c2" ,
"message" :{
"message_hash" :"Hello World!!!"
}
}
}
def relayMessageTxnBySlave ( message , fee , master_address ):
import requests
import json
payload = { 'message' : message , 'fee' : fee , 'master_address' : master_address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelayMessageTxnBySlave" , json = payload )
response = QRLrequest . text
relayMessageTxnBySlaveResp = json . loads ( response )
jsonResponse = relayMessageTxnBySlaveResp
return ( jsonResponse )
relayMessageTxn ( "Hello World!!!" , 1000000000 , "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" )
Creates the signed message transaction using one of the slaves and relay it to the network. Master Address must exist into wallet. Address must have slave trees defined and relayed to use.
This call will relay a slave transaction if the remaining slave OTS key are less than 100, creating a new slave tree to use after the OTS is consumed.
Request
Parameter
Type
Description
message
String
String Message of maximum 80 bytes.
fee
UInt64
Transaction Fee in Shor
master_address
String
QRL address whose slave will be signing the transaction. QRL Address must exist into wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelaySlaveTxnBySlave
Use this to send a transaction from an address using slave trees created with AddNewAddressWithSlaves. If there are no slave trees in the address, this will fail.
# RelaySlaveTxnBySlave Request
curl -XPOST http://127.0.0.1:5359/api/RelaySlaveTxnBySlave -d '
{
"slave_pks": ["AQYAPYdez4/TrVmOUecaVLlpZnn1a+ltrfzMPCtQnhZzBtBxEEmp4/Qk199XQs0NMRcttHJ3JSI4qs5XSxEUKbXzWQ=="],
"access_types": [0],
"fee": 100000,
"master_address": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781"
}'
Response
# RelaySlaveTxnBySlave Response
{
"tx" :{
"master_addr" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"fee" :"100000" ,
"public_key" :"0105003e5b1733a685fdd5b88759b76ec638f3a621ab59bce5b8ccc32e14369177c6043fde8e602478b5ccdb015fe017eafe284a3a5b5677c17481562f02de4a4cbb33" ,
"signature" :"00000014f8448144f1e575370b72fbdee58fd8ec227d7fbbf220bec50821f71a4711bb9105b622148fdaf67d0f0e41c7b33a5b55bef47db0c148414b9cd7e5ddf806e32cdb1b63c4f20f1d56e0b714a60917f6e60a14e6ed3aebd372880dded467df04e5b1a75c3bf9bc70629f116c4c4c45af3961a0f0836f626c0ba5c734027d14e3e024fdf0d334d7415a2612d9e5a2d6dc574d5df73b5d390218a4e9ae9e21197120feeb39c89cb446dac2a0fe56f1656a7a7da6e7c7742fabb5392dcf14071e830e57e5f546926184aedc7a9d03807add2fcaf6b8504e884e7030679e2585d30479d445e0c77010fbf749d57d4fdc80a912558a75c55a898ac4609240ae0372699ab91c50bd5854ff00dcfad0504e2b8197cea87704452cef5b8c4f967ba5b9cb386fc0be2cb6af415e0246ff0e700a910a5d5d97df66f16de8730065f660aa9bb9072b2ed4d7482dad9f22f368dc97353dcd178f9bfadea395fbbd3661b4ec92e4356a43854cf11c556e64c331d2829607f6029fe7d28ce6504bece9f58dbb6761b7c4163d0d5bb59397fbab406cf5a422c80f48b12ba2b5e536e235c8b2e5fe3611fccb2f40af09d58e626179e1af918389b8e070de863fce73dd28c70d98422fbf414e19130a8e91f8b295e631b4d8cd6d6a6c93c6196e5aa7e7c1b1d652d4e3961c93ca77ab41724a1c557280464915395b08149e83fae572b1e1a66bf2f3f8681e31132d094fcb925f16a3f98da5f31e6ca28e51024adc4212f9f8a32a57def382bca91662541ab409bb3a74e8efa923a9a32df4d01076d1993aeca6c6e78209ca6d0e45917876ac8778d996d0ba3d8d834f7aee4e3ab525147c6172510c1cbbca31762fbd2a9dfb54dc6d21d34b0af9b5d25bd4236cf706cbd8742dd66a56bd530b29b8357e74ed67b83789999812594cf09c58b320b9b5f6b021f80cf7716a378a52558fb63a30455291b293f84cb95e541d964d991cf5b7c910cad428998a9f616b50f92f7ced6eb3475c152a20653fda3f72217894b018732164a2e63b396b5954eae2f64f8480a1432a647dcf6c695b6960d585a839268fc704fc4c0d777f05631b2971889e363e1fe1cb7021f52badcac1df9fcb68170bf54d1f5579e09396821b3ad0465504fb3687c9d2b1dd53b9c6e550f94691f44e26e6b1581421a00afcef003fd7d8a24f88ef25f7bf0197ca044d966a6ff24087d1fee96f6e2da53202aa04ee33eaf983bed668bc0d76cf0017b3c5e15718566978bb8245b6734ebd85ae1ffdda1f2e10e35ea5080fa91a9fe210e6a3bc42daf91727ceaecf9e32f26f872e5e5f56a25c5921cd4df7ebdf6da31b064f3d51fbbd71286d2876e14436f7aa0226d67b9715d49a4276c4818684baccedfb044f984d5b77d9948428060d2507a3eb7759da74195909c31d336377a7759958db781b7d77c1891b54f01f45de5ef0ed72e1e92c5aae12f6169ad0e0b021476f0ae3fd927c9cfc120a9bfe310f56aab3bd61fc7d8ba213dc7bf3cd9cf199351ef7b9038229d165ca596243345ad6d512a13b180678e4fd5ee03d58736be7ca423988d62cacb0a437ecb6d07a1ae1ea9362d2f012b2ab676c459207aaf54faa8aad2f10e7b2499f7aae42011ebf33e07de02ccb62936a01c8b62eaf0653be9a41a9e901df9a8435ae1b08400b6886f1be73009213768f39b67975c4495e6ba31b5d733369702962b043124feecf5a85cbc64e07d508bb6ba1167d8c8cd50d7bbd0c00a435e317d896d521fc481c4118b95e7dc7c10648eb3cfacb63777af0878bc5ff96422ad2ded5edac61caf0b4919148306a9c31ce85c3ccd68b5cdaee98682961289a379e04e246307d00bf0019e394e39b716ca2df2965ecb4c31181c5f8f07e3111211bcacdb8d09c5bf3424069d337d8dbb3979dac20ac49a669d818d9dabff91ee6c30c0a46d6242d690eed29d51ee44aeb52168b2292dab4ad216e5dd0d08ee21f47aba18c88d6685f2867d3f20b8553f62d394b0820248caa31ed234927d7860d4b7ee66d00df0cea1cf2c1227c32aec4f1340653b408211137412e58f316aea9ee39dd3b4f2095bf317264cadf9946d154deb0dca4a701877fdbdd4150e32516599c006fb4a5b4f331cd231646d2b657c4a465f9807a17b784dbe1023545411755c168e66f76bf4fc66fdd7790aa336dd83b2ec11b97b485888bba2a0b1a08cee0ca33ae0caf578056ff2fe6d1a289e54ee2385bec11eb28ae2657fa9acf8f6f932b763176b58a5f9c5455f5dafbe6506175772a8b4c49fce5bb22ad8669671dcb408636d9c32c4d6322dae88b76f40957cf5d378ec39f9449cfb39ba62dfd875cfb67c051e2d6cbf90579ecc12a2657003e2525ef2f837e1073de32d29c0faf96427c9a21d4311c7a2a28cb53100355e3c0438c65a1e8a792f089230bf9d65fd6263e4d9f1adc4356aad992a9a741cd85da4f048295f31e6e30ef9b14dccdbc28e9f18231964c7a78edd8e11bd09e0b5743fff53eb842bfdf8e131682533a89cc60ac51d58f31de4693170ef785f081177ac721e20163e4f0fffc35c28e37f30637fea9eccefdf8274f12461191d9b24e1147d6f8e3f8ed940f8980db0151d6c41c5af8ef8f8537cbcf979d075711cd15601b4bea640efecdcedb74acdb33d56c223b79cf157563b48b24456d1b02c5c6f15b23153eb25f01a15b14c5db41b92fc38c9756f9e71a8148060bac4ec57238ab4b24d073fa9ed452d428db18321e45c798e4cfbff459b29a61f3cae2caa7a9f196d1f488756f295bac15ae2013fa73fd480d3fb8b7d261b524345de0ca2707af04267ca5da7dc23fecce6ad9cebdd4e9fffc696e4cf8fa8347d5024ffd19f912adffb34c4271cf040679ac6bcaf646e12cf02bb31e368af862d3d2950f258dd5202618382f6834a528471c6e4aed56ff86228ef232eb3c3eb289f195a0c1e06d428cf2e8d578054b49aff22528aad0a5d523b38b430b31d5cd00104459bf8f2842200a05d8c77b4b15f0eab85e1668a237d9566ebfd5cb4f6b87c16c7f3741d768758df780ded570ca83e6ff24f2b24a73ed68dd996866f7658275fbe12e399051dae617fcedaf4b8c3f09364e29f3ff7c7a2e1c1fc2a4de9569d1500daf84d0bd5ee672b693f0903c0a8c3c75918b4c8dbfb7ff185d314dec5fb3cec8c9ddc3abd3b9df5a4826c71f2ae5bcdadbd7164661ca02639653231affe3d848df0081981df1b4bc115c42643626b31bbfacb27b5dbbcf818f3507d6a25dd5502c82b9468ccab58834e2951c9b9ba2dc0afea5d0449c18f42f6721bd979d25bf5aff85110f0fbc8d24c02dc71c63a99146b17517083fa005d36f8f12069005c871318e0057507a58caaab24538120b1b9384d7f0140ed92999c0bbdd3395dbbb69eaf6d7020e9dbf59d27ad390ee65881814487938cf59e12c4a072f76e363a3291b8d4a68b3c62c29bba0dcc49d9695e786dd0e5e750c7ddb9eecf77559da6d80206541d4905cf02d17eb9b35fde6169a6d4d6fbe" ,
"transaction_hash" :"8bbd0a7870518890c6ac8800dd0fdcae35c091e70a00dfc5dc3752c27ae1da21" ,
"signer_addr" :"Q010500f088acc8eca008c7b9a1407076f413996777d12a802e9fd86e7d36f658275c8ae15ca6c2" ,
"slave" :{
"slave_pks" :[
"0106003d875ecf8fd3ad598e51e71a54b9696679f56be96dadfccc3c2b509e167306d0711049a9e3f424d7df5742cd0d31172db47277252238aace574b111429b5f359"
] ,
"access_types" :[
0
]
}
}
}
Creates the signed slave transaction using one of the slave OTS keys and relays it to the network. Master Address must exist into wallet. It may relay a slave transaction if the remaining slave OTS key are less than 100.
Request
Parameter
Type
Description
slave_pks
Bytes
List of Base64 encoded Public Keys which are allowed to act as slave
access_types
UInt64
Current supported access_type is 0
fee
UInt64
Transaction Fee in Shor
master_address
String
QRL address whose slave will be signing the transaction. QRL Address must exist into wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTokenTxnBySlave
Use to relay a slave token transaction using the automatic slave tree system. This will only work for addresses created with the AddNewAddressWithSlaves call if the address does not contain any slave trees, this will fail
# RelayTokenTxnBySlave Request
curl -XPOST http://127.0.0.1:5359/api/RelayTokenTxnBySlave -d '
{
"symbol": "TEST",
"name": "TEST TOKEN",
"owner": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781",
"decimals": 5,
"addresses": ["Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781", "Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"],
"amounts": [100000, 100000],
"fee": 1000000000,
"master_address": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781"
}'
# RelayTokenTxnBySlave Response
{
"tx" :{
"master_addr" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"fee" :"1000000000" ,
"public_key" :"0105003e5b1733a685fdd5b88759b76ec638f3a621ab59bce5b8ccc32e14369177c6043fde8e602478b5ccdb015fe017eafe284a3a5b5677c17481562f02de4a4cbb33" ,
"signature" :"00000012717f2482d16625e71108084f182be46e41c873614bb566b2d280d07fae12e6bbfa8cc5366f60f5cd646bcf608eb2ebf445f67246a8923c126249b7f41e32c7ec9be78791d422b80b787c64690cd4214efb0db2b07d5c948d4218f59c49a87720e64156453a50d04be186d4d6301204dc3b8f0e86a2d949cae2511466c0db9d78b76191b78d733b43bccf5b145ec49e84328e25f8f6d8f6e742564335b58a3f0489a6082d2dfbcb5cd4c48dabb262e4717aeb63aaae0907cabc070132692e49b7b681724cd301f9385633d62bc43b5deb556cfaa8f69647d9a8d52c8ff7eb8633273e674a3d1c3c34df7d57335a615763e5b350a0760606cb203247a8f7929f1c4f8e92e10606ca47d240df4223982769d554709b035510811b33266ae9318ad55c42030f980f2ba7502d50581ea2ebf73b31ce7fd05c3460954233e769724df3ea1894c385cc3a5b72c92f5eb6362c690b8b7a2fc83d10d92cb787936a6c0565248f8c21f0bd3baff5fe0d31b5e59f90887a18e6d00263d638ee70ad4ff6e05014bd7d754f059a2489571ab4f89d10caa49af15fae075590e23983bb8261a239bc3ec33b09cba2076476199ec56083284deb6a16c4cbd489c9a1816a9680cdee7338c5024f4d7cac8233d47e5571ac5556caf7cffbd478b5323578a7539d53e8361458e1f4603c865bc98f27d54c52ccd309a843870fef54cc84def34dcb4223f0ee3c8b6a9811a6e48114ed0ddd52af545bd1fa51e9c128c6e9b4117cb95674786263a5f28d02c012dfc485b70fa79ee9fa4eb7d96f97057da972adc874abff8aa17123ab5cdfa459493a3056e3c0336ad111e6d9d43ee00dc264363f880078f0b48f7f5690c559b2f08e52247baa8dd2c6b2b381b1c483a3138ee7a23e5ec132931099895865a238bc0c6aa083a4dc73100f671fda948c3e685cabccd73678d2134c8a94ab979ec52d79ea473ef8dede125efeb8ee3218df151438c1776fb20506fb9e1185660acad990d1be32949d4629f06a4534b2cade9d4f2c10a424f494c757a6fd5e378c8dea57996dbc8a3bc615fbfced82bd6c32481769451ea1aa933a7a782a9435b35560742950bffce5d4c59ed6d3fdb885210582b409e3659a2ff04d00efcf097326a7c55caaaf72aa6dda008aa5a56873f051d0d08051bbd70c4b7f153dfbcbd7c180686c063c3e4a9b25fabcb34858a9c80d9cbf3cb83b40880495d58112fddeefaaf755c5e4500845832c5bfc0a3b5e0e1d523a309cecb46a2e1f0de31406f8a58d961102676a9fe1a3b9f0bf10272773938e29a48abec27472e8e7f2e048e910552db8afbd72872ede5164184161ea132c267139e59aa6af67ceeb7fd4c2e655437261ff4aa8c6892ab50021966542889d72cabaef3fa3437a779b872cc74f0131db637ff1b2abecebddadd17832656c06ef4f681d3fbf9920ff892f585f4fd28512b5ea23bf34702a6b1385a25640a018af0827a5ddeb3c07dc6efcf0e51a2295d80b21757f6d2fc56b877163d749415c4e9a17400929b985b5d3c9a7f0bfe61ea348a86d29a2672b9aed3986ff196b13031999a9b848cb32be9b50e3abf5910aedfae0d4422c8c8a1d8e1a63f24c51d13b753ad9a77d581c3af43a969b3aa27adb24f292d2d2590fb6f4973aa3ab4c655b2b13f8a77c37a70a773ed5712080b7431fe67f396486cfacbc23b763faab266e8edc59bbcaef23796d96ad47923369363d7ac264dbd75ff7adf5378463efb44984f21ce71ac7f42769c98383ffa1be9798d5ccd57a5f148086f64ba8cf956b2856e6504e68a389aae6f1b98a09b3975f094a2471f615498ed5c97113b17a8dac775a58c02186ea2c962579861834dd36593d100c241694fdf29847e84496f41b06a1214445db2e4051f666425d1e0f842755b03937966ac2f93d6429982c237633444be335418737f92c5a314bf4cc9a4c5cd24927e494e5cf298df6350d304427fdbe4a029b7638ad79ad45330b5a17199454eb1a50c2932c0bc5df0a291dc744cd3c7d352fa4c5313b77f137ac3ce05587038593f87d2ba1c7d8fb8519dc40fbd04aa515e6302bfb21c1512be940ce5254e2d97c05608bf5ceb270f3512c2229934512f420e9a8e927deb4afcc9bff263713def77bd1c88ee76e1195637015a58089a490833e72dc9709ec069f9c097d42206456686dc85e1763a9428c63c1e54df6bef6ca72f61b9431d73b9b6732e8b69a06cb34cdd3d0bd30df91c323a330af783c0aad6f7c9e50f3def432399c83428596b695aa6b9e51424cbd4c2a902884c2e64d315dfe44d4ef5a5eb5ca99ca876cbec5036588ed3ec885fa67c0c045167b8d0bb71b901da54c369da54ada50e4f33ca331528ae5179c3e2d24dd26244624089de65a14be824deb9dcfbb38230c88c0c0b5795666c9756ab6d856c80a0560cbf78836b463ca3181d091b252b56c08a6db1020b0149f6f692d52faa222058b01f2f8436c79ce04366fa4a2f5af908038dcb7de62ece74280c76a83d482c2c68704b0a5da1d48b9a24959ba7bfaa6c045b45780ca2435785e3e9c12d312039e85ea00bf7011fb8a70d61608a07b4345c01bb1856c5d71101e0611476c15ab0239a45e5522507fc83987efc99e5ecf3eea3a54eb619460d078e3b7e32064a7d4750ba7c47e56232857c60fcc51980c93f90ed392071970a3e0d991763485133426c5d3172353b49a768fd9598a219657391797dc7aa5d57a79af3a4bbacc153d1b11fc5ee71551a3b8e4b2d7feee33335fec1d40398067093a99cddf5607f768bf6b3019031e6684655fa34fc345d2cdd7f31507435bed903b3885f4af4c0afbe124ed61a6ddcb5570536ade517322f54f0c23b5402f0b499fb68ab763393e8ab455fb46e7b51055e0d50fd4aebc00c9c054f042bd3053111f8aca01440261651d52a753a9692739866d07877c338e00d6b917ef66a7ee095f3e87ce22e52e06344c9d80663fa87a10db212864a7c7a96e3f3b986c1e751161985558186f1d3632d34719f2fd1d1ab658d0e1e8f07b88d92179b6484371d78982fc82020302ca7fe436dd06d1265ccd937854d22c15b35c71830c7a36c4da4afa7cafc20ed210b6c9c68c2532a69cdeadbec68438febc2abca5a0dee5d9fac1977b5de378454461d9e922068d2f394fa6343d3a537c24e61f5817eac6fd5f373bf00d73bb049cde9bca02639653231affe3d848df0081981df1b4bc115c42643626b31bbfacb27b5dbbcf818f3507d6a25dd5502c82b9468ccab58834e2951c9b9ba2dc0afea5d0449c18f42f6721bd979d25bf5aff85110f0fbc8d24c02dc71c63a99146b17517083fa005d36f8f12069005c871318e0057507a58caaab24538120b1b9384d7f0140ed92999c0bbdd3395dbbb69eaf6d7020e9dbf59d27ad390ee65881814487938cf59e12c4a072f76e363a3291b8d4a68b3c62c29bba0dcc49d9695e786dd0e5e750c7ddb9eecf77559da6d80206541d4905cf02d17eb9b35fde6169a6d4d6fbe" ,
"transaction_hash" :"0e4d2eecba891334f78ff8f1eb0885af348a9b029e88f873e8eb05021273cb4c" ,
"signer_addr" :"Q010500f088acc8eca008c7b9a1407076f413996777d12a802e9fd86e7d36f658275c8ae15ca6c2" ,
"token" :{
"symbol" :"TEST" ,
"name" :"TEST TOKEN" ,
"owner" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"decimals" :"5" ,
"initial_balances" :[
{
"address" :"010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"amount" :"100000"
} ,
{
"address" :"01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9" ,
"amount" :"100000"
}
]
}
}
}
def relayTokenTxnBySlave ( symbol , name , owner , decimals , addresses , amounts , fee , master_address ):
import requests
import json
payload = { 'symbol' : symbol , 'name' : name , 'owner' : owner , 'decimals' : decimals , 'addresses' : '[' addresses ']' , 'amounts' '[' amounts ']' , 'fee' fee , 'master_address' master_address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelayTokenTxnBySlave" , json = payload )
response = QRLrequest . text
relayTokenTxnBySlaveResp = json . loads ( response )
jsonResponse = relayTokenTxnBySlaveResp
return ( jsonResponse )
relayTokenTxnBySlave ( symbol , name , owner , decimals , addresses , amounts , fee , master_address )
Creates the signed token transaction using one of the slave and relay it to the network. Master Address must exist into wallet. It may relay a slave transaction if the remaining slave OTS key are less than 100.
Request
Parameter
Type
Description
symbol
String
Symbol of the token
name
String
Name of the token
owner
String
QRL Address of the token owner
decimals
UInt64
Maximum supported decimals
addresses
String
List of address to whom initial token will be assigned
amounts
UInt64
List of amounts of token to be assigned to addresses. Must be in same order as of addresses
fee
UInt64
Transaction Fee in Shor
master_address
String
QRL address whose slave will be signing the transaction. QRL Address must exist into wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTransferTxnBySlave
Use to relay a transfer using the slave tree created automatically. This will only work for addresses created with the AddNewAddressWithSlaves call using slave trees, if the address contains no slaves this will fail.
# RelayTransferTxnBySlave Request
curl -XPOST http://127.0.0.1:5359/api/RelayTransferTxnBySlave -d '
{
"addresses_to": ["Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd", "Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575"],
"amounts": [1000000000, 10000000000],
"fee": 1000000000,
"master_address": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781"
}'
# RelayTransferTxnBySlave Response
{
"tx" :{
"master_addr" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"fee" :"1000000000" ,
"public_key" :"0105003e5b1733a685fdd5b88759b76ec638f3a621ab59bce5b8ccc32e14369177c6043fde8e602478b5ccdb015fe017eafe284a3a5b5677c17481562f02de4a4cbb33" ,
"signature" :"000000100fecc31e9a6c8b238f6dc322f0c3a11c4498f800314508d7dd2f570e536456f94dfb1aa3e11e5775b80ea03ef9d0906f607b145d6f9e7e457292561615b064854f0e67efa603845a953579901378f7115471da316f110d1e073ce5e915e5aec23006fabc4f45a5d6db545e685db6e5ea8354c8ae2c570a29ab2282731e22866375d28279cfe43c7ec111a13db2863879019bd96a80df138dbe34543c10944abe66a0fbeb47dad990b9c4ec7168d5ba458efc8d80e3290eaf6ecbd8239bfb1e8f8902f62571b60529ff88d019290c078479c9a11c228b28e9f5271feaeed6562f2f0e06bd0d7cd88bfc798b7024ab13ed135a6077a8b8cc6fcf257fd8d1ff8d57e61cdc72a14cb91e1bf53a07d8e0550fef74d4847dbba802d8fd106e34253e7de4cf94567e60444caebedb057a1dc90710cbaeff6b48374611150292021d726c6052b0aa15697b513ef8aaf4cadc0f159f04ca4fc8abe806fa57dddb95ce24ce02fb53e50e8b6d348c6ca9b520a4557a9c0a5c1d59256194e911ba408ee46ab0bd30b75b3a9b78ffc0d8cf5370f250c59f2686a23c6b0e0eb0a336f8f5aac23d5de846e3d7474a4126bd9d9878044ee764cf6e96821e72c230d744a8b070509ab63171d28dcf13ea657c3903e25bf66d6544f53c74ccb872f3d8cc51fd118f97b89df6837f969a7b3ec1d8bff327d57334f8e42be1ec94c6ad53df97888777b84ad7c2a302bec98b3b861be46df27c07aeee240666ef001cf512c0277dbcbd9f353882e1b0c4a811aae12379dc3fe99b125a0501bd08f5d7f24a9e8995a9b385567ef291b44ed7980602c5d551e1739783bddf109355b8a036cb15964946a5ae94e1d5f04587d0398c10e1bcc4e7a7f3ba7680d00b87d2897724bbe40fe6a74b1bad35eb11699b4821011a2250132ac7cc112e7df770d336783804ae669a5979a0da784ed6fd82998f59862fdbd85dee8b66b4a6c7d154505159282355afed6155a9270d6954ae719f746fb062620ebef8fd27760a7d8ca88e958faed4f9c0a33b1040c87d5bf0f2fd0003a79383b8777eb19fe836f8b3ae548041cd2ee1537baa8ac5ef0e479952c92538ad1a5a5c56e8c44d82c2a494a121270a1f2fe2af8cc7b6a9c3e4cc26540d914ddad92521566331b6b66479bf2329f3f4ea1decee1981da8fac4b93f85d6ae5fb1552aed472f877afca90b0ca0cc23e0d84cd13b6adaea60d29ae88c37828dd4614838de0a4cc3f8a8ca9a7cd1717094ab3b9853d4ed7cad491a308d5277a7e2a926d854d6e80f230a4fe086d7b78eeadafe24dc56b46670f0d32f82cc545f4fcbc1dc5782ad7666ae0f16cf74181593e8b3300bbcd73705c3299cc33ff87faa85716c11b559ced652843a5b27a5c75d1e321d29ed2797ce03567c0b83c3d615528b57034e2853356bd8d81fa16f476714d4930c23f62ba6c8ef0f49d9623316c9df2c0eeac35458d69307ca4804406d4575ce969ed1cfd6071a37c7133193b6bc798bd7be51b98f29b20972c6953c24f476a32bca664e8064c2b117c36dcf95694c5eaf1dbd81edc190aea921a98e7bc3bcadb5853323e7b9fd4a7c605edc49cdd84cab22f30cb202cbbd138e5ae9fa49d2494f8da4c59be51cd716006b43623b187afb1f56ff747e4dad08a71c7f9268ce79db92b7f409e1f9ad5f25d5483081f2bc96fcb7142466d7784a65f842e45bb1315032990b848d3ead3fb76a31ee9adfd74f9bb61071f7ea8cf13fa7d88f09aba79cf2c574ea90ad7d37262dac6fcdbd4fcce5adea945639e8be476c0954b1e1f58ca95e1b0e476d73e7dd339a67cac735bb5dbd7c1380529d723a52e159ffcc675932c2c01491033c581a4ba8f9452ce6f99631e5f607d66ddc4f8d5bb18395b343ef65becc72abc77f653eb96dc63b343a0e1b348b35acfd94196e641b05ef523a3adcfb608da04d6cae4e761ae23410fe2dc4bf6279024ca410673f2daaff8ca9eb524d98bf2033052236f0026dc7bef89e00d0471bf21643b7f2a36d3819af2405e8d58a858134435e3cee542c074cce037d81e88417034a399b3b79b913d22a35a2b0242aa33eacce72e754316f316f481098fa3feb54441dba48848a8717062ccc7549fbef2f593e029dabf039e4a82e8168b8d3fbfe7b91cf53e91c230f958320479137165d7308f0e331e3cce2690f5dd12662880672b98c662c92de845d63dd759f648cba3e62f93fb7e1a61f518f8843edcf2b63da60f10ba68f755ad2557a711c7ec0bce9a545001356b076fa20108299a54da1c517ca3063c44a88e82e2ec5c19561f995f5d50e1953dae2788c2c053eb53d38965811917b32e99f4c148659d069a9233eefdac517ca9798e0e8e5ec42604ab522fa2b8614204fd343f7a083a2e528c2ee53a05d664932357196790781744cc912a9b16b80ff773bd2ab47a990d6530cf640b33b4f3281ad6b004092abee5025dcf0996949ebe5ca63159904fe0e9814567a3af1b7113641d2df11dd429d8ed59b21e48dbd1c6f6d38d3100515d5f2d9c4581fb70a62699ff232a06ff63db74c07e69cfb2eeb704764ef5669ecf85b2ad562a124c2d499ed4949326251b42021492b379a6d3f53740533cd19d17d67a7d793999c7f3c1b230f7e330b0cfe9275895afe31bec7b956156bd33c77fa4039a62c915055183ce6c9755b61401bb51e6140614ed4c61beb1594eaa186572e733c9bab1eb063ef8db03ac65aee39f402f7409f09d86775e8f164201e50fa50609394efee73924b658a60265454aecec9eeb8dbce4c4da6c08b2ece79abcb7292f452700897129dc27e3ab7eba17701f6d0317187ced481dc604090a3cc78dba57b009adb56e9b1a3dfd9ae27a9e17fe134d3f9c6d53c15f88dad245e94470eb8d6247b4d2bb76477654b2df925cc29dd85a465f5d768d5cf3ac7574e3c64f276e78f91cc1c9b24cba3ead365933df85a47878a89a210150bd4fd2efb5bbcd65820c8c2dccd2dbe58814c54757126a9b689dd9e0aa540cc2f42017b9d9ad4841996c0ed412c5685b7cd14f07bf86de965c7739b43034e32cbc0d753db916a2a1d4de43a943f5b660597eefe74764af427fca8b0d65f87a56b41d2e9471d8c20ad6cf2a1c9381c9f57754696dc39685609cee743509e34771a2c81ce922068d2f394fa6343d3a537c24e61f5817eac6fd5f373bf00d73bb049cde9bca02639653231affe3d848df0081981df1b4bc115c42643626b31bbfacb27b5dbbcf818f3507d6a25dd5502c82b9468ccab58834e2951c9b9ba2dc0afea5d0449c18f42f6721bd979d25bf5aff85110f0fbc8d24c02dc71c63a99146b17517083fa005d36f8f12069005c871318e0057507a58caaab24538120b1b9384d7f0140ed92999c0bbdd3395dbbb69eaf6d7020e9dbf59d27ad390ee65881814487938cf59e12c4a072f76e363a3291b8d4a68b3c62c29bba0dcc49d9695e786dd0e5e750c7ddb9eecf77559da6d80206541d4905cf02d17eb9b35fde6169a6d4d6fbe" ,
"transaction_hash" :"cba7da14acff68efa78fe2e890746d052866af3bdad2af2c87e72456173d0e15" ,
"signer_addr" :"Q010500f088acc8eca008c7b9a1407076f413996777d12a802e9fd86e7d36f658275c8ae15ca6c2" ,
"transfer" :{
"addrs_to" :[
"Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd" ,
"Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575"
] ,
"amounts" :[
"1000000000" ,
"10000000000"
]
}
}
}
def relayTransferTxnBySlave ( addresses_to , amounts , fee , master_address ,):
import requests
import json
payload = { 'addresses_to' : '[' addresses_to ']' , 'amounts' '[' amounts ']' , 'fee' fee , 'master_address' master_address }
QRLrequest = requests . post ( "http://127.0.0.1:5359/api/RelayTransferTxnBySlave" , json = payload )
response = QRLrequest . text
relayTransferTxnBySlaveResp = json . loads ( response )
jsonResponse = relayTransferTxnBySlaveResp
return ( jsonResponse )
relayTransferTxnBySlave ( '"Q01050065b6caa35f315ae595d3a3bd4f619b18905d5354b87ec96d04bb8becaf826904371490cd", "Q0105003a35ea0d30b1dc12ebc27bd75aa8823f97c621c36e5ef6f615050573eb0afb6dda7a2575"' , '1000000000, 10000000000' , 1000000000 , "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" )
Creates the signed transfer transaction using one of the slaves and relay it to the network. Master Address must exist into wallet. It may relay a slave transaction if the remaining slave OTS key are less than 100.
Request
Parameter
Type
Description
addresses_to
String
List of receiver's address
amounts
UInt64
List of amounts in Shor to be received by receiver. Must be in same order as of addresses_to
fee
UInt64
Transaction Fee in Shor
master_address
String
QRL address whose slave will be signing the transaction. QRL Address must exist into wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
RelayTransferTokenTxnBySlave
This will only work for addresses created with the AddNewAddressWithSlaves call
# RelayTransferTokenTxnBySlave Request
curl -XPOST http://127.0.0.1:5359/api/RelayTransferTokenTxnBySlave -d '
{
"addresses_to": ["Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"],
"amounts": [10000],
"token_txhash": "0e4d2eecba891334f78ff8f1eb0885af348a9b029e88f873e8eb05021273cb4c",
"fee": 100000,
"master_address": "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781"
}'
# RelayTransferTokenTxnBySlave Response
{
"tx" :{
"master_addr" :"Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" ,
"fee" :"100000" ,
"public_key" :"0105003e5b1733a685fdd5b88759b76ec638f3a621ab59bce5b8ccc32e14369177c6043fde8e602478b5ccdb015fe017eafe284a3a5b5677c17481562f02de4a4cbb33" ,
"signature" :"00000013a9cb168f6df95f63a80cfc3d585724042150e4ff15aa7446944c7cb6af32f3a04b2c4885c7e81192e2e9165f5694834b68e77db9441a7f8554d22fa2cd0d061daa0540546516b844804e28297ad96e8da1cbb4e02ae2ce6584f4e135e5b5c58515ff56978e0eb4377ad5bc601f303507b509507f678e0b42efae4822984f06e5697d039d3e6b53f43800d179ba2f79133977c92690d2cef39d3e19d996a41e9ad13efe645dbc518797139583b5d1b93f26ca1a9c38762ea8df634a6eb57d2f0778deb97b461333ea6dae2d85e57b82514caea803ab26d255cfced6e72191f3bdffae96f50acd4ab279eeeae0acb020319019558f8f0dddef425750129aff93718872d52c956670b997f3688dee64f044c28754a6aa69f4c8faa1df4224f112bd9924557ca4cb66f62cf33f525d4b96af09b626d2eb16c7867ed73e9107d74ba1de18879324d76b9956049c6b206e2b9c22e31501cdb9324a786ca80e1dabc11f1faa60af2a9c6c0b6e922645d937bb537a497aaa3e23f345056383bf9e215db17355ba15690afd1b244e06fab41617397d1e40cd0e1b15d257d89c164b42e0a0db9f747155cbecdbb2eb1395de33240e9e27f60ca8efbc74ed9688506902d164a19504f263bb6fc5e53ec1b39636567e27b051bbdd374ac3cc13e923cc89f8b585db135029c8b01fa2dde770537bc3be9bb74902e2e9a3c4ec4b28624ebd7c0e291ecd96408d68235e9846106b9ed7c6d1112e7965437d05a2b8f08b75a4d970dd7432ec6d08dfcad722bb976971e498d46cdfb433e6636906c22915cedac7c1460ef65637bfb087d8e2c59e0b9822095010de891360d256edca57ea5bb9a7226750b644165384bf556af6476fe4fa25d984f48525fec4aa36420cbdacfb01b01bc6cf91424e6bccd7a96ea2eb86c5563809c76aafd7a4c57759f0cd50f1dc77c40eba301b221dcf9d92b93d32f6febf3a1a7db318d7b3b01c3e0f3fe216d6f8d329c815b2a2d2d7a97f02fd1d27a0925c3a036ea90b7781247db04b9c6830483823f4ae46c7a1506161c296179cf1db9a822b5246a34c2df1ccc4c61f8c5d23682ba1de2b0de4800f979531b44868a10f79da611fae4267e123083387ef2017f08775bda7de50adf6dae5b247f5b98caf21bad8b3f3fdacbbcc90557e6f049d6c721b29ae233d025369ebdaff5d3eb5aa472110e486bbdb853aaf1f69bc7783cffb8978008962af66df9dd03faf0500a23ebb2dba8e8c73be06dc53a3571ee67eb35dab5e08b6fc51a0fac910a7d9bf4023c79a973ac7a93425ed5c07ecdd0d9858162f9f1197dfa2ad40d6ebf5e0c3779c18eac4ce66568ef2c25a355452332956c4421fc0480bc24dc5804e3c3999ae77d7b2b986b4f081b1b145de88ca05614e383990931166e464dab71e41b2140d5723d3159e34932971e6c0a54f7df4b71ec273e0d7aaf1fdaff8f97c0b4bf6ff5579c42acb5abb0e11b14daf6a6a32a3a3c475d63363115a399bf10e720ba8bf2b76a3becb1fd61163da25148bb8bc25b658984bcef87e48224d6f182537cb98b6ff7af9583893e1888dcd18e32acbee0d4abd3c6863251c0417dd8631fb85a45e07dfb75cd769c8ed97209305a22640599f1c443db22c4c83d1fc86c8a5837e041be78632f7c2c1f65d2e6a2c503dc0287c95b3fac1560ae4814b1f045de06d5284aa1d8d54375d1bd6d23b7094dc9106549040fe84c3f351debb90a78f9f117aea31b63c7b32d46c32bfb5d5b3311ecc1dac8206bc8da74e731497ebad7402805edf6899e8978a29ea59f86688732eccd09cf3332b36446626a99b4f79e627a09986a606be1a21824cb836d03fbd8b63da1ad5426ee6fc6ea03a0e62c5613709ce2b92bef362f577bbe03ced7059bd35735ca5706a49b7e4764c4d357d7b0c3812d5e1d2887514514eb82050d157c41d74d66931bc95d926933f44ec2462ee01d2dea93b72cc9942615668dbb6c02451a68abeab3044713d7e2ed8ad70b3a10356677437b97f71fd8a62afacb249ee331c0446bac9f2dd9993d834dd152470048d10e88484d57c89c1fdc399bfe7f0774fddcf8be00cf7e97e911e46f6ef458f947334662185b22569c9006195ca571748821f637263317027c784f3b11b58adb1f8974fd770ff2b5fb83176707bc734c6987339e01d2ce46b8807daf4c43ebb34b1923bc81a76d26a9e14eea4cc42ca1063520c40851c52ad781b4f0b86bc036f772aaa050ae26b27955751ea45c4111be26b6e73f5b1b393d4a1dc9270e61972c4ac79f2629f1bd333ae624ae707002e5090cc32bc70792a4bcd258e6c0001e66e27de7f3dcaac93ad19d20a35186435dca87f8c1c668fc3c188dc306764d4700f1eaf75d5ca32b3f10e9b1c9b24f4acbaf03e32a16093a748501bb117e4a0948cf2f379bff8127f06f83e6b607d8536e73c32da42d45935e5fb44063f6bbd2d7604d6e46c8a09411d5b123b784a3f4651222207e0b171dd9da79d4dd880ef615785ba553e79d5418aa8833e78cce007897b65447cc6b17075d15a024fb17bc96a3e9616746738908ae570575d514dfd421bfb8280d495af20477ee5a462e8729b99f34019d4cd5262bc9ddaa5cda59987509337d877c94323469d83d7986c0d03ca3e9932ea5fc0a619e1e5d4048661791a49875af87db1399479dafe00fbdbf52a121fc92b0898f65430d3d0f1fd80e26398ac591cbba6daa0dc36ec7303c7e58c0744010b912bb5a26ac32a4966cb2c9487e6e77f8dd7f968a8e596835740cbd73723748aed5e827d870008ae1fbab191fe364bb870371bf2c4fa56cbb108e19273b39a96628059e9aae8eeb89e7a488eb5a89bb052b7fa227088ca13b55e9d51e3a562b5f2dbe0a2643d47fae8313862a69e14979c30ef1c46e5f541ba28e2eaa4455f183a35522ec12b29b2ff227c55b027f7dd48f71211a9a37e833a878aa2576cc660c2768e4207bf6605f45aa5e9fcbd8ce59beb2866cde3a3c8fdb378aca5c870fd1baa1f5848293a88995c9ae08db4e62594a53fb87814ac9f7df1cad2ff599ca80d289b38f8d175baa4e1a5d2cd4b1c0fbdd42fdb60e1263edc1e63dd72f79906e5e72dd8d27cebc68c2532a69cdeadbec68438febc2abca5a0dee5d9fac1977b5de378454461d9e922068d2f394fa6343d3a537c24e61f5817eac6fd5f373bf00d73bb049cde9bca02639653231affe3d848df0081981df1b4bc115c42643626b31bbfacb27b5dbbcf818f3507d6a25dd5502c82b9468ccab58834e2951c9b9ba2dc0afea5d0449c18f42f6721bd979d25bf5aff85110f0fbc8d24c02dc71c63a99146b17517083fa005d36f8f12069005c871318e0057507a58caaab24538120b1b9384d7f0140ed92999c0bbdd3395dbbb69eaf6d7020e9dbf59d27ad390ee65881814487938cf59e12c4a072f76e363a3291b8d4a68b3c62c29bba0dcc49d9695e786dd0e5e750c7ddb9eecf77559da6d80206541d4905cf02d17eb9b35fde6169a6d4d6fbe" ,
"transaction_hash" :"f5e51dd2a68b09c4bcb414637de4e12e33e6da6376b2b2adeb9117a306697e09" ,
"signer_addr" :"Q010500f088acc8eca008c7b9a1407076f413996777d12a802e9fd86e7d36f658275c8ae15ca6c2" ,
"transfer_token" :{
"token_txhash" :"0e4d2eecba891334f78ff8f1eb0885af348a9b029e88f873e8eb05021273cb4c" ,
"addrs_to" :[
"Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9"
] ,
"amounts" :[
"10000"
]
}
}
}
def relayTransferTokenTxnBySlave ( addresses_to , amounts , token_txhash , fee , master_address ):
import requests
import json
a = json . dumps ( addresses_to )
am = json . dumps ( amounts )
tt = token_txhash
f = fee
w = signer_address
o = ots_index
p = { 'addresses_to' : '[' addresses_to ']' , 'amounts' : '[' amounts ']' , 'token_txhash' : token_txhash , 'fee' : fee , 'master_address' : master_address }
r = requests . post ( "http://127.0.0.1:5359/api/RelayTransferTokenTxnBySlave" , json = p )
y = r . text
relayTokenTxResp = json . loads ( y )
resp = relayTokenTxResp
return ( resp )
pass
relayTransferTokenTxnBySlave ( "Q01060091aabafdc9569f4ddec95cbfbc5f10f871187777aabe375f16384dbfd7d3ba6922e566c9" , "10000" , "0e4d2eecba891334f78ff8f1eb0885af348a9b029e88f873e8eb05021273cb4c" , 100000 , "Q010500aba127bfb010f63334fc772be860a8cfb4706d5d4c91b51d7fe1988bef4ce46db7974781" )
Creates the signed transfer token transaction using one of the slave and relay it to the network. Master Address must exist into wallet. It may relay a slave transaction if the remaining slave OTS key are less than 100.
Request
Parameter
Type
Description
token_txhash
String
Token transaction hash is the transaction hash by which the token has been created. This is used to uniquely identify each created token in QRL network.
addresses_to
String
List of receiver's address
amounts
UInt64
List of Amounts to be received by receiver. Must be in same order as of addresses_to
fee
UInt64
Transaction Fee in Shor
master_address
String
QRL address whose slave will be signing the transaction. QRL Address must exist into wallet.
Response
Parameter
Type
Description
code
UInt32
Error Code. Only appears if any exception is triggered.
error
String
Error Message. Only appears if any exception is triggered.
tx
Transaction
Return the transaction that has been relayed to the network.
Explorer API
The Explorer API queries the explorer node infrastructure and returns a response in either JSON or text. This is intended to simplify the process of developing tools for the QRL.
If your project will put a large load on infrastructure with query requests you should spin up a QRL full node (Installation Documentation) and run a local version of the QRL Block Explorer (GitHub Link)
The QRL block explorer has been built with an API endpoint to enable an easy way for developers to grab data from the QRL blockchain. This endpoint is limited in scope and may change in future iterations of the explorer.
The explorer endpoint is reached at explorer.theQRL.org
The API response can be either text or json depending on the developers needs. By default JSON is returned, simply append `/text` to the API query.
For an easy to read output use a browser add-on like Chrome's jsonview and browse to the endpoint.
Explorer API Methods
Block By Number
This function only returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/block/34556
# Response
curl -XGET https://explorer.theqrl.org/api/block/34556
{
"result" :"block_extended" ,
"found" :true,
"address_state" :null,
"transaction" :null,
"block_extended" :
{
"header" :
{
"hash_header" :
{
"type" :"Buffer" ,
"data" :[214,103,67,242,54,188,52,200,87,168,123,15,182,74,11,253,176,108,57,160,201,82,142,205,65,91,240,217,3,0,0,0]
} ,
"block_number" :"34556" ,
"timestamp_seconds" :"1532036984" ,
"hash_header_prev" :
{
"type" :"Buffer" ,
"data" :[181,187,1,50,114,166,116,7,85,119,115,124,150,41,59,247,241,133,0,80,108,49,133,244,65,233,197,231,16,0,0,0]
} ,
"reward_block" :"6618183595" ,
"reward_fee" :"0" ,
"merkle_root" :
{
"type" :"Buffer" ,
"data" :[116,149,223,169,90,168,239,49,119,250,46,102,114,5,156,96,204,216,195,145,223,45,226,71,75,212,224,209,1,53,12,251]
} ,
"mining_nonce" :1026719935,
"extra_nonce" :"64238919168"
} ,
"extended_transactions" :[
{
"header" :null,
"tx" :
{
"transactionType" :"coinbase" ,
"master_addr" :
{
"type" :"Buffer" ,
"data" :[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
} ,
"fee" :"0" ,
"public_key" :
{
"type" :"Buffer" ,
"data" :[]
} ,
"signature" :
{
"type" :"Buffer" ,
"data" :[]
} ,
"nonce" :"34557" ,
"transaction_hash" :
{
"type" :"Buffer" ,
"data" :[116,149,223,169,90,168,239,49,119,250,46,102,114,5,156,96,204,216,195,145,223,45,226,71,75,212,224,209,1,53,12,251]
} ,
"transfer" :null,
"coinbase" :
{
"addr_to" :
{
"type" :"Buffer" ,
"data" :[1,6,0,150,140,52,8,203,165,25,45,117,193,28,236,144,158,128,63,197,144,232,36,99,33,107,90,4,206,142,68,127,118,180,224,44,13,61,129]
} ,
"amount" :"6618183595"
} ,
"latticePK" :null,
"message" :null,
"token" :null,
"transfer_token" :null,
"slave" :null
} ,
"addr_from" :
{
"type" :"Buffer" ,
"data" :[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
} ,
"size" :"121" ,
"timestamp_seconds" :"1532036984"
}] ,
"genesis_balance" :[],
"size" :"257"
}
}
def getblockByNumber ( block_number ):
import requests
import json
request = requests . get ( 'https://explorer.theqrl.org/api/block/' + block_number )
response = request . text
getBlockResp = json . loads ( response )
jsonResponse = getBlockResp
return ( jsonResponse )
getblockByNumber ( "34556" )
# Response
{
'found' : True ,
'block_extended' :
{
'extended_transactions' :
[{
'size' : '121' ,
'addr_from' :
{
'type' : 'Buffer' ,
'data' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]
},
'timestamp_seconds' : '1532036984' ,
'header' : None , 'tx' :
{
'transactionType' : 'coinbase' ,
'slave' : None , 'master_addr' :
{
'type' : 'Buffer' ,
'data' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]
},
'public_key' :
{
'type' : 'Buffer' ,
'data' : []
},
'transfer' : None ,
'transfer_token' : None ,
'token' : None ,
'transaction_hash' :
{
'type' : 'Buffer' ,
'data' : [ 116 , 149 , 223 , 169 , 90 , 168 , 239 , 49 , 119 , 250 , 46 , 102 , 114 , 5 , 156 , 96 , 204 , 216 , 195 , 145 , 223 , 45 , 226 , 71 , 75 , 212 , 224 , 209 , 1 , 53 , 12 , 251 ]
},
'latticePK' : None ,
'fee' : '0' ,
'nonce' : '34557' ,
'signature' :
{
'type' : 'Buffer' ,
'data' : []
},
'message' : None ,
'coinbase' :
{
'amount' : '6618183595' ,
'addr_to' :
{
'type' : 'Buffer' ,
'data' : [ 1 , 6 , 0 , 150 , 140 , 52 , 8 , 203 , 165 , 25 , 45 , 117 , 193 , 28 , 236 , 144 , 158 , 128 , 63 , 197 , 144 , 232 , 36 , 99 , 33 , 107 , 90 , 4 , 206 , 142 , 68 , 127 , 118 , 180 , 224 , 44 , 13 , 61 , 129 ]
}
}
}
}],
'header' :
{
'mining_nonce' : 1026719935 ,
'extra_nonce' : '64238919168' ,
'hash_header_prev' :
{
'type' : 'Buffer' ,
'data' : [ 181 , 187 , 1 , 50 , 114 , 166 , 116 , 7 , 85 , 119 , 115 , 124 , 150 , 41 , 59 , 247 , 241 , 133 , 0 , 80 , 108 , 49 , 133 , 244 , 65 , 233 , 197 , 231 , 16 , 0 , 0 , 0 ]
},
'merkle_root' :
{
'type' : 'Buffer' ,
'data' : [ 116 , 149 , 223 , 169 , 90 , 168 , 239 , 49 , 119 , 250 , 46 , 102 , 114 , 5 , 156 , 96 , 204 , 216 , 195 , 145 , 223 , 45 , 226 , 71 , 75 , 212 , 224 , 209 , 1 , 53 , 12 , 251 ]
},
'block_number' : '34556' ,
'hash_header' :
{
'type' : 'Buffer' ,
'data' : [ 214 , 103 , 67 , 242 , 54 , 188 , 52 , 200 , 87 , 168 , 123 , 15 , 182 , 74 , 11 , 253 , 176 , 108 , 57 , 160 , 201 , 82 , 142 , 205 , 65 , 91 , 240 , 217 , 3 , 0 , 0 , 0 ]
},
'reward_block' : '6618183595' ,
'timestamp_seconds' : '1532036984' ,
'reward_fee' : '0'
},
'genesis_balance' : [],
'size' : '257'
},
'address_state' : None ,
'transaction' : None ,
'result' : 'block_extended'
}
Get any block details by block number.
Request
Parameter
Description
block
Block Number
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Block Details in JSON Response
Info: /api/block/ requests will only return in JSON format.
Parse the response using json tools in a language of your choice.
Transaction By Hash
This function only returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/tx/c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6
# Response
{
"result" :"transaction" ,
"found" :true,
"address_state" :null,
"transaction" :
{
"header" :
{
"hash_header" :"67cd752cbed60c0d806c81a61ce74f01a93ccad5d886e2c2f1c3ad72ab000000" ,
"block_number" :"1" ,
"timestamp_seconds" :"1530014454" ,
"hash_header_prev" :"2a1c4a9433f1de36f8b99c7c5aceb7bd2eb39e1ead648ea58227d399ad84c724" ,
"reward_block" :"6656349462" ,
"reward_fee" :"0" ,
"merkle_root" :"c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6" ,
"mining_nonce" :1662518782,
"extra_nonce" :"16980399104"
} ,
"tx" :
{
"transactionType" :"coinbase" ,
"master_addr" :
{
"type" :"Buffer" ,
"data" :[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
} ,
"fee" :"0" ,
"public_key" :
{
"type" :"Buffer" ,
"data" :[]
} ,
"signature" :
{
"type" :"Buffer" ,
"data" :[]
} ,
"nonce" :"2" ,
"transaction_hash" :"c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6" ,
"transfer" :null,
"coinbase" :
{
"addr_to" :
{
"type" :"Buffer" ,
"data" :[1,6,0,29,52,98,141,160,135,51,157,221,101,10,132,62,19,31,164,163,243,177,7,233,182,34,45,96,159,109,173,56,96,180,121,140,197,179,97]
} ,
"amount" :"6656349462"
} ,
"latticePK" :null,
"message" :null,
"token" :null,
"transfer_token" :null,
"slave" :null,
"amount" :"6.656349462" ,
"addr_from" :
{
"type" :"Buffer" ,
"data" :[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
} ,
"addr_to" :
{
"type" :"Buffer" ,
"data" :[1,6,0,29,52,98,141,160,135,51,157,221,101,10,132,62,19,31,164,163,243,177,7,233,182,34,45,96,159,109,173,56,96,180,121,140,197,179,97]
}
} ,
"addr_from" :
{
"type" :"Buffer" ,
"data" :[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
} ,
"size" :"119" ,
"timestamp_seconds" :"1530014454" ,
"explorer" :
{
"from_hex" :"" ,
"from_b32" :"" ,
"to_hex" :"Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361" ,
"to_b32" :"q1qyrqq8f5v2x6ppennhwk2z5y8cf3lf9r7wcs06dkygkkp8md45uxpdre78enef" ,
"type" :"COINBASE"
}
} ,
"block_extended" :null
}
#Request
def getTransactionByHash ( tx_hash ):
import requests
import json
request = requests . get ( 'https://explorer.theqrl.org/api/tx/' + tx_hash )
response = request . text
getTXResp = json . loads ( response )
jsonResponse = getTXResp
return ( jsonResponse )
getTransactionByHash ( "c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6" )
# Response
{
'result' : 'transaction' ,
'address_state' : None ,
'block_extended' : None ,
'found' : True ,
'transaction' :
{
'size' : '119' ,
'timestamp_seconds' : '1530014454' ,
'tx' :
{
'transactionType' : 'coinbase' ,
'addr_to' :
{
'data' : [ 1 , 6 , 0 , 29 , 52 , 98 , 141 , 160 , 135 , 51 , 157 , 221 , 101 , 10 , 132 , 62 , 19 , 31 , 164 , 163 , 243 , 177 , 7 , 233 , 182 , 34 , 45 , 96 , 159 , 109 , 173 , 56 , 96 , 180 , 121 , 140 , 197 , 179 , 97 ],
'type' : 'Buffer'
},
'transaction_hash' : 'c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6' ,
'slave' : None ,
'message' : None ,
'addr_from' :
{
'data' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
'type' : 'Buffer'
},
'token' : None ,
'master_addr' :
{
'data' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
'type' : 'Buffer'
},
'fee' : '0' ,
'signature' :
{
'data' : [],
'type' : 'Buffer'
},
'transfer_token' : None ,
'nonce' : '2' ,
'latticePK' : None ,
'public_key' :
{
'data' : [],
'type' : 'Buffer'
},
'transfer' : None ,
'amount' : '6.656349462' ,
'coinbase' :
{
'addr_to' :
{
'data' : [ 1 , 6 , 0 , 29 , 52 , 98 , 141 , 160 , 135 , 51 , 157 , 221 , 101 , 10 , 132 , 62 , 19 , 31 , 164 , 163 , 243 , 177 , 7 , 233 , 182 , 34 , 45 , 96 , 159 , 109 , 173 , 56 , 96 , 180 , 121 , 140 , 197 , 179 , 97 ],
'type' : 'Buffer'
},
'amount' : '6656349462'
}
},
'header' :
{
'reward_fee' : '0' ,
'merkle_root' : 'c9656d989bce2000c794314b73882b0ebb99fa1fe58e7a466a8a64e7b851a4c6' ,
'block_number' : '1' ,
'reward_block' : '6656349462' ,
'timestamp_seconds' : '1530014454' ,
'hash_header' : '67cd752cbed60c0d806c81a61ce74f01a93ccad5d886e2c2f1c3ad72ab000000' ,
'mining_nonce' : 1662518782 ,
'hash_header_prev' : '2a1c4a9433f1de36f8b99c7c5aceb7bd2eb39e1ead648ea58227d399ad84c724' ,
'extra_nonce' : '16980399104'
},
'addr_from' :
{
'data' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
'type' : 'Buffer'
},
'explorer' :
{
'to_hex' : 'Q0106001d34628da087339ddd650a843e131fa4a3f3b107e9b6222d609f6dad3860b4798cc5b361' ,
'type' : 'COINBASE' ,
'to_b32' : 'q1qyrqq8f5v2x6ppennhwk2z5y8cf3lf9r7wcs06dkygkkp8md45uxpdre78enef' ,
'from_hex' : '' ,
'from_b32' : ''
}
}
}
Get data from a transaction by number
Request
Parameter
Description
transaction
Transaction Hash
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Transaction Details in JSON Response
Info: /api/tx/ requests will only return in JSON format.
Parse the response using json tools in a language of your choice.
Address By Number
This function only returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/a/Q01040007a591a62c23ed27adfe3df8eb812ee5e4b73e47fb8471e8d78ecd9b4cadc325ca36d86e
# Response
{
"state" :
{
"address" :
{
"type" :"Buffer" ,
"data" :[1,4,0,7,165,145,166,44,35,237,39,173,254,61,248,235,129,46,229,228,183,62,71,251,132,113,232,215,142,205,155,76,173,195,37,202,54,216,110]
} ,
"balance" :"0" ,
"nonce" :"0" ,
"ots_bitfield" :[
{
"type" :"Buffer" ,
"data" :[0]
} ,
{
"type" :"Buffer" ,
"data" :[0]
} ,
{
"type" :"Buffer" ,
"data" :[0]
} ,
{
"type" :"Buffer" ,
"data" :[0]
} ,
## TRUNICATED FOR CLARITY ##
{
"type" :"Buffer" ,
"data" :[0]} ,
{
"type" :"Buffer" ,
"data" :[0]} ,
{
"type" :"Buffer" ,
"data" :[0]} ,
{
"type" :"Buffer" ,
"data" :[0]} ,
{
"type" :"Buffer" ,
"data" :[0]
}] ,
"transaction_hashes" :[],
"tokens" :{} ,
"latticePK_list" :[],
"slave_pks_access_type" :{} ,
"ots_counter" :"0"
} ,
"ots" :
{
"keys" :
{
"0" :0,"1" :0,"2" :0,"3" :0,"4" :0,"5" :0,"6" :0,"7" :0,"8" :0,"9" :0,"10" :0,"11" :0,"12" :0,"13" :0,"14" :0,"15" :0,"16" :0,"17" :0,"18" :0,"19" :0,"20" :0,"21" :0,"22" :0,"23" :0,"24" :0,"25" :0,"26" :0,"27" :0,"28" :0,"29" :0,"30" :0,"31" :0,"32" :0,"33" :0,"34" :0,"35" :0,"36" :0,"37" :0,"38" :0,"39" :0,"40" :0,"41" :0,"42" :0,"43" :0,"44" :0,"45" :0,"46" :0,"47" :0,"48" :0,"49" :0,"50" :0,"51" :0,"52" :0,"53" :0,"54" :0,"55" :0,"56" :0,"57" :0,"58" :0,"59" :0,"60" :0,"61" :0,"62" :0,"63" :0,"64" :0,"65" :0,"66" :0,"67" :0,"68" :0,"69" :0,"70" :0,"71" :0,"72" :0,"73" :0,"74" :0,"75" :0,"76" :0,"77" :0,"78" :0,"79" :0,"80" :0,"81" :0,"82" :0,"83" :0,"84" :0,"85" :0,"86" :0,"87" :0,"88" :0,"89" :0,"90" :0,"91" :0,"92" :0,"93" :0,"94" :0,"95" :0,"96" :0,"97" :0,"98" :0,"99" :0,"100" :0,"101" :0,"102" :0,"103" :0,"104" :0,"105" :0,"106" :0,"107" :0,"108" :0,"109" :0,"110" :0,"111" :0,"112" :0,"113" :0,"114" :0,"115" :0,"116" :0,"117" :0,"118" :0,"119" :0,"120" :0,"121" :0,"122" :0,"123" :0,"124" :0,"125" :0,"126" :0,"127" :0,"128" :0,"129" :0,"130" :0,"131" :0,"132" :0,"133" :0,"134" :0,"135" :0,"136" :0,"137" :0,"138" :0,"139" :0,"140" :0,"141" :0,"142" :0,"143" :0,"144" :0,"145" :0,"146" :0,"147" :0,"148" :0,"149" :0,"150" :0,"151" :0,"152" :0,"153" :0,"154" :0,"155" :0,"156" :0,"157" :0,"158" :0,"159" :0,"160" :0,"161" :0,"162" :0,"163" :0,"164" :0,"165" :0,"166" :0,"167" :0,"168" :0,"169" :0,"170" :0,"171" :0,"172" :0,"173" :0,"174" :0,"175" :0,"176" :0,"177" :0,"178" :0,"179" :0,"180" :0,"181" :0,"182" :0,"183" :0,"184" :0,"185" :0,"186" :0,"187" :0,"188" :0,"189" :0,"190" :0,"191" :0,"192" :0,"193" :0,"194" :0,"195" :0,"196" :0,"197" :0,"198" :0,"199" :0,"200" :0,"201" :0,"202" :0,"203" :0,"204" :0,"205" :0,"206" :0,"207" :0,"208" :0,"209" :0,"210" :0,"211" :0,"212" :0,"213" :0,"214" :0,"215" :0,"216" :0,"217" :0,"218" :0,"219" :0,"220" :0,"221" :0,"222" :0,"223" :0,"224" :0,"225" :0,"226" :0,"227" :0,"228" :0,"229" :0,"230" :0,"231" :0,"232" :0,"233" :0,"234" :0,"235" :0,"236" :0,"237" :0,"238" :0,"239" :0,"240" :0,"241" :0,"242" :0,"243" :0,"244" :0,"245" :0,"246" :0,"247" :0,"248" :0,"249" :0,"250" :0,"251" :0,"252" :0,"253" :0,"254" :0,"255" :0,"256" :0,"257" :0,"258" :0,"259" :0,"260" :0,"261" :0,"262" :0,"263" :0,"264" :0,"265" :0,"266" :0,"267" :0,"268" :0,"269" :0,"270" :0,"271" :0,"272" :0,"273" :0,"274" :0,"275" :0,"276" :0,"277" :0,"278" :0,"279" :0,"280" :0,"281" :0,"282" :0,"283" :0,"284" :0,"285" :0,"286" :0,"287" :0,"288" :0,"289" :0,"290" :0,"291" :0,"292" :0,"293" :0,"294" :0,"295" :0,"296" :0,"297" :0,"298" :0,"299" :0,"300" :0,"301" :0,"302" :0,"303" :0,"304" :0,"305" :0,"306" :0,"307" :0,"308" :0,"309" :0,"310" :0,"311" :0,"312" :0,"313" :0,"314" :0,"315" :0,"316" :0,"317" :0,"318" :0,"319" :0,"320" :0,"321" :0,"322" :0,"323" :0,"324" :0,"325" :0,"326" :0,"327" :0,"328" :0,"329" :0,"330" :0,"331" :0,"332" :0,"333" :0,"334" :0,"335" :0,"336" :0,"337" :0,"338" :0,"339" :0,"340" :0,"341" :0,"342" :0,"343" :0,"344" :0,"345" :0,"346" :0,"347" :0,"348" :0,"349" :0,"350" :0,"351" :0,"352" :0,"353" :0,"354" :0,"355" :0,"356" :0,"357" :0,"358" :0,"359" :0,"360" :0,"361" :0,"362" :0,"363" :0,"364" :0,"365" :0,"366" :0,"367" :0,"368" :0,"369" :0,"370" :0,"371" :0,"372" :0,"373" :0,"374" :0,"375" :0,"376" :0,"377" :0,"378" :0,"379" :0,"380" :0,"381" :0,"382" :0,"383" :0,"384" :0,"385" :0,"386" :0,"387" :0,"388" :0,"389" :0,"390" :0,"391" :0,"392" :0,"393" :0,"394" :0,"395" :0,"396" :0,"397" :0,"398" :0,"399" :0,"400" :0,"401" :0,"402" :0,"403" :0,"404" :0,"405" :0,"406" :0,"407" :0,"408" :0,"409" :0,"410" :0,"411" :0,"412" :0,"413" :0,"414" :0,"415" :0,"416" :0,"417" :0,"418" :0,"419" :0,"420" :0,"421" :0,"422" :0,"423" :0,"424" :0,"425" :0,"426" :0,"427" :0,"428" :0,"429" :0,"430" :0,"431" :0,"432" :0,"433" :0,"434" :0,"435" :0,"436" :0,"437" :0,"438" :0,"439" :0,"440" :0,"441" :0,"442" :0,"443" :0,"444" :0,"445" :0,"446" :0,"447" :0,"448" :0,"449" :0,"450" :0,"451" :0,"452" :0,"453" :0,"454" :0,"455" :0,"456" :0,"457" :0,"458" :0,"459" :0,"460" :0,"461" :0,"462" :0,"463" :0,"464" :0,"465" :0,"466" :0,"467" :0,"468" :0,"469" :0,"470" :0,"471" :0,"472" :0,"473" :0,"474" :0,"475" :0,"476" :0,"477" :0,"478" :0,"479" :0,"480" :0,"481" :0,"482" :0,"483" :0,"484" :0,"485" :0,"486" :0,"487" :0,"488" :0,"489" :0,"490" :0,"491" :0,"492" :0,"493" :0,"494" :0,"495" :0,"496" :0,"497" :0,"498" :0,"499" :0,"500" :0,"501" :0,"502" :0,"503" :0,"504" :0,"505" :0,"506" :0,"507" :0,"508" :0,"509" :0,"510" :0,"511" :0,"512" :0,"513" :0,"514" :0,"515" :0,"516" :0,"517" :0,"518" :0,"519" :0,"520" :0,"521" :0,"522" :0,"523" :0,"524" :0,"525" :0,"526" :0,"527" :0,"528" :0,"529" :0,"530" :0,"531" :0,"532" :0,"533" :0,"534" :0,"535" :0,"536" :0,"537" :0,"538" :0,"539" :0,"540" :0,"541" :0,"542" :0,"543" :0,"544" :0,"545" :0,"546" :0,"547" :0,"548" :0,"549" :0,"550" :0,"551" :0,"552" :0,"553" :0,"554" :0,"555" :0,"556" :0,"557" :0,"558" :0,"559" :0,"560" :0,"561" :0,"562" :0,"563" :0,"564" :0,"565" :0,"566" :0,"567" :0,"568" :0,"569" :0,"570" :0,"571" :0,"572" :0,"573" :0,"574" :0,"575" :0,"576" :0,"577" :0,"578" :0,"579" :0,"580" :0,"581" :0,"582" :0,"583" :0,"584" :0,"585" :0,"586" :0,"587" :0,"588" :0,"589" :0,"590" :0,"591" :0,"592" :0,"593" :0,"594" :0,"595" :0,"596" :0,"597" :0,"598" :0,"599" :0,"600" :0,"601" :0,"602" :0,"603" :0,"604" :0,"605" :0,"606" :0,"607" :0,"608" :0,"609" :0,"610" :0,"611" :0,"612" :0,"613" :0,"614" :0,"615" :0,"616" :0,"617" :0,"618" :0,"619" :0,"620" :0,"621" :0,"622" :0,"623" :0,"624" :0,"625" :0,"626" :0,"627" :0,"628" :0,"629" :0,"630" :0,"631" :0,"632" :0,"633" :0,"634" :0,"635" :0,"636" :0,"637" :0,"638" :0,"639" :0,"640" :0,"641" :0,"642" :0,"643" :0,"644" :0,"645" :0,"646" :0,"647" :0,"648" :0,"649" :0,"650" :0,"651" :0,"652" :0,"653" :0,"654" :0,"655" :0,"656" :0,"657" :0,"658" :0,"659" :0,"660" :0,"661" :0,"662" :0,"663" :0,"664" :0,"665" :0,"666" :0,"667" :0,"668" :0,"669" :0,"670" :0,"671" :0,"672" :0,"673" :0,"674" :0,"675" :0,"676" :0,"677" :0,"678" :0,"679" :0,"680" :0,"681" :0,"682" :0,"683" :0,"684" :0,"685" :0,"686" :0,"687" :0,"688" :0,"689" :0,"690" :0,"691" :0,"692" :0,"693" :0,"694" :0,"695" :0,"696" :0,"697" :0,"698" :0,"699" :0,"700" :0,"701" :0,"702" :0,"703" :0,"704" :0,"705" :0,"706" :0,"707" :0,"708" :0,"709" :0,"710" :0,"711" :0,"712" :0,"713" :0,"714" :0,"715" :0,"716" :0,"717" :0,"718" :0,"719" :0,"720" :0,"721" :0,"722" :0,"723" :0,"724" :0,"725" :0,"726" :0,"727" :0,"728" :0,"729" :0,"730" :0,"731" :0,"732" :0,"733" :0,"734" :0,"735" :0,"736" :0,"737" :0,"738" :0,"739" :0,"740" :0,"741" :0,"742" :0,"743" :0,"744" :0,"745" :0,"746" :0,"747" :0,"748" :0,"749" :0,"750" :0,"751" :0,"752" :0,"753" :0,"754" :0,"755" :0,"756" :0,"757" :0,"758" :0,"759" :0,"760" :0,"761" :0,"762" :0,"763" :0,"764" :0,"765" :0,"766" :0,"767" :0,"768" :0,"769" :0,"770" :0,"771" :0,"772" :0,"773" :0,"774" :0,"775" :0,"776" :0,"777" :0,"778" :0,"779" :0,"780" :0,"781" :0,"782" :0,"783" :0,"784" :0,"785" :0,"786" :0,"787" :0,"788" :0,"789" :0,"790" :0,"791" :0,"792" :0,"793" :0,"794" :0,"795" :0,"796" :0,"797" :0,"798" :0,"799" :0,"800" :0,"801" :0,"802" :0,"803" :0,"804" :0,"805" :0,"806" :0,"807" :0,"808" :0,"809" :0,"810" :0,"811" :0,"812" :0,"813" :0,"814" :0,"815" :0,"816" :0,"817" :0,"818" :0,"819" :0,"820" :0,"821" :0,"822" :0,"823" :0,"824" :0,"825" :0,"826" :0,"827" :0,"828" :0,"829" :0,"830" :0,"831" :0,"832" :0,"833" :0,"834" :0,"835" :0,"836" :0,"837" :0,"838" :0,"839" :0,"840" :0,"841" :0,"842" :0,"843" :0,"844" :0,"845" :0,"846" :0,"847" :0,"848" :0,"849" :0,"850" :0,"851" :0,"852" :0,"853" :0,"854" :0,"855" :0,"856" :0,"857" :0,"858" :0,"859" :0,"860" :0,"861" :0,"862" :0,"863" :0,"864" :0,"865" :0,"866" :0,"867" :0,"868" :0,"869" :0,"870" :0,"871" :0,"872" :0,"873" :0,"874" :0,"875" :0,"876" :0,"877" :0,"878" :0,"879" :0,"880" :0,"881" :0,"882" :0,"883" :0,"884" :0,"885" :0,"886" :0,"887" :0,"888" :0,"889" :0,"890" :0,"891" :0,"892" :0,"893" :0,"894" :0,"895" :0,"896" :0,"897" :0,"898" :0,"899" :0,"900" :0,"901" :0,"902" :0,"903" :0,"904" :0,"905" :0,"906" :0,"907" :0,"908" :0,"909" :0,"910" :0,"911" :0,"912" :0,"913" :0,"914" :0,"915" :0,"916" :0,"917" :0,"918" :0,"919" :0,"920" :0,"921" :0,"922" :0,"923" :0,"924" :0,"925" :0,"926" :0,"927" :0,"928" :0,"929" :0,"930" :0,"931" :0,"932" :0,"933" :0,"934" :0,"935" :0,"936" :0,"937" :0,"938" :0,"939" :0,"940" :0,"941" :0,"942" :0,"943" :0,"944" :0,"945" :0,"946" :0,"947" :0,"948" :0,"949" :0,"950" :0,"951" :0,"952" :0,"953" :0,"954" :0,"955" :0,"956" :0,"957" :0,"958" :0,"959" :0,"960" :0,"961" :0,"962" :0,"963" :0,"964" :0,"965" :0,"966" :0,"967" :0,"968" :0,"969" :0,"970" :0,"971" :0,"972" :0,"973" :0,"974" :0,"975" :0,"976" :0,"977" :0,"978" :0,"979" :0,"980" :0,"981" :0,"982" :0,"983" :0,"984" :0,"985" :0,"986" :0,"987" :0,"988" :0,"989" :0,"990" :0,"991" :0,"992" :0,"993" :0,"994" :0,"995" :0,"996" :0,"997" :0,"998" :0,"999" :0,"1000" :0,"1001" :0,"1002" :0,"1003" :0,"1004" :0,"1005" :0,"1006" :0,"1007" :0,"1008" :0,"1009" :0,"1010" :0,"1011" :0,"1012" :0,"1013" :0,"1014" :0,"1015" :0,"1016" :0,"1017" :0,"1018" :0,"1019" :0,"1020" :0,"1021" :0,"1022" :0,"1023" :0,"1024" :0,"1025" :0,"1026" :0,"1027" :0,"1028" :0,"1029" :0,"1030" :0,"1031" :0,"1032" :0,"1033" :0,"1034" :0,"1035" :0,"1036" :0,"1037" :0,"1038" :0,"1039" :0,"1040" :0,"1041" :0,"1042" :0,"1043" :0,"1044" :0,"1045" :0,"1046" :0,"1047" :0,"1048" :0,"1049" :0,"1050" :0,"1051" :0,"1052" :0,"1053" :0,"1054" :0,"1055" :0,"1056" :0,"1057" :0,"1058" :0,"1059" :0,"1060" :0,"1061" :0,"1062" :0,"1063" :0,"1064" :0,"1065" :0,"1066" :0,"1067" :0,"1068" :0,"1069" :0,"1070" :0,"1071" :0,"1072" :0,"1073" :0,"1074" :0,"1075" :0,"1076" :0,"1077" :0,"1078" :0,"1079" :0,"1080" :0,"1081" :0,"1082" :0,"1083" :0,"1084" :0,"1085" :0,"1086" :0,"1087" :0,"1088" :0,"1089" :0,"1090" :0,"1091" :0,"1092" :0,"1093" :0,"1094" :0,"1095" :0,"1096" :0,"1097" :0,"1098" :0,"1099" :0,"1100" :0,"1101" :0,"1102" :0,"1103" :0,"1104" :0,"1105" :0,"1106" :0,"1107" :0,"1108" :0,"1109" :0,"1110" :0,"1111" :0,"1112" :0,"1113" :0,"1114" :0,"1115" :0,"1116" :0,"1117" :0,"1118" :0,"1119" :0,"1120" :0,"1121" :0,"1122" :0,"1123" :0,"1124" :0,"1125" :0,"1126" :0,"1127" :0,"1128" :0,"1129" :0,"1130" :0,"1131" :0,"1132" :0,"1133" :0,"1134" :0,"1135" :0,"1136" :0,"1137" :0,"1138" :0,"1139" :0,"1140" :0,"1141" :0,"1142" :0,"1143" :0,"1144" :0,"1145" :0,"1146" :0,"1147" :0,"1148" :0,"1149" :0,"1150" :0,"1151" :0,"1152" :0,"1153" :0,"1154" :0,"1155" :0,"1156" :0,"1157" :0,"1158" :0,"1159" :0,"1160" :0,"1161" :0,"1162" :0,"1163" :0,"1164" :0,"1165" :0,"1166" :0,"1167" :0,"1168" :0,"1169" :0,"1170" :0,"1171" :0,"1172" :0,"1173" :0,"1174" :0,"1175" :0,"1176" :0,"1177" :0,"1178" :0,"1179" :0,"1180" :0,"1181" :0,"1182" :0,"1183" :0,"1184" :0,"1185" :0,"1186" :0,"1187" :0,"1188" :0,"1189" :0,"1190" :0,"1191" :0,"1192" :0,"1193" :0,"1194" :0,"1195" :0,"1196" :0,"1197" :0,"1198" :0,"1199" :0,"1200" :0,"1201" :0,"1202" :0,"1203" :0,"1204" :0,"1205" :0,"1206" :0,"1207" :0,"1208" :0,"1209" :0,"1210" :0,"1211" :0,"1212" :0,"1213" :0,"1214" :0,"1215" :0,"1216" :0,"1217" :0,"1218" :0,"1219" :0,"1220" :0,"1221" :0,"1222" :0,"1223" :0,"1224" :0,"1225" :0,"1226" :0,"1227" :0,"1228" :0,"1229" :0,"1230" :0,"1231" :0,"1232" :0,"1233" :0,"1234" :0,"1235" :0,"1236" :0,"1237" :0,"1238" :0,"1239" :0,"1240" :0,"1241" :0,"1242" :0,"1243" :0,"1244" :0,"1245" :0,"1246" :0,"1247" :0,"1248" :0,"1249" :0,"1250" :0,"1251" :0,"1252" :0,"1253" :0,"1254" :0,"1255" :0,"1256" :0,"1257" :0,"1258" :0,"1259" :0,"1260" :0,"1261" :0,"1262" :0,"1263" :0,"1264" :0,"1265" :0,"1266" :0,"1267" :0,"1268" :0,"1269" :0,"1270" :0,"1271" :0,"1272" :0,"1273" :0,"1274" :0,"1275" :0,"1276" :0,"1277" :0,"1278" :0,"1279" :0,"1280" :0,"1281" :0,"1282" :0,"1283" :0,"1284" :0,"1285" :0,"1286" :0,"1287" :0,"1288" :0,"1289" :0,"1290" :0,"1291" :0,"1292" :0,"1293" :0,"1294" :0,"1295" :0,"1296" :0,"1297" :0,"1298" :0,"1299" :0,"1300" :0,"1301" :0,"1302" :0,"1303" :0,"1304" :0,"1305" :0,"1306" :0,"1307" :0,"1308" :0,"1309" :0,"1310" :0,"1311" :0,"1312" :0,"1313" :0,"1314" :0,"1315" :0,"1316" :0,"1317" :0,"1318" :0,"1319" :0,"1320" :0,"1321" :0,"1322" :0,"1323" :0,"1324" :0,"1325" :0,"1326" :0,"1327" :0,"1328" :0,"1329" :0,"1330" :0,"1331" :0,"1332" :0,"1333" :0,"1334" :0,"1335" :0,"1336" :0,"1337" :0,"1338" :0,"1339" :0,"1340" :0,"1341" :0,"1342" :0,"1343" :0,"1344" :0,"1345" :0,"1346" :0,"1347" :0,"1348" :0,"1349" :0,"1350" :0,"1351" :0,"1352" :0,"1353" :0,"1354" :0,"1355" :0,"1356" :0,"1357" :0,"1358" :0,"1359" :0,"1360" :0,"1361" :0,"1362" :0,"1363" :0,"1364" :0,"1365" :0,"1366" :0,"1367" :0,"1368" :0,"1369" :0,"1370" :0,"1371" :0,"1372" :0,"1373" :0,"1374" :0,"1375" :0,"1376" :0,"1377" :0,"1378" :0,"1379" :0,"1380" :0,"1381" :0,"1382" :0,"1383" :0,"1384" :0,"1385" :0,"1386" :0,"1387" :0,"1388" :0,"1389" :0,"1390" :0,"1391" :0,"1392" :0,"1393" :0,"1394" :0,"1395" :0,"1396" :0,"1397" :0,"1398" :0,"1399" :0,"1400" :0,"1401" :0,"1402" :0,"1403" :0,"1404" :0,"1405" :0,"1406" :0,"1407" :0,"1408" :0,"1409" :0,"1410" :0,"1411" :0,"1412" :0,"1413" :0,"1414" :0,"1415" :0,"1416" :0,"1417" :0,"1418" :0,"1419" :0,"1420" :0,"1421" :0,"1422" :0,"1423" :0,"1424" :0,"1425" :0,"1426" :0,"1427" :0,"1428" :0,"1429" :0,"1430" :0,"1431" :0,"1432" :0,"1433" :0,"1434" :0,"1435" :0,"1436" :0,"1437" :0,"1438" :0,"1439" :0,"1440" :0,"1441" :0,"1442" :0,"1443" :0,"1444" :0,"1445" :0,"1446" :0,"1447" :0,"1448" :0,"1449" :0,"1450" :0,"1451" :0,"1452" :0,"1453" :0,"1454" :0,"1455" :0,"1456" :0,"1457" :0,"1458" :0,"1459" :0,"1460" :0,"1461" :0,"1462" :0,"1463" :0,"1464" :0,"1465" :0,"1466" :0,"1467" :0,"1468" :0,"1469" :0,"1470" :0,"1471" :0,"1472" :0,"1473" :0,"1474" :0,"1475" :0,"1476" :0,"1477" :0,"1478" :0,"1479" :0,"1480" :0,"1481" :0,"1482" :0,"1483" :0,"1484" :0,"1485" :0,"1486" :0,"1487" :0,"1488" :0,"1489" :0,"1490" :0,"1491" :0,"1492" :0,"1493" :0,"1494" :0,"1495" :0,"1496" :0,"1497" :0,"1498" :0,"1499" :0,"1500" :0,"1501" :0,"1502" :0,"1503" :0,"1504" :0,"1505" :0,"1506" :0,"1507" :0,"1508" :0,"1509" :0,"1510" :0,"1511" :0,"1512" :0,"1513" :0,"1514" :0,"1515" :0,"1516" :0,"1517" :0,"1518" :0,"1519" :0,"1520" :0,"1521" :0,"1522" :0,"1523" :0,"1524" :0,"1525" :0,"1526" :0,"1527" :0,"1528" :0,"1529" :0,"1530" :0,"1531" :0,"1532" :0,"1533" :0,"1534" :0,"1535" :0,"1536" :0,"1537" :0,"1538" :0,"1539" :0,"1540" :0,"1541" :0,"1542" :0,"1543" :0,"1544" :0,"1545" :0,"1546" :0,"1547" :0,"1548" :0,"1549" :0,"1550" :0,"1551" :0,"1552" :0,"1553" :0,"1554" :0,"1555" :0,"1556" :0,"1557" :0,"1558" :0,"1559" :0,"1560" :0,"1561" :0,"1562" :0,"1563" :0,"1564" :0,"1565" :0,"1566" :0,"1567" :0,"1568" :0,"1569" :0,"1570" :0,"1571" :0,"1572" :0,"1573" :0,"1574" :0,"1575" :0,"1576" :0,"1577" :0,"1578" :0,"1579" :0,"1580" :0,"1581" :0,"1582" :0,"1583" :0,"1584" :0,"1585" :0,"1586" :0,"1587" :0,"1588" :0,"1589" :0,"1590" :0,"1591" :0,"1592" :0,"1593" :0,"1594" :0,"1595" :0,"1596" :0,"1597" :0,"1598" :0,"1599" :0,"1600" :0,"1601" :0,"1602" :0,"1603" :0,"1604" :0,"1605" :0,"1606" :0,"1607" :0,"1608" :0,"1609" :0,"1610" :0,"1611" :0,"1612" :0,"1613" :0,"1614" :0,"1615" :0,"1616" :0,"1617" :0,"1618" :0,"1619" :0,"1620" :0,"1621" :0,"1622" :0,"1623" :0,"1624" :0,"1625" :0,"1626" :0,"1627" :0,"1628" :0,"1629" :0,"1630" :0,"1631" :0,"1632" :0,"1633" :0,"1634" :0,"1635" :0,"1636" :0,"1637" :0,"1638" :0,"1639" :0,"1640" :0,"1641" :0,"1642" :0,"1643" :0,"1644" :0,"1645" :0,"1646" :0,"1647" :0,"1648" :0,"1649" :0,"1650" :0,"1651" :0,"1652" :0,"1653" :0,"1654" :0,"1655" :0,"1656" :0,"1657" :0,"1658" :0,"1659" :0,"1660" :0,"1661" :0,"1662" :0,"1663" :0,"1664" :0,"1665" :0,"1666" :0,"1667" :0,"1668" :0,"1669" :0,"1670" :0,"1671" :0,"1672" :0,"1673" :0,"1674" :0,"1675" :0,"1676" :0,"1677" :0,"1678" :0,"1679" :0,"1680" :0,"1681" :0,"1682" :0,"1683" :0,"1684" :0,"1685" :0,"1686" :0,"1687" :0,"1688" :0,"1689" :0,"1690" :0,"1691" :0,"1692" :0,"1693" :0,"1694" :0,"1695" :0,"1696" :0,"1697" :0,"1698" :0,"1699" :0,"1700" :0,"1701" :0,"1702" :0,"1703" :0,"1704" :0,"1705" :0,"1706" :0,"1707" :0,"1708" :0,"1709" :0,"1710" :0,"1711" :0,"1712" :0,"1713" :0,"1714" :0,"1715" :0,"1716" :0,"1717" :0,"1718" :0,"1719" :0,"1720" :0,"1721" :0,"1722" :0,"1723" :0,"1724" :0,"1725" :0,"1726" :0,"1727" :0,"1728" :0,"1729" :0,"1730" :0,"1731" :0,"1732" :0,"1733" :0,"1734" :0,"1735" :0,"1736" :0,"1737" :0,"1738" :0,"1739" :0,"1740" :0,"1741" :0,"1742" :0,"1743" :0,"1744" :0,"1745" :0,"1746" :0,"1747" :0,"1748" :0,"1749" :0,"1750" :0,"1751" :0,"1752" :0,"1753" :0,"1754" :0,"1755" :0,"1756" :0,"1757" :0,"1758" :0,"1759" :0,"1760" :0,"1761" :0,"1762" :0,"1763" :0,"1764" :0,"1765" :0,"1766" :0,"1767" :0,"1768" :0,"1769" :0,"1770" :0,"1771" :0,"1772" :0,"1773" :0,"1774" :0,"1775" :0,"1776" :0,"1777" :0,"1778" :0,"1779" :0,"1780" :0,"1781" :0,"1782" :0,"1783" :0,"1784" :0,"1785" :0,"1786" :0,"1787" :0,"1788" :0,"1789" :0,"1790" :0,"1791" :0,"1792" :0,"1793" :0,"1794" :0,"1795" :0,"1796" :0,"1797" :0,"1798" :0,"1799" :0,"1800" :0,"1801" :0,"1802" :0,"1803" :0,"1804" :0,"1805" :0,"1806" :0,"1807" :0,"1808" :0,"1809" :0,"1810" :0,"1811" :0,"1812" :0,"1813" :0,"1814" :0,"1815" :0,"1816" :0,"1817" :0,"1818" :0,"1819" :0,"1820" :0,"1821" :0,"1822" :0,"1823" :0,"1824" :0,"1825" :0,"1826" :0,"1827" :0,"1828" :0,"1829" :0,"1830" :0,"1831" :0,"1832" :0,"1833" :0,"1834" :0,"1835" :0,"1836" :0,"1837" :0,"1838" :0,"1839" :0,"1840" :0,"1841" :0,"1842" :0,"1843" :0,"1844" :0,"1845" :0,"1846" :0,"1847" :0,"1848" :0,"1849" :0,"1850" :0,"1851" :0,"1852" :0,"1853" :0,"1854" :0,"1855" :0,"1856" :0,"1857" :0,"1858" :0,"1859" :0,"1860" :0,"1861" :0,"1862" :0,"1863" :0,"1864" :0,"1865" :0,"1866" :0,"1867" :0,"1868" :0,"1869" :0,"1870" :0,"1871" :0,"1872" :0,"1873" :0,"1874" :0,"1875" :0,"1876" :0,"1877" :0,"1878" :0,"1879" :0,"1880" :0,"1881" :0,"1882" :0,"1883" :0,"1884" :0,"1885" :0,"1886" :0,"1887" :0,"1888" :0,"1889" :0,"1890" :0,"1891" :0,"1892" :0,"1893" :0,"1894" :0,"1895" :0,"1896" :0,"1897" :0,"1898" :0,"1899" :0,"1900" :0,"1901" :0,"1902" :0,"1903" :0,"1904" :0,"1905" :0,"1906" :0,"1907" :0,"1908" :0,"1909" :0,"1910" :0,"1911" :0,"1912" :0,"1913" :0,"1914" :0,"1915" :0,"1916" :0,"1917" :0,"1918" :0,"1919" :0,"1920" :0,"1921" :0,"1922" :0,"1923" :0,"1924" :0,"1925" :0,"1926" :0,"1927" :0,"1928" :0,"1929" :0,"1930" :0,"1931" :0,"1932" :0,"1933" :0,"1934" :0,"1935" :0,"1936" :0,"1937" :0,"1938" :0,"1939" :0,"1940" :0,"1941" :0,"1942" :0,"1943" :0,"1944" :0,"1945" :0,"1946" :0,"1947" :0,"1948" :0,"1949" :0,"1950" :0,"1951" :0,"1952" :0,"1953" :0,"1954" :0,"1955" :0,"1956" :0,"1957" :0,"1958" :0,"1959" :0,"1960" :0,"1961" :0,"1962" :0,"1963" :0,"1964" :0,"1965" :0,"1966" :0,"1967" :0,"1968" :0,"1969" :0,"1970" :0,"1971" :0,"1972" :0,"1973" :0,"1974" :0,"1975" :0,"1976" :0,"1977" :0,"1978" :0,"1979" :0,"1980" :0,"1981" :0,"1982" :0,"1983" :0,"1984" :0,"1985" :0,"1986" :0,"1987" :0,"1988" :0,"1989" :0,"1990" :0,"1991" :0,"1992" :0,"1993" :0,"1994" :0,"1995" :0,"1996" :0,"1997" :0,"1998" :0,"1999" :0,"2000" :0,"2001" :0,"2002" :0,"2003" :0,"2004" :0,"2005" :0,"2006" :0,"2007" :0,"2008" :0,"2009" :0,"2010" :0,"2011" :0,"2012" :0,"2013" :0,"2014" :0,"2015" :0,"2016" :0,"2017" :0,"2018" :0,"2019" :0,"2020" :0,"2021" :0,"2022" :0,"2023" :0,"2024" :0,"2025" :0,"2026" :0,"2027" :0,"2028" :0,"2029" :0,"2030" :0,"2031" :0,"2032" :0,"2033" :0,"2034" :0,"2035" :0,"2036" :0,"2037" :0,"2038" :0,"2039" :0,"2040" :0,"2041" :0,"2042" :0,"2043" :0,"2044" :0,"2045" :0,"2046" :0,"2047" :0,"2048" :0,"2049" :0,"2050" :0,"2051" :0,"2052" :0,"2053" :0,"2054" :0,"2055" :0,"2056" :0,"2057" :0,"2058" :0,"2059" :0,"2060" :0,"2061" :0,"2062" :0,"2063" :0,"2064" :0,"2065" :0,"2066" :0,"2067" :0,"2068" :0,"2069" :0,"2070" :0,"2071" :0,"2072" :0,"2073" :0,"2074" :0,"2075" :0,"2076" :0,"2077" :0,"2078" :0,"2079" :0,"2080" :0,"2081" :0,"2082" :0,"2083" :0,"2084" :0,"2085" :0,"2086" :0,"2087" :0,"2088" :0,"2089" :0,"2090" :0,"2091" :0,"2092" :0,"2093" :0,"2094" :0,"2095" :0,"2096" :0,"2097" :0,"2098" :0,"2099" :0,"2100" :0,"2101" :0,"2102" :0,"2103" :0,"2104" :0,"2105" :0,"2106" :0,"2107" :0,"2108" :0,"2109" :0,"2110" :0,"2111" :0,"2112" :0,"2113" :0,"2114" :0,"2115" :0,"2116" :0,"2117" :0,"2118" :0,"2119" :0,"2120" :0,"2121" :0,"2122" :0,"2123" :0,"2124" :0,"2125" :0,"2126" :0,"2127" :0,"2128" :0,"2129" :0,"2130" :0,"2131" :0,"2132" :0,"2133" :0,"2134" :0,"2135" :0,"2136" :0,"2137" :0,"2138" :0,"2139" :0,"2140" :0,"2141" :0,"2142" :0,"2143" :0,"2144" :0,"2145" :0,"2146" :0,"2147" :0,"2148" :0,"2149" :0,"2150" :0,"2151" :0,"2152" :0,"2153" :0,"2154" :0,"2155" :0,"2156" :0,"2157" :0,"2158" :0,"2159" :0,"2160" :0,"2161" :0,"2162" :0,"2163" :0,"2164" :0,"2165" :0,"2166" :0,"2167" :0,"2168" :0,"2169" :0,"2170" :0,"2171" :0,"2172" :0,"2173" :0,"2174" :0,"2175" :0,"2176" :0,"2177" :0,"2178" :0,"2179" :0,"2180" :0,"2181" :0,"2182" :0,"2183" :0,"2184" :0,"2185" :0,"2186" :0,"2187" :0,"2188" :0,"2189" :0,"2190" :0,"2191" :0,"2192" :0,"2193" :0,"2194" :0,"2195" :0,"2196" :0,"2197" :0,"2198" :0,"2199" :0,"2200" :0,"2201" :0,"2202" :0,"2203" :0,"2204" :0,"2205" :0,"2206" :0,"2207" :0,"2208" :0,"2209" :0,"2210" :0,"2211" :0,"2212" :0,"2213" :0,"2214" :0,"2215" :0,"2216" :0,"2217" :0,"2218" :0,"2219" :0,"2220" :0,"2221" :0,"2222" :0,"2223" :0,"2224" :0,"2225" :0,"2226" :0,"2227" :0,"2228" :0,"2229" :0,"2230" :0,"2231" :0,"2232" :0,"2233" :0,"2234" :0,"2235" :0,"2236" :0,"2237" :0,"2238" :0,"2239" :0,"2240" :0,"2241" :0,"2242" :0,"2243" :0,"2244" :0,"2245" :0,"2246" :0,"2247" :0,"2248" :0,"2249" :0,"2250" :0,"2251" :0,"2252" :0,"2253" :0,"2254" :0,"2255" :0,"2256" :0,"2257" :0,"2258" :0,"2259" :0,"2260" :0,"2261" :0,"2262" :0,"2263" :0,"2264" :0,"2265" :0,"2266" :0,"2267" :0,"2268" :0,"2269" :0,"2270" :0,"2271" :0,"2272" :0,"2273" :0,"2274" :0,"2275" :0,"2276" :0,"2277" :0,"2278" :0,"2279" :0,"2280" :0,"2281" :0,"2282" :0,"2283" :0,"2284" :0,"2285" :0,"2286" :0,"2287" :0,"2288" :0,"2289" :0,"2290" :0,"2291" :0,"2292" :0,"2293" :0,"2294" :0,"2295" :0,"2296" :0,"2297" :0,"2298" :0,"2299" :0,"2300" :0,"2301" :0,"2302" :0,"2303" :0,"2304" :0,"2305" :0,"2306" :0,"2307" :0,"2308" :0,"2309" :0,"2310" :0,"2311" :0,"2312" :0,"2313" :0,"2314" :0,"2315" :0,"2316" :0,"2317" :0,"2318" :0,"2319" :0,"2320" :0,"2321" :0,"2322" :0,"2323" :0,"2324" :0,"2325" :0,"2326" :0,"2327" :0,"2328" :0,"2329" :0,"2330" :0,"2331" :0,"2332" :0,"2333" :0,"2334" :0,"2335" :0,"2336" :0,"2337" :0,"2338" :0,"2339" :0,"2340" :0,"2341" :0,"2342" :0,"2343" :0,"2344" :0,"2345" :0,"2346" :0,"2347" :0,"2348" :0,"2349" :0,"2350" :0,"2351" :0,"2352" :0,"2353" :0,"2354" :0,"2355" :0,"2356" :0,"2357" :0,"2358" :0,"2359" :0,"2360" :0,"2361" :0,"2362" :0,"2363" :0,"2364" :0,"2365" :0,"2366" :0,"2367" :0,"2368" :0,"2369" :0,"2370" :0,"2371" :0,"2372" :0,"2373" :0,"2374" :0,"2375" :0,"2376" :0,"2377" :0,"2378" :0,"2379" :0,"2380" :0,"2381" :0,"2382" :0,"2383" :0,"2384" :0,"2385" :0,"2386" :0,"2387" :0,"2388" :0,"2389" :0,"2390" :0,"2391" :0,"2392" :0,"2393" :0,"2394" :0,"2395" :0,"2396" :0,"2397" :0,"2398" :0,"2399" :0,"2400" :0,"2401" :0,"2402" :0,"2403" :0,"2404" :0,"2405" :0,"2406" :0,"2407" :0,"2408" :0,"2409" :0,"2410" :0,"2411" :0,"2412" :0,"2413" :0,"2414" :0,"2415" :0,"2416" :0,"2417" :0,"2418" :0,"2419" :0,"2420" :0,"2421" :0,"2422" :0,"2423" :0,"2424" :0,"2425" :0,"2426" :0,"2427" :0,"2428" :0,"2429" :0,"2430" :0,"2431" :0,"2432" :0,"2433" :0,"2434" :0,"2435" :0,"2436" :0,"2437" :0,"2438" :0,"2439" :0,"2440" :0,"2441" :0,"2442" :0,"2443" :0,"2444" :0,"2445" :0,"2446" :0,"2447" :0,"2448" :0,"2449" :0,"2450" :0,"2451" :0,"2452" :0,"2453" :0,"2454" :0,"2455" :0,"2456" :0,"2457" :0,"2458" :0,"2459" :0,"2460" :0,"2461" :0,"2462" :0,"2463" :0,"2464" :0,"2465" :0,"2466" :0,"2467" :0,"2468" :0,"2469" :0,"2470" :0,"2471" :0,"2472" :0,"2473" :0,"2474" :0,"2475" :0,"2476" :0,"2477" :0,"2478" :0,"2479" :0,"2480" :0,"2481" :0,"2482" :0,"2483" :0,"2484" :0,"2485" :0,"2486" :0,"2487" :0,"2488" :0,"2489" :0,"2490" :0,"2491" :0,"2492" :0,"2493" :0,"2494" :0,"2495" :0,"2496" :0,"2497" :0,"2498" :0,"2499" :0,"2500" :0,"2501" :0,"2502" :0,"2503" :0,"2504" :0,"2505" :0,"2506" :0,"2507" :0,"2508" :0,"2509" :0,"2510" :0,"2511" :0,"2512" :0,"2513" :0,"2514" :0,"2515" :0,"2516" :0,"2517" :0,"2518" :0,"2519" :0,"2520" :0,"2521" :0,"2522" :0,"2523" :0,"2524" :0,"2525" :0,"2526" :0,"2527" :0,"2528" :0,"2529" :0,"2530" :0,"2531" :0,"2532" :0,"2533" :0,"2534" :0,"2535" :0,"2536" :0,"2537" :0,"2538" :0,"2539" :0,"2540" :0,"2541" :0,"2542" :0,"2543" :0,"2544" :0,"2545" :0,"2546" :0,"2547" :0,"2548" :0,"2549" :0,"2550" :0,"2551" :0,"2552" :0,"2553" :0,"2554" :0,"2555" :0,"2556" :0,"2557" :0,"2558" :0,"2559" :0,"2560" :0,"2561" :0,"2562" :0,"2563" :0,"2564" :0,"2565" :0,"2566" :0,"2567" :0,"2568" :0,"2569" :0,"2570" :0,"2571" :0,"2572" :0,"2573" :0,"2574" :0,"2575" :0,"2576" :0,"2577" :0,"2578" :0,"2579" :0,"2580" :0,"2581" :0,"2582" :0,"2583" :0,"2584" :0,"2585" :0,"2586" :0,"2587" :0,"2588" :0,"2589" :0,"2590" :0,"2591" :0,"2592" :0,"2593" :0,"2594" :0,"2595" :0,"2596" :0,"2597" :0,"2598" :0,"2599" :0,"2600" :0,"2601" :0,"2602" :0,"2603" :0,"2604" :0,"2605" :0,"2606" :0,"2607" :0,"2608" :0,"2609" :0,"2610" :0,"2611" :0,"2612" :0,"2613" :0,"2614" :0,"2615" :0,"2616" :0,"2617" :0,"2618" :0,"2619" :0,"2620" :0,"2621" :0,"2622" :0,"2623" :0,"2624" :0,"2625" :0,"2626" :0,"2627" :0,"2628" :0,"2629" :0,"2630" :0,"2631" :0,"2632" :0,"2633" :0,"2634" :0,"2635" :0,"2636" :0,"2637" :0,"2638" :0,"2639" :0,"2640" :0,"2641" :0,"2642" :0,"2643" :0,"2644" :0,"2645" :0,"2646" :0,"2647" :0,"2648" :0,"2649" :0,"2650" :0,"2651" :0,"2652" :0,"2653" :0,"2654" :0,"2655" :0,"2656" :0,"2657" :0,"2658" :0,"2659" :0,"2660" :0,"2661" :0,"2662" :0,"2663" :0,"2664" :0,"2665" :0,"2666" :0,"2667" :0,"2668" :0,"2669" :0,"2670" :0,"2671" :0,"2672" :0,"2673" :0,"2674" :0,"2675" :0,"2676" :0,"2677" :0,"2678" :0,"2679" :0,"2680" :0,"2681" :0,"2682" :0,"2683" :0,"2684" :0,"2685" :0,"2686" :0,"2687" :0,"2688" :0,"2689" :0,"2690" :0,"2691" :0,"2692" :0,"2693" :0,"2694" :0,"2695" :0,"2696" :0,"2697" :0,"2698" :0,"2699" :0,"2700" :0,"2701" :0,"2702" :0,"2703" :0,"2704" :0,"2705" :0,"2706" :0,"2707" :0,"2708" :0,"2709" :0,"2710" :0,"2711" :0,"2712" :0,"2713" :0,"2714" :0,"2715" :0,"2716" :0,"2717" :0,"2718" :0,"2719" :0,"2720" :0,"2721" :0,"2722" :0,"2723" :0,"2724" :0,"2725" :0,"2726" :0,"2727" :0,"2728" :0,"2729" :0,"2730" :0,"2731" :0,"2732" :0,"2733" :0,"2734" :0,"2735" :0,"2736" :0,"2737" :0,"2738" :0,"2739" :0,"2740" :0,"2741" :0,"2742" :0,"2743" :0,"2744" :0,"2745" :0,"2746" :0,"2747" :0,"2748" :0,"2749" :0,"2750" :0,"2751" :0,"2752" :0,"2753" :0,"2754" :0,"2755" :0,"2756" :0,"2757" :0,"2758" :0,"2759" :0,"2760" :0,"2761" :0,"2762" :0,"2763" :0,"2764" :0,"2765" :0,"2766" :0,"2767" :0,"2768" :0,"2769" :0,"2770" :0,"2771" :0,"2772" :0,"2773" :0,"2774" :0,"2775" :0,"2776" :0,"2777" :0,"2778" :0,"2779" :0,"2780" :0,"2781" :0,"2782" :0,"2783" :0,"2784" :0,"2785" :0,"2786" :0,"2787" :0,"2788" :0,"2789" :0,"2790" :0,"2791" :0,"2792" :0,"2793" :0,"2794" :0,"2795" :0,"2796" :0,"2797" :0,"2798" :0,"2799" :0,"2800" :0,"2801" :0,"2802" :0,"2803" :0,"2804" :0,"2805" :0,"2806" :0,"2807" :0,"2808" :0,"2809" :0,"2810" :0,"2811" :0,"2812" :0,"2813" :0,"2814" :0,"2815" :0,"2816" :0,"2817" :0,"2818" :0,"2819" :0,"2820" :0,"2821" :0,"2822" :0,"2823" :0,"2824" :0,"2825" :0,"2826" :0,"2827" :0,"2828" :0,"2829" :0,"2830" :0,"2831" :0,"2832" :0,"2833" :0,"2834" :0,"2835" :0,"2836" :0,"2837" :0,"2838" :0,"2839" :0,"2840" :0,"2841" :0,"2842" :0,"2843" :0,"2844" :0,"2845" :0,"2846" :0,"2847" :0,"2848" :0,"2849" :0,"2850" :0,"2851" :0,"2852" :0,"2853" :0,"2854" :0,"2855" :0,"2856" :0,"2857" :0,"2858" :0,"2859" :0,"2860" :0,"2861" :0,"2862" :0,"2863" :0,"2864" :0,"2865" :0,"2866" :0,"2867" :0,"2868" :0,"2869" :0,"2870" :0,"2871" :0,"2872" :0,"2873" :0,"2874" :0,"2875" :0,"2876" :0,"2877" :0,"2878" :0,"2879" :0,"2880" :0,"2881" :0,"2882" :0,"2883" :0,"2884" :0,"2885" :0,"2886" :0,"2887" :0,"2888" :0,"2889" :0,"2890" :0,"2891" :0,"2892" :0,"2893" :0,"2894" :0,"2895" :0,"2896" :0,"2897" :0,"2898" :0,"2899" :0,"2900" :0,"2901" :0,"2902" :0,"2903" :0,"2904" :0,"2905" :0,"2906" :0,"2907" :0,"2908" :0,"2909" :0,"2910" :0,"2911" :0,"2912" :0,"2913" :0,"2914" :0,"2915" :0,"2916" :0,"2917" :0,"2918" :0,"2919" :0,"2920" :0,"2921" :0,"2922" :0,"2923" :0,"2924" :0,"2925" :0,"2926" :0,"2927" :0,"2928" :0,"2929" :0,"2930" :0,"2931" :0,"2932" :0,"2933" :0,"2934" :0,"2935" :0,"2936" :0,"2937" :0,"2938" :0,"2939" :0,"2940" :0,"2941" :0,"2942" :0,"2943" :0,"2944" :0,"2945" :0,"2946" :0,"2947" :0,"2948" :0,"2949" :0,"2950" :0,"2951" :0,"2952" :0,"2953" :0,"2954" :0,"2955" :0,"2956" :0,"2957" :0,"2958" :0,"2959" :0,"2960" :0,"2961" :0,"2962" :0,"2963" :0,"2964" :0,"2965" :0,"2966" :0,"2967" :0,"2968" :0,"2969" :0,"2970" :0,"2971" :0,"2972" :0,"2973" :0,"2974" :0,"2975" :0,"2976" :0,"2977" :0,"2978" :0,"2979" :0,"2980" :0,"2981" :0,"2982" :0,"2983" :0,"2984" :0,"2985" :0,"2986" :0,"2987" :0,"2988" :0,"2989" :0,"2990" :0,"2991" :0,"2992" :0,"2993" :0,"2994" :0,"2995" :0,"2996" :0,"2997" :0,"2998" :0,"2999" :0,"3000" :0,"3001" :0,"3002" :0,"3003" :0,"3004" :0,"3005" :0,"3006" :0,"3007" :0,"3008" :0,"3009" :0,"3010" :0,"3011" :0,"3012" :0,"3013" :0,"3014" :0,"3015" :0,"3016" :0,"3017" :0,"3018" :0,"3019" :0,"3020" :0,"3021" :0,"3022" :0,"3023" :0,"3024" :0,"3025" :0,"3026" :0,"3027" :0,"3028" :0,"3029" :0,"3030" :0,"3031" :0,"3032" :0,"3033" :0,"3034" :0,"3035" :0,"3036" :0,"3037" :0,"3038" :0,"3039" :0,"3040" :0,"3041" :0,"3042" :0,"3043" :0,"3044" :0,"3045" :0,"3046" :0,"3047" :0,"3048" :0,"3049" :0,"3050" :0,"3051" :0,"3052" :0,"3053" :0,"3054" :0,"3055" :0,"3056" :0,"3057" :0,"3058" :0,"3059" :0,"3060" :0,"3061" :0,"3062" :0,"3063" :0,"3064" :0,"3065" :0,"3066" :0,"3067" :0,"3068" :0,"3069" :0,"3070" :0,"3071" :0,"3072" :0,"3073" :0,"3074" :0,"3075" :0,"3076" :0,"3077" :0,"3078" :0,"3079" :0,"3080" :0,"3081" :0,"3082" :0,"3083" :0,"3084" :0,"3085" :0,"3086" :0,"3087" :0,"3088" :0,"3089" :0,"3090" :0,"3091" :0,"3092" :0,"3093" :0,"3094" :0,"3095" :0,"3096" :0,"3097" :0,"3098" :0,"3099" :0,"3100" :0,"3101" :0,"3102" :0,"3103" :0,"3104" :0,"3105" :0,"3106" :0,"3107" :0,"3108" :0,"3109" :0,"3110" :0,"3111" :0,"3112" :0,"3113" :0,"3114" :0,"3115" :0,"3116" :0,"3117" :0,"3118" :0,"3119" :0,"3120" :0,"3121" :0,"3122" :0,"3123" :0,"3124" :0,"3125" :0,"3126" :0,"3127" :0,"3128" :0,"3129" :0,"3130" :0,"3131" :0,"3132" :0,"3133" :0,"3134" :0,"3135" :0,"3136" :0,"3137" :0,"3138" :0,"3139" :0,"3140" :0,"3141" :0,"3142" :0,"3143" :0,"3144" :0,"3145" :0,"3146" :0,"3147" :0,"3148" :0,"3149" :0,"3150" :0,"3151" :0,"3152" :0,"3153" :0,"3154" :0,"3155" :0,"3156" :0,"3157" :0,"3158" :0,"3159" :0,"3160" :0,"3161" :0,"3162" :0,"3163" :0,"3164" :0,"3165" :0,"3166" :0,"3167" :0,"3168" :0,"3169" :0,"3170" :0,"3171" :0,"3172" :0,"3173" :0,"3174" :0,"3175" :0,"3176" :0,"3177" :0,"3178" :0,"3179" :0,"3180" :0,"3181" :0,"3182" :0,"3183" :0,"3184" :0,"3185" :0,"3186" :0,"3187" :0,"3188" :0,"3189" :0,"3190" :0,"3191" :0,"3192" :0,"3193" :0,"3194" :0,"3195" :0,"3196" :0,"3197" :0,"3198" :0,"3199" :0,"3200" :0,"3201" :0,"3202" :0,"3203" :0,"3204" :0,"3205" :0,"3206" :0,"3207" :0,"3208" :0,"3209" :0,"3210" :0,"3211" :0,"3212" :0,"3213" :0,"3214" :0,"3215" :0,"3216" :0,"3217" :0,"3218" :0,"3219" :0,"3220" :0,"3221" :0,"3222" :0,"3223" :0,"3224" :0,"3225" :0,"3226" :0,"3227" :0,"3228" :0,"3229" :0,"3230" :0,"3231" :0,"3232" :0,"3233" :0,"3234" :0,"3235" :0,"3236" :0,"3237" :0,"3238" :0,"3239" :0,"3240" :0,"3241" :0,"3242" :0,"3243" :0,"3244" :0,"3245" :0,"3246" :0,"3247" :0,"3248" :0,"3249" :0,"3250" :0,"3251" :0,"3252" :0,"3253" :0,"3254" :0,"3255" :0,"3256" :0,"3257" :0,"3258" :0,"3259" :0,"3260" :0,"3261" :0,"3262" :0,"3263" :0,"3264" :0,"3265" :0,"3266" :0,"3267" :0,"3268" :0,"3269" :0,"3270" :0,"3271" :0,"3272" :0,"3273" :0,"3274" :0,"3275" :0,"3276" :0,"3277" :0,"3278" :0,"3279" :0,"3280" :0,"3281" :0,"3282" :0,"3283" :0,"3284" :0,"3285" :0,"3286" :0,"3287" :0,"3288" :0,"3289" :0,"3290" :0,"3291" :0,"3292" :0,"3293" :0,"3294" :0,"3295" :0,"3296" :0,"3297" :0,"3298" :0,"3299" :0,"3300" :0,"3301" :0,"3302" :0,"3303" :0,"3304" :0,"3305" :0,"3306" :0,"3307" :0,"3308" :0,"3309" :0,"3310" :0,"3311" :0,"3312" :0,"3313" :0,"3314" :0,"3315" :0,"3316" :0,"3317" :0,"3318" :0,"3319" :0,"3320" :0,"3321" :0,"3322" :0,"3323" :0,"3324" :0,"3325" :0,"3326" :0,"3327" :0,"3328" :0,"3329" :0,"3330" :0,"3331" :0,"3332" :0,"3333" :0,"3334" :0,"3335" :0,"3336" :0,"3337" :0,"3338" :0,"3339" :0,"3340" :0,"3341" :0,"3342" :0,"3343" :0,"3344" :0,"3345" :0,"3346" :0,"3347" :0,"3348" :0,"3349" :0,"3350" :0,"3351" :0,"3352" :0,"3353" :0,"3354" :0,"3355" :0,"3356" :0,"3357" :0,"3358" :0,"3359" :0,"3360" :0,"3361" :0,"3362" :0,"3363" :0,"3364" :0,"3365" :0,"3366" :0,"3367" :0,"3368" :0,"3369" :0,"3370" :0,"3371" :0,"3372" :0,"3373" :0,"3374" :0,"3375" :0,"3376" :0,"3377" :0,"3378" :0,"3379" :0,"3380" :0,"3381" :0,"3382" :0,"3383" :0,"3384" :0,"3385" :0,"3386" :0,"3387" :0,"3388" :0,"3389" :0,"3390" :0,"3391" :0,"3392" :0,"3393" :0,"3394" :0,"3395" :0,"3396" :0,"3397" :0,"3398" :0,"3399" :0,"3400" :0,"3401" :0,"3402" :0,"3403" :0,"3404" :0,"3405" :0,"3406" :0,"3407" :0,"3408" :0,"3409" :0,"3410" :0,"3411" :0,"3412" :0,"3413" :0,"3414" :0,"3415" :0,"3416" :0,"3417" :0,"3418" :0,"3419" :0,"3420" :0,"3421" :0,"3422" :0,"3423" :0,"3424" :0,"3425" :0,"3426" :0,"3427" :0,"3428" :0,"3429" :0,"3430" :0,"3431" :0,"3432" :0,"3433" :0,"3434" :0,"3435" :0,"3436" :0,"3437" :0,"3438" :0,"3439" :0,"3440" :0,"3441" :0,"3442" :0,"3443" :0,"3444" :0,"3445" :0,"3446" :0,"3447" :0,"3448" :0,"3449" :0,"3450" :0,"3451" :0,"3452" :0,"3453" :0,"3454" :0,"3455" :0,"3456" :0,"3457" :0,"3458" :0,"3459" :0,"3460" :0,"3461" :0,"3462" :0,"3463" :0,"3464" :0,"3465" :0,"3466" :0,"3467" :0,"3468" :0,"3469" :0,"3470" :0,"3471" :0,"3472" :0,"3473" :0,"3474" :0,"3475" :0,"3476" :0,"3477" :0,"3478" :0,"3479" :0,"3480" :0,"3481" :0,"3482" :0,"3483" :0,"3484" :0,"3485" :0,"3486" :0,"3487" :0,"3488" :0,"3489" :0,"3490" :0,"3491" :0,"3492" :0,"3493" :0,"3494" :0,"3495" :0,"3496" :0,"3497" :0,"3498" :0,"3499" :0,"3500" :0,"3501" :0,"3502" :0,"3503" :0,"3504" :0,"3505" :0,"3506" :0,"3507" :0,"3508" :0,"3509" :0,"3510" :0,"3511" :0,"3512" :0,"3513" :0,"3514" :0,"3515" :0,"3516" :0,"3517" :0,"3518" :0,"3519" :0,"3520" :0,"3521" :0,"3522" :0,"3523" :0,"3524" :0,"3525" :0,"3526" :0,"3527" :0,"3528" :0,"3529" :0,"3530" :0,"3531" :0,"3532" :0,"3533" :0,"3534" :0,"3535" :0,"3536" :0,"3537" :0,"3538" :0,"3539" :0,"3540" :0,"3541" :0,"3542" :0,"3543" :0,"3544" :0,"3545" :0,"3546" :0,"3547" :0,"3548" :0,"3549" :0,"3550" :0,"3551" :0,"3552" :0,"3553" :0,"3554" :0,"3555" :0,"3556" :0,"3557" :0,"3558" :0,"3559" :0,"3560" :0,"3561" :0,"3562" :0,"3563" :0,"3564" :0,"3565" :0,"3566" :0,"3567" :0,"3568" :0,"3569" :0,"3570" :0,"3571" :0,"3572" :0,"3573" :0,"3574" :0,"3575" :0,"3576" :0,"3577" :0,"3578" :0,"3579" :0,"3580" :0,"3581" :0,"3582" :0,"3583" :0,"3584" :0,"3585" :0,"3586" :0,"3587" :0,"3588" :0,"3589" :0,"3590" :0,"3591" :0,"3592" :0,"3593" :0,"3594" :0,"3595" :0,"3596" :0,"3597" :0,"3598" :0,"3599" :0,"3600" :0,"3601" :0,"3602" :0,"3603" :0,"3604" :0,"3605" :0,"3606" :0,"3607" :0,"3608" :0,"3609" :0,"3610" :0,"3611" :0,"3612" :0,"3613" :0,"3614" :0,"3615" :0,"3616" :0,"3617" :0,"3618" :0,"3619" :0,"3620" :0,"3621" :0,"3622" :0,"3623" :0,"3624" :0,"3625" :0,"3626" :0,"3627" :0,"3628" :0,"3629" :0,"3630" :0,"3631" :0,"3632" :0,"3633" :0,"3634" :0,"3635" :0,"3636" :0,"3637" :0,"3638" :0,"3639" :0,"3640" :0,"3641" :0,"3642" :0,"3643" :0,"3644" :0,"3645" :0,"3646" :0,"3647" :0,"3648" :0,"3649" :0,"3650" :0,"3651" :0,"3652" :0,"3653" :0,"3654" :0,"3655" :0,"3656" :0,"3657" :0,"3658" :0,"3659" :0,"3660" :0,"3661" :0,"3662" :0,"3663" :0,"3664" :0,"3665" :0,"3666" :0,"3667" :0,"3668" :0,"3669" :0,"3670" :0,"3671" :0,"3672" :0,"3673" :0,"3674" :0,"3675" :0,"3676" :0,"3677" :0,"3678" :0,"3679" :0,"3680" :0,"3681" :0,"3682" :0,"3683" :0,"3684" :0,"3685" :0,"3686" :0,"3687" :0,"3688" :0,"3689" :0,"3690" :0,"3691" :0,"3692" :0,"3693" :0,"3694" :0,"3695" :0,"3696" :0,"3697" :0,"3698" :0,"3699" :0,"3700" :0,"3701" :0,"3702" :0,"3703" :0,"3704" :0,"3705" :0,"3706" :0,"3707" :0,"3708" :0,"3709" :0,"3710" :0,"3711" :0,"3712" :0,"3713" :0,"3714" :0,"3715" :0,"3716" :0,"3717" :0,"3718" :0,"3719" :0,"3720" :0,"3721" :0,"3722" :0,"3723" :0,"3724" :0,"3725" :0,"3726" :0,"3727" :0,"3728" :0,"3729" :0,"3730" :0,"3731" :0,"3732" :0,"3733" :0,"3734" :0,"3735" :0,"3736" :0,"3737" :0,"3738" :0,"3739" :0,"3740" :0,"3741" :0,"3742" :0,"3743" :0,"3744" :0,"3745" :0,"3746" :0,"3747" :0,"3748" :0,"3749" :0,"3750" :0,"3751" :0,"3752" :0,"3753" :0,"3754" :0,"3755" :0,"3756" :0,"3757" :0,"3758" :0,"3759" :0,"3760" :0,"3761" :0,"3762" :0,"3763" :0,"3764" :0,"3765" :0,"3766" :0,"3767" :0,"3768" :0,"3769" :0,"3770" :0,"3771" :0,"3772" :0,"3773" :0,"3774" :0,"3775" :0,"3776" :0,"3777" :0,"3778" :0,"3779" :0,"3780" :0,"3781" :0,"3782" :0,"3783" :0,"3784" :0,"3785" :0,"3786" :0,"3787" :0,"3788" :0,"3789" :0,"3790" :0,"3791" :0,"3792" :0,"3793" :0,"3794" :0,"3795" :0,"3796" :0,"3797" :0,"3798" :0,"3799" :0,"3800" :0,"3801" :0,"3802" :0,"3803" :0,"3804" :0,"3805" :0,"3806" :0,"3807" :0,"3808" :0,"3809" :0,"3810" :0,"3811" :0,"3812" :0,"3813" :0,"3814" :0,"3815" :0,"3816" :0,"3817" :0,"3818" :0,"3819" :0,"3820" :0,"3821" :0,"3822" :0,"3823" :0,"3824" :0,"3825" :0,"3826" :0,"3827" :0,"3828" :0,"3829" :0,"3830" :0,"3831" :0,"3832" :0,"3833" :0,"3834" :0,"3835" :0,"3836" :0,"3837" :0,"3838" :0,"3839" :0,"3840" :0,"3841" :0,"3842" :0,"3843" :0,"3844" :0,"3845" :0,"3846" :0,"3847" :0,"3848" :0,"3849" :0,"3850" :0,"3851" :0,"3852" :0,"3853" :0,"3854" :0,"3855" :0,"3856" :0,"3857" :0,"3858" :0,"3859" :0,"3860" :0,"3861" :0,"3862" :0,"3863" :0,"3864" :0,"3865" :0,"3866" :0,"3867" :0,"3868" :0,"3869" :0,"3870" :0,"3871" :0,"3872" :0,"3873" :0,"3874" :0,"3875" :0,"3876" :0,"3877" :0,"3878" :0,"3879" :0,"3880" :0,"3881" :0,"3882" :0,"3883" :0,"3884" :0,"3885" :0,"3886" :0,"3887" :0,"3888" :0,"3889" :0,"3890" :0,"3891" :0,"3892" :0,"3893" :0,"3894" :0,"3895" :0,"3896" :0,"3897" :0,"3898" :0,"3899" :0,"3900" :0,"3901" :0,"3902" :0,"3903" :0,"3904" :0,"3905" :0,"3906" :0,"3907" :0,"3908" :0,"3909" :0,"3910" :0,"3911" :0,"3912" :0,"3913" :0,"3914" :0,"3915" :0,"3916" :0,"3917" :0,"3918" :0,"3919" :0,"3920" :0,"3921" :0,"3922" :0,"3923" :0,"3924" :0,"3925" :0,"3926" :0,"3927" :0,"3928" :0,"3929" :0,"3930" :0,"3931" :0,"3932" :0,"3933" :0,"3934" :0,"3935" :0,"3936" :0,"3937" :0,"3938" :0,"3939" :0,"3940" :0,"3941" :0,"3942" :0,"3943" :0,"3944" :0,"3945" :0,"3946" :0,"3947" :0,"3948" :0,"3949" :0,"3950" :0,"3951" :0,"3952" :0,"3953" :0,"3954" :0,"3955" :0,"3956" :0,"3957" :0,"3958" :0,"3959" :0,"3960" :0,"3961" :0,"3962" :0,"3963" :0,"3964" :0,"3965" :0,"3966" :0,"3967" :0,"3968" :0,"3969" :0,"3970" :0,"3971" :0,"3972" :0,"3973" :0,"3974" :0,"3975" :0,"3976" :0,"3977" :0,"3978" :0,"3979" :0,"3980" :0,"3981" :0,"3982" :0,"3983" :0,"3984" :0,"3985" :0,"3986" :0,"3987" :0,"3988" :0,"3989" :0,"3990" :0,"3991" :0,"3992" :0,"3993" :0,"3994" :0,"3995" :0,"3996" :0,"3997" :0,"3998" :0,"3999" :0,"4000" :0,"4001" :0,"4002" :0,"4003" :0,"4004" :0,"4005" :0,"4006" :0,"4007" :0,"4008" :0,"4009" :0,"4010" :0,"4011" :0,"4012" :0,"4013" :0,"4014" :0,"4015" :0,"4016" :0,"4017" :0,"4018" :0,"4019" :0,"4020" :0,"4021" :0,"4022" :0,"4023" :0,"4024" :0,"4025" :0,"4026" :0,"4027" :0,"4028" :0,"4029" :0,"4030" :0,"4031" :0,"4032" :0,"4033" :0,"4034" :0,"4035" :0,"4036" :0,"4037" :0,"4038" :0,"4039" :0,"4040" :0,"4041" :0,"4042" :0,"4043" :0,"4044" :0,"4045" :0,"4046" :0,"4047" :0,"4048" :0,"4049" :0,"4050" :0,"4051" :0,"4052" :0,"4053" :0,"4054" :0,"4055" :0,"4056" :0,"4057" :0,"4058" :0,"4059" :0,"4060" :0,"4061" :0,"4062" :0,"4063" :0,"4064" :0,"4065" :0,"4066" :0,"4067" :0,"4068" :0,"4069" :0,"4070" :0,"4071" :0,"4072" :0,"4073" :0,"4074" :0,"4075" :0,"4076" :0,"4077" :0,"4078" :0,"4079" :0,"4080" :0,"4081" :0,"4082" :0,"4083" :0,"4084" :0,"4085" :0,"4086" :0,"4087" :0,"4088" :0,"4089" :0,"4090" :0,"4091" :0,"4092" :0,"4093" :0,"4094" :0,"4095" :0,"4096" :0,"4097" :0,"4098" :0,"4099" :0,"4100" :0,"4101" :0,"4102" :0,"4103" :0,"4104" :0,"4105" :0,"4106" :0,"4107" :0,"4108" :0,"4109" :0,"4110" :0,"4111" :0,"4112" :0,"4113" :0,"4114" :0,"4115" :0,"4116" :0,"4117" :0,"4118" :0,"4119" :0,"4120" :0,"4121" :0,"4122" :0,"4123" :0,"4124" :0,"4125" :0,"4126" :0,"4127" :0,"4128" :0,"4129" :0,"4130" :0,"4131" :0,"4132" :0,"4133" :0,"4134" :0,"4135" :0,"4136" :0,"4137" :0,"4138" :0,"4139" :0,"4140" :0,"4141" :0,"4142" :0,"4143" :0,"4144" :0,"4145" :0,"4146" :0,"4147" :0,"4148" :0,"4149" :0,"4150" :0,"4151" :0,"4152" :0,"4153" :0,"4154" :0,"4155" :0,"4156" :0,"4157" :0,"4158" :0,"4159" :0,"4160" :0,"4161" :0,"4162" :0,"4163" :0,"4164" :0,"4165" :0,"4166" :0,"4167" :0,"4168" :0,"4169" :0,"4170" :0,"4171" :0,"4172" :0,"4173" :0,"4174" :0,"4175" :0,"4176" :0,"4177" :0,"4178" :0,"4179" :0,"4180" :0,"4181" :0,"4182" :0,"4183" :0,"4184" :0,"4185" :0,"4186" :0,"4187" :0,"4188" :0,"4189" :0,"4190" :0,"4191" :0,"4192" :0,"4193" :0,"4194" :0,"4195" :0,"4196" :0,"4197" :0,"4198" :0,"4199" :0,"4200" :0,"4201" :0,"4202" :0,"4203" :0,"4204" :0,"4205" :0,"4206" :0,"4207" :0,"4208" :0,"4209" :0,"4210" :0,"4211" :0,"4212" :0,"4213" :0,"4214" :0,"4215" :0,"4216" :0,"4217" :0,"4218" :0,"4219" :0,"4220" :0,"4221" :0,"4222" :0,"4223" :0,"4224" :0,"4225" :0,"4226" :0,"4227" :0,"4228" :0,"4229" :0,"4230" :0,"4231" :0,"4232" :0,"4233" :0,"4234" :0,"4235" :0,"4236" :0,"4237" :0,"4238" :0,"4239" :0,"4240" :0,"4241" :0,"4242" :0,"4243" :0,"4244" :0,"4245" :0,"4246" :0,"4247" :0,"4248" :0,"4249" :0,"4250" :0,"4251" :0,"4252" :0,"4253" :0,"4254" :0,"4255" :0,"4256" :0,"4257" :0,"4258" :0,"4259" :0,"4260" :0,"4261" :0,"4262" :0,"4263" :0,"4264" :0,"4265" :0,"4266" :0,"4267" :0,"4268" :0,"4269" :0,"4270" :0,"4271" :0,"4272" :0,"4273" :0,"4274" :0,"4275" :0,"4276" :0,"4277" :0,"4278" :0,"4279" :0,"4280" :0,"4281" :0,"4282" :0,"4283" :0,"4284" :0,"4285" :0,"4286" :0,"4287" :0,"4288" :0,"4289" :0,"4290" :0,"4291" :0,"4292" :0,"4293" :0,"4294" :0,"4295" :0,"4296" :0,"4297" :0,"4298" :0,"4299" :0,"4300" :0,"4301" :0,"4302" :0,"4303" :0,"4304" :0,"4305" :0,"4306" :0,"4307" :0,"4308" :0,"4309" :0,"4310" :0,"4311" :0,"4312" :0,"4313" :0,"4314" :0,"4315" :0,"4316" :0,"4317" :0,"4318" :0,"4319" :0,"4320" :0,"4321" :0,"4322" :0,"4323" :0,"4324" :0,"4325" :0,"4326" :0,"4327" :0,"4328" :0,"4329" :0,"4330" :0,"4331" :0,"4332" :0,"4333" :0,"4334" :0,"4335" :0,"4336" :0,"4337" :0,"4338" :0,"4339" :0,"4340" :0,"4341" :0,"4342" :0,"4343" :0,"4344" :0,"4345" :0,"4346" :0,"4347" :0,"4348" :0,"4349" :0,"4350" :0,"4351" :0,"4352" :0,"4353" :0,"4354" :0,"4355" :0,"4356" :0,"4357" :0,"4358" :0,"4359" :0,"4360" :0,"4361" :0,"4362" :0,"4363" :0,"4364" :0,"4365" :0,"4366" :0,"4367" :0,"4368" :0,"4369" :0,"4370" :0,"4371" :0,"4372" :0,"4373" :0,"4374" :0,"4375" :0,"4376" :0,"4377" :0,"4378" :0,"4379" :0,"4380" :0,"4381" :0,"4382" :0,"4383" :0,"4384" :0,"4385" :0,"4386" :0,"4387" :0,"4388" :0,"4389" :0,"4390" :0,"4391" :0,"4392" :0,"4393" :0,"4394" :0,"4395" :0,"4396" :0,"4397" :0,"4398" :0,"4399" :0,"4400" :0,"4401" :0,"4402" :0,"4403" :0,"4404" :0,"4405" :0,"4406" :0,"4407" :0,"4408" :0,"4409" :0,"4410" :0,"4411" :0,"4412" :0,"4413" :0,"4414" :0,"4415" :0,"4416" :0,"4417" :0,"4418" :0,"4419" :0,"4420" :0,"4421" :0,"4422" :0,"4423" :0,"4424" :0,"4425" :0,"4426" :0,"4427" :0,"4428" :0,"4429" :0,"4430" :0,"4431" :0,"4432" :0,"4433" :0,"4434" :0,"4435" :0,"4436" :0,"4437" :0,"4438" :0,"4439" :0,"4440" :0,"4441" :0,"4442" :0,"4443" :0,"4444" :0,"4445" :0,"4446" :0,"4447" :0,"4448" :0,"4449" :0,"4450" :0,"4451" :0,"4452" :0,"4453" :0,"4454" :0,"4455" :0,"4456" :0,"4457" :0,"4458" :0,"4459" :0,"4460" :0,"4461" :0,"4462" :0,"4463" :0,"4464" :0,"4465" :0,"4466" :0,"4467" :0,"4468" :0,"4469" :0,"4470" :0,"4471" :0,"4472" :0,"4473" :0,"4474" :0,"4475" :0,"4476" :0,"4477" :0,"4478" :0,"4479" :0,"4480" :0,"4481" :0,"4482" :0,"4483" :0,"4484" :0,"4485" :0,"4486" :0,"4487" :0,"4488" :0,"4489" :0,"4490" :0,"4491" :0,"4492" :0,"4493" :0,"4494" :0,"4495" :0,"4496" :0,"4497" :0,"4498" :0,"4499" :0,"4500" :0,"4501" :0,"4502" :0,"4503" :0,"4504" :0,"4505" :0,"4506" :0,"4507" :0,"4508" :0,"4509" :0,"4510" :0,"4511" :0,"4512" :0,"4513" :0,"4514" :0,"4515" :0,"4516" :0,"4517" :0,"4518" :0,"4519" :0,"4520" :0,"4521" :0,"4522" :0,"4523" :0,"4524" :0,"4525" :0,"4526" :0,"4527" :0,"4528" :0,"4529" :0,"4530" :0,"4531" :0,"4532" :0,"4533" :0,"4534" :0,"4535" :0,"4536" :0,"4537" :0,"4538" :0,"4539" :0,"4540" :0,"4541" :0,"4542" :0,"4543" :0,"4544" :0,"4545" :0,"4546" :0,"4547" :0,"4548" :0,"4549" :0,"4550" :0,"4551" :0,"4552" :0,"4553" :0,"4554" :0,"4555" :0,"4556" :0,"4557" :0,"4558" :0,"4559" :0,"4560" :0,"4561" :0,"4562" :0,"4563" :0,"4564" :0,"4565" :0,"4566" :0,"4567" :0,"4568" :0,"4569" :0,"4570" :0,"4571" :0,"4572" :0,"4573" :0,"4574" :0,"4575" :0,"4576" :0,"4577" :0,"4578" :0,"4579" :0,"4580" :0,"4581" :0,"4582" :0,"4583" :0,"4584" :0,"4585" :0,"4586" :0,"4587" :0,"4588" :0,"4589" :0,"4590" :0,"4591" :0,"4592" :0,"4593" :0,"4594" :0,"4595" :0,"4596" :0,"4597" :0,"4598" :0,"4599" :0,"4600" :0,"4601" :0,"4602" :0,"4603" :0,"4604" :0,"4605" :0,"4606" :0,"4607" :0,"4608" :0,"4609" :0,"4610" :0,"4611" :0,"4612" :0,"4613" :0,"4614" :0,"4615" :0,"4616" :0,"4617" :0,"4618" :0,"4619" :0,"4620" :0,"4621" :0,"4622" :0,"4623" :0,"4624" :0,"4625" :0,"4626" :0,"4627" :0,"4628" :0,"4629" :0,"4630" :0,"4631" :0,"4632" :0,"4633" :0,"4634" :0,"4635" :0,"4636" :0,"4637" :0,"4638" :0,"4639" :0,"4640" :0,"4641" :0,"4642" :0,"4643" :0,"4644" :0,"4645" :0,"4646" :0,"4647" :0,"4648" :0,"4649" :0,"4650" :0,"4651" :0,"4652" :0,"4653" :0,"4654" :0,"4655" :0,"4656" :0,"4657" :0,"4658" :0,"4659" :0,"4660" :0,"4661" :0,"4662" :0,"4663" :0,"4664" :0,"4665" :0,"4666" :0,"4667" :0,"4668" :0,"4669" :0,"4670" :0,"4671" :0,"4672" :0,"4673" :0,"4674" :0,"4675" :0,"4676" :0,"4677" :0,"4678" :0,"4679" :0,"4680" :0,"4681" :0,"4682" :0,"4683" :0,"4684" :0,"4685" :0,"4686" :0,"4687" :0,"4688" :0,"4689" :0,"4690" :0,"4691" :0,"4692" :0,"4693" :0,"4694" :0,"4695" :0,"4696" :0,"4697" :0,"4698" :0,"4699" :0,"4700" :0,"4701" :0,"4702" :0,"4703" :0,"4704" :0,"4705" :0,"4706" :0,"4707" :0,"4708" :0,"4709" :0,"4710" :0,"4711" :0,"4712" :0,"4713" :0,"4714" :0,"4715" :0,"4716" :0,"4717" :0,"4718" :0,"4719" :0,"4720" :0,"4721" :0,"4722" :0,"4723" :0,"4724" :0,"4725" :0,"4726" :0,"4727" :0,"4728" :0,"4729" :0,"4730" :0,"4731" :0,"4732" :0,"4733" :0,"4734" :0,"4735" :0,"4736" :0,"4737" :0,"4738" :0,"4739" :0,"4740" :0,"4741" :0,"4742" :0,"4743" :0,"4744" :0,"4745" :0,"4746" :0,"4747" :0,"4748" :0,"4749" :0,"4750" :0,"4751" :0,"4752" :0,"4753" :0,"4754" :0,"4755" :0,"4756" :0,"4757" :0,"4758" :0,"4759" :0,"4760" :0,"4761" :0,"4762" :0,"4763" :0,"4764" :0,"4765" :0,"4766" :0,"4767" :0,"4768" :0,"4769" :0,"4770" :0,"4771" :0,"4772" :0,"4773" :0,"4774" :0,"4775" :0,"4776" :0,"4777" :0,"4778" :0,"4779" :0,"4780" :0,"4781" :0,"4782" :0,"4783" :0,"4784" :0,"4785" :0,"4786" :0,"4787" :0,"4788" :0,"4789" :0,"4790" :0,"4791" :0,"4792" :0,"4793" :0,"4794" :0,"4795" :0,"4796" :0,"4797" :0,"4798" :0,"4799" :0,"4800" :0,"4801" :0,"4802" :0,"4803" :0,"4804" :0,"4805" :0,"4806" :0,"4807" :0,"4808" :0,"4809" :0,"4810" :0,"4811" :0,"4812" :0,"4813" :0,"4814" :0,"4815" :0,"4816" :0,"4817" :0,"4818" :0,"4819" :0,"4820" :0,"4821" :0,"4822" :0,"4823" :0,"4824" :0,"4825" :0,"4826" :0,"4827" :0,"4828" :0,"4829" :0,"4830" :0,"4831" :0,"4832" :0,"4833" :0,"4834" :0,"4835" :0,"4836" :0,"4837" :0,"4838" :0,"4839" :0,"4840" :0,"4841" :0,"4842" :0,"4843" :0,"4844" :0,"4845" :0,"4846" :0,"4847" :0,"4848" :0,"4849" :0,"4850" :0,"4851" :0,"4852" :0,"4853" :0,"4854" :0,"4855" :0,"4856" :0,"4857" :0,"4858" :0,"4859" :0,"4860" :0,"4861" :0,"4862" :0,"4863" :0,"4864" :0,"4865" :0,"4866" :0,"4867" :0,"4868" :0,"4869" :0,"4870" :0,"4871" :0,"4872" :0,"4873" :0,"4874" :0,"4875" :0,"4876" :0,"4877" :0,"4878" :0,"4879" :0,"4880" :0,"4881" :0,"4882" :0,"4883" :0,"4884" :0,"4885" :0,"4886" :0,"4887" :0,"4888" :0,"4889" :0,"4890" :0,"4891" :0,"4892" :0,"4893" :0,"4894" :0,"4895" :0,"4896" :0,"4897" :0,"4898" :0,"4899" :0,"4900" :0,"4901" :0,"4902" :0,"4903" :0,"4904" :0,"4905" :0,"4906" :0,"4907" :0,"4908" :0,"4909" :0,"4910" :0,"4911" :0,"4912" :0,"4913" :0,"4914" :0,"4915" :0,"4916" :0,"4917" :0,"4918" :0,"4919" :0,"4920" :0,"4921" :0,"4922" :0,"4923" :0,"4924" :0,"4925" :0,"4926" :0,"4927" :0,"4928" :0,"4929" :0,"4930" :0,"4931" :0,"4932" :0,"4933" :0,"4934" :0,"4935" :0,"4936" :0,"4937" :0,"4938" :0,"4939" :0,"4940" :0,"4941" :0,"4942" :0,"4943" :0,"4944" :0,"4945" :0,"4946" :0,"4947" :0,"4948" :0,"4949" :0,"4950" :0,"4951" :0,"4952" :0,"4953" :0,"4954" :0,"4955" :0,"4956" :0,"4957" :0,"4958" :0,"4959" :0,"4960" :0,"4961" :0,"4962" :0,"4963" :0,"4964" :0,"4965" :0,"4966" :0,"4967" :0,"4968" :0,"4969" :0,"4970" :0,"4971" :0,"4972" :0,"4973" :0,"4974" :0,"4975" :0,"4976" :0,"4977" :0,"4978" :0,"4979" :0,"4980" :0,"4981" :0,"4982" :0,"4983" :0,"4984" :0,"4985" :0,"4986" :0,"4987" :0,"4988" :0,"4989" :0,"4990" :0,"4991" :0,"4992" :0,"4993" :0,"4994" :0,"4995" :0,"4996" :0,"4997" :0,"4998" :0,"4999" :0,"5000" :0,"5001" :0,"5002" :0,"5003" :0,"5004" :0,"5005" :0,"5006" :0,"5007" :0,"5008" :0,"5009" :0,"5010" :0,"5011" :0,"5012" :0,"5013" :0,"5014" :0,"5015" :0,"5016" :0,"5017" :0,"5018" :0,"5019" :0,"5020" :0,"5021" :0,"5022" :0,"5023" :0,"5024" :0,"5025" :0,"5026" :0,"5027" :0,"5028" :0,"5029" :0,"5030" :0,"5031" :0,"5032" :0,"5033" :0,"5034" :0,"5035" :0,"5036" :0,"5037" :0,"5038" :0,"5039" :0,"5040" :0,"5041" :0,"5042" :0,"5043" :0,"5044" :0,"5045" :0,"5046" :0,"5047" :0,"5048" :0,"5049" :0,"5050" :0,"5051" :0,"5052" :0,"5053" :0,"5054" :0,"5055" :0,"5056" :0,"5057" :0,"5058" :0,"5059" :0,"5060" :0,"5061" :0,"5062" :0,"5063" :0,"5064" :0,"5065" :0,"5066" :0,"5067" :0,"5068" :0,"5069" :0,"5070" :0,"5071" :0,"5072" :0,"5073" :0,"5074" :0,"5075" :0,"5076" :0,"5077" :0,"5078" :0,"5079" :0,"5080" :0,"5081" :0,"5082" :0,"5083" :0,"5084" :0,"5085" :0,"5086" :0,"5087" :0,"5088" :0,"5089" :0,"5090" :0,"5091" :0,"5092" :0,"5093" :0,"5094" :0,"5095" :0,"5096" :0,"5097" :0,"5098" :0,"5099" :0,"5100" :0,"5101" :0,"5102" :0,"5103" :0,"5104" :0,"5105" :0,"5106" :0,"5107" :0,"5108" :0,"5109" :0,"5110" :0,"5111" :0,"5112" :0,"5113" :0,"5114" :0,"5115" :0,"5116" :0,"5117" :0,"5118" :0,"5119" :0,"5120" :0,"5121" :0,"5122" :0,"5123" :0,"5124" :0,"5125" :0,"5126" :0,"5127" :0,"5128" :0,"5129" :0,"5130" :0,"5131" :0,"5132" :0,"5133" :0,"5134" :0,"5135" :0,"5136" :0,"5137" :0,"5138" :0,"5139" :0,"5140" :0,"5141" :0,"5142" :0,"5143" :0,"5144" :0,"5145" :0,"5146" :0,"5147" :0,"5148" :0,"5149" :0,"5150" :0,"5151" :0,"5152" :0,"5153" :0,"5154" :0,"5155" :0,"5156" :0,"5157" :0,"5158" :0,"5159" :0,"5160" :0,"5161" :0,"5162" :0,"5163" :0,"5164" :0,"5165" :0,"5166" :0,"5167" :0,"5168" :0,"5169" :0,"5170" :0,"5171" :0,"5172" :0,"5173" :0,"5174" :0,"5175" :0,"5176" :0,"5177" :0,"5178" :0,"5179" :0,"5180" :0,"5181" :0,"5182" :0,"5183" :0,"5184" :0,"5185" :0,"5186" :0,"5187" :0,"5188" :0,"5189" :0,"5190" :0,"5191" :0,"5192" :0,"5193" :0,"5194" :0,"5195" :0,"5196" :0,"5197" :0,"5198" :0,"5199" :0,"5200" :0,"5201" :0,"5202" :0,"5203" :0,"5204" :0,"5205" :0,"5206" :0,"5207" :0,"5208" :0,"5209" :0,"5210" :0,"5211" :0,"5212" :0,"5213" :0,"5214" :0,"5215" :0,"5216" :0,"5217" :0,"5218" :0,"5219" :0,"5220" :0,"5221" :0,"5222" :0,"5223" :0,"5224" :0,"5225" :0,"5226" :0,"5227" :0,"5228" :0,"5229" :0,"5230" :0,"5231" :0,"5232" :0,"5233" :0,"5234" :0,"5235" :0,"5236" :0,"5237" :0,"5238" :0,"5239" :0,"5240" :0,"5241" :0,"5242" :0,"5243" :0,"5244" :0,"5245" :0,"5246" :0,"5247" :0,"5248" :0,"5249" :0,"5250" :0,"5251" :0,"5252" :0,"5253" :0,"5254" :0,"5255" :0,"5256" :0,"5257" :0,"5258" :0,"5259" :0,"5260" :0,"5261" :0,"5262" :0,"5263" :0,"5264" :0,"5265" :0,"5266" :0,"5267" :0,"5268" :0,"5269" :0,"5270" :0,"5271" :0,"5272" :0,"5273" :0,"5274" :0,"5275" :0,"5276" :0,"5277" :0,"5278" :0,"5279" :0,"5280" :0,"5281" :0,"5282" :0,"5283" :0,"5284" :0,"5285" :0,"5286" :0,"5287" :0,"5288" :0,"5289" :0,"5290" :0,"5291" :0,"5292" :0,"5293" :0,"5294" :0,"5295" :0,"5296" :0,"5297" :0,"5298" :0,"5299" :0,"5300" :0,"5301" :0,"5302" :0,"5303" :0,"5304" :0,"5305" :0,"5306" :0,"5307" :0,"5308" :0,"5309" :0,"5310" :0,"5311" :0,"5312" :0,"5313" :0,"5314" :0,"5315" :0,"5316" :0,"5317" :0,"5318" :0,"5319" :0,"5320" :0,"5321" :0,"5322" :0,"5323" :0,"5324" :0,"5325" :0,"5326" :0,"5327" :0,"5328" :0,"5329" :0,"5330" :0,"5331" :0,"5332" :0,"5333" :0,"5334" :0,"5335" :0,"5336" :0,"5337" :0,"5338" :0,"5339" :0,"5340" :0,"5341" :0,"5342" :0,"5343" :0,"5344" :0,"5345" :0,"5346" :0,"5347" :0,"5348" :0,"5349" :0,"5350" :0,"5351" :0,"5352" :0,"5353" :0,"5354" :0,"5355" :0,"5356" :0,"5357" :0,"5358" :0,"5359" :0,"5360" :0,"5361" :0,"5362" :0,"5363" :0,"5364" :0,"5365" :0,"5366" :0,"5367" :0,"5368" :0,"5369" :0,"5370" :0,"5371" :0,"5372" :0,"5373" :0,"5374" :0,"5375" :0,"5376" :0,"5377" :0,"5378" :0,"5379" :0,"5380" :0,"5381" :0,"5382" :0,"5383" :0,"5384" :0,"5385" :0,"5386" :0,"5387" :0,"5388" :0,"5389" :0,"5390" :0,"5391" :0,"5392" :0,"5393" :0,"5394" :0,"5395" :0,"5396" :0,"5397" :0,"5398" :0,"5399" :0,"5400" :0,"5401" :0,"5402" :0,"5403" :0,"5404" :0,"5405" :0,"5406" :0,"5407" :0,"5408" :0,"5409" :0,"5410" :0,"5411" :0,"5412" :0,"5413" :0,"5414" :0,"5415" :0,"5416" :0,"5417" :0,"5418" :0,"5419" :0,"5420" :0,"5421" :0,"5422" :0,"5423" :0,"5424" :0,"5425" :0,"5426" :0,"5427" :0,"5428" :0,"5429" :0,"5430" :0,"5431" :0,"5432" :0,"5433" :0,"5434" :0,"5435" :0,"5436" :0,"5437" :0,"5438" :0,"5439" :0,"5440" :0,"5441" :0,"5442" :0,"5443" :0,"5444" :0,"5445" :0,"5446" :0,"5447" :0,"5448" :0,"5449" :0,"5450" :0,"5451" :0,"5452" :0,"5453" :0,"5454" :0,"5455" :0,"5456" :0,"5457" :0,"5458" :0,"5459" :0,"5460" :0,"5461" :0,"5462" :0,"5463" :0,"5464" :0,"5465" :0,"5466" :0,"5467" :0,"5468" :0,"5469" :0,"5470" :0,"5471" :0,"5472" :0,"5473" :0,"5474" :0,"5475" :0,"5476" :0,"5477" :0,"5478" :0,"5479" :0,"5480" :0,"5481" :0,"5482" :0,"5483" :0,"5484" :0,"5485" :0,"5486" :0,"5487" :0,"5488" :0,"5489" :0,"5490" :0,"5491" :0,"5492" :0,"5493" :0,"5494" :0,"5495" :0,"5496" :0,"5497" :0,"5498" :0,"5499" :0,"5500" :0,"5501" :0,"5502" :0,"5503" :0,"5504" :0,"5505" :0,"5506" :0,"5507" :0,"5508" :0,"5509" :0,"5510" :0,"5511" :0,"5512" :0,"5513" :0,"5514" :0,"5515" :0,"5516" :0,"5517" :0,"5518" :0,"5519" :0,"5520" :0,"5521" :0,"5522" :0,"5523" :0,"5524" :0,"5525" :0,"5526" :0,"5527" :0,"5528" :0,"5529" :0,"5530" :0,"5531" :0,"5532" :0,"5533" :0,"5534" :0,"5535" :0,"5536" :0,"5537" :0,"5538" :0,"5539" :0,"5540" :0,"5541" :0,"5542" :0,"5543" :0,"5544" :0,"5545" :0,"5546" :0,"5547" :0,"5548" :0,"5549" :0,"5550" :0,"5551" :0,"5552" :0,"5553" :0,"5554" :0,"5555" :0,"5556" :0,"5557" :0,"5558" :0,"5559" :0,"5560" :0,"5561" :0,"5562" :0,"5563" :0,"5564" :0,"5565" :0,"5566" :0,"5567" :0,"5568" :0,"5569" :0,"5570" :0,"5571" :0,"5572" :0,"5573" :0,"5574" :0,"5575" :0,"5576" :0,"5577" :0,"5578" :0,"5579" :0,"5580" :0,"5581" :0,"5582" :0,"5583" :0,"5584" :0,"5585" :0,"5586" :0,"5587" :0,"5588" :0,"5589" :0,"5590" :0,"5591" :0,"5592" :0,"5593" :0,"5594" :0,"5595" :0,"5596" :0,"5597" :0,"5598" :0,"5599" :0,"5600" :0,"5601" :0,"5602" :0,"5603" :0,"5604" :0,"5605" :0,"5606" :0,"5607" :0,"5608" :0,"5609" :0,"5610" :0,"5611" :0,"5612" :0,"5613" :0,"5614" :0,"5615" :0,"5616" :0,"5617" :0,"5618" :0,"5619" :0,"5620" :0,"5621" :0,"5622" :0,"5623" :0,"5624" :0,"5625" :0,"5626" :0,"5627" :0,"5628" :0,"5629" :0,"5630" :0,"5631" :0,"5632" :0,"5633" :0,"5634" :0,"5635" :0,"5636" :0,"5637" :0,"5638" :0,"5639" :0,"5640" :0,"5641" :0,"5642" :0,"5643" :0,"5644" :0,"5645" :0,"5646" :0,"5647" :0,"5648" :0,"5649" :0,"5650" :0,"5651" :0,"5652" :0,"5653" :0,"5654" :0,"5655" :0,"5656" :0,"5657" :0,"5658" :0,"5659" :0,"5660" :0,"5661" :0,"5662" :0,"5663" :0,"5664" :0,"5665" :0,"5666" :0,"5667" :0,"5668" :0,"5669" :0,"5670" :0,"5671" :0,"5672" :0,"5673" :0,"5674" :0,"5675" :0,"5676" :0,"5677" :0,"5678" :0,"5679" :0,"5680" :0,"5681" :0,"5682" :0,"5683" :0,"5684" :0,"5685" :0,"5686" :0,"5687" :0,"5688" :0,"5689" :0,"5690" :0,"5691" :0,"5692" :0,"5693" :0,"5694" :0,"5695" :0,"5696" :0,"5697" :0,"5698" :0,"5699" :0,"5700" :0,"5701" :0,"5702" :0,"5703" :0,"5704" :0,"5705" :0,"5706" :0,"5707" :0,"5708" :0,"5709" :0,"5710" :0,"5711" :0,"5712" :0,"5713" :0,"5714" :0,"5715" :0,"5716" :0,"5717" :0,"5718" :0,"5719" :0,"5720" :0,"5721" :0,"5722" :0,"5723" :0,"5724" :0,"5725" :0,"5726" :0,"5727" :0,"5728" :0,"5729" :0,"5730" :0,"5731" :0,"5732" :0,"5733" :0,"5734" :0,"5735" :0,"5736" :0,"5737" :0,"5738" :0,"5739" :0,"5740" :0,"5741" :0,"5742" :0,"5743" :0,"5744" :0,"5745" :0,"5746" :0,"5747" :0,"5748" :0,"5749" :0,"5750" :0,"5751" :0,"5752" :0,"5753" :0,"5754" :0,"5755" :0,"5756" :0,"5757" :0,"5758" :0,"5759" :0,"5760" :0,"5761" :0,"5762" :0,"5763" :0,"5764" :0,"5765" :0,"5766" :0,"5767" :0,"5768" :0,"5769" :0,"5770" :0,"5771" :0,"5772" :0,"5773" :0,"5774" :0,"5775" :0,"5776" :0,"5777" :0,"5778" :0,"5779" :0,"5780" :0,"5781" :0,"5782" :0,"5783" :0,"5784" :0,"5785" :0,"5786" :0,"5787" :0,"5788" :0,"5789" :0,"5790" :0,"5791" :0,"5792" :0,"5793" :0,"5794" :0,"5795" :0,"5796" :0,"5797" :0,"5798" :0,"5799" :0,"5800" :0,"5801" :0,"5802" :0,"5803" :0,"5804" :0,"5805" :0,"5806" :0,"5807" :0,"5808" :0,"5809" :0,"5810" :0,"5811" :0,"5812" :0,"5813" :0,"5814" :0,"5815" :0,"5816" :0,"5817" :0,"5818" :0,"5819" :0,"5820" :0,"5821" :0,"5822" :0,"5823" :0,"5824" :0,"5825" :0,"5826" :0,"5827" :0,"5828" :0,"5829" :0,"5830" :0,"5831" :0,"5832" :0,"5833" :0,"5834" :0,"5835" :0,"5836" :0,"5837" :0,"5838" :0,"5839" :0,"5840" :0,"5841" :0,"5842" :0,"5843" :0,"5844" :0,"5845" :0,"5846" :0,"5847" :0,"5848" :0,"5849" :0,"5850" :0,"5851" :0,"5852" :0,"5853" :0,"5854" :0,"5855" :0,"5856" :0,"5857" :0,"5858" :0,"5859" :0,"5860" :0,"5861" :0,"5862" :0,"5863" :0,"5864" :0,"5865" :0,"5866" :0,"5867" :0,"5868" :0,"5869" :0,"5870" :0,"5871" :0,"5872" :0,"5873" :0,"5874" :0,"5875" :0,"5876" :0,"5877" :0,"5878" :0,"5879" :0,"5880" :0,"5881" :0,"5882" :0,"5883" :0,"5884" :0,"5885" :0,"5886" :0,"5887" :0,"5888" :0,"5889" :0,"5890" :0,"5891" :0,"5892" :0,"5893" :0,"5894" :0,"5895" :0,"5896" :0,"5897" :0,"5898" :0,"5899" :0,"5900" :0,"5901" :0,"5902" :0,"5903" :0,"5904" :0,"5905" :0,"5906" :0,"5907" :0,"5908" :0,"5909" :0,"5910" :0,"5911" :0,"5912" :0,"5913" :0,"5914" :0,"5915" :0,"5916" :0,"5917" :0,"5918" :0,"5919" :0,"5920" :0,"5921" :0,"5922" :0,"5923" :0,"5924" :0,"5925" :0,"5926" :0,"5927" :0,"5928" :0,"5929" :0,"5930" :0,"5931" :0,"5932" :0,"5933" :0,"5934" :0,"5935" :0,"5936" :0,"5937" :0,"5938" :0,"5939" :0,"5940" :0,"5941" :0,"5942" :0,"5943" :0,"5944" :0,"5945" :0,"5946" :0,"5947" :0,"5948" :0,"5949" :0,"5950" :0,"5951" :0,"5952" :0,"5953" :0,"5954" :0,"5955" :0,"5956" :0,"5957" :0,"5958" :0,"5959" :0,"5960" :0,"5961" :0,"5962" :0,"5963" :0,"5964" :0,"5965" :0,"5966" :0,"5967" :0,"5968" :0,"5969" :0,"5970" :0,"5971" :0,"5972" :0,"5973" :0,"5974" :0,"5975" :0,"5976" :0,"5977" :0,"5978" :0,"5979" :0,"5980" :0,"5981" :0,"5982" :0,"5983" :0,"5984" :0,"5985" :0,"5986" :0,"5987" :0,"5988" :0,"5989" :0,"5990" :0,"5991" :0,"5992" :0,"5993" :0,"5994" :0,"5995" :0,"5996" :0,"5997" :0,"5998" :0,"5999" :0,"6000" :0,"6001" :0,"6002" :0,"6003" :0,"6004" :0,"6005" :0,"6006" :0,"6007" :0,"6008" :0,"6009" :0,"6010" :0,"6011" :0,"6012" :0,"6013" :0,"6014" :0,"6015" :0,"6016" :0,"6017" :0,"6018" :0,"6019" :0,"6020" :0,"6021" :0,"6022" :0,"6023" :0,"6024" :0,"6025" :0,"6026" :0,"6027" :0,"6028" :0,"6029" :0,"6030" :0,"6031" :0,"6032" :0,"6033" :0,"6034" :0,"6035" :0,"6036" :0,"6037" :0,"6038" :0,"6039" :0,"6040" :0,"6041" :0,"6042" :0,"6043" :0,"6044" :0,"6045" :0,"6046" :0,"6047" :0,"6048" :0,"6049" :0,"6050" :0,"6051" :0,"6052" :0,"6053" :0,"6054" :0,"6055" :0,"6056" :0,"6057" :0,"6058" :0,"6059" :0,"6060" :0,"6061" :0,"6062" :0,"6063" :0,"6064" :0,"6065" :0,"6066" :0,"6067" :0,"6068" :0,"6069" :0,"6070" :0,"6071" :0,"6072" :0,"6073" :0,"6074" :0,"6075" :0,"6076" :0,"6077" :0,"6078" :0,"6079" :0,"6080" :0,"6081" :0,"6082" :0,"6083" :0,"6084" :0,"6085" :0,"6086" :0,"6087" :0,"6088" :0,"6089" :0,"6090" :0,"6091" :0,"6092" :0,"6093" :0,"6094" :0,"6095" :0,"6096" :0,"6097" :0,"6098" :0,"6099" :0,"6100" :0,"6101" :0,"6102" :0,"6103" :0,"6104" :0,"6105" :0,"6106" :0,"6107" :0,"6108" :0,"6109" :0,"6110" :0,"6111" :0,"6112" :0,"6113" :0,"6114" :0,"6115" :0,"6116" :0,"6117" :0,"6118" :0,"6119" :0,"6120" :0,"6121" :0,"6122" :0,"6123" :0,"6124" :0,"6125" :0,"6126" :0,"6127" :0,"6128" :0,"6129" :0,"6130" :0,"6131" :0,"6132" :0,"6133" :0,"6134" :0,"6135" :0,"6136" :0,"6137" :0,"6138" :0,"6139" :0,"6140" :0,"6141" :0,"6142" :0,"6143" :0,"6144" :0,"6145" :0,"6146" :0,"6147" :0,"6148" :0,"6149" :0,"6150" :0,"6151" :0,"6152" :0,"6153" :0,"6154" :0,"6155" :0,"6156" :0,"6157" :0,"6158" :0,"6159" :0,"6160" :0,"6161" :0,"6162" :0,"6163" :0,"6164" :0,"6165" :0,"6166" :0,"6167" :0,"6168" :0,"6169" :0,"6170" :0,"6171" :0,"6172" :0,"6173" :0,"6174" :0,"6175" :0,"6176" :0,"6177" :0,"6178" :0,"6179" :0,"6180" :0,"6181" :0,"6182" :0,"6183" :0,"6184" :0,"6185" :0,"6186" :0,"6187" :0,"6188" :0,"6189" :0,"6190" :0,"6191" :0,"6192" :0,"6193" :0,"6194" :0,"6195" :0,"6196" :0,"6197" :0,"6198" :0,"6199" :0,"6200" :0,"6201" :0,"6202" :0,"6203" :0,"6204" :0,"6205" :0,"6206" :0,"6207" :0,"6208" :0,"6209" :0,"6210" :0,"6211" :0,"6212" :0,"6213" :0,"6214" :0,"6215" :0,"6216" :0,"6217" :0,"6218" :0,"6219" :0,"6220" :0,"6221" :0,"6222" :0,"6223" :0,"6224" :0,"6225" :0,"6226" :0,"6227" :0,"6228" :0,"6229" :0,"6230" :0,"6231" :0,"6232" :0,"6233" :0,"6234" :0,"6235" :0,"6236" :0,"6237" :0,"6238" :0,"6239" :0,"6240" :0,"6241" :0,"6242" :0,"6243" :0,"6244" :0,"6245" :0,"6246" :0,"6247" :0,"6248" :0,"6249" :0,"6250" :0,"6251" :0,"6252" :0,"6253" :0,"6254" :0,"6255" :0,"6256" :0,"6257" :0,"6258" :0,"6259" :0,"6260" :0,"6261" :0,"6262" :0,"6263" :0,"6264" :0,"6265" :0,"6266" :0,"6267" :0,"6268" :0,"6269" :0,"6270" :0,"6271" :0,"6272" :0,"6273" :0,"6274" :0,"6275" :0,"6276" :0,"6277" :0,"6278" :0,"6279" :0,"6280" :0,"6281" :0,"6282" :0,"6283" :0,"6284" :0,"6285" :0,"6286" :0,"6287" :0,"6288" :0,"6289" :0,"6290" :0,"6291" :0,"6292" :0,"6293" :0,"6294" :0,"6295" :0,"6296" :0,"6297" :0,"6298" :0,"6299" :0,"6300" :0,"6301" :0,"6302" :0,"6303" :0,"6304" :0,"6305" :0,"6306" :0,"6307" :0,"6308" :0,"6309" :0,"6310" :0,"6311" :0,"6312" :0,"6313" :0,"6314" :0,"6315" :0,"6316" :0,"6317" :0,"6318" :0,"6319" :0,"6320" :0,"6321" :0,"6322" :0,"6323" :0,"6324" :0,"6325" :0,"6326" :0,"6327" :0,"6328" :0,"6329" :0,"6330" :0,"6331" :0,"6332" :0,"6333" :0,"6334" :0,"6335" :0,"6336" :0,"6337" :0,"6338" :0,"6339" :0,"6340" :0,"6341" :0,"6342" :0,"6343" :0,"6344" :0,"6345" :0,"6346" :0,"6347" :0,"6348" :0,"6349" :0,"6350" :0,"6351" :0,"6352" :0,"6353" :0,"6354" :0,"6355" :0,"6356" :0,"6357" :0,"6358" :0,"6359" :0,"6360" :0,"6361" :0,"6362" :0,"6363" :0,"6364" :0,"6365" :0,"6366" :0,"6367" :0,"6368" :0,"6369" :0,"6370" :0,"6371" :0,"6372" :0,"6373" :0,"6374" :0,"6375" :0,"6376" :0,"6377" :0,"6378" :0,"6379" :0,"6380" :0,"6381" :0,"6382" :0,"6383" :0,"6384" :0,"6385" :0,"6386" :0,"6387" :0,"6388" :0,"6389" :0,"6390" :0,"6391" :0,"6392" :0,"6393" :0,"6394" :0,"6395" :0,"6396" :0,"6397" :0,"6398" :0,"6399" :0,"6400" :0,"6401" :0,"6402" :0,"6403" :0,"6404" :0,"6405" :0,"6406" :0,"6407" :0,"6408" :0,"6409" :0,"6410" :0,"6411" :0,"6412" :0,"6413" :0,"6414" :0,"6415" :0,"6416" :0,"6417" :0,"6418" :0,"6419" :0,"6420" :0,"6421" :0,"6422" :0,"6423" :0,"6424" :0,"6425" :0,"6426" :0,"6427" :0,"6428" :0,"6429" :0,"6430" :0,"6431" :0,"6432" :0,"6433" :0,"6434" :0,"6435" :0,"6436" :0,"6437" :0,"6438" :0,"6439" :0,"6440" :0,"6441" :0,"6442" :0,"6443" :0,"6444" :0,"6445" :0,"6446" :0,"6447" :0,"6448" :0,"6449" :0,"6450" :0,"6451" :0,"6452" :0,"6453" :0,"6454" :0,"6455" :0,"6456" :0,"6457" :0,"6458" :0,"6459" :0,"6460" :0,"6461" :0,"6462" :0,"6463" :0,"6464" :0,"6465" :0,"6466" :0,"6467" :0,"6468" :0,"6469" :0,"6470" :0,"6471" :0,"6472" :0,"6473" :0,"6474" :0,"6475" :0,"6476" :0,"6477" :0,"6478" :0,"6479" :0,"6480" :0,"6481" :0,"6482" :0,"6483" :0,"6484" :0,"6485" :0,"6486" :0,"6487" :0,"6488" :0,"6489" :0,"6490" :0,"6491" :0,"6492" :0,"6493" :0,"6494" :0,"6495" :0,"6496" :0,"6497" :0,"6498" :0,"6499" :0,"6500" :0,"6501" :0,"6502" :0,"6503" :0,"6504" :0,"6505" :0,"6506" :0,"6507" :0,"6508" :0,"6509" :0,"6510" :0,"6511" :0,"6512" :0,"6513" :0,"6514" :0,"6515" :0,"6516" :0,"6517" :0,"6518" :0,"6519" :0,"6520" :0,"6521" :0,"6522" :0,"6523" :0,"6524" :0,"6525" :0,"6526" :0,"6527" :0,"6528" :0,"6529" :0,"6530" :0,"6531" :0,"6532" :0,"6533" :0,"6534" :0,"6535" :0,"6536" :0,"6537" :0,"6538" :0,"6539" :0,"6540" :0,"6541" :0,"6542" :0,"6543" :0,"6544" :0,"6545" :0,"6546" :0,"6547" :0,"6548" :0,"6549" :0,"6550" :0,"6551" :0,"6552" :0,"6553" :0,"6554" :0,"6555" :0,"6556" :0,"6557" :0,"6558" :0,"6559" :0,"6560" :0,"6561" :0,"6562" :0,"6563" :0,"6564" :0,"6565" :0,"6566" :0,"6567" :0,"6568" :0,"6569" :0,"6570" :0,"6571" :0,"6572" :0,"6573" :0,"6574" :0,"6575" :0,"6576" :0,"6577" :0,"6578" :0,"6579" :0,"6580" :0,"6581" :0,"6582" :0,"6583" :0,"6584" :0,"6585" :0,"6586" :0,"6587" :0,"6588" :0,"6589" :0,"6590" :0,"6591" :0,"6592" :0,"6593" :0,"6594" :0,"6595" :0,"6596" :0,"6597" :0,"6598" :0,"6599" :0,"6600" :0,"6601" :0,"6602" :0,"6603" :0,"6604" :0,"6605" :0,"6606" :0,"6607" :0,"6608" :0,"6609" :0,"6610" :0,"6611" :0,"6612" :0,"6613" :0,"6614" :0,"6615" :0,"6616" :0,"6617" :0,"6618" :0,"6619" :0,"6620" :0,"6621" :0,"6622" :0,"6623" :0,"6624" :0,"6625" :0,"6626" :0,"6627" :0,"6628" :0,"6629" :0,"6630" :0,"6631" :0,"6632" :0,"6633" :0,"6634" :0,"6635" :0,"6636" :0,"6637" :0,"6638" :0,"6639" :0,"6640" :0,"6641" :0,"6642" :0,"6643" :0,"6644" :0,"6645" :0,"6646" :0,"6647" :0,"6648" :0,"6649" :0,"6650" :0,"6651" :0,"6652" :0,"6653" :0,"6654" :0,"6655" :0,"6656" :0,"6657" :0,"6658" :0,"6659" :0,"6660" :0,"6661" :0,"6662" :0,"6663" :0,"6664" :0,"6665" :0,"6666" :0,"6667" :0,"6668" :0,"6669" :0,"6670" :0,"6671" :0,"6672" :0,"6673" :0,"6674" :0,"6675" :0,"6676" :0,"6677" :0,"6678" :0,"6679" :0,"6680" :0,"6681" :0,"6682" :0,"6683" :0,"6684" :0,"6685" :0,"6686" :0,"6687" :0,"6688" :0,"6689" :0,"6690" :0,"6691" :0,"6692" :0,"6693" :0,"6694" :0,"6695" :0,"6696" :0,"6697" :0,"6698" :0,"6699" :0,"6700" :0,"6701" :0,"6702" :0,"6703" :0,"6704" :0,"6705" :0,"6706" :0,"6707" :0,"6708" :0,"6709" :0,"6710" :0,"6711" :0,"6712" :0,"6713" :0,"6714" :0,"6715" :0,"6716" :0,"6717" :0,"6718" :0,"6719" :0,"6720" :0,"6721" :0,"6722" :0,"6723" :0,"6724" :0,"6725" :0,"6726" :0,"6727" :0,"6728" :0,"6729" :0,"6730" :0,"6731" :0,"6732" :0,"6733" :0,"6734" :0,"6735" :0,"6736" :0,"6737" :0,"6738" :0,"6739" :0,"6740" :0,"6741" :0,"6742" :0,"6743" :0,"6744" :0,"6745" :0,"6746" :0,"6747" :0,"6748" :0,"6749" :0,"6750" :0,"6751" :0,"6752" :0,"6753" :0,"6754" :0,"6755" :0,"6756" :0,"6757" :0,"6758" :0,"6759" :0,"6760" :0,"6761" :0,"6762" :0,"6763" :0,"6764" :0,"6765" :0,"6766" :0,"6767" :0,"6768" :0,"6769" :0,"6770" :0,"6771" :0,"6772" :0,"6773" :0,"6774" :0,"6775" :0,"6776" :0,"6777" :0,"6778" :0,"6779" :0,"6780" :0,"6781" :0,"6782" :0,"6783" :0,"6784" :0,"6785" :0,"6786" :0,"6787" :0,"6788" :0,"6789" :0,"6790" :0,"6791" :0,"6792" :0,"6793" :0,"6794" :0,"6795" :0,"6796" :0,"6797" :0,"6798" :0,"6799" :0,"6800" :0,"6801" :0,"6802" :0,"6803" :0,"6804" :0,"6805" :0,"6806" :0,"6807" :0,"6808" :0,"6809" :0,"6810" :0,"6811" :0,"6812" :0,"6813" :0,"6814" :0,"6815" :0,"6816" :0,"6817" :0,"6818" :0,"6819" :0,"6820" :0,"6821" :0,"6822" :0,"6823" :0,"6824" :0,"6825" :0,"6826" :0,"6827" :0,"6828" :0,"6829" :0,"6830" :0,"6831" :0,"6832" :0,"6833" :0,"6834" :0,"6835" :0,"6836" :0,"6837" :0,"6838" :0,"6839" :0,"6840" :0,"6841" :0,"6842" :0,"6843" :0,"6844" :0,"6845" :0,"6846" :0,"6847" :0,"6848" :0,"6849" :0,"6850" :0,"6851" :0,"6852" :0,"6853" :0,"6854" :0,"6855" :0,"6856" :0,"6857" :0,"6858" :0,"6859" :0,"6860" :0,"6861" :0,"6862" :0,"6863" :0,"6864" :0,"6865" :0,"6866" :0,"6867" :0,"6868" :0,"6869" :0,"6870" :0,"6871" :0,"6872" :0,"6873" :0,"6874" :0,"6875" :0,"6876" :0,"6877" :0,"6878" :0,"6879" :0,"6880" :0,"6881" :0,"6882" :0,"6883" :0,"6884" :0,"6885" :0,"6886" :0,"6887" :0,"6888" :0,"6889" :0,"6890" :0,"6891" :0,"6892" :0,"6893" :0,"6894" :0,"6895" :0,"6896" :0,"6897" :0,"6898" :0,"6899" :0,"6900" :0,"6901" :0,"6902" :0,"6903" :0,"6904" :0,"6905" :0,"6906" :0,"6907" :0,"6908" :0,"6909" :0,"6910" :0,"6911" :0,"6912" :0,"6913" :0,"6914" :0,"6915" :0,"6916" :0,"6917" :0,"6918" :0,"6919" :0,"6920" :0,"6921" :0,"6922" :0,"6923" :0,"6924" :0,"6925" :0,"6926" :0,"6927" :0,"6928" :0,"6929" :0,"6930" :0,"6931" :0,"6932" :0,"6933" :0,"6934" :0,"6935" :0,"6936" :0,"6937" :0,"6938" :0,"6939" :0,"6940" :0,"6941" :0,"6942" :0,"6943" :0,"6944" :0,"6945" :0,"6946" :0,"6947" :0,"6948" :0,"6949" :0,"6950" :0,"6951" :0,"6952" :0,"6953" :0,"6954" :0,"6955" :0,"6956" :0,"6957" :0,"6958" :0,"6959" :0,"6960" :0,"6961" :0,"6962" :0,"6963" :0,"6964" :0,"6965" :0,"6966" :0,"6967" :0,"6968" :0,"6969" :0,"6970" :0,"6971" :0,"6972" :0,"6973" :0,"6974" :0,"6975" :0,"6976" :0,"6977" :0,"6978" :0,"6979" :0,"6980" :0,"6981" :0,"6982" :0,"6983" :0,"6984" :0,"6985" :0,"6986" :0,"6987" :0,"6988" :0,"6989" :0,"6990" :0,"6991" :0,"6992" :0,"6993" :0,"6994" :0,"6995" :0,"6996" :0,"6997" :0,"6998" :0,"6999" :0,"7000" :0,"7001" :0,"7002" :0,"7003" :0,"7004" :0,"7005" :0,"7006" :0,"7007" :0,"7008" :0,"7009" :0,"7010" :0,"7011" :0,"7012" :0,"7013" :0,"7014" :0,"7015" :0,"7016" :0,"7017" :0,"7018" :0,"7019" :0,"7020" :0,"7021" :0,"7022" :0,"7023" :0,"7024" :0,"7025" :0,"7026" :0,"7027" :0,"7028" :0,"7029" :0,"7030" :0,"7031" :0,"7032" :0,"7033" :0,"7034" :0,"7035" :0,"7036" :0,"7037" :0,"7038" :0,"7039" :0,"7040" :0,"7041" :0,"7042" :0,"7043" :0,"7044" :0,"7045" :0,"7046" :0,"7047" :0,"7048" :0,"7049" :0,"7050" :0,"7051" :0,"7052" :0,"7053" :0,"7054" :0,"7055" :0,"7056" :0,"7057" :0,"7058" :0,"7059" :0,"7060" :0,"7061" :0,"7062" :0,"7063" :0,"7064" :0,"7065" :0,"7066" :0,"7067" :0,"7068" :0,"7069" :0,"7070" :0,"7071" :0,"7072" :0,"7073" :0,"7074" :0,"7075" :0,"7076" :0,"7077" :0,"7078" :0,"7079" :0,"7080" :0,"7081" :0,"7082" :0,"7083" :0,"7084" :0,"7085" :0,"7086" :0,"7087" :0,"7088" :0,"7089" :0,"7090" :0,"7091" :0,"7092" :0,"7093" :0,"7094" :0,"7095" :0,"7096" :0,"7097" :0,"7098" :0,"7099" :0,"7100" :0,"7101" :0,"7102" :0,"7103" :0,"7104" :0,"7105" :0,"7106" :0,"7107" :0,"7108" :0,"7109" :0,"7110" :0,"7111" :0,"7112" :0,"7113" :0,"7114" :0,"7115" :0,"7116" :0,"7117" :0,"7118" :0,"7119" :0,"7120" :0,"7121" :0,"7122" :0,"7123" :0,"7124" :0,"7125" :0,"7126" :0,"7127" :0,"7128" :0,"7129" :0,"7130" :0,"7131" :0,"7132" :0,"7133" :0,"7134" :0,"7135" :0,"7136" :0,"7137" :0,"7138" :0,"7139" :0,"7140" :0,"7141" :0,"7142" :0,"7143" :0,"7144" :0,"7145" :0,"7146" :0,"7147" :0,"7148" :0,"7149" :0,"7150" :0,"7151" :0,"7152" :0,"7153" :0,"7154" :0,"7155" :0,"7156" :0,"7157" :0,"7158" :0,"7159" :0,"7160" :0,"7161" :0,"7162" :0,"7163" :0,"7164" :0,"7165" :0,"7166" :0,"7167" :0,"7168" :0,"7169" :0,"7170" :0,"7171" :0,"7172" :0,"7173" :0,"7174" :0,"7175" :0,"7176" :0,"7177" :0,"7178" :0,"7179" :0,"7180" :0,"7181" :0,"7182" :0,"7183" :0,"7184" :0,"7185" :0,"7186" :0,"7187" :0,"7188" :0,"7189" :0,"7190" :0,"7191" :0,"7192" :0,"7193" :0,"7194" :0,"7195" :0,"7196" :0,"7197" :0,"7198" :0,"7199" :0,"7200" :0,"7201" :0,"7202" :0,"7203" :0,"7204" :0,"7205" :0,"7206" :0,"7207" :0,"7208" :0,"7209" :0,"7210" :0,"7211" :0,"7212" :0,"7213" :0,"7214" :0,"7215" :0,"7216" :0,"7217" :0,"7218" :0,"7219" :0,"7220" :0,"7221" :0,"7222" :0,"7223" :0,"7224" :0,"7225" :0,"7226" :0,"7227" :0,"7228" :0,"7229" :0,"7230" :0,"7231" :0,"7232" :0,"7233" :0,"7234" :0,"7235" :0,"7236" :0,"7237" :0,"7238" :0,"7239" :0,"7240" :0,"7241" :0,"7242" :0,"7243" :0,"7244" :0,"7245" :0,"7246" :0,"7247" :0,"7248" :0,"7249" :0,"7250" :0,"7251" :0,"7252" :0,"7253" :0,"7254" :0,"7255" :0,"7256" :0,"7257" :0,"7258" :0,"7259" :0,"7260" :0,"7261" :0,"7262" :0,"7263" :0,"7264" :0,"7265" :0,"7266" :0,"7267" :0,"7268" :0,"7269" :0,"7270" :0,"7271" :0,"7272" :0,"7273" :0,"7274" :0,"7275" :0,"7276" :0,"7277" :0,"7278" :0,"7279" :0,"7280" :0,"7281" :0,"7282" :0,"7283" :0,"7284" :0,"7285" :0,"7286" :0,"7287" :0,"7288" :0,"7289" :0,"7290" :0,"7291" :0,"7292" :0,"7293" :0,"7294" :0,"7295" :0,"7296" :0,"7297" :0,"7298" :0,"7299" :0,"7300" :0,"7301" :0,"7302" :0,"7303" :0,"7304" :0,"7305" :0,"7306" :0,"7307" :0,"7308" :0,"7309" :0,"7310" :0,"7311" :0,"7312" :0,"7313" :0,"7314" :0,"7315" :0,"7316" :0,"7317" :0,"7318" :0,"7319" :0,"7320" :0,"7321" :0,"7322" :0,"7323" :0,"7324" :0,"7325" :0,"7326" :0,"7327" :0,"7328" :0,"7329" :0,"7330" :0,"7331" :0,"7332" :0,"7333" :0,"7334" :0,"7335" :0,"7336" :0,"7337" :0,"7338" :0,"7339" :0,"7340" :0,"7341" :0,"7342" :0,"7343" :0,"7344" :0,"7345" :0,"7346" :0,"7347" :0,"7348" :0,"7349" :0,"7350" :0,"7351" :0,"7352" :0,"7353" :0,"7354" :0,"7355" :0,"7356" :0,"7357" :0,"7358" :0,"7359" :0,"7360" :0,"7361" :0,"7362" :0,"7363" :0,"7364" :0,"7365" :0,"7366" :0,"7367" :0,"7368" :0,"7369" :0,"7370" :0,"7371" :0,"7372" :0,"7373" :0,"7374" :0,"7375" :0,"7376" :0,"7377" :0,"7378" :0,"7379" :0,"7380" :0,"7381" :0,"7382" :0,"7383" :0,"7384" :0,"7385" :0,"7386" :0,"7387" :0,"7388" :0,"7389" :0,"7390" :0,"7391" :0,"7392" :0,"7393" :0,"7394" :0,"7395" :0,"7396" :0,"7397" :0,"7398" :0,"7399" :0,"7400" :0,"7401" :0,"7402" :0,"7403" :0,"7404" :0,"7405" :0,"7406" :0,"7407" :0,"7408" :0,"7409" :0,"7410" :0,"7411" :0,"7412" :0,"7413" :0,"7414" :0,"7415" :0,"7416" :0,"7417" :0,"7418" :0,"7419" :0,"7420" :0,"7421" :0,"7422" :0,"7423" :0,"7424" :0,"7425" :0,"7426" :0,"7427" :0,"7428" :0,"7429" :0,"7430" :0,"7431" :0,"7432" :0,"7433" :0,"7434" :0,"7435" :0,"7436" :0,"7437" :0,"7438" :0,"7439" :0,"7440" :0,"7441" :0,"7442" :0,"7443" :0,"7444" :0,"7445" :0,"7446" :0,"7447" :0,"7448" :0,"7449" :0,"7450" :0,"7451" :0,"7452" :0,"7453" :0,"7454" :0,"7455" :0,"7456" :0,"7457" :0,"7458" :0,"7459" :0,"7460" :0,"7461" :0,"7462" :0,"7463" :0,"7464" :0,"7465" :0,"7466" :0,"7467" :0,"7468" :0,"7469" :0,"7470" :0,"7471" :0,"7472" :0,"7473" :0,"7474" :0,"7475" :0,"7476" :0,"7477" :0,"7478" :0,"7479" :0,"7480" :0,"7481" :0,"7482" :0,"7483" :0,"7484" :0,"7485" :0,"7486" :0,"7487" :0,"7488" :0,"7489" :0,"7490" :0,"7491" :0,"7492" :0,"7493" :0,"7494" :0,"7495" :0,"7496" :0,"7497" :0,"7498" :0,"7499" :0,"7500" :0,"7501" :0,"7502" :0,"7503" :0,"7504" :0,"7505" :0,"7506" :0,"7507" :0,"7508" :0,"7509" :0,"7510" :0,"7511" :0,"7512" :0,"7513" :0,"7514" :0,"7515" :0,"7516" :0,"7517" :0,"7518" :0,"7519" :0,"7520" :0,"7521" :0,"7522" :0,"7523" :0,"7524" :0,"7525" :0,"7526" :0,"7527" :0,"7528" :0,"7529" :0,"7530" :0,"7531" :0,"7532" :0,"7533" :0,"7534" :0,"7535" :0,"7536" :0,"7537" :0,"7538" :0,"7539" :0,"7540" :0,"7541" :0,"7542" :0,"7543" :0,"7544" :0,"7545" :0,"7546" :0,"7547" :0,"7548" :0,"7549" :0,"7550" :0,"7551" :0,"7552" :0,"7553" :0,"7554" :0,"7555" :0,"7556" :0,"7557" :0,"7558" :0,"7559" :0,"7560" :0,"7561" :0,"7562" :0,"7563" :0,"7564" :0,"7565" :0,"7566" :0,"7567" :0,"7568" :0,"7569" :0,"7570" :0,"7571" :0,"7572" :0,"7573" :0,"7574" :0,"7575" :0,"7576" :0,"7577" :0,"7578" :0,"7579" :0,"7580" :0,"7581" :0,"7582" :0,"7583" :0,"7584" :0,"7585" :0,"7586" :0,"7587" :0,"7588" :0,"7589" :0,"7590" :0,"7591" :0,"7592" :0,"7593" :0,"7594" :0,"7595" :0,"7596" :0,"7597" :0,"7598" :0,"7599" :0,"7600" :0,"7601" :0,"7602" :0,"7603" :0,"7604" :0,"7605" :0,"7606" :0,"7607" :0,"7608" :0,"7609" :0,"7610" :0,"7611" :0,"7612" :0,"7613" :0,"7614" :0,"7615" :0,"7616" :0,"7617" :0,"7618" :0,"7619" :0,"7620" :0,"7621" :0,"7622" :0,"7623" :0,"7624" :0,"7625" :0,"7626" :0,"7627" :0,"7628" :0,"7629" :0,"7630" :0,"7631" :0,"7632" :0,"7633" :0,"7634" :0,"7635" :0,"7636" :0,"7637" :0,"7638" :0,"7639" :0,"7640" :0,"7641" :0,"7642" :0,"7643" :0,"7644" :0,"7645" :0,"7646" :0,"7647" :0,"7648" :0,"7649" :0,"7650" :0,"7651" :0,"7652" :0,"7653" :0,"7654" :0,"7655" :0,"7656" :0,"7657" :0,"7658" :0,"7659" :0,"7660" :0,"7661" :0,"7662" :0,"7663" :0,"7664" :0,"7665" :0,"7666" :0,"7667" :0,"7668" :0,"7669" :0,"7670" :0,"7671" :0,"7672" :0,"7673" :0,"7674" :0,"7675" :0,"7676" :0,"7677" :0,"7678" :0,"7679" :0,"7680" :0,"7681" :0,"7682" :0,"7683" :0,"7684" :0,"7685" :0,"7686" :0,"7687" :0,"7688" :0,"7689" :0,"7690" :0,"7691" :0,"7692" :0,"7693" :0,"7694" :0,"7695" :0,"7696" :0,"7697" :0,"7698" :0,"7699" :0,"7700" :0,"7701" :0,"7702" :0,"7703" :0,"7704" :0,"7705" :0,"7706" :0,"7707" :0,"7708" :0,"7709" :0,"7710" :0,"7711" :0,"7712" :0,"7713" :0,"7714" :0,"7715" :0,"7716" :0,"7717" :0,"7718" :0,"7719" :0,"7720" :0,"7721" :0,"7722" :0,"7723" :0,"7724" :0,"7725" :0,"7726" :0,"7727" :0,"7728" :0,"7729" :0,"7730" :0,"7731" :0,"7732" :0,"7733" :0,"7734" :0,"7735" :0,"7736" :0,"7737" :0,"7738" :0,"7739" :0,"7740" :0,"7741" :0,"7742" :0,"7743" :0,"7744" :0,"7745" :0,"7746" :0,"7747" :0,"7748" :0,"7749" :0,"7750" :0,"7751" :0,"7752" :0,"7753" :0,"7754" :0,"7755" :0,"7756" :0,"7757" :0,"7758" :0,"7759" :0,"7760" :0,"7761" :0,"7762" :0,"7763" :0,"7764" :0,"7765" :0,"7766" :0,"7767" :0,"7768" :0,"7769" :0,"7770" :0,"7771" :0,"7772" :0,"7773" :0,"7774" :0,"7775" :0,"7776" :0,"7777" :0,"7778" :0,"7779" :0,"7780" :0,"7781" :0,"7782" :0,"7783" :0,"7784" :0,"7785" :0,"7786" :0,"7787" :0,"7788" :0,"7789" :0,"7790" :0,"7791" :0,"7792" :0,"7793" :0,"7794" :0,"7795" :0,"7796" :0,"7797" :0,"7798" :0,"7799" :0,"7800" :0,"7801" :0,"7802" :0,"7803" :0,"7804" :0,"7805" :0,"7806" :0,"7807" :0,"7808" :0,"7809" :0,"7810" :0,"7811" :0,"7812" :0,"7813" :0,"7814" :0,"7815" :0,"7816" :0,"7817" :0,"7818" :0,"7819" :0,"7820" :0,"7821" :0,"7822" :0,"7823" :0,"7824" :0,"7825" :0,"7826" :0,"7827" :0,"7828" :0,"7829" :0,"7830" :0,"7831" :0,"7832" :0,"7833" :0,"7834" :0,"7835" :0,"7836" :0,"7837" :0,"7838" :0,"7839" :0,"7840" :0,"7841" :0,"7842" :0,"7843" :0,"7844" :0,"7845" :0,"7846" :0,"7847" :0,"7848" :0,"7849" :0,"7850" :0,"7851" :0,"7852" :0,"7853" :0,"7854" :0,"7855" :0,"7856" :0,"7857" :0,"7858" :0,"7859" :0,"7860" :0,"7861" :0,"7862" :0,"7863" :0,"7864" :0,"7865" :0,"7866" :0,"7867" :0,"7868" :0,"7869" :0,"7870" :0,"7871" :0,"7872" :0,"7873" :0,"7874" :0,"7875" :0,"7876" :0,"7877" :0,"7878" :0,"7879" :0,"7880" :0,"7881" :0,"7882" :0,"7883" :0,"7884" :0,"7885" :0,"7886" :0,"7887" :0,"7888" :0,"7889" :0,"7890" :0,"7891" :0,"7892" :0,"7893" :0,"7894" :0,"7895" :0,"7896" :0,"7897" :0,"7898" :0,"7899" :0,"7900" :0,"7901" :0,"7902" :0,"7903" :0,"7904" :0,"7905" :0,"7906" :0,"7907" :0,"7908" :0,"7909" :0,"7910" :0,"7911" :0,"7912" :0,"7913" :0,"7914" :0,"7915" :0,"7916" :0,"7917" :0,"7918" :0,"7919" :0,"7920" :0,"7921" :0,"7922" :0,"7923" :0,"7924" :0,"7925" :0,"7926" :0,"7927" :0,"7928" :0,"7929" :0,"7930" :0,"7931" :0,"7932" :0,"7933" :0,"7934" :0,"7935" :0,"7936" :0,"7937" :0,"7938" :0,"7939" :0,"7940" :0,"7941" :0,"7942" :0,"7943" :0,"7944" :0,"7945" :0,"7946" :0,"7947" :0,"7948" :0,"7949" :0,"7950" :0,"7951" :0,"7952" :0,"7953" :0,"7954" :0,"7955" :0,"7956" :0,"7957" :0,"7958" :0,"7959" :0,"7960" :0,"7961" :0,"7962" :0,"7963" :0,"7964" :0,"7965" :0,"7966" :0,"7967" :0,"7968" :0,"7969" :0,"7970" :0,"7971" :0,"7972" :0,"7973" :0,"7974" :0,"7975" :0,"7976" :0,"7977" :0,"7978" :0,"7979" :0,"7980" :0,"7981" :0,"7982" :0,"7983" :0,"7984" :0,"7985" :0,"7986" :0,"7987" :0,"7988" :0,"7989" :0,"7990" :0,"7991" :0,"7992" :0,"7993" :0,"7994" :0,"7995" :0,"7996" :0,"7997" :0,"7998" :0,"7999" :0,"8000" :0,"8001" :0,"8002" :0,"8003" :0,"8004" :0,"8005" :0,"8006" :0,"8007" :0,"8008" :0,"8009" :0,"8010" :0,"8011" :0,"8012" :0,"8013" :0,"8014" :0,"8015" :0,"8016" :0,"8017" :0,"8018" :0,"8019" :0,"8020" :0,"8021" :0,"8022" :0,"8023" :0,"8024" :0,"8025" :0,"8026" :0,"8027" :0,"8028" :0,"8029" :0,"8030" :0,"8031" :0,"8032" :0,"8033" :0,"8034" :0,"8035" :0,"8036" :0,"8037" :0,"8038" :0,"8039" :0,"8040" :0,"8041" :0,"8042" :0,"8043" :0,"8044" :0,"8045" :0,"8046" :0,"8047" :0,"8048" :0,"8049" :0,"8050" :0,"8051" :0,"8052" :0,"8053" :0,"8054" :0,"8055" :0,"8056" :0,"8057" :0,"8058" :0,"8059" :0,"8060" :0,"8061" :0,"8062" :0,"8063" :0,"8064" :0,"8065" :0,"8066" :0,"8067" :0,"8068" :0,"8069" :0,"8070" :0,"8071" :0,"8072" :0,"8073" :0,"8074" :0,"8075" :0,"8076" :0,"8077" :0,"8078" :0,"8079" :0,"8080" :0,"8081" :0,"8082" :0,"8083" :0,"8084" :0,"8085" :0,"8086" :0,"8087" :0,"8088" :0,"8089" :0,"8090" :0,"8091" :0,"8092" :0,"8093" :0,"8094" :0,"8095" :0,"8096" :0,"8097" :0,"8098" :0,"8099" :0,"8100" :0,"8101" :0,"8102" :0,"8103" :0,"8104" :0,"8105" :0,"8106" :0,"8107" :0,"8108" :0,"8109" :0,"8110" :0,"8111" :0,"8112" :0,"8113" :0,"8114" :0,"8115" :0,"8116" :0,"8117" :0,"8118" :0,"8119" :0,"8120" :0,"8121" :0,"8122" :0,"8123" :0,"8124" :0,"8125" :0,"8126" :0,"8127" :0,"8128" :0,"8129" :0,"8130" :0,"8131" :0,"8132" :0,"8133" :0,"8134" :0,"8135" :0,"8136" :0,"8137" :0,"8138" :0,"8139" :0,"8140" :0,"8141" :0,"8142" :0,"8143" :0,"8144" :0,"8145" :0,"8146" :0,"8147" :0,"8148" :0,"8149" :0,"8150" :0,"8151" :0,"8152" :0,"8153" :0,"8154" :0,"8155" :0,"8156" :0,"8157" :0,"8158" :0,"8159" :0,"8160" :0,"8161" :0,"8162" :0,"8163" :0,"8164" :0,"8165" :0,"8166" :0,"8167" :0,"8168" :0,"8169" :0,"8170" :0,"8171" :0,"8172" :0,"8173" :0,"8174" :0,"8175" :0,"8176" :0,"8177" :0,"8178" :0,"8179" :0,"8180" :0,"8181" :0,"8182" :0,"8183" :0,"8184" :0,"8185" :0,"8186" :0,"8187" :0,"8188" :0,"8189" :0,"8190" :0,"8191" :0
} ,
"nextKey" :0,
"keysConsumed" :0
}
}
# Request
def getAddress ( address ):
import requests
import json
request = requests . get ( 'https://explorer.theqrl.org/api/a/' + address )
response = request . text
getAddressResp = json . loads ( response )
jsonResponse = getAddressResp
return ( jsonResponse )
getAddress ( "Q01040007a591a62c23ed27adfe3df8eb812ee5e4b73e47fb8471e8d78ecd9b4cadc325ca36d86e" )
# Response
{
'ots' :
{
'keys' : { '2584' : 0 , '6202' : 0 , '2165' : 0 , '6754' : 0 , '2436' : 0 , '2274' : 0 , '7318' : 0 , '1190' : 0 , '4984' : 0 , '695' : 0 , '1175' : 0 , '2007' : 0 , '5762' : 0 , '4641' : 0 , '7487' : 0 , '8044' : 0 , '413' : 0 , '2329' : 0 , '5155' : 0 , '636' : 0 , '3288' : 0 , '6293' : 0 , '6491' : 0 , '2158' : 0 , '207' : 0 , '5726' : 0 , '5930' : 0 , '860' : 0 , '3030' : 0 , '3824' : 0 , '991' : 0 , '7856' : 0 , '1878' : 0 , '5113' : 0 , '2521' : 0 , '2383' : 0 , '4961' : 0 , '3028' : 0 , '890' : 0 , '2648' : 0 , '7199' : 0 , '4387' : 0 , '356' : 0 , '2602' : 0 , '4085' : 0 , '5586' : 0 , '200' : 0 , '1486' : 0 , '3261' : 0 , '6034' : 0 , '3208' : 0 , '768' : 0 , '364' : 0 , '7542' : 0 , '4852' : 0 , '4371' : 0 , '807' : 0 , '2233' : 0 , '2393' : 0 , '2750' : 0 , '5128' : 0 , '5213' : 0 , '6985' : 0 , '6260' : 0 , '2735' : 0 , '3480' : 0 , '5161' : 0 , '943' : 0 , '2588' : 0 , '7753' : 0 , '548' : 0 , '3348' : 0 , '1267' : 0 , '69' : 0 , '5372' : 0 , '1789' : 0 , '1338' : 0 , '5943' : 0 , '4663' : 0 , '3525' : 0 , '717' : 0 , '7703' : 0 , '985' : 0 , '7044' : 0 , '6628' : 0 , '3520' : 0 , '5791' : 0 , '3722' : 0 , '1619' : 0 , '12' : 0 , '2409' : 0 , '8139' : 0 , '3229' : 0 , '2806' : 0 , '6464' : 0 , '355' : 0 , '4832' : 0 , '2809' : 0 , '3694' : 0 , '7504' : 0 , '177' : 0 , '1492' : 0 , '3747' : 0 , '5551' : 0 , '5454' : 0 , '4902' : 0 , '5790' : 0 , '5125' : 0 , '2663' : 0 , '2460' : 0 , '831' : 0 , '1211' : 0 , '1217' : 0 , '5633' : 0 , '6485' : 0 , '7208' : 0 , '4754' : 0 , '2463' : 0 , '2745' : 0 , '3604' : 0 , '984' : 0 , '7149' : 0 , '4056' : 0 , '4927' : 0 , '7888' : 0 , '4533' : 0 , '958' : 0 , '7600' : 0 , '5641' : 0 , '815' : 0 , '2394' : 0 , '8030' : 0 , '333' : 0 , '2054' : 0 , '3630' : 0 , '5310' : 0 , '4042' : 0 , '881' : 0 , '4675' : 0 , '2677' : 0 , '2434' : 0 , '3284' : 0 , '2585' : 0 , '1631' : 0 , '6047' : 0 , '7186' : 0 , '5755' : 0 , '1960' : 0 , '5050' : 0 , '6817' : 0 , '6308' : 0 , '6960' : 0 , '6767' : 0 , '91' : 0 , '4400' : 0 , '6255' : 0 , '1984' : 0 , '5796' : 0 , '7789' : 0 , '5896' : 0 , '2495' : 0 , '663' : 0 , '1360' : 0 , '1895' : 0 , '5200' : 0 , '6210' : 0 , '3194' : 0 , '5557' : 0 , '6418' : 0 , '7563' : 0 , '542' : 0 , '6262' : 0 , '4808' : 0 , '5897' : 0 , '2100' : 0 , '7041' : 0 , '5261' : 0 , '693' : 0 , '7006' : 0 , '1240' : 0 , '679' : 0 , '5773' : 0 , '1654' : 0 , '2816' : 0 , '6141' : 0 , '565' : 0 , '2734' : 0 , '2320' : 0 , '792' : 0 , '7708' : 0 , '4989' : 0 , '5524' : 0 , '3998' : 0 , '3273' : 0 , '4500' : 0 , '2289' : 0 , '5459' : 0 , '6071' : 0 , '3548' : 0 , '5503' : 0 , '3101' : 0 , '974' : 0 , '274' : 0 , '5563' : 0 , '7020' : 0 , '6717' : 0 , '6169' : 0 , '757' : 0 , '5623' : 0 , '931' : 0 , '760' : 0 , '1606' : 0 , '384' : 0 , '5126' : 0 , '4174' : 0 , '2375' : 0 , '7894' : 0 , '6819' : 0 , '144' : 0 , '8187' : 0 , '7808' : 0 , '2830' : 0 , '3727' : 0 , '2145' : 0 , '589' : 0 , '980' : 0 , '2304' : 0 , '3109' : 0 , '1215' : 0 , '3867' : 0 , '5215' : 0 , '5396' : 0 , '607' : 0 , '5447' : 0 , '3095' : 0 , '4138' : 0 , '875' : 0 , '2881' : 0 , '5193' : 0 , '2675' : 0 , '1110' : 0 , '3615' : 0 , '591' : 0 , '1556' : 0 , '2790' : 0 , '692' : 0 , '7075' : 0 , '7541' : 0 , '4307' : 0 , '6538' : 0 , '1987' : 0 , '1250' : 0 , '2101' : 0 , '2740' : 0 , '6510' : 0 , '908' : 0 , '7872' : 0 , '477' : 0 , '8122' : 0 , '3164' : 0 , '7965' : 0 , '5099' : 0 , '6649' : 0 , '6760' : 0 , '5343' : 0 , '1718' : 0 , '573' : 0 , '2313' : 0 , '1156' : 0 , '8095' : 0 , '983' : 0 , '270' : 0 , '3448' : 0 , '5553' : 0 , '1793' : 0 , '6292' : 0 , '2349' : 0 , '1623' : 0 , '1137' : 0 , '2728' : 0 , '6904' : 0 , '7679' : 0 , '6751' : 0 , '4924' : 0 , '3176' : 0 , '247' : 0 , '7486' : 0 , '7901' : 0 , '1647' : 0 , '5678' : 0 , '2744' : 0 , '4359' : 0 , '6385' : 0 , '5087' : 0 , '7477' : 0 , '852' : 0 , '7731' : 0 , '4833' : 0 , '6389' : 0 , '3437' : 0 , '3529' : 0 , '4523' : 0 , '915' : 0 , '524' : 0 , '1133' : 0 , '5135' : 0 , '7761' : 0 , '1843' : 0 , '7503' : 0 , '5535' : 0 , '2204' : 0 , '613' : 0 , '1610' : 0 , '3434' : 0 , '800' : 0 , '67' : 0 , '1022' : 0 , '2335' : 0 , '3675' : 0 , '2805' : 0 , '7225' : 0 , '5561' : 0 , '3570' : 0 , '3476' : 0 , '3792' : 0 , '7815' : 0 , '769' : 0 , '4074' : 0 , '466' : 0 , '7076' : 0 , '308' : 0 , '1906' : 0 , '1940' : 0 , '475' : 0 , '8054' : 0 , '6936' : 0 , '6456' : 0 , '3572' : 0 , '186' : 0 , '4383' : 0 , '7158' : 0 , '503' : 0 , '668' : 0 , '2671' : 0 , '707' : 0 , '4950' : 0 , '2844' : 0 , '7860' : 0 , '3947' : 0 , '1524' : 0 , '4107' : 0 , '3271' : 0 , '1900' : 0 , '1204' : 0 , '1447' : 0 , '5121' : 0 , '3589' : 0 , '3852' : 0 , '5177' : 0 , '5331' : 0 , '4362' : 0 , '437' : 0 , '1582' : 0 , '2002' : 0 , '7530' : 0 , '5587' : 0 , '3662' : 0 , '1426' : 0 , '518' : 0 , '6804' : 0 , '3855' : 0 , '1886' : 0 , '7314' : 0 , '4609' : 0 , '1162' : 0 , '2322' : 0 , '4492' : 0 , '2520' : 0 , '3134' : 0 , '6609' : 0 , '7619' : 0 , '7185' : 0 , '2067' : 0 , '2819' : 0 , '3492' : 0 , '2422' : 0 , '6956' : 0 , '2497' : 0 , '7729' : 0 , '2547' : 0 , '286' : 0 , '7906' : 0 , '2162' : 0 , '2473' : 0 , '1805' : 0 , '3289' : 0 , '1209' : 0 , '6490' : 0 , '7412' : 0 , '7240' : 0 , '1099' : 0 , '5894' : 0 , '4012' : 0 , '501' : 0 , '1111' : 0 , '4189' : 0 , '1759' : 0 , '6106' : 0 , '5772' : 0 , '1504' : 0 , '1323' : 0 , '4281' : 0 , '5092' : 0 , '4284' : 0 , '2087' : 0 , '3664' : 0 , '154' : 0 , '4230' : 0 , '2347' : 0 , '6690' : 0 , '7212' : 0 , '7468' : 0 , '8022' : 0 , '2344' : 0 , '8160' : 0 , '4175' : 0 , '1324' : 0 , '641' : 0 , '5912' : 0 , '5490' : 0 , '5866' : 0 , '1966' : 0 , '3523' : 0 , '7155' : 0 , '3969' : 0 , '1228' : 0 , '1674' : 0 , '6500' : 0 , '7471' : 0 , '4515' : 0 , '3196' : 0 , '4519' : 0 , '7134' : 0 , '5117' : 0 , '7830' : 0 , '2123' : 0 , '2026' : 0 , '2527' : 0 , '5705' : 0 , '5533' : 0 , '6426' : 0 , '5949' : 0 , '2386' : 0 , '60' : 0 , '2712' : 0 , '7728' : 0 , '2609' : 0 , '2420' : 0 , '7484' : 0 , '1567' : 0 , '261' : 0 , '7978' : 0 , '7767' : 0 , '1390' : 0 , '2195' : 0 , '3679' : 0 , '8048' : 0 , '4334' : 0 , '631' : 0 , '1041' : 0 , '178' : 0 , '3669' : 0 , '3457' : 0 , '5383' : 0 , '5470' : 0 , '3645' : 0 , '6184' : 0 , '5851' : 0 , '2176' : 0 , '171' : 0 , '4127' : 0 , '5847' : 0 , '6621' : 0 , '3691' : 0 , '4656' : 0 , '7086' : 0 , '6740' : 0 , '6487' : 0 , '4351' : 0 , '6165' : 0 , '3904' : 0 , '4857' : 0 , '4781' : 0 , '6618' : 0 , '5446' : 0 , '3699' : 0 , '7109' : 0 , '6672' : 0 , '3423' : 0 , '3614' : 0 , '6501' : 0 , '7145' : 0 , '1561' : 0 , '6366' : 0 , '5786' : 0 , '4518' : 0 , '4970' : 0 , '3060' : 0 , '245' : 0 , '1668' : 0 , '4736' : 0 , '3845' : 0 , '6198' : 0 , '3511' : 0 , '4385' : 0 , '3187' : 0 , '3763' : 0 , '1477' : 0 , '2760' : 0 , '4789' : 0 , '5389' : 0 , '2470' : 0 , '5498' : 0 , '4445' : 0 , '8127' : 0 , '7543' : 0 , '701' : 0 , '1722' : 0 , '4779' : 0 , '1963' : 0 , '686' : 0 , '5688' : 0 , '6287' : 0 , '7071' : 0 , '3213' : 0 , '7772' : 0 , '6138' : 0 , '5322' : 0 , '5909' : 0 , '6930' : 0 , '6620' : 0 , '2747' : 0 , '3466' : 0 , '1818' : 0 , '4483' : 0 , '6085' : 0 , '6042' : 0 , '6446' : 0 , '5711' : 0 , '5186' : 0 , '6144' : 0 , '731' : 0 , '4002' : 0 , '5864' : 0 , '2382' : 0 , '348' : 0 , '448' : 0 , '4416' : 0 , '7684' : 0 , '7516' : 0 , '1724' : 0 , '8043' : 0 , '6973' : 0 , '7293' : 0 , '7273' : 0 , '5558' : 0 , '5388' : 0 , '5575' : 0 , '6334' : 0 , '1441' : 0 , '2187' : 0 , '4800' : 0 , '7614' : 0 , '7937' : 0 , '8165' : 0 , '4770' : 0 , '2808' : 0 , '3663' : 0 , '7193' : 0 , '8181' : 0 , '1698' : 0 , '3654' : 0 , '5502' : 0 , '2919' : 0 , '1924' : 0 , '1947' : 0 , '6949' : 0 , '3461' : 0 , '1688' : 0 , '652' : 0 , '5475' : 0 , '129' : 0 , '6440' : 0 , '282' : 0 , '3022' : 0 , '1327' : 0 , '4217' : 0 , '179' : 0 , '3166' : 0 , '5672' : 0 , '124' : 0 , '3682' : 0 , '2096' : 0 , '2083' : 0 , '4301' : 0 , '7209' : 0 , '2211' : 0 , '166' : 0 , '1454' : 0 , '4109' : 0 , '8185' : 0 , '729' : 0 , '3569' : 0 , '3298' : 0 , '1147' : 0 , '2205' : 0 , '8038' : 0 , '5692' : 0 , '7960' : 0 , '337' : 0 , '123' : 0 , '4193' : 0 , '2649' : 0 , '2845' : 0 , '4530' : 0 , '1165' : 0 , '2438' : 0 , '5365' : 0 , '859' : 0 , '6327' : 0 , '7164' : 0 , '966' : 0 , '3010' : 0 , '600' : 0 , '1434' : 0 , '7564' : 0 , '5570' : 0 , '3938' : 0 , '2456' : 0 , '4649' : 0 , '2461' : 0 , '5656' : 0 , '8003' : 0 , '5710' : 0 , '534' : 0 , '3806' : 0 , '1534' : 0 , '7763' : 0 , '4994' : 0 , '932' : 0 , '3345' : 0 , '1641' : 0 , '5900' : 0 , '6970' : 0 , '325' : 0 , '2484' : 0 , '4965' : 0 , '5898' : 0 , '4836' : 0 , '1208' : 0 , '3748' : 0 , '6023' : 0 , '4090' : 0 , '7136' : 0 , '4023' : 0 , '464' : 0 , '975' : 0 , '4370' : 0 , '6615' : 0 , '940' : 0 , '5164' : 0 , '6651' : 0 , '3726' : 0 , '6396' : 0 , '6509' : 0 , '5269' : 0 , '6194' : 0 , '6263' : 0 , '1776' : 0 , '6594' : 0 , '5650' : 0 , '7917' : 0 , '8093' : 0 , '2932' : 0 , '1684' : 0 , '2827' : 0 , '3635' : 0 , '2904' : 0 , '7962' : 0 , '4683' : 0 , '3894' : 0 , '2935' : 0 , '6380' : 0 , '6836' : 0 , '2435' : 0 , '2235' : 0 , '6275' : 0 , '7855' : 0 , '4617' : 0 , '3934' : 0 , '8163' : 0 , '7202' : 0 , '75' : 0 , '6655' : 0 , '3949' : 0 , '3955' : 0 , '3507' : 0 , '1996' : 0 , '7126' : 0 , '6460' : 0 , '5165' : 0 , '7142' : 0 , '3111' : 0 , '5850' : 0 , '986' : 0 , '5230' : 0 , '6345' : 0 , '5504' : 0 , '6457' : 0 , '6062' : 0 , '433' : 0 , '510' : 0 , '3999' : 0 , '2691' : 0 , '7952' : 0 , '1753' : 0 , '3413' : 0 , '2426' : 0 , '774' : 0 , '6067' : 0 , '7421' : 0 , '2327' : 0 , '6633' : 0 , '5621' : 0 , '2095' : 0 , '2587' : 0 , '648' : 0 , '4428' : 0 , '2238' : 0 , '1325' : 0 , '7875' : 0 , '1528' : 0 , '4616' : 0 , '369' : 0 , '1439' : 0 , '5593' : 0 , '8028' : 0 , '2501' : 0 , '4637' : 0 , '3291' : 0 , '1675' : 0 , '7847' : 0 , '111' : 0 , '18' : 0 , '5973' : 0 , '1095' : 0 , '3162' : 0 , '3211' : 0 , '4925' : 0 , '2855' : 0 , '1702' : 0 , '8152' : 0 , '3083' : 0 , '6370' : 0 , '322' : 0 , '5401' : 0 , '5833' : 0 , '1983' : 0 , '5673' : 0 , '119' : 0 , '6139' : 0 , '849' : 0 , '5589' : 0 , '8' : 0 , '7572' : 0 , '2956' : 0 , '2666' : 0 , '7064' : 0 , '2439' : 0 , '5138' : 0 , '6808' : 0 , '6758' : 0 , '7802' : 0 , '4123' : 0 , '2990' : 0 , '8134' : 0 , '1131' : 0 , '1910' : 0 , '525' : 0 , '6243' : 0 , '1394' : 0 , '876' : 0 , '5814' : 0 , '4904' : 0 , '5217' : 0 , '6770' : 0 , '4212' : 0 , '6001' : 0 , '4548' : 0 , '2754' : 0 , '2529' : 0 , '799' : 0 , '5830' : 0 , '5198' : 0 , '2746' : 0 , '5330' : 0 , '4511' : 0 , '2853' : 0 , '196' : 0 , '7782' : 0 , '552' : 0 , '7348' : 0 , '7594' : 0 , '5419' : 0 , '7131' : 0 , '272' : 0 , '7612' : 0 , '2661' : 0 , '3544' : 0 , '8018' : 0 , '1539' : 0 , '3696' : 0 , '6115' : 0 , '7180' : 0 , '8186' : 0 , '1120' : 0 , '1959' : 0 , '3839' : 0 , '7289' : 0 , '3665' : 0 , '2714' : 0 , '3178' : 0 , '8080' : 0 , '1366' : 0 , '7918' : 0 , '5731' : 0 , '8072' : 0 , '682' : 0 , '6822' : 0 , '6892' : 0 , '1790' : 0 , '4600' : 0 , '8164' : 0 , '3079' : 0 , '2508' : 0 , '3017' : 0 , '8052' : 0 , '2333' : 0 , '2610' : 0 , '1685' : 0 , '7707' : 0 , '6399' : 0 , '559' : 0 , '5518' : 0 , '3842' : 0 , '5267' : 0 , '3064' : 0 , '5329' : 0 , '3075' : 0 , '5854' : 0 , '2345' : 0 , '4266' : 0 , '4205' : 0 , '4859' : 0 , '1071' : 0 , '5730' : 0 , '7151' : 0 , '7115' : 0 , '3786' : 0 , '5394' : 0 , '3639' : 0 , '2775' : 0 , '2088' : 0 , '27' : 0 , '7030' : 0 , '7101' : 0 , '4720' : 0 , '4068' : 0 , '1734' : 0 , '62' : 0 , '334' : 0 , '1259' : 0 , '6606' : 0 , '2182' : 0 , '4964' : 0 , '1865' : 0 , '7705' : 0 , '3274' : 0 , '1919' : 0 , '4856' : 0 , '6424' : 0 , '7536' : 0 , '4188' : 0 , '6303' : 0 , '3309' : 0 , '5153' : 0 , '697' : 0 , '1160' : 0 , '478' : 0 , '5787' : 0 , '3315' : 0 , '248' : 0 , '6282' : 0 , '5544' : 0 , '1136' : 0 , '7964' : 0 , '7837' : 0 , '169' : 0 , '3469' : 0 , '2066' : 0 , '1522' : 0 , '7568' : 0 , '1827' : 0 , '2981' : 0 , '1233' : 0 , '2510' : 0 , '4285' : 0 , '3312' : 0 , '1321' : 0 , '1072' : 0 , '2432' : 0 , '219' : 0 , '4513' : 0 , '6444' : 0 , '1304' : 0 , '351' : 0 , '6899' : 0 , '4951' : 0 , '3097' : 0 , '149' : 0 , '7182' : 0 , '2600' : 0 , '4112' : 0 , '1470' : 0 , '7015' : 0 , '8116' : 0 , '1348' : 0 , '2478' : 0 , '6200' : 0 , '6946' : 0 , '1741' : 0 , '6794' : 0 , '4353' : 0 , '2880' : 0 , '1128' : 0 , '3390' : 0 , '391' : 0 , '4968' : 0 , '5049' : 0 , '4766' : 0 , '595' : 0 , '6534' : 0 , '3335' : 0 , '1289' : 0 , '5290' : 0 , '100' : 0 , '6186' : 0 , '3702' : 0 , '3879' : 0 , '7749' : 0 , '1725' : 0 , '1104' : 0 , '1157' : 0 , '930' : 0 , '500' : 0 , '1400' : 0 , '2222' : 0 , '5392' : 0 , '4152' : 0 , '8118' : 0 , '644' : 0 , '877' : 0 , '6557' : 0 , '5693' : 0 , '1905' : 0 , '3387' : 0 , '2441' : 0 , '1245' : 0 , '4694' : 0 , '2798' : 0 , '4014' : 0 , '7717' : 0 , '3609' : 0 , '1391' : 0 , '827' : 0 , '4585' : 0 , '649' : 0 , '6484' : 0 , '5060' : 0 , '7203' : 0 , '4194' : 0 , '4097' : 0 , '1887' : 0 , '5247' : 0 , '6310' : 0 , '5089' : 0 , '7207' : 0 , '2879' : 0 , '6714' : 0 , '5954' : 0 , '5908' : 0 , '7509' : 0 , '1795' : 0 , '6412' : 0 , '808' : 0 , '1339' : 0 , '3571' : 0 , '2832' : 0 , '1948' : 0 , '6489' : 0 , '3377' : 0 , '6969' : 0 , '7313' : 0 , '8035' : 0 , '3788' : 0 , '4893' : 0 , '1553' : 0 , '5091' : 0 , '82' : 0 , '3128' : 0 , '7326' : 0 , '3130' : 0 , '4870' : 0 , '608' : 0 , '1518' : 0 , '3294' : 0 , '4699' : 0 , '2191' : 0 , '5375' : 0 , '7475' : 0 , '8087' : 0 , '4146' : 0 , '7781' : 0 , '317' : 0 , '3239' : 0 , '2711' : 0 , '5613' : 0 , '7312' : 0 , '3375' : 0 , '3900' : 0 , '3481' : 0 , '6616' : 0 , '2303' : 0 , '208' : 0 , '71' : 0 , '1253' : 0 , '3378' : 0 , '4005' : 0 , '6065' : 0 , '2620' : 0 , '6567' : 0 , '2275' : 0 , '3355' : 0 , '3263' : 0 , '6763' : 0 , '857' : 0 , '5539' : 0 , '1414' : 0 , '2791' : 0 , '7581' : 0 , '5068' : 0 , '1479' : 0 , '1763' : 0 , '2947' : 0 , '7527' : 0 , '4425' : 0 , '1774' : 0 , '1577' : 0 , '3958' : 0 , '7417' : 0 , '2010' : 0 , '4331' : 0 , '1538' : 0 , '8021' : 0 , '624' : 0 , '7147' : 0 , '882' : 0 , '4879' : 0 , '7991' : 0 , '3807' : 0 , '6638' : 0 , '4746' : 0 , '4748' : 0 , '893' : 0 , '8124' : 0 , '258' : 0 , '1555' : 0 , '2142' : 0 , '7231' : 0 , '3152' : 0 , '3054' : 0 , '3146' : 0 , '7195' : 0 , '3756' : 0 , '2385' : 0 , '2059' : 0 , '5037' : 0 , '244' : 0 , '6312' : 0 , '2860' : 0 , '3681' : 0 , '8042' : 0 , '7631' : 0 , '4732' : 0 , '2856' : 0 , '5834' : 0 , '2575' : 0 , '571' : 0 , '1380' : 0 , '6698' : 0 , '4493' : 0 , '7730' : 0 , '2406' : 0 , '953' : 0 , '3785' : 0 , '467' : 0 , '4283' : 0 , '2567' : 0 , '6961' : 0 , '3636' : 0 , '6699' : 0 , '4417' : 0 , '3180' : 0 , '471' : 0 , '4304' : 0 , '2300' : 0 , '6858' : 0 , '3436' : 0 , '3851' : 0 , '320' : 0 , '8084' : 0 , '7819' : 0 , '8159' : 0 , '5152' : 0 , '6722' : 0 , '259' : 0 , '6845' : 0 , '529' : 0 , '6926' : 0 , '3923' : 0 , '5415' : 0 , '7461' : 0 , '2050' : 0 , '3067' : 0 , '6429' : 0 , '3914' : 0 , '3888' : 0 , '939' : 0 , '944' : 0 , '6238' : 0 , '6174' : 0 , '6868' : 0 , '7416' : 0 , '7233' : 0 , '6257' : 0 , '6079' : 0 , '1939' : 0 , '2008' : 0 , '6781' : 0 , '1385' : 0 , '5109' : 0 , '842' : 0 , '2826' : 0 , '3008' : 0 , '1836' : 0 , '7987' : 0 , '2641' : 0 , '4119' : 0 , '4406' : 0 , '6795' : 0 , '4888' : 0 , '861' : 0 , '7065' : 0 , '3896' : 0 , '4645' : 0 , '5911' : 0 , '255' : 0 , '2136' : 0 , '28' : 0 , '3310' : 0 , '2380' : 0 , '3626' : 0 , '4897' : 0 , '2970' : 0 , '6215' : 0 , '2846' : 0 , '7583' : 0 , '5965' : 0 , '7251' : 0 , '1579' : 0 , '8130' : 0 , '1096' : 0 , '7740' : 0 , '7089' : 0 , '1540' : 0 , '7500' : 0 , '1089' : 0 , '2676' : 0 , '54' : 0 , '7966' : 0 , '4363' : 0 , '6553' : 0 , '3025' : 0 , '7243' : 0 , '5327' : 0 , '3953' : 0 , '7078' : 0 , '3165' : 0 , '2052' : 0 , '7691' : 0 , '2014' : 0 , '7029' : 0 , '4429' : 0 , '3086' : 0 , '226' : 0 , '5492' : 0 , '2130' : 0 , '2552' : 0 , '2485' : 0 , '1995' : 0 , '7061' : 0 , '2736' : 0 , '6063' : 0 , '4825' : 0 , '4470' : 0 , '2634' : 0 , '4268' : 0 , '3729' : 0 , '5573' : 0 , '5888' : 0 , '4894' : 0 , '7490' : 0 , '8101' : 0 , '1552' : 0 , '1141' : 0 , '2944' : 0 , '7927' : 0 , '1285' : 0 , '7882' : 0 , '7639' : 0 , '2813' : 0 , '3138' : 0 , '7138' : 0 , '1060' : 0 , '922' : 0 , '6422' : 0 , '6245' : 0 , '227' : 0 , '1857' : 0 , '7455' : 0 , '1517' : 0 , '5491' : 0 , '3909' : 0 , '5479' : 0 , '1535' : 0 , '7128' : 0 , '2069' : 0 , '942' : 0 , '5011' : 0 , '2550' : 0 , '7714' : 0 , '6788' : 0 , '1052' : 0 , '4297' : 0 , '3223' : 0 , '3320' : 0 , '2310' : 0 , '1820' : 0 , '5336' : 0 , '254' : 0 , '5412' : 0 , '7311' : 0 , '6081' : 0 , '1629' : 0 , '699' : 0 , '4389' : 0 , '2974' : 0 , '6251' : 0 , '6413' : 0 , '5751' : 0 , '3902' : 0 , '1373' : 0 , '4330' : 0 , '3087' : 0 , '7519' : 0 , '903' : 0 , '4545' : 0 , '7396' : 0 , '6745' : 0 , '584' : 0 , '3625' : 0 , '578' : 0 , '3043' : 0 , '7037' : 0 , '6914' : 0 , '5199' : 0 , '1914' : 0 , '1748' : 0 , '4741' : 0 , '7275' : 0 , '2236' : 0 , '7420' : 0 , '2562' : 0 , '4327' : 0 , '5245' : 0 , '6833' : 0 , '7925' : 0 , '2923' : 0 , '4843' : 0 , '7256' : 0 , '2664' : 0 , '7206' : 0 , '1564' : 0 , '1864' : 0 , '6019' : 0 , '1092' : 0 , '5345' : 0 , '1928' : 0 , '7587' : 0 , '4900' : 0 , '3556' : 0 , '7745' : 0 , '6652' : 0 , '3733' : 0 , '3354' : 0 , '327' : 0 , '3035' : 0 , '1978' : 0 , '5308' : 0 , '2200' : 0 , '3924' : 0 , '7822' : 0 , '5807' : 0 , '513' : 0 , '2840' : 0 , '114' : 0 , '2324' : 0 , '5984' : 0 , '1750' : 0 , '3611' : 0 , '4344' : 0 , '3659' : 0 , '3118' : 0 , '2578' : 0 , '1194' : 0 , '4473' : 0 , '7433' : 0 , '4886' : 0 , '6203' : 0 , '434' : 0 , '1029' : 0 , '5093' : 0 , '7585' : 0 , '4721' : 0 , '7480' : 0 , '6483' : 0 , '136' : 0 , '544' : 0 , '7873' : 0 , '1220' : 0 , '1904' : 0 , '115' : 0 , '1736' : 0 , '1003' : 0 , '997' : 0 , '1958' : 0 , '5226' : 0 , '3872' : 0 , '7096' : 0 , '6223' : 0 , '4376' : 0 , '2812' : 0 , '1908' : 0 , '7713' : 0 , '6697' : 0 , '6404' : 0 , '7512' : 0 , '4668' : 0 , '5921' : 0 , '8026' : 0 , '229' : 0 , '3690' : 0 , '151' : 0 , '1042' : 0 , '3929' : 0 , '5826' : 0 , '3687' : 0 , '1696' : 0 , '4631' : 0 , '2156' : 0 , '3608' : 0 , '2965' : 0 , '7569' : 0 , '6735' : 0 , '6234' : 0 , '2481' : 0 , '3684' : 0 , '3500' : 0 , '5750' : 0 , '6511' : 0 , '56' : 0 , '2989' : 0 , '6323' : 0 , '1484' : 0 , '3038' : 0 , '5058' : 0 , '3258' : 0 , '3357' : 0 , '3597' : 0 , '7722' : 0 , '3295' : 0 , '5418' : 0 , '1671' : 0 , '4162' : 0 , '6547' : 0 , '4182' : 0 , '4999' : 0 , '2022' : 0 , '185' : 0 , '5356' : 0 , '1542' : 0 , '3486' : 0 , '3762' : 0 , '3408' : 0 , '1563' : 0 , '7077' : 0 , '2029' : 0 , '2940' : 0 , '3723' : 0 , '3856' : 0 , '5476' : 0 , '7427' : 0 , '2325' : 0 , '3634' : 0 , '862' : 0 , '5112' : 0 , '1779' : 0 , '1224' : 0 , '3126' : 0 , '7891' : 0 , '2285' : 0 , '5997' : 0 , '6343' : 0 , '6080' : 0 , '5838' : 0 , '5258' : 0 , '4757' : 0 , '4751' : 0 , '5122' : 0 , '7451' : 0 , '2768' : 0 , '3775' : 0 , '5421' : 0 , '357' : 0 , '5734' : 0 , '2655' : 0 , '3840' : 0 , '6276' : 0 , '1783' : 0 , '4290' : 0 , '5240' : 0 , '2644' : 0 , '6266' : 0 , '3905' : 0 , '4224' : 0 , '4911' : 0 , '4267' : 0 , '7910' : 0 , '5312' : 0 , '3316' : 0 , '4299' : 0 , '3428' : 0 , '3446' : 0 , '3621' : 0 , '2912' : 0 , '1871' : 0 , '5031' : 0 , '3385' : 0 , '3020' : 0 , '8153' : 0 , '5450' : 0 , '4001' : 0 , '2725' : 0 , '2782' : 0 , '4220' : 0 , '5532' : 0 , '7439' : 0 , '5759' : 0 , '5229' : 0 , '5351' : 0 , '1379' : 0 , '3389' : 0 , '2906' : 0 , '5594' : 0 , '4424' : 0 , '3759' : 0 , '5484' : 0 , '2480' : 0 , '2369' : 0 , '3107' : 0 , '554' : 0 , '5364' : 0 , '6889' : 0 , '1731' : 0 , '5489' : 0 , '4390' : 0 , '6989' : 0 , '5933' : 0 , '6562' : 0 , '3584' : 0 , '2787' : 0 , '7028' : 0 , '2405' : 0 , '7989' : 0 , '1435' : 0 , '7874' : 0 , '397' : 0 , '3013' : 0 , '6347' : 0 , '7255' : 0 , '2589' : 0 , '7615' : 0 , '3352' : 0 , '640' : 0 , '1506' : 0 , '749' : 0 , '3132' : 0 , '3112' : 0 , '6302' : 0 , '3514' : 0 , '6965' : 0 , '4579' : 0 , '6634' : 0 , '436' : 0 , '5842' : 0 , '6475' : 0 , '7655' : 0 , '785' : 0 , '6765' : 0 , '2852' : 0 , '7560' : 0 , '5289' : 0 , '3817' : 0 , '5219' : 0 , '146' : 0 , '5020' : 0 , '8129' : 0 , '1495' : 0 , '5196' : 0 , '1359' : 0 , '4690' : 0 , '6505' : 0 , '8034' : 0 , '7305' : 0 , '3546' : 0 , '6979' : 0 , '780' : 0 , '2628' : 0 , '689' : 0 , '2350' : 0 , '6787' : 0 , '3566' : 0 , '5485' : 0 , '65' : 0 , '7039' : 0 , '4608' : 0 , '5531' : 0 , '2078' : 0 , '712' : 0 , '7839' : 0 , '5835' : 0 , '5629' : 0 , '3380' : 0 , '2331' : 0 , '789' : 0 , '7786' : 0 , '1922' : 0 , '7785' : 0 , '4252' : 0 , '5149' : 0 , '112' : 0 , '8077' : 0 , '8025' : 0 , '8049' : 0 , '7799' : 0 , '1511' : 0 , '637' : 0 , '3596' : 0 , '7264' : 0 , '1404' : 0 , '7097' : 0 , '6128' : 0 , '7742' : 0 , '2622' : 0 , '7711' : 0 , '4787' : 0 , '7345' : 0 , '3519' : 0 , '3560' : 0 , '7187' : 0 , '4525' : 0 , '2376' : 0 , '4488' : 0 , '5899' : 0 , '5920' : 0 , '5831' : 0 , '7478' : 0 , '7538' : 0 , '3136' : 0 , '7257' : 0 , '1409' : 0 , '4144' : 0 , '4444' : 0 , '4618' : 0 , '762' : 0 , '5839' : 0 , '7524' : 0 , '1005' : 0 , '2031' : 0 , '8070' : 0 , '2234' : 0 , '1957' : 0 , '3287' : 0 , '900' : 0 , '2343' : 0 , '235' : 0 , '736' : 0 , '6673' : 0 , '7381' : 0 , '2188' : 0 , '2196' : 0 , '6340' : 0 , '34' : 0 , '6212' : 0 , '7831' : 0 , '3698' : 0 , '7586' : 0 , '1239' : 0 , '4531' : 0 , '2632' : 0 , '7358' : 0 , '1' : 0 , '7340' : 0 , '1755' : 0 , '3973' : 0 , '5648' : 0 , '2103' : 0 , '3078' : 0 , '2618' : 0 , '4259' : 0 , '1780' : 0 , '6239' : 0 , '4167' : 0 , '5436' : 0 , '6966' : 0 , '2410' : 0 , '6191' : 0 , '7525' : 0 , '5254' : 0 , '7119' : 0 , '1916' : 0 , '4929' : 0 , '3456' : 0 , '3238' : 0 , '6635' : 0 , '284' : 0 , '1772' : 0 , '6052' : 0 , '1707' : 0 , '2523' : 0 , '1889' : 0 , '4222' : 0 , '2638' : 0 , '5497' : 0 , '8157' : 0 , '2770' : 0 , '5285' : 0 , '498' : 0 , '4294' : 0 , '8089' : 0 , '8174' : 0 , '1893' : 0 , '3465' : 0 , '6296' : 0 , '2192' : 0 , '2841' : 0 , '6774' : 0 , '3861' : 0 , '360' : 0 , '174' : 0 , '4148' : 0 , '2190' : 0 , '5580' : 0 , '7283' : 0 , '4635' : 0 , '1850' : 0 , '6952' : 0 , '3700' : 0 , '1035' : 0 , '1624' : 0 , '904' : 0 , '3966' : 0 , '1513' : 0 , '536' : 0 , '4573' : 0 , '7377' : 0 , '5628' : 0 , '4135' : 0 , '8125' : 0 , '7464' : 0 , '7146' : 0 , '7156' : 0 , '8168' : 0 , '189' : 0 , '5204' : 0 , '7838' : 0 , '2536' : 0 , '2891' : 0 , '3764' : 0 , '3438' : 0 , '8031' : 0 , '7618' : 0 , '851' : 0 , '4030' : 0 , '438' : 0 , '3791' : 0 , '204' : 0 , '7970' : 0 , '6692' : 0 , '7738' : 0 , '2617' : 0 , '246' : 0 , '5086' : 0 , '4959' : 0 , '1796' : 0 , '5703' : 0 , '5960' : 0 , '470' : 0 , '2105' : 0 , '2440' : 0 , '598' : 0 , '5182' : 0 , '1651' : 0 , '3347' : 0 , '2834' : 0 , '7437' : 0 , '3221' : 0 , '5234' : 0 , '1664' : 0 , '153' : 0 , '2893' : 0 , '3467' : 0 , '1210' : 0 , '1690' : 0 , '3743' : 0 , '7113' : 0 , '234' : 0 , '5493' : 0 , '1127' : 0 , '4083' : 0 , '2504' : 0 , '7939' : 0 , '7046' : 0 , '1464' : 0 , '7191' : 0 , '4821' : 0 , '3198' : 0 , '4110' : 0 , '1419' : 0 , '6131' : 0 , '1448' : 0 , '2849' : 0 , '7137' : 0 , '7887' : 0 , '1628' : 0 , '1216' : 0 , '1801' : 0 , '2408' : 0 , '3591' : 0 , '6049' : 0 , '2290' : 0 , '2090' : 0 , '6022' : 0 , '6720' : 0 , '3822' : 0 , '1860' : 0 , '5024' : 0 , '7770' : 0 , '396' : 0 , '1053' : 0 , '1841' : 0 , '8092' : 0 , '4985' : 0 , '6705' : 0 , '2642' : 0 , '3237' : 0 , '5922' : 0 , '7336' : 0 , '6449' : 0 , '1775' : 0 , '5777' : 0 , '7616' : 0 , '3770' : 0 , '8032' : 0 , '3695' : 0 , '2729' : 0 , '1659' : 0 , '7485' : 0 , '5736' : 0 , '375' : 0 , '745' : 0 , '379' : 0 , '5022' : 0 , '3141' : 0 , '2598' : 0 , '8132' : 0 , '1773' : 0 , '1815' : 0 , '4737' : 0 , '5363' : 0 , '6931' : 0 , '2758' : 0 , '6821' : 0 , '3224' : 0 , '7898' : 0 , '4452' : 0 , '224' : 0 , '744' : 0 , '6' : 0 , '2971' : 0 , '4745' : 0 , '2599' : 0 , '3080' : 0 , '6636' : 0 , '5251' : 0 , '4762' : 0 , '3290' : 0 , '2159' : 0 , '5120' : 0 , '7111' : 0 , '6842' : 0 , '7811' : 0 , '1573' : 0 , '2271' : 0 , '6779' : 0 , '3649' : 0 , '7350' : 0 , '2154' : 0 , '7562' : 0 , '8172' : 0 , '7171' : 0 , '6183' : 0 , '465' : 0 , '5827' : 0 , '1970' : 0 , '6639' : 0 , '243' : 0 , '5600' : 0 , '3895' : 0 , '6373' : 0 , '1490' : 0 , '7454' : 0 , '5404' : 0 , '5853' : 0 , '6360' : 0 , '3784' : 0 , '2864' : 0 , '8184' : 0 , '4065' : 0 , '4282' : 0 , '1315' : 0 , '2148' : 0 , '2825' : 0 , '2295' : 0 , '6214' : 0 , '5691' : 0 , '1898' : 0 , '715' : 0 , '5725' : 0 , '454' : 0 , '1529' : 0 , '5146' : 0 , '5601' : 0 , '5832' : 0 , '8085' : 0 , '1182' : 0 , '553' : 0 , '1681' : 0 , '754' : 0 , '7099' : 0 , '4339' : 0 , '6335' : 0 , '8147' : 0 , '3454' : 0 , '4345' : 0 , '7428' : 0 , '4210' : 0 , '3744' : 0 , '4367' : 0 , '4486' : 0 , '7784' : 0 , '1443' : 0 , '1503' : 0 , '2240' : 0 , '1297' : 0 , '1837' : 0 , '5865' : 0 , '426' : 0 , '3351' : 0 , '479' : 0 , '821' : 0 , '5861' : 0 , '3925' : 0 , '3734' : 0 , '6107' : 0 , '592' : 0 , '3515' : 0 , '4701' : 0 , '2673' : 0 , '7398' : 0 , '1266' : 0 , '7566' : 0 , '6648' : 0 , '3063' : 0 , '184' : 0 , '5887' : 0 , '5722' : 0 , '1438' : 0 , '1316' : 0 , '6746' : 0 , '4239' : 0 , '3595' : 0 , '2273' : 0 , '2930' : 0 , '122' : 0 , '2074' : 0 , '3040' : 0 , '2075' : 0 , '743' : 0 , '880' : 0 , '7031' : 0 , '2713' : 0 , '7431' : 0 , '2397' : 0 , '5427' : 0 , '7734' : 0 , '6472' : 0 , '5699' : 0 , '3203' : 0 , '6540' : 0 , '7575' : 0 , '7645' : 0 , '5090' : 0 , '2117' : 0 , '4269' : 0 , '3444' : 0 , '2927' : 0 , '3612' : 0 , '3281' : 0 , '5771' : 0 , '4967' : 0 , '143' : 0 , '6398' : 0 , '6148' : 0 , '4996' : 0 , '2613' : 0 , '8014' : 0 , '2247' : 0 , '6252' : 0 , '339' : 0 , '3552' : 0 , '7919' : 0 , '4260' : 0 , '1516' : 0 , '872' : 0 , '6208' : 0 , '7890' : 0 , '7499' : 0 , '1219' : 0 , '2219' : 0 , '6451' : 0 , '230' : 0 , '2127' : 0 , '6807' : 0 , '5026' : 0 , '6083' : 0 , '7316' : 0 , '771' : 0 , '1424' : 0 , '5223' : 0 , '3364' : 0 , '4866' : 0 , '504' : 0 , '6549' : 0 , '4651' : 0 , '1686' : 0 , '2249' : 0 , '1352' : 0 , '4725' : 0 , '2583' : 0 , '2372' : 0 , '3837' : 0 , '5694' : 0 , '2353' : 0 , '3256' : 0 , '4149' : 0 , '6589' : 0 , '3790' : 0 , '6357' : 0 , '5971' : 0 , '948' : 0 , '2539' : 0 , '4589' : 0 , '891' : 0 , '952' : 0 , '5756' : 0 , '1514' : 0 , '2901' : 0 , '5915' : 0 , '2418' : 0 , '5499' : 0 , '3787' : 0 , '5386' : 0 , '1968' : 0 , '6784' : 0 , '635' : 0 , '7867' : 0 , '957' : 0 , '7886' : 0 , '2862' : 0 , '5806' : 0 , '3016' : 0 , '8091' : 0 , '2072' : 0 , '7716' : 0 , '142' : 0 , '4413' : 0 , '772' : 0 , '2077' : 0 , '971' : 0 , '3741' : 0 , '6798' : 0 , '804' : 0 , '3277' : 0 , '7633' : 0 , '4828' : 0 , '6715' : 0 , '6872' : 0 , '7626' : 0 , '6958' : 0 , '3948' : 0 , '1306' : 0 , '3661' : 0 , '2283' : 0 , '4216' : 0 , '5274' : 0 , '5905' : 0 , '1791' : 0 , '1322' : 0 , '7904' : 0 , '638' : 0 , '5792' : 0 , '4499' : 0 , '793' : 0 , '7133' : 0 , '2532' : 0 , '3883' : 0 , '6780' : 0 , '5821' : 0 , '285' : 0 , '1738' : 0 , '101' : 0 , '1212' : 0 , '198' : 0 , '1810' : 0 , '6036' : 0 , '1767' : 0 , '1723' : 0 , '7026' : 0 , '2292' : 0 , '3158' : 0 , '4075' : 0 , '6486' : 0 , '7921' : 0 , '7835' : 0 , '4078' : 0 , '1309' : 0 , '241' : 0 , '3186' : 0 , '3245' : 0 , '7456' : 0 , '2810' : 0 , '2537' : 0 , '1382' : 0 , '6220' : 0 , '6828' : 0 , '3011' : 0 , '672' : 0 , '1618' : 0 , '4457' : 0 , '3735' : 0 , '1369' : 0 , '4923' : 0 , '5963' : 0 , '4471' : 0 , '3147' : 0 , '2358' : 0 , '3217' : 0 , '4183' : 0 , '3778' : 0 , '8079' : 0 , '5932' : 0 , '1729' : 0 , '6831' : 0 , '6218' : 0 , '4172' : 0 , '7446' : 0 , '7986' : 0 , '4419' : 0 , '1697' : 0 , '3971' : 0 , '213' : 0 , '6898' : 0 , '2998' : 0 , '7363' : 0 , '3124' : 0 , '3942' : 0 , '3367' : 0 , '5658' : 0 , '2892' : 0 , '135' : 0 , '4966' : 0 , '5640' : 0 , '5540' : 0 , '7659' : 0 , '5508' : 0 , '3401' : 0 , '3416' : 0 , '1611' : 0 , '1341' : 0 , '719' : 0 , '109' : 0 , '3463' : 0 , '4323' : 0 , '4742' : 0 , '4750' : 0 , '8141' : 0 , '7247' : 0 , '2608' : 0 , '5248' : 0 , '1302' : 0 , '2698' : 0 , '7277' : 0 , '2458' : 0 , '5133' : 0 , '2197' : 0 , '4076' : 0 , '6525' : 0 , '7344' : 0 , '960' : 0 , '3236' : 0 , '3381' : 0 , '5546' : 0 , '1073' : 0 , '6279' : 0 , '3918' : 0 , '6951' : 0 , '1234' : 0 , '2251' : 0 , '6237' : 0 , '3890' : 0 , '4397' : 0 , '7849' : 0 , '6355' : 0 , '5180' : 0 , '4310' : 0 , '1649' : 0 , '1222' : 0 , '4502' : 0 , '2896' : 0 , '7972' : 0 , '7483' : 0 , '7459' : 0 , '1891' : 0 , '2174' : 0 , '6991' : 0 , '4482' : 0 , '2280' : 0 , '2571' : 0 , '5441' : 0 , '590' : 0 , '3926' : 0 , '4607' : 0 , '8114' : 0 , '3985' : 0 , '377' : 0 , '3543' : 0 , '969' : 0 , '6535' : 0 , '4032' : 0 , '728' : 0 , '6232' : 0 , '1399' : 0 , '7821' : 0 , '6922' : 0 , '650' : 0 , '4991' : 0 , '3125' : 0 , '367' : 0 , '7967' : 0 , '26' : 0 , '1766' : 0 , '1952' : 0 , '6377' : 0 , '8050' : 0 , '83' : 0 , '7845' : 0 , '3250' : 0 , '5808' : 0 , '3285' : 0 , '4277' : 0 , '296' : 0 , '5494' : 0 , '653' : 0 , '5428' : 0 , '5297' : 0 , '1794' : 0 , '6864' : 0 , '655' : 0 , '6835' : 0 , '3531' : 0 , '5860' : 0 , '8010' : 0 , '2425' : 0 , '1823' : 0 , '1410' : 0 , '947' : 0 , '678' : 0 , '2762' : 0 , '1487' : 0 , '3452' : 0 , '3688' : 0 , '3651' : 0 , '39' : 0 , '1594' : 0 , '3305' : 0 , '2549' : 0 , '4982' : 0 , '5913' : 0 , '2689' : 0 , '302' : 0 , '1230' : 0 , '315' : 0 , '8155' : 0 , '4171' : 0 , '4552' : 0 , '596' : 0 , '2544' : 0 , '7025' : 0 , '8040' : 0 , '4522' : 0 , '4939' : 0 , '2330' : 0 , '5299' : 0 , '5677' : 0 , '3863' : 0 , '4017' : 0 , '2109' : 0 , '7666' : 0 , '4574' : 0 , '8000' : 0 , '3977' : 0 , '1144' : 0 , '494' : 0 , '7750' : 0 , '5937' : 0 , '1150' : 0 , '193' : 0 , '2541' : 0 , '2898' : 0 , '1460' : 0 , '3484' : 0 , '3590' : 0 , '7974' : 0 , '5599' : 0 , '2006' : 0 , '2237' : 0 , '6792' : 0 , '4586' : 0 , '1164' : 0 , '3592' : 0 , '6595' : 0 , '4868' : 0 , '7526' : 0 , '1278' : 0 , '2996' : 0 , '6099' : 0 , '1203' : 0 , '4263' : 0 , '7951' : 0 , '2803' : 0 , '7074' : 0 , '138' : 0 , '7652' : 0 , '3218' : 0 , '6020' : 0 , '4165' : 0 , '6205' : 0 , '6734' : 0 , '1064' : 0 , '2878' : 0 , '533' : 0 , '6546' : 0 , '7794' : 0 , '5616' : 0 , '7304' : 0 , '2181' : 0 , '951' : 0 , '5008' : 0 , '926' : 0 , '6959' : 0 , '7743' : 0 , '670' : 0 , '6164' : 0 , '724' : 0 , '2124' : 0 , '7556' : 0 , '6267' : 0 , '6757' : 0 , '5160' : 0 , '4077' : 0 , '651' : 0 , '1848' : 0 , '3418' : 0 , '3745' : 0 , '2795' : 0 , '7153' : 0 , '4336' : 0 , '3453' : 0 , '3264' : 0 , '4869' : 0 , '4485' : 0 , '1196' : 0 , '5661' : 0 , '3834' : 0 , '5045' : 0 , '5584' : 0 , '2276' : 0 , '7844' : 0 , '4103' : 0 , '1197' : 0 , '2381' : 0 , '1969' : 0 , '5996' : 0 , '3210' : 0 , '2225' : 0 , '3420' : 0 , '6453' : 0 , '7513' : 0 , '5567' : 0 , '896' : 0 , '5073' : 0 , '2328' : 0 , '4730' : 0 , '4733' : 0 , '2835' : 0 , '6372' : 0 , '7179' : 0 , '95' : 0 , '4366' : 0 , '4347' : 0 , '1665' : 0 , '2590' : 0 , '5481' : 0 , '1367' : 0 , '1635' : 0 , '1986' : 0 , '5825' : 0 , '4422' : 0 , '5216' : 0 , '4639' : 0 , '661' : 0 , '6082' : 0 , '5849' : 0 , '8011' : 0 , '3827' : 0 , '7035' : 0 , '7104' : 0 , '3582' : 0 , '4517' : 0 , '1116' : 0 , '5076' : 0 , '1596' : 0 , '5480' : 0 , '5281' : 0 , '1384' : 0 , '4202' : 0 , '508' : 0 , '6884' : 0 , '5175' : 0 , '7878' : 0 , '484' : 0 , '7720' : 0 , '7505' : 0 , '2152' : 0 , '506' : 0 , '6801' : 0 , '2847' : 0 , '3319' : 0 , '2822' : 0 , '4073' : 0 , '5097' : 0 , '5233' : 0 , '3464' : 0 , '2189' : 0 , '6988' : 0 , '3350' : 0 , '3268' : 0 , '6096' : 0 , '6374' : 0 , '414' : 0 , '5156' : 0 , '6925' : 0 , '3163' : 0 , '4689' : 0 , '6706' : 0 , '2506' : 0 , '1992' : 0 , '6944' : 0 , '5764' : 0 , '1444' : 0 , '3499' : 0 , '4466' : 0 , '4316' : 0 , '7303' : 0 , '751' : 0 , '753' : 0 , '3359' : 0 , '6181' : 0 , '4255' : 0 , '2899' : 0 , '7245' : 0 , '7438' : 0 , '4599' : 0 , '7963' : 0 , '1048' : 0 , '2757' : 0 , '8148' : 0 , '3114' : 0 , '7663' : 0 , '46' : 0 , '1608' : 0 , '2658' : 0 , '1236' : 0 , '1436' : 0 , '6984' : 0 , '967' : 0 , '382' : 0 , '3368' : 0 , '1605' : 0 , '3427' : 0 , '6133' : 0 , '7017' : 0 , '6119' : 0 , '5214' : 0 , '6806' : 0 , '2984' : 0 , '5038' : 0 , '170' : 0 , '4450' : 0 , '4043' : 0 , '6880' : 0 , '5884' : 0 , '3716' : 0 , '4752' : 0 , '4038' : 0 , '6563' : 0 , '741' : 0 , '4250' : 0 , '4794' : 0 , '2416' : 0 , '7063' : 0 , '4526' : 0 , '5947' : 0 , '917' : 0 , '362' : 0 , '1130' : 0 , '4200' : 0 , '5684' : 0 , '7992' : 0 , '7355' : 0 , '6867' : 0 , '5716' : 0 , '8179' : 0 , '5066' : 0 , '1501' : 0 , '4719' : 0 , '7183' : 0 , '5442' : 0 , '4933' : 0 , '6508' : 0 , '1345' : 0 , '2139' : 0 , '70' : 0 , '6577' : 0 , '7466' : 0 , '1440' : 0 , '4972' : 0 , '750' : 0 , '1030' : 0 , '2341' : 0 , '3410' : 0 , '526' : 0 , '4114' : 0 , '1413' : 0 , '8063' : 0 , '3995' : 0 , '2243' : 0 , '6496' : 0 , '5924' : 0 , '47' : 0 , '6545' : 0 , '6284' : 0 , '696' : 0 , '6235' : 0 , '6405' : 0 , '2149' : 0 , '7676' : 0 , '3557' : 0 , '4037' : 0 , '602' : 0 , '6582' : 0 , '6004' : 0 , '5444' : 0 , '1291' : 0 , '2370' : 0 , '2749' : 0 , '2166' : 0 , '6610' : 0 , '4540' : 0 , '1756' : 0 , '735' : 0 , '4947' : 0 , '5554' : 0 , '5972' : 0 , '7621' : 0 , '3346' : 0 , '7613' : 0 , '1834' : 0 , '5901' : 0 , '1081' : 0 , '4287' : 0 , '5410' : 0 , '6467' : 0 , '6523' : 0 , '4058' : 0 , '402' : 0 , '1670' : 0 , '7818' : 0 , '7027' : 0 , '6920' : 0 , '1311' : 0 , '192' : 0 , '5189' : 0 , '5914' : 0 , '1961' : 0 , '4871' : 0 , '6170' : 0 , '4755' : 0 , '2443' : 0 , '4798' : 0 , '1507' : 0 , '1355' : 0 , '2686' : 0 , '4275' : 0 , '2073' : 0 , '4357' : 0 , '4229' : 0 , '6105' : 0 , '3944' : 0 , '4705' : 0 , '133' : 0 , '7353' : 0 , '3984' : 0 , '6168' : 0 , '4711' : 0 , '841' : 0 , '4556' : 0 , '2743' : 0 , '5638' : 0 , '6573' : 0 , '1014' : 0 , '5023' : 0 , '6679' : 0 , '4842' : 0 , '2194' : 0 , '2342' : 0 , '4003' : 0 , '3419' : 0 , '7644' : 0 , '6390' : 0 , '3062' : 0 , '48' : 0 , '3703' : 0 , '5174' : 0 , '456' : 0 , '7769' : 0 , '77' : 0 , '6971' : 0 , '2659' : 0 , '2000' : 0 , '7816' : 0 , '7690' : 0 , '2364' : 0 , '7443' : 0 , '7196' : 0 , '6935' : 0 , '1085' : 0 , '5636' : 0 , '5295' : 0 , '3338' : 0 , '1364' : 0 , '7190' : 0 , '1344' : 0 , '2946' : 0 , '1863' : 0 , '6005' : 0 , '3761' : 0 , '3253' : 0 , '2120' : 0 , '6785' : 0 , '4477' : 0 , '6488' : 0 , '7442' : 0 , '2914' : 0 , '5110' : 0 , '838' : 0 , '5473' : 0 , '2692' : 0 , '5529' : 0 , '5115' : 0 , '2063' : 0 , '30' : 0 , '2915' : 0 , '3567' : 0 , '1039' : 0 , '2875' : 0 , '2572' : 0 , '2180' : 0 , '2128' : 0 , '6700' : 0 , '1427' : 0 , '1118' : 0 , '6436' : 0 , '134' : 0 , '7623' : 0 , '6452' : 0 , '2631' : 0 , '794' : 0 , '2568' : 0 , '5255' : 0 , '98' : 0 , '3009' : 0 , '3607' : 0 , '7547' : 0 , '6587' : 0 , '5304' : 0 , '2737' : 0 , '158' : 0 , '6519' : 0 , '2966' : 0 , '493' : 0 , '6188' : 0 , '3018' : 0 , '6316' : 0 , '2258' : 0 , '8029' : 0 , '2046' : 0 , '6605' : 0 , '3857' : 0 , '7476' : 0 , '7310' : 0 , '5945' : 0 , '3142' : 0 , '7671' : 0 , '4106' : 0 , '3459' : 0 , '5003' : 0 , '6873' : 0 , '1672' : 0 , '4108' : 0 , '5846' : 0 , '3445' : 0 , '4812' : 0 , '7759' : 0 , '1749' : 0 , '5013' : 0 , '549' : 0 , '2796' : 0 , '5522' : 0 , '1844' : 0 , '7228' : 0 , '1802' : 0 , '1732' : 0 , '7327' : 0 , '2886' : 0 , '866' : 0 , '1286' : 0 , '812' : 0 , '988' : 0 , '6410' : 0 , '7278' : 0 , '3397' : 0 , '4572' : 0 , '1252' : 0 , '365' : 0 , '1221' : 0 , '195' : 0 , '6250' : 0 , '2972' : 0 , '299' : 0 , '6434' : 0 , '7913' : 0 , '4704' : 0 , '959' : 0 , '3868' : 0 , '4091' : 0 , '4756' : 0 , '3322' : 0 , '7172' : 0 , '5871' : 0 , '4113' : 0 , '1520' : 0 , '4257' : 0 , '1193' : 0 , '4318' : 0 , '7662' : 0 , '6077' : 0 , '6450' : 0 , '6093' : 0 , '2640' : 0 , '2287' : 0 , '1851' : 0 , '6011' : 0 , '3392' : 0 , '6018' : 0 , '1694' : 0 , '4050' : 0 , '7851' : 0 , '972' : 0 , '1586' : 0 , '1489' : 0 , '6318' : 0 , '49' : 0 , '4793' : 0 , '5398' : 0 , '6442' : 0 , '6383' : 0 , '7654' : 0 , '6617' : 0 , '6356' : 0 , '5167' : 0 , '42' : 0 , '3478' : 0 , '1643' : 0 , '1797' : 0 , '2943' : 0 , '3670' : 0 , '6229' : 0 , '3073' : 0 , '2975' : 0 , '2528' : 0 , '6625' : 0 , '6280' : 0 , '4841' : 0 , '7043' : 0 , '5659' : 0 , '4688' : 0 , '2265' : 0 , '2193' : 0 , '6506' : 0 , '3019' : 0 , '5054' : 0 , '3096' : 0 , '6195' : 0 , '4735' : 0 , '4796' : 0 , '1392' : 0 , '1058' : 0 , '1533' : 0 , '3603' : 0 , '2651' : 0 , '2106' : 0 , '6414' : 0 , '998' : 0 , '1103' : 0 , '4501' : 0 , '5732' : 0 , '2210' : 0 , '1525' : 0 , '2076' : 0 , '906' : 0 , '4944' : 0 , '3230' : 0 , '1225' : 0 , '2752' : 0 , '630' : 0 , '2756' : 0 , '2401' : 0 , '779' : 0 , '4829' : 0 , '7598' : 0 , '1372' : 0 , '7387' : 0 , '7494' : 0 , '5781' : 0 , '423' : 0 , '4314' : 0 , '1268' : 0 , '4801' : 0 , '1192' : 0 , '1050' : 0 , '4571' : 0 , '1621' : 0 , '2579' : 0 , '7170' : 0 , '4895' : 0 , '3725' : 0 , '7169' : 0 , '6425' : 0 , '1282' : 0 , '3012' : 0 , '5078' : 0 , '372' : 0 , '8071' : 0 , '1457' : 0 , '5758' : 0 , '3255' : 0 , '910' : 0 , '5000' : 0 , '2338' : 0 , '3088' : 0 , '4063' : 0 , '3191' : 0 , '3089' : 0 , '6799' : 0 , '5273' : 0 , '1235' : 0 , '5313' : 0 , '393' : 0 , '7100' : 0 , '5209' : 0 , '788' : 0 , '7424' : 0 , '2098' : 0 , '7393' : 0 , '240' : 0 , '5360' : 0 , '312' : 0 , '374' : 0 , '605' : 0 , '2221' : 0 , '1183' : 0 , '8107' : 0 , '6454' : 0 , '1177' : 0 , '2526' : 0 , '7926' : 0 , '5828' : 0 , '7883' : 0 , '2259' : 0 , '5456' : 0 , '2336' : 0 , '1589' : 0 , '963' : 0 , '7809' : 0 , '4569' : 0 , '7356' : 0 , '110' : 0 , '6002' : 0 , '8082' : 0 , '5745' : 0 , '2685' : 0 , '7436' : 0 , '6069' : 0 , '4839' : 0 , '2939' : 0 , '1739' : 0 , '188' : 0 , '781' : 0 , '6179' : 0 , '2424' : 0 , '6209' : 0 , '262' : 0 , '3212' : 0 , '4567' : 0 , '4507' : 0 , '1279' : 0 , '4027' : 0 , '7828' : 0 , '5988' : 0 , '6054' : 0 , '5141' : 0 , '1509' : 0 , '6978' : 0 , '5514' : 0 , '2491' : 0 , '1412' : 0 , '1862' : 0 , '688' : 0 , '1721' : 0 , '8112' : 0 , '4024' : 0 , '3781' : 0 , '5249' : 0 , '2705' : 0 , '2297' : 0 , '5646' : 0 , '1178' : 0 , '1238' : 0 , '7793' : 0 , '6461' : 0 , '7961' : 0 , '3593' : 0 , '6447' : 0 , '6797' : 0 , '7090' : 0 , '3528' : 0 , '5194' : 0 , '1172' : 0 , '6206' : 0 , '3526' : 0 , '1640' : 0 , '5760' : 0 , '5172' : 0 , '2903' : 0 , '3568' : 0 , '6741' : 0 , '1277' : 0 , '5622' : 0 , '8045' : 0 , '7606' : 0 , '3686' : 0 , '7854' : 0 , '97' : 0 , '5277' : 0 , '2226' : 0 , '3884' : 0 , '7507' : 0 , '5306' : 0 , '8024' : 0 , '1602' : 0 , '3717' : 0 , '7800' : 0 , '7144' : 0 , '6637' : 0 , '759' : 0 , '1733' : 0 , '3777' : 0 , '6654' : 0 , '3930' : 0 , '1184' : 0 , '2041' : 0 , '2183' : 0 , '6659' : 0 , '2186' : 0 , '5462' : 0 , '7375' : 0 , '6480' : 0 , '835' : 0 , '7741' : 0 , '130' : 0 , '306' : 0 , '1174' : 0 , '324' : 0 , '929' : 0 , '7779' : 0 , '1883' : 0 , '7083' : 0 , '3053' : 0 , '6225' : 0 , '7497' : 0 , '4653' : 0 , '5509' : 0 , '5769' : 0 , '2024' : 0 , '6492' : 0 , '5455' : 0 , '1692' : 0 , '6696' : 0 , '6569' : 0 , '4460' : 0 , '7211' : 0 , '4082' : 0 , '4062' : 0 , '888' : 0 , '8126' : 0 , '5195' : 0 , '5244' : 0 , '5571' : 0 , '6687' : 0 , '4052' : 0 , '4433' : 0 , '3318' : 0 , '7194' : 0 , '2615' : 0 , '4559' : 0 , '1207' : 0 , '5056' : 0 , '25' : 0 , '4877' : 0 , '6060' : 0 , '1331' : 0 , '4678' : 0 , '723' : 0 , '3190' : 0 , '3168' : 0 , '7646' : 0 , '2707' : 0 , '3440' : 0 , '4192' : 0 , '2877' : 0 , '7291' : 0 , '7112' : 0 , '3093' : 0 , '6996' : 0 , '2049' : 0 , '6103' : 0 , '3881' : 0 , '6376' : 0 , '886' : 0 , '2535' : 0 , '5288' : 0 , '4437' : 0 , '4495' : 0 , '6307' : 0 , '7219' : 0 , '1246' : 0 , '6908' : 0 , '2667' : 0 , '7125' : 0 , '7270' : 0 , '2719' : 0 , '2452' : 0 , '3562' : 0 , '1768' : 0 , '6677' : 0 , '6982' : 0 , '4875' : 0 , '6039' : 0 , '802' : 0 , '2781' : 0 , '1017' : 0 , '6576' : 0 , '5721' : 0 , '3620' : 0 , '7601' : 0 , '7796' : 0 , '520' : 0 , '1930' : 0 , '7022' : 0 , '3026' : 0 , '3600' : 0 , '1038' : 0 , '5668' : 0 , '7274' : 0 , '675' : 0 , '6568' : 0 , '4990' : 0 , '4792' : 0 , '6010' : 0 , '7735' : 0 , '5270' : 0 , '2681' : 0 , '6000' : 0 , '5263' : 0 , '6708' : 0 , '2662' : 0 , '1314' : 0 , '1972' : 0 , '973' : 0 , '5317' : 0 , '6363' : 0 , '4041' : 0 , '950' : 0 , '7328' : 0 , '8121' : 0 , '304' : 0 , '843' : 0 , '8094' : 0 , '2272' : 0 , '2801' : 0 , '2028' : 0 , '2151' : 0 , '1287' : 0 , '6860' : 0 , '3402' : 0 , '5142' : 0 , '2486' : 0 , '1932' : 0 , '5761' : 0 , '106' : 0 , '3148' : 0 , '6712' : 0 , '5774' : 0 , '5256' : 0 , '4248' : 0 , '1638' : 0 , '2715' : 0 , '1973' : 0 , '2496' : 0 , '194' : 0 , '4462' : 0 , '2708' : 0 , '5344' : 0 , '168' : 0 , '72' : 0 , '7973' : 0 , '3937' : 0 , '6158' : 0 , '2581' : 0 , '1941' : 0 , '4047' : 0 , '2279' : 0 , '4151' : 0 , '6897' : 0 , '5521' : 0 , '3794' : 0 , '563' : 0 , '4465' : 0 , '4578' : 0 , '2871' : 0 , '2889' : 0 , '4157' : 0 , '6647' : 0 , '7862' : 0 , '2404' : 0 , '5005' : 0 , '3' : 0 , '6344' : 0 , '2005' : 0 , '4738' : 0 , '3220' : 0 , '2112' : 0 , '4214' : 0 , '5136' : 0 , '8113' : 0 , '2301' : 0 , '2199' : 0 , '2500' : 0 , '6724' : 0 , '2517' : 0 , '645' : 0 , '5166' : 0 , '4805' : 0 , '3629' : 0 , '1926' : 0 , '2574' : 0 , '3057' : 0 , '5590' : 0 , '5016' : 0 , '7386' : 0 , '5350' : 0 , '22' : 0 , '2293' : 0 , '7379' : 0 , '4774' : 0 , '4541' : 0 , '2937' : 0 , '7048' : 0 , '3267' : 0 , '4860' : 0 , '1897' : 0 , '6111' : 0 , '1951' : 0 , '4604' : 0 , '288' : 0 , '6650' : 0 , '5595' : 0 , '4570' : 0 , '6098' : 0 , '2039' : 0 , '1956' : 0 , '505' : 0 , '4703' : 0 , '1401' : 0 , '1976' : 0 , '6907' : 0 , '4337' : 0 , '1024' : 0 , '845' : 0 , '5615' : 0 , '702' : 0 , '3710' : 0 , '4491' : 0 , '1148' : 0 , '316' : 0 , '2444' : 0 , '4438' : 0 , '280' : 0 , '3878' : 0 , '2596' : 0 , '1967' : 0 , '7876' : 0 , '1508' : 0 , '1274' : 0 , '4830' : 0 , '2709' : 0 , '732' : 0 , '7699' : 0 , '4887' : 0 , '4537' : 0 , '6299' : 0 , '4987' : 0 , '7605' : 0 , '250' : 0 , '108' : 0 , '152' : 0 , '6271' : 0 , '1726' : 0 , '6217' : 0 , '6874' : 0 , '4384' : 0 , '1261' : 0 , '6094' : 0 , '6721' : 0 , '4447' : 0 , '1786' : 0 , '7624' : 0 , '4716' : 0 , '6565' : 0 , '6707' : 0 , '4333' : 0 , '182' : 0 , '3718' : 0 , '1199' : 0 , '3916' : 0 , '2902' : 0 , '1587' : 0 , '7223' : 0 , '6800' : 0 , '2569' : 0 , '805' : 0 , '6084' : 0 , '1140' : 0 , '5100' : 0 , '3859' : 0 , '5862' : 0 , '4105' : 0 , '5959' : 0 , '1055' : 0 , '5094' : 0 , '126' : 0 , '4581' : 0 , '1452' : 0 , '5108' : 0 , '3175' : 0 , '8136' : 0 , '3493' : 0 , '3860' : 0 , '40' : 0 , '6160' : 0 , '4028' : 0 , '6742' : 0 , '162' : 0 , '7197' : 0 , '1813' : 0 , '5380' : 0 , '2978' : 0 , '2551' : 0 , '6710' : 0 , '6394' : 0 , '8074' : 0 , '8180' : 0 , '5118' : 0 , '2807' : 0 , '5891' : 0 , '5728' : 0 , '4758' : 0 , '7548' : 0 , '4180' : 0 , '3275' : 0 , '8060' : 0 , '2960' : 0 , '1462' : 0 , '3417' : 0 , '7116' : 0 , '7192' : 0 , '4227' : 0 , '4066' : 0 , '3174' : 0 , '7578' : 0 , '4551' : 0 , '7321' : 0 , '6499' : 0 , '2950' : 0 , '5063' : 0 , '7826' : 0 , '2051' : 0 , '2270' : 0 , '6682' : 0 , '3731' : 0 , '1142' : 0 , '6811' : 0 , '490' : 0 , '4693' : 0 , '3742' : 0 , '31' : 0 , '1171' : 0 , '8103' : 0 , '7098' : 0 , '6887' : 0 , '5181' : 0 , '935' : 0 , '4441' : 0 , '5265' : 0 , '1515' : 0 , '3395' : 0 , '2114' : 0 , '6818' : 0 , '4769' : 0 , '2576' : 0 , '855' : 0 , '4291' : 0 , '3471' : 0 , '5349' : 0 , '4403' : 0 , '199' : 0 , '7766' : 0 , '2818' : 0 , '5315' : 0 , '3192' : 0 , '7658' : 0 , '1257' : 0 , '5103' : 0 , '5338' : 0 , '4469' : 0 , '7760' : 0 , '6147' : 0 , '2952' : 0 , '2799' : 0 , '6999' : 0 , '7733' : 0 , '6716' : 0 , '7865' : 0 , '4427' : 0 , '5680' : 0 , '873' : 0 , '1557' : 0 , '4772' : 0 , '3487' : 0 , '4584' : 0 , '5242' : 0 , '756' : 0 , '2873' : 0 , '5052' : 0 , '3324' : 0 , '6163' : 0 , '566' : 0 , '5298' : 0 , '6493' : 0 , '1386' : 0 , '1993' : 0 , '5324' : 0 , '6704' : 0 , '1777' : 0 , '5390' : 0 , '8056' : 0 , '5990' : 0 , '2722' : 0 , '7737' : 0 , '2865' : 0 , '4081' : 0 , '461' : 0 , '4154' : 0 , '4715' : 0 , '1852' : 0 , '927' : 0 , '6328' : 0 , '2208' : 0 , '6848' : 0 , '2146' : 0 , '2951' : 0 , '6092' : 0 , '6813' : 0 , '5953' : 0 , '2232' : 0 , '6957' : 0 , '3214' : 0 , '2134' : 0 , '1154' : 0 , '5262' : 0 , '6437' : 0 , '1365' : 0 , '3145' : 0 , '5797' : 0 , '3559' : 0 , '2230' : 0 , '7226' : 0 , '3024' : 0 , '371' : 0 , '666' : 0 , '2837' : 0 , '7057' : 0 , '2505' : 0 , '811' : 0 , '3491' : 0 , '3509' : 0 , '2229' : 0 , '6846' : 0 , '3993' : 0 , '5179' : 0 , '6152' : 0 , '3776' : 0 , '1953' : 0 , '5670' : 0 , '5106' : 0 , '7141' : 0 , '4186' : 0 , '7579' : 0 , '5767' : 0 , '5055' : 0 , '7376' : 0 , '3099' : 0 , '7863' : 0 , '5958' : 0 , '1817' : 0 , '6016' : 0 , '1488' : 0 , '2400' : 0 , '3931' : 0 , '164' : 0 , '5015' : 0 , '599' : 0 , '2216' : 0 , '4814' : 0 , '2079' : 0 , '4587' : 0 , '3475' : 0 , '4125' : 0 , '3561' : 0 , '6278' : 0 , '5407' : 0 , '2060' : 0 , '4055' : 0 , '7338' : 0 , '7859' : 0 , '6458' : 0 , '3501' : 0 , '7692' : 0 , '7677' : 0 , '7467' : 0 , '4166' : 0 , '2717' : 0 , '7866' : 0 , '6890' : 0 , '5041' : 0 , '1901' : 0 , '7764' : 0 , '263' : 0 , '5520' : 0 , '102' : 0 , '4088' : 0 , '7864' : 0 , '7797' : 0 , '619' : 0 , '7227' : 0 , '1962' : 0 , '6875' : 0 , '7214' : 0 , '7832' : 0 , '4976' : 0 , '1598' : 0 , '3108' : 0 , '4818' : 0 , '6681' : 0 , '7840' : 0 , '2093' : 0 , '5637' : 0 , '7118' : 0 , '2099' : 0 , '4881' : 0 , '3070' : 0 , '1086' : 0 , '832' : 0 , '5478' : 0 , '36' : 0 , '5811' : 0 , '8017' : 0 , '3706' : 0 , '2012' : 0 , '6521' : 0 , '5131' : 0 , '7778' : 0 , '6632' : 0 , '6076' : 0 , '1842' : 0 , '6465' : 0 , '3563' : 0 , '6877' : 0 , '726' : 0 , '4430' : 0 , '1918' : 0 , '7204' : 0 , '4243' : 0 , '5036' : 0 , '5653' : 0 , '4563' : 0 , '4432' : 0 , '7540' : 0 , '4053' : 0 , '1666' : 0 , '2264' : 0 , '4978' : 0 , '1603' : 0 , '3106' : 0 , '6726' : 0 , '5889' : 0 , '6768' : 0 , '5069' : 0 , '1347' : 0 , '925' : 0 , '6559' : 0 , '7372' : 0 , '2624' : 0 , '575' : 0 , '5301' : 0 , '5962' : 0 , '3286' : 0 , '3068' : 0 , '1363' : 0 , '7444' : 0 , '6379' : 0 , '6149' : 0 , '4844' : 0 , '3809' : 0 , '4759' : 0 , '1112' : 0 , '172' : 0 , '4423' : 0 , '7218' : 0 , '366' : 0 , '457' : 0 , '5162' : 0 , '4686' : 0 , '3968' : 0 , '6918' : 0 , '1770' : 0 , '7983' : 0 , '6878' : 0 , '4835' : 0 , '6911' : 0 , '5439' : 0 , '449' : 0 , '3127' : 0 , '7391' : 0 , '7261' : 0 , '3037' : 0 , '4293' : 0 , '2412' : 0 , '481' : 0 , '7260' : 0 , '961' : 0 , '6416' : 0 , '499' : 0 , '6305' : 0 , '4676' : 0 , '4464' : 0 , '6407' : 0 , '6044' : 0 , '4358' : 0 , '2307' : 0 , '3241' : 0 , '6230' : 0 , '1758' : 0 , '6551' : 0 , '8013' : 0 , '1473' : 0 , '557' : 0 , '4915' : 0 , '3533' : 0 , '2918' : 0 , '2794' : 0 , '1006' : 0 , '3406' : 0 , '3311' : 0 , '6090' : 0 , '5411' : 0 , '5381' : 0 , '7698' : 0 , '7285' : 0 , '8145' : 0 , '7473' : 0 , '767' : 0 , '2464' : 0 , '4901' : 0 , '5635' : 0 , '1867' : 0 , '4190' : 0 , '5506' : 0 , '4890' : 0 , '2111' : 0 , '2561' : 0 , '7479' : 0 , '2665' : 0 , '3044' : 0 , '354' : 0 , '7160' : 0 , '1703' : 0 , '5967' : 0 , '7213' : 0 , '1336' : 0 , '690' : 0 , '1028' : 0 , '1173' : 0 , '2143' : 0 , '5197' : 0 , '2032' : 0 , '846' : 0 , '3116' : 0 , '4086' : 0 , '3231' : 0 , '1845' : 0 , '2668' : 0 , '716' : 0 , '7661' : 0 , '4247' : 0 , '1455' : 0 , '6929' : 0 , '3871' : 0 , '5663' : 0 , '8120' : 0 , '776' : 0 , '1343' : 0 , '3441' : 0 , '1876' : 0 , '7653' : 0 , '7909' : 0 , '2253' : 0 , '2594' : 0 , '1179' : 0 , '895' : 0 , '5789' : 0 , '7266' : 0 , '583' : 0 , '5906' : 0 , '7341' : 0 , '1015' : 0 , '6378' : 0 , '2354' : 0 , '2858' : 0 , '4039' : 0 , '5530' : 0 , '4974' : 0 , '3421' : 0 , '6326' : 0 , '2612' : 0 , '3092' : 0 , '7095' : 0 , '5719' : 0 , '2556' : 0 , '1262' : 0 , '4170' : 0 , '3915' : 0 , '3847' : 0 , '4467' : 0 , '4279' : 0 , '763' : 0 , '1051' : 0 , '8123' : 0 , '4169' : 0 , '1943' : 0 , '5667' : 0 , '5307' : 0 , '7546' : 0 , '1656' : 0 , '3899' : 0 , '4346' : 0 , '460' : 0 , '7912' : 0 , '3386' : 0 , '5416' : 0 , '5206' : 0 , '4516' : 0 , '3429' : 0 , '5402' : 0 , '2125' : 0 , '4000' : 0 , '5469' : 0 , '5919' : 0 , '7801' : 0 , '4650' : 0 , '2566' : 0 , '2025' : 0 , '163' : 0 , '5042' : 0 , '4920' : 0 , '1549' : 0 , '7916' : 0 , '2379' : 0 , '4536' : 0 , '3928' : 0 , '2657' : 0 , '6338' : 0 , '1936' : 0 , '2884' : 0 , '6236' : 0 , '905' : 0 , '4682' : 0 , '2278' : 0 , '7302' : 0 , '7551' : 0 , '6933' : 0 , '1803' : 0 , '265' : 0 , '3233' : 0 , '4461' : 0 , '321' : 0 , '5872' : 0 , '5124' : 0 , '4015' : 0 , '211' : 0 , '6180' : 0 , '5466' : 0 , '8106' : 0 , '3943' : 0 , '7980' : 0 , '214' : 0 , '7162' : 0 , '3144' : 0 , '6709' : 0 , '3199' : 0 , '7719' : 0 , '2448' : 0 , '1923' : 0 , '8059' : 0 , '2607' : 0 , '3272' : 0 , '3689' : 0 , '6120' : 0 , '3658' : 0 , '7280' : 0 , '6939' : 0 , '4718' : 0 , '4931' : 0 , '1576' : 0 , '5414' : 0 , '2763' : 0 , '7324' : 0 , '3023' : 0 , '3460' : 0 , '4561' : 0 , '6256' : 0 , '1614' : 0 , '3752' : 0 , '5931' : 0 , '955' : 0 , '7668' : 0 , '6353' : 0 , '6962' : 0 , '4101' : 0 , '431' : 0 , '1077' : 0 , '4033' : 0 , '7458' : 0 , '995' : 0 , '55' : 0 , '954' : 0 , '3766' : 0 , '1265' : 0 , '5275' : 0 , '86' : 0 , '3143' : 0 , '4201' : 0 , '572' : 0 , '5047' : 0 , '7457' : 0 , '7298' : 0 , '3820' : 0 , '5385' : 0 , '4957' : 0 , '6145' : 0 , '6691' : 0 , '1189' : 0 , '6468' : 0 , '658' : 0 , '3685' : 0 , '3952' : 0 , '4723' : 0 , '567' : 0 , '4619' : 0 , '2684' : 0 , '2753' : 0 , '5742' : 0 , '1646' : 0 , '6903' : 0 , '1497' : 0 , '902' : 0 , '5505' : 0 , '6630' : 0 , '5347' : 0 , '2044' : 0 , '521' : 0 , '1944' : 0 , '5881' : 0 , '1881' : 0 , '6477' : 0 , '5340' : 0 , '4777' : 0 , '7087' : 0 , '4697' : 0 , '3151' : 0 , '2368' : 0 , '2475' : 0 , '7896' : 0 , '2150' : 0 , '4803' : 0 , '3160' : 0 , '6812' : 0 , '3917' : 0 , '1523' : 0 , '3200' : 0 , '7959' : 0 , '7751' : 0 , '2838' : 0 , '2741' : 0 , '1389' : 0 , '3624' : 0 , '7362' : 0 , '5095' : 0 , '7938' : 0 , '3848' : 0 , '4602' : 0 , '2082' : 0 , '3365' : 0 , '894' : 0 , '6313' : 0 , '5609' : 0 , '1476' : 0 , '5644' : 0 , '4340' : 0 , '1463' : 0 , '1701' : 0 , '5374' : 0 , '580' : 0 , '257' : 0 , '8183' : 0 , '5387' : 0 , '4867' : 0 , '11' : 0 , '5707' : 0 , '2294' : 0 , '7498' : 0 , '3674' : 0 , '4258' : 0 , '3740' : 0 , '4906' : 0 , '1181' : 0 , '5241' : 0 , '6932' : 0 , '2916' : 0 , '7276' : 0 , '7897' : 0 , '6843' : 0 , '2442' : 0 , '1955' : 0 , '4029' : 0 , '820' : 0 , '2209' : 0 , '6439' : 0 , '7892' : 0 , '3598' : 0 , '473' : 0 , '6830' : 0 , '2625' : 0 , '3877' : 0 , '6598' : 0 , '1406' : 0 , '6304' : 0 , '1565' : 0 , '3864' : 0 , '2800' : 0 , '6814' : 0 , '6309' : 0 , '300' : 0 , '2245' : 0 , '445' : 0 , '3599' : 0 , '4802' : 0 , '156' : 0 , '5783' : 0 , '3185' : 0 , '7132' : 0 , '2489' : 0 , '1765' : 0 , '3835' : 0 , '6866' : 0 , '408' : 0 , '6896' : 0 , '611' : 0 , '418' : 0 , '5366' : 0 , '1660' : 0 , '4456' : 0 , '2311' : 0 , '7407' : 0 , '7448' : 0 , '3724' : 0 , '5296' : 0 , '217' : 0 , '8088' : 0 , '2693' : 0 , '3882' : 0 , '1185' : 0 , '3606' : 0 , '3041' : 0 , '5664' : 0 , '4377' : 0 , '2214' : 0 , '8156' : 0 , '7825' : 0 , '2263' : 0 , '6997' : 0 , '1909' : 0 , '3705' : 0 , '5004' : 0 , '1762' : 0 , '7003' : 0 , '7754' : 0 , '6923' : 0 , '4022' : 0 , '3470' : 0 , '103' : 0 , '4892' : 0 , '2917' : 0 , '7033' : 0 , '1999' : 0 , '5192' : 0 , '1429' : 0 , '394' : 0 , '5976' : 0 , '3656' : 0 , '7050' : 0 , '2427' : 0 , '5602' : 0 , '4439' : 0 , '4945' : 0 , '7915' : 0 , '6298' : 0 , '6435' : 0 , '4995' : 0 , '6013' : 0 , '7870' : 0 , '6516' : 0 , '3933' : 0 , '24' : 0 , '3370' : 0 , '4120' : 0 , '1989' : 0 , '7023' : 0 , '5547' : 0 , '2511' : 0 , '8142' : 0 , '7889' : 0 , '4240' : 0 , '7201' : 0 , '892' : 0 , '81' : 0 , '79' : 0 , '765' : 0 , '2392' : 0 , '2246' : 0 , '936' : 0 , '6289' : 0 , '3602' : 0 , '4981' : 0 , '5183' : 0 , '3115' : 0 , '4576' : 0 , '359' : 0 , '787' : 0 , '3540' : 0 , '3628' : 0 , '5342' : 0 , '5065' : 0 , '173' : 0 , '7217' : 0 , '840' : 0 , '415' : 0 , '4234' : 0 , '14' : 0 , '6273' : 0 , '610' : 0 , '6852' : 0 , '4474' : 0 , '6014' : 0 , '7608' : 0 , '160' : 0 , '3919' : 0 , '6623' : 0 , '6566' : 0 , '5983' : 0 , '5311' : 0 , '3869' : 0 , '1979' : 0 , '4415' : 0 , '4956' : 0 , '3739' : 0 , '3709' : 0 , '4698' : 0 , '3447' : 0 , '2953' : 0 , '6166' : 0 , '1662' : 0 , '2302' : 0 , '897' : 0 , '6728' : 0 , '989' : 0 , '4442' : 0 , '5574' : 0 , '4051' : 0 , '3801' : 0 , '6824' : 0 , '7248' : 0 , '2718' : 0 , '2228' : 0 , '7893' : 0 , '5844' : 0 , '6916' : 0 , '5511' : 0 , '409' : 0 , '7752' : 0 , '7082' : 0 , '7940' : 0 , '5545' : 0 , '5320' : 0 , '5829' : 0 , '1752' : 0 , '5225' : 0 , '7148' : 0 , '6269' : 0 , '1814' : 0 , '4494' : 0 , '3668' : 0 , '5019' : 0 , '5823' : 0 , '5371' : 0 , '977' : 0 , '399' : 0 , '1858' : 0 , '1021' : 0 , '2857' : 0 , '4006' : 0 , '581' : 0 , '3873' : 0 , '7088' : 0 , '5729' : 0 , '6317' : 0 , '237' : 0 , '4898' : 0 , '3783' : 0 , '3972' : 0 , '3950' : 0 , '3980' : 0 , '4372' : 0 , '5496' : 0 , '3139' : 0 , '6850' : 0 , '7529' : 0 , '1084' : 0 , '6694' : 0 , '6350' : 0 , '532' : 0 , '6665' : 0 , '7150' : 0 , '5294' : 0 , '2660' : 0 , '6657' : 0 , '4795' : 0 , '3912' : 0 , '8115' : 0 , '2907' : 0 , '3522' : 0 , '7552' : 0 , '4973' : 0 , '6095' : 0 , '5030' : 0 , '4211' : 0 , '4431' : 0 , '319' : 0 , '4402' : 0 , '4454' : 0 , '6764' : 0 , '6539' : 0 , '7177' : 0 , '452' : 0 , '5010' : 0 , '938' : 0 , '7049' : 0 , '2962' : 0 , '2477' : 0 , '7611' : 0 , '7139' : 0 , '5080' : 0 , '2257' : 0 , '5977' : 0 , '6759' : 0 , '2804' : 0 , '2636' : 0 , '3967' : 0 , '5001' : 0 , '3578' : 0 , '1076' : 0 , '1601' : 0 , '2557' : 0 , '7545' : 0 , '3121' : 0 , '8062' : 0 , '7657' : 0 , '4139' : 0 , '4909' : 0 , '588' : 0 , '3005' : 0 , '2089' : 0 , '7928' : 0 , '183' : 0 , '220' : 0 , '7120' : 0 , '3846' : 0 , '104' : 0 , '1481' : 0 , '6947' : 0 , '7359' : 0 , '3356' : 0 , '2727' : 0 , '1045' : 0 , '6155' : 0 , '7351' : 0 , '569' : 0 , '1655' : 0 , '6026' : 0 , '6143' : 0 , '7054' : 0 , '5708' : 0 , '2525' : 0 , '6786' : 0 , '6386' : 0 , '5051' : 0 , '132' : 0 , '3805' : 0 , '3374' : 0 , '155' : 0 , '5129' : 0 , '6667' : 0 , '6863' : 0 , '1408' : 0 , '2683' : 0 , '7954' : 0 , '3247' : 0 , '7093' : 0 , '5333' : 0 , '8002' : 0 , '913' : 0 , '2396' : 0 , '400' : 0 , '2453' : 0 , '7589' : 0 , '7702' : 0 , '4147' : 0 , '3403' : 0 , '1652' : 0 , '2733' : 0 , '3818' : 0 , '685' : 0 , '4674' : 0 , '1422' : 0 , '5907' : 0 , '1290' : 0 , '5185' : 0 , '7709' : 0 , '7667' : 0 , '4908' : 0 , '6242' : 0 , '5565' : 0 , '7493' : 0 , '4546' : 0 , '3489' : 0 , '2554' : 0 , '606' : 0 , '6349' : 0 , '4408' : 0 , '3308' : 0 , '127' : 0 , '1617' : 0 , '1855' : 0 , '7630' : 0 , '4398' : 0 , '810' : 0 , '118' : 0 , '3782' : 0 , '3680' : 0 , '3032' : 0 , '5766' : 0 , '2909' : 0 , '7495' : 0 , '2670' : 0 , '1007' : 0 , '5526' : 0 , '3362' : 0 , '7319' : 0 , '978' : 0 , '3276' : 0 , '1467' : 0 , '1453' : 0 , '711' : 0 , '8027' : 0 , '2490' : 0 , '8023' : 0 , '994' : 0 , '2761' : 0 , '7718' : 0 , '6135' : 0 , '907' : 0 , '1861' : 0 , '704' : 0 , '561' : 0 , '4529' : 0 , '2643' : 0 , '6913' : 0 , '3184' : 0 , '3393' : 0 , '3248' : 0 , '7354' : 0 , '6987' : 0 , '2890' : 0 , '639' : 0 , '4706' : 0 , '4044' : 0 , '7675' : 0 , '1129' : 0 , '1114' : 0 , '281' : 0 , '4610' : 0 , '2488' : 0 , '5873' : 0 , '6008' : 0 , '1090' : 0 , '3989' : 0 , '6531' : 0 , '3994' : 0 , '5886' : 0 , '6261' : 0 , '7325' : 0 , '8004' : 0 , '266' : 0 , '6043' : 0 , '2457' : 0 , '5361' : 0 , '5211' : 0 , '830' : 0 , '1704' : 0 , '7929' : 0 , '4487' : 0 , '5406' : 0 , '2828' : 0 , '6847' : 0 , '7949' : 0 , '5715' : 0 , '2414' : 0 , '3046' : 0 , '5477' : 0 , '310' : 0 , '1195' : 0 , '4596' : 0 , '5309' : 0 , '4241' : 0 , '2788' : 0 , '1637' : 0 , '3829' : 0 , '4726' : 0 , '6599' : 0 , '833' : 0 , '7462' : 0 , '625' : 0 , '5239' : 0 , '5021' : 0 , '3167' : 0 , '1117' : 0 , '2573' : 0 , '4667' : 0 , '5420' : 0 , '5951' : 0 , '3443' : 0 , '1108' : 0 , '2824' : 0 , '8039' : 0 , '5305' : 0 , '2979' : 0 , '303' : 0 , '7371' : 0 , '614' : 0 , '5903' : 0 , '5840' : 0 , '7130' : 0 , '7869' : 0 , '7945' : 0 , '1678' : 0 , '7881' : 0 , '4219' : 0 , '2356' : 0 , '3800' : 0 , '2498' : 0 , '6976' : 0 , '5855' : 0 , '6078' : 0 , '2138' : 0 , '1107' : 0 , '6046' : 0 , '4919' : 0 , '7174' : 0 , '8109' : 0 , '6738' : 0 , '3527' : 0 , '7081' : 0 , '7944' : 0 , '293' : 0 , '1806' : 0 , '73' : 0 , '6869' : 0 , '5541' : 0 , '4943' : 0 , '5948' : 0 , '2462' : 0 , '7053' : 0 , '3344' : 0 , '368' : 0 , '6528' : 0 , '3666' : 0 , '2121' : 0 , '5940' : 0 , '4853' : 0 , '4680' : 0 , '6520' : 0 , '2619' : 0 , '6556' : 0 , '7106' : 0 , '4178' : 0 , '1872' : 0 , '3485' : 0 , '3206' : 0 , '1591' : 0 , '1633' : 0 , '6330' : 0 , '6113' : 0 , '203' : 0 , '3510' : 0 , '1431' : 0 , '7058' : 0 , '1303' : 0 , '7056' : 0 , '8058' : 0 , '6342' : 0 , '6607' : 0 , '7383' : 0 , '412' : 0 , '305' : 0 , '1784' : 0 , '3799' : 0 , '5698' : 0 , '7284' : 0 , '3327' : 0 , '2739' : 0 , '3307' : 0 , '6622' : 0 , '89' : 0 , '6470' : 0 , '7807' : 0 , '7721' : 0 , '1669' : 0 , '6259' : 0 , '2894' : 0 , '416' : 0 , '6731' : 0 , '3085' : 0 , '223' : 0 , '6028' : 0 , '4527' : 0 , '5009' : 0 , '5151' : 0 , '381' : 0 , '6532' : 0 , '5757' : 0 , '4223' : 0 , '4782' : 0 , '1417' : 0 , '2582' : 0 , '3721' : 0 , '1191' : 0 , '7269' : 0 , '6176' : 0 , '6431' : 0 , '2340' : 0 , '8046' : 0 , '2839' : 0 , '981' : 0 , '3982' : 0 , '1057' : 0 , '2220' : 0 , '4819' : 0 , '594' : 0 , '398' : 0 , '4993' : 0 , '6747' : 0 , '6336' : 0 , '2018' : 0 , '5147' : 0 , '8173' : 0 , '4845' : 0 , '1350' : 0 , '6564' : 0 , '7482' : 0 , '1342' : 0 , '3637' : 0 , '6443' : 0 , '2780' : 0 , '7790' : 0 , '6723' : 0 , '6891' : 0 , '3627' : 0 , '4644' : 0 , '3841' : 0 , '6658' : 0 , '3843' : 0 , '1519' : 0 , '1027' : 0 , '817' : 0 , '6762' : 0 , '2466' : 0 , '5697' : 0 , '7352' : 0 , '3858' : 0 , '2772' : 0 , '446' : 0 , '290' : 0 , '7780' : 0 , '1124' : 0 , '4791' : 0 , '6199' : 0 , '8119' : 0 , '7165' : 0 , '1746' : 0 , '341' : 0 , '5768' : 0 , '463' : 0 , '3313' : 0 , '4646' : 0 , '6224' : 0 , '3866' : 0 , '5626' : 0 , '3906' : 0 , '7347' : 0 , '5382' : 0 , '4184' : 0 , '1396' : 0 , '6856' : 0 , '2874' : 0 , '6507' : 0 , '2694' : 0 , '773' : 0 , '7637' : 0 , '4677' : 0 , '4448' : 0 , '6037' : 0 , '8006' : 0 , '6150' : 0 , '1318' : 0 , '1627' : 0 , '1832' : 0 , '6612' : 0 , '1218' : 0 , '3400' : 0 , '1994' : 0 , '7' : 0 , '1270' : 0 , '5287' : 0 , '1065' : 0 , '210' : 0 , '6104' : 0 , '7877' : 0 , '6040' : 0 , '1237' : 0 , '4185' : 0 , '1166' : 0 , '1249' : 0 , '6241' : 0 , '4312' : 0 , '7364' : 0 , '6254' : 0 , '6055' : 0 , '1256' : 0 , '870' : 0 , '6341' : 0 , '4949' : 0 , '2367' : 0 , '7853' : 0 , '8171' : 0 , '5034' : 0 , '6945' : 0 , '643' : 0 , '232' : 0 , '6137' : 0 , '2004' : 0 , '497' : 0 , '628' : 0 , '4510' : 0 , '5969' : 0 , '7122' : 0 , '345' : 0 , '7329' : 0 , '7013' : 0 , '6246' : 0 , '273' : 0 , '7059' : 0 , '3990' : 0 , '2019' : 0 , '1091' : 0 , '2126' : 0 , '7222' : 0 , '2957' : 0 , '1622' : 0 , '6575' : 0 , '3414' : 0 , '6167' : 0 , '2992' : 0 , '4213' : 0 , '7157' : 0 , '2696' : 0 , '1153' : 0 , '7501' : 0 , '5938' : 0 , '6975' : 0 , '535' : 0 , '331' : 0 , '4300' : 0 , '181' : 0 , '1560' : 0 , '5695' : 0 , '7701' : 0 , '1527' : 0 , '4624' : 0 , '4434' : 0 , '8005' : 0 , '3789' : 0 , '5709' : 0 , '3120' : 0 , '2483' : 0 , '5964' : 0 , '928' : 0 , '7349' : 0 , '1711' : 0 , '2035' : 0 , '8098' : 0 , '7084' : 0 , '5323' : 0 , '6346' : 0 , '3140' : 0 , '1764' : 0 , '3007' : 0 , '2113' : 0 , '6272' : 0 , '5857' : 0 , '2767' : 0 , '1879' : 0 , '3490' : 0 , '3812' : 0 , '1550' : 0 , '4306' : 0 , '3825' : 0 , '2542' : 0 , '167' : 0 , '623' : 0 , '7335' : 0 , '3076' : 0 , '4640' : 0 , '7389' : 0 , '7038' : 0 , '2185' : 0 , '4948' : 0 , '4643' : 0 , '6574' : 0 , '4177' : 0 , '5793' : 0 , '7539' : 0 , '7166' : 0 , '3391' : 0 , '7066' : 0 , '7933' : 0 , '4810' : 0 , '1138' : 0 , '7665' : 0 , '4685' : 0 , '6177' : 0 , '662' : 0 , '7791' : 0 , '7014' : 0 , '1298' : 0 , '4206' : 0 , '3774' : 0 , '5904' : 0 , '2647' : 0 , '3875' : 0 , '3530' : 0 , '7154' : 0 , '4684' : 0 , '2519' : 0 , '8178' : 0 , '7775' : 0 , '4928' : 0 , '7390' : 0 , '52' : 0 , '3935' : 0 , '3034' : 0 , '5634' : 0 , '1056' : 0 , '3532' : 0 , '1920' : 0 , '4311' : 0 , '1446' : 0 , '4627' : 0 , '7723' : 0 , '5560' : 0 , '6286' : 0 , '6859' : 0 , '2459' : 0 , '7956' : 0 , '5939' : 0 , '770' : 0 , '297' : 0 , '4160' : 0 , '933' : 0 , '5550' : 0 , '4671' : 0 , '2784' : 0 , '6948' : 0 , '7367' : 0 , '6495' : 0 , '4116' : 0 , '677' : 0 , '6663' : 0 , '3542' : 0 , '2371' : 0 , '6512' : 0 , '4786' : 0 , '1313' : 0 , '4365' : 0 , '734' : 0 , '2474' : 0 , '2482' : 0 , '2043' : 0 , '1875' : 0 , '4064' : 0 , '1334' : 0 , '2056' : 0 , '3550' : 0 , '2318' : 0 , '1223' : 0 , '5910' : 0 , '2774' : 0 , '5975' : 0 , '1242' : 0 , '806' : 0 , '4399' : 0 , '1170' : 0 , '5992' : 0 , '664' : 0 , '5353' : 0 , '1613' : 0 , '5238' : 0 , '5257' : 0 , '7296' : 0 , '1597' : 0 , '949' : 0 , '3373' : 0 , '4221' : 0 , '5651' : 0 , '7221' : 0 , '4059' : 0 , '1719' : 0 , '3802' : 0 , '4582' : 0 , '2769' : 0 , '6497' : 0 , '863' : 0 , '107' : 0 , '3329' : 0 , '6685' : 0 , '2224' : 0 , '965' : 0 , '854' : 0 , '2047' : 0 , '4896' : 0 , '2255' : 0 , '4378' : 0 , '7650' : 0 , '5098' : 0 , '2282' : 0 , '2652' : 0 , '424' : 0 , '7346' : 0 , '387' : 0 , '439' : 0 , '5292' : 0 , '6701' : 0 , '6796' : 0 , '5867' : 0 , '1251' : 0 , '4633' : 0 , '6773' : 0 , '2538' : 0 , '1570' : 0 , '2924' : 0 , '3042' : 0 , '4664' : 0 , '703' : 0 , '4122' : 0 , '7660' : 0 , '1036' : 0 , '912' : 0 , '4326' : 0 , '3282' : 0 , '3045' : 0 , '5883' : 0 , '3104' : 0 , '5413' : 0 , '5614' : 0 , '2700' : 0 , '147' : 0 , '1853' : 0 , '5449' : 0 , '2509' : 0 , '2764' : 0 , '527' : 0 , '483' : 0 , '5205' : 0 , '2633' : 0 , '4130' : 0 , '5685' : 0 , '4209' : 0 , '7948' : 0 , '6142' : 0 , '5464' : 0 , '4597' : 0 , '3479' : 0 , '742' : 0 , '1244' : 0 , '5848' : 0 , '8015' : 0 , '1938' : 0 , '919' : 0 , '1648' : 0 , '7301' : 0 , '4815' : 0 , '2348' : 0 , '6555' : 0 , '844' : 0 , '1283' : 0 , '2606' : 0 , '5610' : 0 , '7178' : 0 , '1317' : 0 , '3219' : 0 , '2967' : 0 , '57' : 0 , '3117' : 0 , '6473' : 0 , '6371' : 0 , '4512' : 0 , '6894' : 0 , '1296' : 0 , '5283' : 0 , '680' : 0 , '417' : 0 , '4960' : 0 , '6640' : 0 , '7415' : 0 , '1709' : 0 , '2802' : 0 , '1632' : 0 , '3331' : 0 , '3061' : 0 , '5061' : 0 , '3574' : 0 , '7265' : 0 , '4292' : 0 , '6993' : 0 , '4134' : 0 , '2423' : 0 , '4010' : 0 , '20' : 0 , '7079' : 0 , '7520' : 0 , '3058' : 0 , '4386' : 0 , '1330' : 0 , '8016' : 0 , '4799' : 0 , '6240' : 0 , '7580' : 0 , '4080' : 0 , '3430' : 0 , '3579' : 0 , '5991' : 0 , '435' : 0 , '1337' : 0 , '531' : 0 , '1044' : 0 , '2792' : 0 , '23' : 0 , '6471' : 0 , '2905' : 0 , '5748' : 0 , '2958' : 0 , '6656' : 0 , '1599' : 0 , '1260' : 0 , '7670' : 0 , '474' : 0 , '6339' : 0 , '3707' : 0 , '4187' : 0 , '6579' : 0 , '2869' : 0 , '2629' : 0 , '175' : 0 , '3986' : 0 , '2017' : 0 , '4409' : 0 , '4093' : 0 , '3585' : 0 , '7447' : 0 , '3321' : 0 , '8036' : 0 , '1305' : 0 , '7268' : 0 , '6331' : 0 , '1300' : 0 , '3396' : 0 , '5187' : 0 , '6954' : 0 , '298' : 0 , '8073' : 0 , '7282' : 0 , '3003' : 0 , '6319' : 0 , '6294' : 0 , '6653' : 0 , '3828' : 0 , '2254' : 0 , '3513' : 0 , '4575' : 0 , '5572' : 0 , '5753' : 0 , '5675' : 0 , '5576' : 0 , '1272' : 0 , '5512' : 0 , '898' : 0 , '3226' : 0 , '3369' : 0 , '4744' : 0 , '1620' : 0 , '937' : 0 , '6810' : 0 , '6402' : 0 , '6146' : 0 , '7368' : 0 , '6772' : 0 , '5018' : 0 , '6124' : 0 , '2430' : 0 , '5740' : 0 , '2614' : 0 , '7900' : 0 , '7124' : 0 , '887' : 0 , '3921' : 0 , '2518' : 0 , '2001' : 0 , '570' : 0 , '4329' : 0 , '378' : 0 , '6045' : 0 , '17' : 0 , '4768' : 0 , '3932' : 0 , '1653' : 0 , '4011' : 0 , '6924' : 0 , '5723' : 0 , '7429' : 0 , '1877' : 0 , '1047' : 0 , '4566' : 0 , '4060' : 0 , '428' : 0 , '8143' : 0 , '5425' : 0 , '6315' : 0 , '796' : 0 , '63' : 0 , '3648' : 0 , '5970' : 0 , '2172' : 0 , '946' : 0 , '7121' : 0 , '7686' : 0 , '7858' : 0 , '746' : 0 , '7694' : 0 , '1747' : 0 , '3746' : 0 , '2357' : 0 , '923' : 0 , '432' : 0 , '3031' : 0 , '3474' : 0 , '5816' : 0 , '3188' : 0 , '88' : 0 , '5852' : 0 , '1046' : 0 , '587' : 0 , '6592' : 0 , '982' : 0 , '2312' : 0 , '4865' : 0 , '3751' : 0 , '6459' : 0 , '2135' : 0 , '5379' : 0 , '5822' : 0 , '5346' : 0 , '7062' : 0 , '4660' : 0 , '2384' : 0 , '3539' : 0 , '5252' : 0 , '66' : 0 , '3353' : 0 , '2346' : 0 , '6438' : 0 , '6494' : 0 , '5236' : 0 , '3409' : 0 , '4143' : 0 , '6482' : 0 , '7414' : 0 , '8108' : 0 , '5735' : 0 , '6541' : 0 , '4295' : 0 , '1248' : 0 , '7309' : 0 , '6314' : 0 , '633' : 0 , '4320' : 0 , '4709' : 0 , '1161' : 0 , '6588' : 0 , '7330' : 0 , '3581' : 0 , '2169' : 0 , '3573' : 0 , '4035' : 0 , '4940' : 0 , '3586' : 0 , '6182' : 0 , '7565' : 0 , '5978' : 0 , '6840' : 0 , '2171' : 0 , '6839' : 0 , '5202' : 0 , '2207' : 0 , '8137' : 0 , '7590' : 0 , '7045' : 0 , '4368' : 0 , '3468' : 0 , '3333' : 0 , '5890' : 0 , '7827' : 0 , '6288' : 0 , '1546' : 0 , '7127' : 0 , '2065' : 0 , '6661' : 0 , '1034' : 0 , '7069' : 0 , '6009' : 0 , '2374' : 0 , '4203' : 0 , '4863' : 0 , '6395' : 0 , '4622' : 0 , '3293' : 0 , '6025' : 0 , '4265' : 0 , '2160' : 0 , '2842' : 0 , '7409' : 0 , '6173' : 0 , '4288' : 0 , '3021' : 0 , '5435' : 0 , '2848' : 0 , '2173' : 0 , '2866' : 0 , '3330' : 0 , '4391' : 0 , '6938' : 0 , '5542' : 0 , '231' : 0 , '4136' : 0 , '2202' : 0 , '5232' : 0 , '5438' : 0 , '6321' : 0 , '2040' : 0 , '632' : 0 , '6311' : 0 , '4922' : 0 , '2033' : 0 , '5081' : 0 , '5989' : 0 , '5809' : 0 , '5510' : 0 , '4872' : 0 , '7299' : 0 , '3119' : 0 , '376' : 0 , '8076' : 0 , '3363' : 0 , '1049' : 0 , '1821' : 0 , '5585' : 0 , '59' : 0 , '8149' : 0 , '2986' : 0 , '1466' : 0 , '5598' : 0 , '1088' : 0 , '3537' : 0 , '7399' : 0 , '1708' : 0 , '564' : 0 , '6603' : 0 , '2945' : 0 , '7681' : 0 , '7984' : 0 , '390' : 0 , '1018' : 0 , '260' : 0 , '1824' : 0 , '3110' : 0 , '2334' : 0 , '4168' : 0 , '8110' : 0 , '3970' : 0 , '6771' : 0 , '5591' : 0 , '353' : 0 , '3336' : 0 , '5747' : 0 , '4242' : 0 , '289' : 0 , '4497' : 0 , '6059' : 0 , '7400' : 0 , '6364' : 0 , '5207' : 0 , '5007' : 0 , '7258' : 0 , '7117' : 0 , '2785' : 0 , '5739' : 0 , '5154' : 0 , '80' : 0 , '33' : 0 , '1001' : 0 , '5627' : 0 , '7687' : 0 , '864' : 0 , '3936' : 0 , '5291' : 0 , '6126' : 0 , '3332' : 0 , '7834' : 0 , '1874' : 0 , '7373' : 0 , '6727' : 0 , '2132' : 0 , '1351' : 0 , '2814' : 0 , '7726' : 0 , '6175' : 0 , '6249' : 0 , '7609' : 0 , '7238' : 0 , '5581' : 0 , '5885' : 0 , '37' : 0 , '6109' : 0 , '2450' : 0 , '5782' : 0 , '5934' : 0 , '7472' : 0 , '4846' : 0 , '3458' : 0 , '7746' : 0 , '4988' : 0 , '3251' : 0 , '5803' : 0 , '5918' : 0 , '2882' : 0 , '3814' : 0 , '7167' : 0 , '4480' : 0 , '7920' : 0 , '443' : 0 , '4459' : 0 , '4542' : 0 , '4153' : 0 , '4764' : 0 , '3503' : 0 , '874' : 0 , '5341' : 0 , '3613' : 0 , '7163' : 0 , '90' : 0 , '121' : 0 , '1493' : 0 , '5577' : 0 , '6851' : 0 , '5228' : 0 , '6295' : 0 , '3292' : 0 , '1187' : 0 , '6895' : 0 , '5433' : 0 , '2759' : 0 , '6283' : 0 , '420' : 0 , '5399' : 0 , '1121' : 0 , '3349' : 0 , '6300' : 0 , '555' : 0 , '5127' : 0 , '5630' : 0 , '2023' : 0 , '5384' : 0 , '3098' : 0 , '2387' : 0 , '722' : 0 , '4405' : 0 , '730' : 0 , '1890' : 0 , '61' : 0 , '2701' : 0 , '6504' : 0 , '657' : 0 , '139' : 0 , '6883' : 0 , '1059' : 0 , '4111' : 0 , '5067' : 0 , '5993' : 0 , '2983' : 0 , '7725' : 0 , '7331' : 0 , '2513' : 0 , '1134' : 0 , '383' : 0 , '5070' : 0 , '6432' : 0 , '603' : 0 , '4692' : 0 , '5669' : 0 , '7846' : 0 , '7242' : 0 , '295' : 0 , '5649' : 0 , '2116' : 0 , '5957' : 0 , '1293' : 0 , '3755' : 0 , '1387' : 0 , '2592' : 0 , '4199' : 0 , '7604' : 0 , '7410' : 0 , '609' : 0 , '1512' : 0 , '6021' : 0 , '6533' : 0 , '1416' : 0 , '2034' : 0 , '2656' : 0 , '3760' : 0 , '5981' : 0 , '6776' : 0 , '480' : 0 , '2429' : 0 , '2451' : 0 , '1917' : 0 , '3159' : 0 , '6211' : 0 , '4538' : 0 , '7640' : 0 , '7237' : 0 , '7768' : 0 , '1008' : 0 , '4613' : 0 , '5944' : 0 , '4236' : 0 , '4322' : 0 , '5603' : 0 , '687' : 0 , '2071' : 0 , '4785' : 0 , '1859' : 0 , '4916' : 0 , '346' : 0 , '6584' : 0 , '1101' : 0 , '5579' : 0 , '7936' : 0 , '6281' : 0 , '7776' : 0 , '1009' : 0 , '7334' : 0 , '6479' : 0 , '884' : 0 , '4355' : 0 , '3862' : 0 , '3796' : 0 , '5463' : 0 , '4158' : 0 , '7636' : 0 , '5231' : 0 , '1374' : 0 , '2167' : 0 , '5088' : 0 , '3850' : 0 , '2179' : 0 , '51' : 0 , '5916' : 0 , '6927' : 0 , '7337' : 0 , '7757' : 0 , '3640' : 0 , '7693' : 0 , '7868' : 0 , '6600' : 0 , '278' : 0 , '6855' : 0 , '4092' : 0 , '1990' : 0 , '3911' : 0 , '1280' : 0 , '6641' : 0 , '2639' : 0 , '4776' : 0 , '2627' : 0 , '4181' : 0 , '2141' : 0 , '6171' : 0 , '7622' : 0 , '3170' : 0 , '1500' : 0 , '924' : 0 , '2925' : 0 , '2515' : 0 , '2244' : 0 , '2316' : 0 , '1808' : 0 , '2184' : 0 , '1714' : 0 , '1988' : 0 , '4440' : 0 , '3732' : 0 , '4453' : 0 , '5033' : 0 , '2815' : 0 , '7434' : 0 , '5339' : 0 , '968' : 0 , '2061' : 0 , '836' : 0 , '642' : 0 , '6430' : 0 , '4087' : 0 , '727' : 0 , '4069' : 0 , '7418' : 0 , '1069' : 0 , '7914' : 0 , '7246' : 0 , '4838' : 0 , '7988' : 0 , '2724' : 0 , '7704' : 0 , '4813' : 0 , '6329' : 0 , '7230' : 0 , '3334' : 0 , '2326' : 0 , '5785' : 0 , '4743' : 0 , '837' : 0 , '4335' : 0 , '6291' : 0 , '3673' : 0 , '1609' : 0 , '5749' : 0 , '1657' : 0 , '7034' : 0 , '3384' : 0 , '4555' : 0 , '2679' : 0 , '3323' : 0 , '6905' : 0 , '5568' : 0 , '3439' : 0 , '5780' : 0 , '911' : 0 , '823' : 0 , '292' : 0 , '7385' : 0 , '818' : 0 , '2920' : 0 , '2820' : 0 , '2415' : 0 , '5564' : 0 , '5578' : 0 , '5880' : 0 , '7051' : 0 , '7982' : 0 , '5517' : 0 , '6514' : 0 , '5159' : 0 , '6703' : 0 , '4765' : 0 , '1559' : 0 , '6189' : 0 , '1025' : 0 , '7577' : 0 , '4475' : 0 , '4761' : 0 , '4141' : 0 , '2133' : 0 , '2198' : 0 , '2476' : 0 , '7287' : 0 , '7271' : 0 , '1125' : 0 , '2003' : 0 , '485' : 0 , '3002' : 0 , '406' : 0 , '8007' : 0 , '4514' : 0 , '4937' : 0 , '6400' : 0 , '1830' : 0 , '6474' : 0 , '7787' : 0 , '4565' : 0 , '5639' : 0 , '7943' : 0 , '2524' : 0 , '7672' : 0 , '3991' : 0 , '4191' : 0 , '4775' : 0 , '7440' : 0 , '3524' : 0 , '4388' : 0 , '1126' : 0 , '1167' : 0 , '2305' : 0 , '7931' : 0 , '5079' : 0 , '2623' : 0 , '491' : 0 , '646' : 0 , '4971' : 0 , '3804' : 0 , '3451' : 0 , '3534' : 0 , '7649' : 0 , '2057' : 0 , '4280' : 0 , '4407' : 0 , '4118' : 0 , '3965' : 0 , '249' : 0 , '3538' : 0 , '6031' : 0 , '5642' : 0 , '276' : 0 , '4702' : 0 , '2570' : 0 , '3216' : 0 , '4612' : 0 , '3618' : 0 , '7977' : 0 , '1590' : 0 , '7168' : 0 , '1679' : 0 , '6172' : 0 , '4673' : 0 , '4630' : 0 , '4061' : 0 , '1037' : 0 , '4150' : 0 , '2999' : 0 , '2976' : 0 , '3887' : 0 , '6387' : 0 , '7123' : 0 , '824' : 0 , '4036' : 0 , '7643' : 0 , '3754' : 0 , '990' : 0 , '4731' : 0 , '1483' : 0 , '1075' : 0 , '1469' : 0 , '694' : 0 , '7712' : 0 , '3957' : 0 , '1032' : 0 , '5391' : 0 , '2201' : 0 , '1819' : 0 , '7695' : 0 , '7369' : 0 , '6917' : 0 , '5815' : 0 , '326' : 0 , '1031' : 0 , '7492' : 0 , '4625' : 0 , '388' : 0 , '358' : 0 , '7253' : 0 , '1020' : 0 , '1465' : 0 , '3195' : 0 , '3339' : 0 , '1809' : 0 , '2309' : 0 , '6433' : 0 , '4070' : 0 , '140' : 0 , '2973' : 0 , '3601' : 0 , '1868' : 0 , '5743' : 0 , '3405' : 0 , '7453' : 0 , '2388' : 0 , '8175' : 0 , '4124' : 0 , '5321' : 0 , '5279' : 0 , '4350' : 0 , '1911' : 0 , '6024' : 0 , '5882' : 0 , '2110' : 0 , '6161' : 0 , '4763' : 0 , '2751' : 0 , '6550' : 0 , '3222' : 0 , '5246' : 0 , '3006' : 0 , '956' : 0 , '4508' : 0 , '2933' : 0 , '6537' : 0 , '2546' : 0 , '3472' : 0 , '2936' : 0 , '2471' : 0 , '7833' : 0 , '2934' : 0 , '2921' : 0 , '4364' : 0 , '3254' : 0 , '7971' : 0 , '318' : 0 , '4728' : 0 , '6910' : 0 , '2593' : 0 , '7625' : 0 , '691' : 0 , '3279' : 0 , '7370' : 0 , '5795' : 0 , '684' : 0 , '453' : 0 , '6075' : 0 , '6803' : 0 , '2081' : 0 , '2688' : 0 , '3050' : 0 , '7696' : 0 , '2586' : 0 , '99' : 0 , '1378' : 0 , '502' : 0 , '343' : 0 , '538' : 0 , '6980' : 0 , '3551' : 0 , '517' : 0 , '5426' : 0 , '1937' : 0 , '8190' : 0 , '19' : 0 , '6365' : 0 , '616' : 0 , '1333' : 0 , '3521' : 0 , '3340' : 0 , '2564' : 0 , '2993' : 0 , '2507' : 0 , '7523' : 0 , '373' : 0 , '4554' : 0 , '7052' : 0 , '4018' : 0 , '6646' : 0 , '6264' : 0 , '3683' : 0 , '1247' : 0 , '4936' : 0 , '253' : 0 , '7535' : 0 , '6629' : 0 , '6937' : 0 , '2155' : 0 , '2175' : 0 , '7981' : 0 , '5328' : 0 , '2267' : 0 , '10' : 0 , '4321' : 0 , '3071' : 0 , '6369' : 0 , '7004' : 0 , '7641' : 0 , '945' : 0 , '6608' : 0 , '7688' : 0 , '556' : 0 , '2284' : 0 , '2447' : 0 , '4328' : 0 , '4208' : 0 , '5927' : 0 , '5006' : 0 , '7463' : 0 , '6050' : 0 , '7252' : 0 , '7161' : 0 , '2361' : 0 , '6530' : 0 , '5527' : 0 , '1354' : 0 , '934' : 0 , '853' : 0 , '3838' : 0 , '38' : 0 , '2261' : 0 , '6686' : 0 , '7996' : 0 , '2227' : 0 , '488' : 0 , '411' : 0 , '3090' : 0 , '3269' : 0 , '4117' : 0 , '8012' : 0 , '2591' : 0 , '4681' : 0 , '5895' : 0 , '3055' : 0 , '629' : 0 , '1100' : 0 , '7593' : 0 , '7597' : 0 , '5107' : 0 , '6586' : 0 , '7857' : 0 , '1301' : 0 , '1087' : 0 , '4067' : 0 , '5157' : 0 , '6382' : 0 , '2009' : 0 , '7491' : 0 , '6277' : 0 , '4382' : 0 , '4020' : 0 , '826' : 0 , '814' : 0 , '3342' : 0 , '2548' : 0 , '3798' : 0 , '421' : 0 , '5926' : 0 , '6361' : 0 , '6352' : 0 , '7678' : 0 , '2053' : 0 , '6570' : 0 , '7803' : 0 , '1026' : 0 , '550' : 0 , '7884' : 0 , '1115' : 0 , '1800' : 0 , '4197' : 0 , '2534' : 0 , '545' : 0 , '3122' : 0 , '1054' : 0 , '8154' : 0 , '3730' : 0 , '487' : 0 , '7235' : 0 , '2317' : 0 , '2603' : 0 , '2843' : 0 , '1013' : 0 , '1626' : 0 , '2403' : 0 , '2296' : 0 , '6702' : 0 , '6995' : 0 , '4878' : 0 , '238' : 0 , '6593' : 0 , '2421' : 0 , '3554' : 0 , '7570' : 0 , '5961' : 0 , '6127' : 0 , '3056' : 0 , '105' : 0 , '3779' : 0 , '2823' : 0 , '2580' : 0 , '44' : 0 , '5647' : 0 , '7403' : 0 , '5352' : 0 , '856' : 0 , '6033' : 0 , '4195' : 0 , '5643' : 0 , '8140' : 0 , '5817' : 0 , '4395' : 0 , '7955' : 0 , '5208' : 0 , '1320' : 0 , '7510' : 0 , '3506' : 0 , '4443' : 0 , '4543' : 0 , '5625' : 0 , '4019' : 0 , '1456' : 0 , '3638' : 0 , '3876' : 0 , '4196' : 0 , '7388' : 0 , '6403' : 0 , '6782' : 0 , '4401' : 0 , '4822' : 0 , '3304' : 0 , '5237' : 0 , '618' : 0 , '6207' : 0 , '4233' : 0 , '1109' : 0 , '2512' : 0 , '427' : 0 , '5562' : 0 , '3047' : 0 , '3303' : 0 , '3244' : 0 , '212' : 0 , '4498' : 0 , '3616' : 0 , '7895' : 0 , '816' : 0 , '7107' : 0 , '1600' : 0 , '6153' : 0 , '2635' : 0 , '5397' : 0 , '519' : 0 , '6876' : 0 , '511' : 0 , '6222' : 0 , '3270' : 0 , '6017' : 0 , '2742' : 0 , '5173' : 0 , '4620' : 0 , '5434' : 0 , '7911' : 0 , '7998' : 0 , '3424' : 0 , '239' : 0 , '4095' : 0 , '8033' : 0 , '3907' : 0 , '7902' : 0 , '6838' : 0 , '191' : 0 , '6187' : 0 , '4553' : 0 , '2252' : 0 , '4884' : 0 , '5690' : 0 , '4840' : 0 , '6604' : 0 , '5875' : 0 , '4503' : 0 , '4847' : 0 , '370' : 0 , '7332' : 0 , '7229' : 0 , '5354' : 0 , '1016' : 0 , '7070' : 0 , '3052' : 0 , '405' : 0 , '5836' : 0 , '3558' : 0 , '1592' : 0 , '2720' : 0 , '1061' : 0 , '6668' : 0 , '3823' : 0 , '1693' : 0 , '3880' : 0 , '5582' : 0 , '2223' : 0 , '1884' : 0 , '809' : 0 , '336' : 0 , '1870' : 0 , '3697' : 0 , '8111' : 0 , '5085' : 0 , '1000' : 0 , '2256' : 0 , '7596' : 0 , '914' : 0 , '5799' : 0 , '1155' : 0 , '3207' : 0 , '2674' : 0 , '1482' : 0 , '847' : 0 , '329' : 0 , '6226' : 0 , '451' : 0 , '2980' : 0 , '2281' : 0 , '6248' : 0 , '7306' : 0 , '1787' : 0 , '7333' : 0 , '3154' : 0 , '2680' : 0 , '7852' : 0 , '6885' : 0 , '5876' : 0 , '4975' : 0 , '7997' : 0 , '1829' : 0 , '7496' : 0 , '1950' : 0 , '2268' : 0 , '74' : 0 , '389' : 0 , '268' : 0 , '5980' : 0 , '1502' : 0 , '1980' : 0 , '2563' : 0 , '2597' : 0 , '6809' : 0 , '6642' : 0 , '6227' : 0 , '4031' : 0 , '916' : 0 , '2863' : 0 , '1226' : 0 , '1496' : 0 , '6888' : 0 , '4016' : 0 , '2147' : 0 , '7553' : 0 , '4484' : 0 , '7771' : 0 , '579' : 0 , '5870' : 0 , '1981' : 0 , '1757' : 0 , '5437' : 0 , '2021' : 0 , '4717' : 0 , '4451' : 0 , '5130' : 0 , '1558' : 0 , '7080' : 0 , '1328' : 0 , '2630' : 0 , '6631' : 0 , '3169' : 0 , '3001' : 0 , '7592' : 0 , '6791' : 0 , '5264' : 0 , '976' : 0 , '5877' : 0 , '3617' : 0 , '5448' : 0 , '7323' : 0 , '7060' : 0 , '4272' : 0 , '2161' : 0 , '7664' : 0 , '6268' : 0 , '4691' : 0 , '5985' : 0 , '4315' : 0 , '3039' : 0 , '7159' : 0 , '4246' : 0 , '6359' : 0 , '7885' : 0 , '3587' : 0 , '6526' : 0 , '901' : 0 , '2365' : 0 , '5952' : 0 , '2555' : 0 , '5507' : 0 , '3889' : 0 , '3545' : 0 , '1119' : 0 , '7620' : 0 , '4591' : 0 , '6074' : 0 , '5737' : 0 , '4274' : 0 , '6683' : 0 , '6730' : 0 , '2391' : 0 , '3874' : 0 , '1145' : 0 , '2755' : 0 , '6201' : 0 , '1854' : 0 , '5224' : 0 , '7129' : 0 , '6558' : 0 , '5318' : 0 , '1828' : 0 , '1288' : 0 , '7140' : 0 , '4013' : 0 , '8150' : 0 , '2900' : 0 , '1964' : 0 , '6736' : 0 , '3979' : 0 , '225' : 0 , '5665' : 0 , '2938' : 0 , '4204' : 0 , '6258' : 0 , '871' : 0 , '16' : 0 , '380' : 0 , '3981' : 0 , '1965' : 0 , '159' : 0 , '7559' : 0 , '970' : 0 , '6544' : 0 , '5968' : 0 , '786' : 0 , '2399' : 0 , '64' : 0 , '7823' : 0 , '5718' : 0 , '6441' : 0 , '6322' : 0 , '7236' : 0 , '790' : 0 , '2748' : 0 , '782' : 0 , '7339' : 0 , '1491' : 0 , '233' : 0 , '5683' : 0 , '1480' : 0 , '4831' : 0 , '1580' : 0 , '6421' : 0 , '3202' : 0 , '3074' : 0 , '5461' : 0 , '6301' : 0 , '3462' : 0 , '2964' : 0 , '5700' : 0 , '705' : 0 , '1925' : 0 , '4729' : 0 , '6320' : 0 , '7292' : 0 , '3411' : 0 , '1946' : 0 , '7748' : 0 , '386' : 0 , '5163' : 0 , '6777' : 0 , '4647' : 0 , '1761' : 0 , '708' : 0 , '6901' : 0 , '1562' : 0 , '1186' : 0 , '1949' : 0 , '7517' : 0 , '4891' : 0 , '7558' : 0 , '2766' : 0 , '4780' : 0 , '7018' : 0 , '3793' : 0 , '3997' : 0 , '858' : 0 , '8167' : 0 , '7588' : 0 , '3642' : 0 , '5800' : 0 , '94' : 0 , '3623' : 0 , '340' : 0 , '6900' : 0 , '747' : 0 , '4661' : 0 , '3758' : 0 , '5543' : 0 , '1997' : 0 , '6941' : 0 , '361' : 0 , '537' : 0 , '6688' : 0 , '3655' : 0 , '7019' : 0 , '2140' : 0 , '6415' : 0 , '828' : 0 , '733' : 0 , '5702' : 0 , '4564' : 0 , '3240' : 0 , '6601' : 0 , '5144' : 0 , '202' : 0 , '87' : 0 , '700' : 0 , '665' : 0 , '1835' : 0 , '6478' : 0 , '6012' : 0 , '5843' : 0 , '1043' : 0 , '5319' : 0 , '7073' : 0 , '5424' : 0 , '1083' : 0 , '1892' : 0 , '5190' : 0 , '512' : 0 , '7021' : 0 , '1275' : 0 , '5818' : 0 , '3870' : 0 , '3713' : 0 , '5002' : 0 , '6190' : 0 , '5188' : 0 , '6204' : 0 , '547' : 0 , '3177' : 0 , '1227' : 0 , '5548' : 0 , '4889' : 0 , '5566' : 0 , '5077' : 0 , '1680' : 0 , '8086' : 0 , '2786' : 0 , '6761' : 0 , '1639' : 0 , '1094' : 0 , '3996' : 0 , '7942' : 0 , '5686' : 0 , '6820' : 0 , '5286' : 0 , '1428' : 0 , '4583' : 0 , '2339' : 0 , '4654' : 0 , '1744' : 0 , '5837' : 0 , '1411' : 0 , '6417' : 0 , '5083' : 0 , '7850' : 0 , '3728' : 0 , '996' : 0 , '7404' : 0 , '2027' : 0 , '3201' : 0 , '4418' : 0 , '3653' : 0 , '1201' : 0 , '5805' : 0 , '1308' : 0 , '1727' : 0 , '5612' : 0 , '2308' : 0 , '7007' : 0 , '4874' : 0 , '4740' : 0 , '7085' : 0 , '8066' : 0 , '1644' : 0 , '7005' : 0 , '7394' : 0 , '3892' : 0 , '3897' : 0 , '5720' : 0 , '7244' : 0 , '3048' : 0 , '5012' : 0 , '7700' : 0 , '344' : 0 , '3505' : 0 , '5452' : 0 , '2288' : 0 , '5104' : 0 , '6815' : 0 , '3156' : 0 , '4535' : 0 , '3379' : 0 , '4544' : 0 , '7011' : 0 , '1931' : 0 , '4046' : 0 , '3215' : 0 , '1168' : 0 , '2291' : 0 , '5017' : 0 , '269' : 0 , '6732' : 0 , '6515' : 0 , '271' : 0 , '4767' : 0 , '5071' : 0 , '4226' : 0 , '7567' : 0 , '3300' : 0 , '6861' : 0 , '8041' : 0 , '1583' : 0 , '5430' : 0 , '6101' : 0 , '6775' : 0 , '1264' : 0 , '1743' : 0 , '4588' : 0 , '1945' : 0 , '5451' : 0 , '4824' : 0 , '8102' : 0 , '1295' : 0 , '4760' : 0 , '1913' : 0 , '4997' : 0 , '7091' : 0 , '3495' : 0 , '4349' : 0 , '1737' : 0 , '6368' : 0 , '1206' : 0 , '309' : 0 , '3361' : 0 , '962' : 0 , '6032' : 0 , '4414' : 0 , '6660' : 0 , '2262' : 0 , '7254' : 0 , '6427' : 0 , '5778' : 0 , '3399' : 0 , '4665' : 0 , '5468' : 0 , '562' : 0 , '3652' : 0 , '2144' : 0 , '2831' : 0 , '2872' : 0 , '7689' : 0 , '3149' : 0 , '113' : 0 , '1782' : 0 , '4262' : 0 , '7317' : 0 , '5727' : 0 , '7923' : 0 , '4700' : 0 , '2836' : 0 , '5057' : 0 , '2868' : 0 , '7135' : 0 , '725' : 0 , '4712' : 0 , '6990' : 0 , '3920' : 0 , '7102' : 0 , '3450' : 0 , '8064' : 0 , '7425' : 0 , '1700' : 0 , '5608' : 0 , '4935' : 0 , '5171' : 0 , '6793' : 0 , '5620' : 0 , '7036' : 0 , '5119' : 0 , '2601' : 0 , '6216' : 0 , '7532' : 0 , '2068' : 0 , '4360' : 0 , '6513' : 0 , '3228' : 0 , '3494' : 0 , '2931' : 0 , '1292' : 0 , '6834' : 0 , '5950' : 0 , '5332' : 0 , '2323' : 0 , '6585' : 0 , '1040' : 0 , '4615' : 0 , '92' : 0 , '7279' : 0 , '6270' : 0 , '7534' : 0 , '4629' : 0 , '6466' : 0 , '7669' : 0 , '3844' : 0 , '7969' : 0 , '5538' : 0 , '1349' : 0 , '4276' : 0 , '593' : 0 , '1715' : 0 , '7189' : 0 , '7591' : 0 , '1571' : 0 , '5704' : 0 , '3103' : 0 , '7441' : 0 , '4710' : 0 , '21' : 0 , '7697' : 0 , '6718' : 0 , '2337' : 0 , '1357' : 0 , '7635' : 0 , '2985' : 0 , '425' : 0 , '2467' : 0 , '2560' : 0 , '3768' : 0 , '4603' : 0 , '615' : 0 , '7521' : 0 , '3901' : 0 , '5515' : 0 , '3767' : 0 , '1544' : 0 , '5845' : 0 , '3150' : 0 , '6816' : 0 , '1833' : 0 , '6626' : 0 , '7272' : 0 , '3084' : 0 , '1139' : 0 , '2968' : 0 , '993' : 0 , '1554' : 0 , '2178' : 0 , '6070' : 0 , '7758' : 0 , '7009' : 0 , '5687' : 0 , '6886' : 0 , '7999' : 0 , '8100' : 0 , '6752' : 0 , '4862' : 0 , '4855' : 0 , '1899' : 0 , '3836' : 0 , '50' : 0 , '706' : 0 , '7755' : 0 , '4026' : 0 , '5495' : 0 , '1873' : 0 , '117' : 0 , '5429' : 0 , '5928' : 0 , '6196' : 0 , '6086' : 0 , '5995' : 0 , '1903' : 0 , '6983' : 0 , '4521' : 0 , '2319' : 0 , '4496' : 0 , '2604' : 0 , '3849' : 0 , '5101' : 0 , '2955' : 0 , '1896' : 0 , '4658' : 0 , '2611' : 0 , '6963' : 0 , '496' : 0 , '3209' : 0 , '5053' : 0 , '4381' : 0 , '4864' : 0 , '7489' : 0 , '6750' : 0 , '7573' : 0 , '5974' : 0 , '620' : 0 , '3632' : 0 , '918' : 0 , '1699' : 0 , '2672' : 0 , '3771' : 0 , '4662' : 0 , '737' : 0 , '7184' : 0 , '1312' : 0 , '5555' : 0 , '4861' : 0 , '1912' : 0 , '5536' : 0 , '6151' : 0 , '7205' : 0 , '2086' : 0 , '1299' : 0 , '455' : 0 , '4' : 0 , '1395' : 0 , '1673' : 0 , '6602' : 0 , '5326' : 0 , '3296' : 0 , '1403' : 0 , '2058' : 0 , '4905' : 0 , '2653' : 0 , '1846' : 0 , '8105' : 0 , '7259' : 0 , '4458' : 0 , '4356' : 0 , '6219' : 0 , '1532' : 0 , '6123' : 0 , '1760' : 0 , '7544' : 0 , '4713' : 0 , '6693' : 0 , '2314' : 0 , '6193' : 0 , '795' : 0 , '656' : 0 , '2854' : 0 , '3885' : 0 , '758' : 0 , '2531' : 0 , '6572' : 0 , '2731' : 0 , '803' : 0 , '1180' : 0 , '2455' : 0 , '7181' : 0 , '3477' : 0 , '7599' : 0 , '5611' : 0 , '5583' : 0 , '1584' : 0 , '3091' : 0 , '7922' : 0 , '6388' : 0 , '5986' : 0 , '3667' : 0 , '5325' : 0 , '93' : 0 , '5210' : 0 , '3129' : 0 , '4142' : 0 , '6743' : 0 , '5314' : 0 , '6902' : 0 , '3382' : 0 , '6676' : 0 , '3426' : 0 , '3832' : 0 , '3619' : 0 , '3821' : 0 , '8053' : 0 , '6950' : 0 , '4394' : 0 , '7307' : 0 , '626' : 0 , '5074' : 0 , '4096' : 0 , '2811' : 0 , '2107' : 0 , '2013' : 0 , '909' : 0 , '4980' : 0 , '221' : 0 , '1712' : 0 , '1677' : 0 , '7267' : 0 , '7820' : 0 , '6853' : 0 , '2851' : 0 , '660' : 0 , '1826' : 0 , '1831' : 0 , '1710' : 0 , '6108' : 0 , '3738' : 0 , '3242' : 0 , '2738' : 0 , '1788' : 0 , '6112' : 0 , '2545' : 0 , '7502' : 0 , '3594' : 0 , '612' : 0 , '4655' : 0 , '2994' : 0 , '4375' : 0 , '6737' : 0 , '6178' : 0 , '7215' : 0 , '5357' : 0 , '6381' : 0 , '5123' : 0 , '3508' : 0 , '5243' : 0 , '1402' : 0 , '5046' : 0 , '7308' : 0 , '1451' : 0 , '6753' : 0 , '1569' : 0 , '2669' : 0 , '2080' : 0 , '2699' : 0 , '5025' : 0 , '294' : 0 , '7792' : 0 , '5334' : 0 , '6228' : 0 , '3975' : 0 , '6411' : 0 , '1188' : 0 , '4520' : 0 , '8019' : 0 , '5645' : 0 , '5235' : 0 , '3893' : 0 , '338' : 0 , '403' : 0 , '1370' : 0 , '1869' : 0 , '5369' : 0 , '495' : 0 , '7408' : 0 , '4478' : 0 , '314' : 0 , '7979' : 0 , '5676' : 0 , '5487' : 0 , '3677' : 0 , '2773' : 0 , '4876' : 0 , '5370' : 0 , '7899' : 0 , '7674' : 0 , '5457' : 0 , '4412' : 0 , '2218' : 0 , '6029' : 0 , '7047' : 0 , '5035' : 0 , '5116' : 0 , '6964' : 0 , '197' : 0 , '8078' : 0 , '6870' : 0 , '1033' : 0 , '6854' : 0 , '6358' : 0 , '6915' : 0 , '2153' : 0 , '3963' : 0 , '4788' : 0 , '514' : 0 , '3961' : 0 , '2487' : 0 , '1123' : 0 , '992' : 0 , '6274' : 0 , '6003' : 0 , '8191' : 0 , '3015' : 0 , '4652' : 0 , '5987' : 0 , '3371' : 0 , '4342' : 0 , '3193' : 0 , '6455' : 0 , '2036' : 0 , '2389' : 0 , '899' : 0 , '4907' : 0 , '4903' : 0 , '6744' : 0 , '7582' : 0 , '7829' : 0 , '541' : 0 , '3483' : 0 , '7380' : 0 , '6613' : 0 , '5220' : 0 , '3811' : 0 , '4072' : 0 , '6265' : 0 , '3701' : 0 , '2885' : 0 , '3135' : 0 , '2407' : 0 , '1526' : 0 , '3153' : 0 , '1241' : 0 , '5859' : 0 , '5776' : 0 , '6844' : 0 , '4590' : 0 , '2020' : 0 , '1742' : 0 , '4426' : 0 , '8162' : 0 , '2212' : 0 , '4854' : 0 , '6048' : 0 , '2091' : 0 , '5431' : 0 , '1927' : 0 , '4638' : 0 , '7361' : 0 , '5445' : 0 , '4410' : 0 , '3394' : 0 , '4606' : 0 , '3496' : 0 , '6006' : 0 , '2411' : 0 , '6670' : 0 , '5028' : 0 , '7250' : 0 , '1198' : 0 , '2716' : 0 , '7384' : 0 , '8020' : 0 , '1880' : 0 , '264' : 0 , '1340' : 0 , '8069' : 0 , '4809' : 0 , '1368' : 0 , '9' : 0 , '5039' : 0 , '4235' : 0 , '1888' : 0 , '3004' : 0 , '3498' : 0 , '1974' : 0 , '2732' : 0 , '7747' : 0 , '1011' : 0 , '3826' : 0 , '1730' : 0 , '3412' : 0 , '4278' : 0 , '7300' : 0 , '6986' : 0 , '2030' : 0 , '829' : 0 , '834' : 0 , '1461' : 0 , '6089' : 0 , '404' : 0 , '35' : 0 , '7812' : 0 , '7470' : 0 , '3816' : 0 , '766' : 0 , '1705' : 0 , '8117' : 0 , '5788' : 0 , '5856' : 0 , '5134' : 0 , '3831' : 0 , '275' : 0 , '7401' : 0 , '6476' : 0 , '2730' : 0 , '738' : 0 , '58' : 0 , '1377' : 0 , '5657' : 0 , '5624' : 0 , '5801' : 0 , '4161' : 0 , '7648' : 0 , '5395' : 0 , '7241' : 0 , '2697' : 0 , '7680' : 0 , '352' : 0 , '2776' : 0 , '4173' : 0 , '7607' : 0 , '5408' : 0 , '1543' : 0 , '1307' : 0 , '5271' : 0 , '3714' : 0 , '7571' : 0 , '3301' : 0 , '85' : 0 , '8067' : 0 , '2428' : 0 , '6134' : 0 , '5946' : 0 , '6893' : 0 , '5300' : 0 , '5556' : 0 , '3974' : 0 , '3299' : 0 , '4946' : 0 , '6974' : 0 , '2540' : 0 , '330' : 0 , '7968' : 0 , '5482' : 0 , '3830' : 0 , '676' : 0 , '622' : 0 , '1450' : 0 , '4286' : 0 , '1751' : 0 , '2777' : 0 , '2359' : 0 , '1792' : 0 , '4707' : 0 , '4040' : 0 , '1907' : 0 , '4270' : 0 , '819' : 0 , '8047' : 0 , '5744' : 0 , '3692' : 0 , '4133' : 0 , '4455' : 0 , '4251' : 0 , '634' : 0 , '5302' : 0 , '5549' : 0 , '6882' : 0 , '2170' : 0 , '209' : 0 , '6689' : 0 , '1243' : 0 , '6527' : 0 , '4094' : 0 , '1423' : 0 , '878' : 0 , '7320' : 0 , '6051' : 0 , '1658' : 0 , '2637' : 0 , '5701' : 0 , '1847' : 0 , '1754' : 0 , '5617' : 0 , '3808' : 0 , '3541' : 0 , '4816' : 0 , '1630' : 0 , '4261' : 0 , '7374' : 0 , '5303' : 0 , '6581' : 0 , '1269' : 0 , '683' : 0 , '2449' : 0 , '850' : 0 , '201' : 0 , '2991' : 0 , '7810' : 0 , '3157' : 0 , '4303' : 0 , '5936' : 0 , '1132' : 0 , '1811' : 0 , '2895' : 0 , '3580' : 0 , '5917' : 0 , '1568' : 0 , '5405' : 0 , '4992' : 0 , '307' : 0 , '4332' : 0 , '6027' : 0 , '3094' : 0 , '4506' : 0 , '1012' : 0 , '6998' : 0 , '3708' : 0 , '5337' : 0 , '2779' : 0 , '218' : 0 , '3518' : 0 , '3473' : 0 , '5359' : 0 , '3197' : 0 , '6007' : 0 , '8099' : 0 , '7000' : 0 , '551' : 0 , '2163' : 0 , '4140' : 0 , '2177' : 0 , '7941' : 0 , '3927' : 0 , '2913' : 0 , '8166' : 0 , '1849' : 0 , '6524' : 0 , '3366' : 0 , '4826' : 0 , '2129' : 0 , '4155' : 0 , '7848' : 0 , '1074' : 0 , '7537' : 0 , '5222' : 0 , '5221' : 0 , '7947' : 0 , '2131' : 0 , '5170' : 0 , '3173' : 0 , '5358' : 0 , '6419' : 0 , '5178' : 0 , '5741' : 0 , '6972' : 0 , '2437' : 0 , '8096' : 0 , '32' : 0 , '3072' : 0 , '450' : 0 , '165' : 0 , '7783' : 0 , '5879' : 0 , '3262' : 0 , '422' : 0 , '5632' : 0 , '6614' : 0 , '6197' : 0 , '1977' : 0 , '4734' : 0 , '1799' : 0 , '5059' : 0 , '2239' : 0 , '5460' : 0 , '6684' : 0 , '5596' : 0 , '1335' : 0 , '6879' : 0 , '5892' : 0 , '6619' : 0 , '2157' : 0 , '3720' : 0 , '2306' : 0 , '8131' : 0 , '698' : 0 , '2468' : 0 , '4547' : 0 , '4659' : 0 , '6583' : 0 , '7924' : 0 , '3712' : 0 , '3797' : 0 , '1362' : 0 , '3102' : 0 , '2' : 0 , '5191' : 0 , '3922' : 0 , '1682' : 0 , '5168' : 0 , '8037' : 0 , '4837' : 0 , '3622' : 0 , '7595' : 0 , '3773' : 0 , '1998' : 0 , '4249' : 0 , '7032' : 0 , '7072' : 0 , '5082' : 0 , '2963' : 0 , '5998' : 0 , '1735' : 0 , '2213' : 0 , '1935' : 0 , '7946' : 0 , '7724' : 0 , '3376' : 0 , '1812' : 0 , '1634' : 0 , '1393' : 0 , '5746' : 0 , '4930' : 0 , '6671' : 0 , '4098' : 0 , '6503' : 0 , '5631' : 0 , '2817' : 0 , '1098' : 0 , '778' : 0 , '2948' : 0 , '4004' : 0 , '4858' : 0 , '7281' : 0 , '7739' : 0 , '2446' : 0 , '2859' : 0 , '3983' : 0 , '5376' : 0 , '4164' : 0 , '1294' : 0 , '941' : 0 , '1942' : 0 , '5272' : 0 , '3171' : 0 , '3650' : 0 , '5176' : 0 , '4528' : 0 , '1381' : 0 , '3951' : 0 , '2530' : 0 , '7842' : 0 , '4534' : 0 , '3853' : 0 , '3302' : 0 , '2502' : 0 , '4100' : 0 , '1478' : 0 , '3014' : 0 , '3588' : 0 , '4773' : 0 , '7765' : 0 , '5654' : 0 , '4079' : 0 , '6881' : 0 , '3715' : 0 , '1231' : 0 , '3431' : 0 , '2037' : 0 , '395' : 0 , '7012' : 0 , '7322' : 0 , '4238' : 0 , '4695' : 0 , '2122' : 0 , '4007' : 0 , '2119' : 0 , '161' : 0 , '5775' : 0 , '4396' : 0 , '3633' : 0 , '349' : 0 , '3910' : 0 , '6711' : 0 , '447' : 0 , '7682' : 0 , '4672' : 0 , '4979' : 0 , '5400' : 0 , '6666' : 0 , '920' : 0 , '867' : 0 , '1933' : 0 , '4626' : 0 , '5552' : 0 , '1143' : 0 , '4509' : 0 , '2645' : 0 , '4983' : 0 , '5486' : 0 , '659' : 0 , '6136' : 0 , '1437' : 0 , '1615' : 0 , '7294' : 0 , '6401' : 0 , '7773' : 0 , '3343' : 0 , '5619' : 0 , '7861' : 0 , '621' : 0 , '2395' : 0 , '53' : 0 , '6244' : 0 , '6756' : 0 , '7905' : 0 , '2626' : 0 , '2203' : 0 , '1433' : 0 , '6674' : 0 , '1505' : 0 , '3297' : 0 , '5696' : 0 , '5284' : 0 , '6125' : 0 , '7143' : 0 , '2015' : 0 , '522' : 0 , '4817' : 0 , '7628' : 0 , '4324' : 0 , '3265' : 0 , '2168' : 0 , '5738' : 0 , '7432' : 0 , '6518' : 0 , '3865' : 0 , '560' : 0 , '1067' : 0 , '7756' : 0 , '3155' : 0 , '5075' : 0 , '6943' : 0 , '187' : 0 , '1169' : 0 , '5148' : 0 , '7395' : 0 , '7055' : 0 , '6789' : 0 , '5250' : 0 , '3577' : 0 , '462' : 0 , '7173' : 0 , '6669' : 0 , '1151' : 0 , '7210' : 0 , '2231' : 0 , '1004' : 0 , '739' : 0 , '5874' : 0 , '4104' : 0 , '5559' : 0 , '2315' : 0 , '1975' : 0 , '4231' : 0 , '7176' : 0 , '5253' : 0 , '4557' : 0 , '1985' : 0 , '3976' : 0 , '1706' : 0 , '3161' : 0 , '6554' : 0 , '3036' : 0 , '6162' : 0 , '2390' : 0 , '979' : 0 , '41' : 0 , '3693' : 0 , '4885' : 0 , '2433' : 0 , '7518' : 0 , '5516' : 0 , '5483' : 0 , '8133' : 0 , '6038' : 0 , '1572' : 0 , '401' : 0 , '4179' : 0 , '5798' : 0 , '7934' : 0 , '2092' : 0 , '1548' : 0 , '311' : 0 , '6397' : 0 , '444' : 0 , '1667' : 0 , '2605' : 0 , '1771' : 0 , '1575' : 0 , '3341' : 0 , '6420' : 0 , '4953' : 0 , '2870' : 0 , '921' : 0 , '96' : 0 , '1728' : 0 , '4380' : 0 , '574' : 0 , '6097' : 0 , '7110' : 0 , '783' : 0 , '4254' : 0 , '7262' : 0 , '5592' : 0 , '5139' : 0 , '6306' : 0 , '7263' : 0 , '7522' : 0 , '2897' : 0 , '4918' : 0 , '7010' : 0 , '3328' : 0 , '2248' : 0 , '8061' : 0 , '1356' : 0 , '1785' : 0 , '7200' : 0 , '3326' : 0 , '7419' : 0 , '3647' : 0 , '7930' : 0 , '7067' : 0 , '5443' : 0 , '4379' : 0 , '5706' : 0 , '2949' : 0 , '546' : 0 , '2492' : 0 , '3987' : 0 , '6662' : 0 , '1105' : 0 , '597' : 0 , '2084' : 0 , '1604' : 0 , '1023' : 0 , '4883' : 0 , '4921' : 0 , '4404' : 0 , '5417' : 0 , '7814' : 0 , '6725' : 0 , '287' : 0 , '2241' : 0 , '6841' : 0 , '4128' : 0 , '6498' : 0 , '6561' : 0 , '2070' : 0 , '6783' : 0 , '1326' : 0 , '442' : 0 , '1449' : 0 , '6469' : 0 , '2829' : 0 , '869' : 0 , '7958' : 0 , '3415' : 0 , '4421' : 0 , '4253' : 0 , '6061' : 0 , '5929' : 0 , '7092' : 0 , '5804' : 0 , '4532' : 0 , '6102' : 0 , '7871' : 0 , '2616' : 0 , '2793' : 0 , '1581' : 0 , '6624' : 0 , '1915' : 0 , '3736' : 0 , '7040' : 0 , '7651' : 0 , '6832' : 0 , '748' : 0 , '1676' : 0 , '6448' : 0 , '342' : 0 , '2876' : 0 , '4218' : 0 , '7774' : 0 , '1205' : 0 , '301' : 0 , '647' : 0 , '7402' : 0 , '6849' : 0 , '7975' : 0 , '7423' : 0 , '5717' : 0 , '3891' : 0 , '5378' : 0 , '3081' : 0 , '419' : 0 , '6862' : 0 , '2559' : 0 , '1202' : 0 , '7557' : 0 , '4325' : 0 , '1149' : 0 , '4783' : 0 , '6140' : 0 , '7188' : 0 , '5409' : 0 , '120' : 0 , '2833' : 0 , '1421' : 0 , '7629' : 0 , '6769' : 0 , '8104' : 0 , '1902' : 0 , '4679' : 0 , '6992' : 0 , '4245' : 0 , '1319' : 0 , '1176' : 0 , '5368' : 0 , '3325' : 0 , '6231' : 0 , '4598' : 0 , '5423' : 0 , '601' : 0 , '3260' : 0 , '1642' : 0 , '5132' : 0 , '6354' : 0 , '1551' : 0 , '68' : 0 , '4632' : 0 , '222' : 0 , '4696' : 0 , '3704' : 0 , '4264' : 0 , '4296' : 0 , '4882' : 0 , '2928' : 0 , '5280' : 0 , '710' : 0 , '8128' : 0 , '3939' : 0 , '5096' : 0 , '3266' : 0 , '2969' : 0 , '822' : 0 , '3810' : 0 , '441' : 0 , '3765' : 0 , '5794' : 0 , '3278' : 0 , '7993' : 0 , '516' : 0 , '1002' : 0 , '7365' : 0 , '116' : 0 , '7706' : 0 , '5' : 0 , '6536' : 0 , '7798' : 0 , '3372' : 0 , '1229' : 0 , '4298' : 0 , '7935' : 0 , '2472' : 0 , '2085' : 0 , '6337' : 0 , '2215' : 0 , '291' : 0 , '8009' : 0 , '2682' : 0 , '6590' : 0 , '1547' : 0 , '7382' : 0 , '347' : 0 , '5528' : 0 , '145' : 0 , '4232' : 0 , '5014' : 0 , '492' : 0 , '4621' : 0 , '2355' : 0 , '885' : 0 , '6073' : 0 , '3113' : 0 , '4592' : 0 , '8065' : 0 , '6627' : 0 , '4850' : 0 , '6591' : 0 , '440' : 0 , '7903' : 0 , '3027' : 0 , '4708' : 0 , '1720' : 0 , '4687' : 0 , '4806' : 0 , '4490' : 0 , '5802' : 0 , '3049' : 0 , '2363' : 0 , '2987' : 0 , '5143' : 0 , '7315' : 0 , '5869' : 0 , '669' : 0 , '1420' : 0 , '8057' : 0 , '7777' : 0 , '2445' : 0 , '4215' : 0 , '128' : 0 , '3227' : 0 , '6367' : 0 , '15' : 0 , '6675' : 0 , '3317' : 0 , '4057' : 0 , '720' : 0 , '7879' : 0 , '4804' : 0 , '3314' : 0 , '4580' : 0 , '5525' : 0 , '1778' : 0 , '5597' : 0 , '4784' : 0 , '1645' : 0 , '4823' : 0 , '5158' : 0 , '2298' : 0 , '6117' : 0 , '6552' : 0 , '176' : 0 , '7469' : 0 , '1214' : 0 , '2118' : 0 , '718' : 0 , '1510' : 0 , '4962' : 0 , '277' : 0 , '6597' : 0 , '4910' : 0 , '6865' : 0 , '5714' : 0 , '1102' : 0 , '7634' : 0 , '84' : 0 , '1625' : 0 , '4562' : 0 , '4549' : 0 , '1407' : 0 , '5863' : 0 , '5064' : 0 , '714' : 0 , '7216' : 0 , '3813' : 0 , '3549' : 0 , '1954' : 0 , '4273' : 0 , '1063' : 0 , '137' : 0 , '1825' : 0 , '6749' : 0 , '5955' : 0 , '5259' : 0 , '5813' : 0 , '323' : 0 , '4048' : 0 , '3232' : 0 , '3065' : 0 , '4468' : 0 , '3854' : 0 , '3000' : 0 , '6185' : 0 , '190' : 0 , '4420' : 0 , '6645' : 0 , '5519' : 0 , '868' : 0 , '332' : 0 , '2108' : 0 , '7249' : 0 , '987' : 0 , '6406' : 0 , '671' : 0 , '4952' : 0 , '2048' : 0 , '5999' : 0 , '2494' : 0 , '1066' : 0 , '4727' : 0 , '4657' : 0 , '1816' : 0 , '6056' : 0 , '4969' : 0 , '5403' : 0 , '515' : 0 , '5367' : 0 , '1093' : 0 , '5184' : 0 , '1472' : 0 , '429' : 0 , '5878' : 0 , '4436' : 0 , '1689' : 0 , '6324' : 0 , '1405' : 0 , '3913' : 0 , '2695' : 0 , '5040' : 0 , '4089' : 0 , '6391' : 0 , '7554' : 0 , '7610' : 0 , '539' : 0 , '6121' : 0 , '2765' : 0 , '4963' : 0 , '7647' : 0 , '6522' : 0 , '6384' : 0 , '4550' : 0 , '507' : 0 , '6462' : 0 , '125' : 0 , '7413' : 0 , '1082' : 0 , '7016' : 0 , '4025' : 0 , '2721' : 0 , '5606' : 0 , '7932' : 0 , '3886' : 0 , '3671' : 0 , '2493' : 0 , '3082' : 0 , '6829' : 0 , '8151' : 0 , '6596' : 0 , '2850' : 0 , '7995' : 0 , '3404' : 0 , '5779' : 0 , '6968' : 0 , '1019' : 0 , '3077' : 0 , '775' : 0 , '8081' : 0 , '6221' : 0 , '999' : 0 , '3750' : 0 , '2419' : 0 , '4435' : 0 , '2710' : 0 , '5027' : 0 , '2499' : 0 , '2269' : 0 , '4084' : 0 , '7788' : 0 , '6529' : 0 , '6057' : 0 , '6934' : 0 , '4225' : 0 , '7452' : 0 , '6285' : 0 , '6977' : 0 , '3553' : 0 , '3898' : 0 , '2926' : 0 , '3954' : 0 , '3105' : 0 , '4198' : 0 , '3504' : 0 , '410' : 0 , '3940' : 0 , '1284' : 0 , '3908' : 0 , '6766' : 0 , '3945' : 0 , '1329' : 0 , '0' : 0 , '839' : 0 , '3360' : 0 , '4411' : 0 , '216' : 0 , '5227' : 0 , '3497' : 0 , '7220' : 0 , '7224' : 0 , '7843' : 0 , '2543' : 0 , '5681' : 0 , '150' : 0 , '363' : 0 , '7561' : 0 , '3819' : 0 , '6091' : 0 , '7638' : 0 , '577' : 0 , '5062' : 0 , '6695' : 0 , '4045' : 0 , '2377' : 0 , '6058' : 0 , '3337' : 0 , '157' : 0 , '7817' : 0 , '2706' : 0 , '5994' : 0 , '543' : 0 , '482' : 0 , '2479' : 0 , '3235' : 0 , '777' : 0 , '7805' : 0 , '8146' : 0 , '5316' : 0 , '3547' : 0 , '6332' : 0 , '7474' : 0 , '6362' : 0 , '4163' : 0 , '5537' : 0 , '6543' : 0 , '2911' : 0 , '6680' : 0 , '3988' : 0 , '6375' : 0 , '5377' : 0 , '4009' : 0 , '5784' : 0 , '7481' : 0 , '801' : 0 , '2977' : 0 , '2038' : 0 , '4309' : 0 , '4489' : 0 , '2821' : 0 , '2883' : 0 , '2206' : 0 , '1213' : 0 , '1691' : 0 , '4021' : 0 , '6392' : 0 , '2277' : 0 , '7198' : 0 , '4361' : 0 , '3433' : 0 , '3398' : 0 , '1273' : 0 , '4129' : 0 , '407' : 0 , '5868' : 0 , '3903' : 0 , '3205' : 0 , '1521' : 0 , '6981' : 0 , '3204' : 0 , '7343' : 0 , '2650' : 0 , '6571' : 0 , '4636' : 0 , '6928' : 0 , '251' : 0 , '4049' : 0 , '2045' : 0 , '4446' : 0 , '883' : 0 , '6748' : 0 , '2941' : 0 , '8176' : 0 , '5841' : 0 , '5588' : 0 , '5666' : 0 , '1468' : 0 , '1866' : 0 , '1332' : 0 , '1383' : 0 , '6644' : 0 , '7392' : 0 , '7953' : 0 , '2783' : 0 , '7836' : 0 , '752' : 0 , '1882' : 0 , '3575' : 0 , '4354' : 0 , '7824' : 0 , '385' : 0 , '6678' : 0 , '6159' : 0 , '3960' : 0 , '7549' : 0 , '1636' : 0 , '4008' : 0 , '1804' : 0 , '1499' : 0 , '2621' : 0 , '8161' : 0 , '3992' : 0 , '7950' : 0 , '7985' : 0 , '7430' : 0 , '791' : 0 , '1716' : 0 , '3051' : 0 , '3252' : 0 , '6290' : 0 , '2995' : 0 , '7528' : 0 , '5048' : 0 , '7488' : 0 , '5660' : 0 , '5458' : 0 , '582' : 0 , '6713' : 0 , '1254' : 0 , '2778' : 0 , '5819' : 0 , '3646' : 0 , '7175' : 0 , '1276' : 0 , '4669' : 0 , '4228' : 0 , '3306' : 0 , '2250' : 0 , '5979' : 0 , '3358' : 0 , '1371' : 0 , '7813' : 0 , '5278' : 0 , '3029' : 0 , '6015' : 0 , '1353' : 0 , '1418' : 0 , '6428' : 0 , '1856' : 0 , '6114' : 0 , '3512' : 0 , '1200' : 0 , '458' : 0 , '3059' : 0 , '2514' : 0 , '6118' : 0 , '3815' : 0 , '7450' : 0 , '5618' : 0 , '4577' : 0 , '2104' : 0 , '476' : 0 , '2867' : 0 , '7449' : 0 , '5140' : 0 , '3442' : 0 , '6053' : 0 , '2929' : 0 , '5043' : 0 , '2961' : 0 , '1840' : 0 , '2064' : 0 , '2217' : 0 , '1163' : 0 , '1982' : 0 , '1471' : 0 , '3780' : 0 , '6351' : 0 , '5604' : 0 , '5662' : 0 , '1010' : 0 , '3672' : 0 , '6393' : 0 , '3069' : 0 , '3795' : 0 , '2417' : 0 , '2299' : 0 , '4313' : 0 , '3131' : 0 , '4302' : 0 , '2011' : 0 , '7286' : 0 , '4393' : 0 , '3676' : 0 , '7533' : 0 , '6580' : 0 , '6088' : 0 , '6953' : 0 , '6578' : 0 , '5682' : 0 , '1885' : 0 , '7397' : 0 , '1346' : 0 , '6827' : 0 , '4338' : 0 , '4132' : 0 , '5137' : 0 , '8135' : 0 , '4977' : 0 , '29' : 0 , '6035' : 0 , '6909' : 0 , '4811' : 0 , '5488' : 0 , '1807' : 0 , '6110' : 0 , '350' : 0 , '283' : 0 , '7295' : 0 , '2522' : 0 , '585' : 0 , '6100' : 0 , '4472' : 0 , '3183' : 0 , '4820' : 0 , '681' : 0 , '4790' : 0 , '2723' : 0 , '2982' : 0 , '7685' : 0 , '604' : 0 , '523' : 0 , '215' : 0 , '2286' : 0 , '4207' : 0 , '4558' : 0 , '4034' : 0 , '1934' : 0 , '3388' : 0 , '1152' : 0 , '2097' : 0 , '2690' : 0 , '4958' : 0 , '1695' : 0 , '1271' : 0 , '3576' : 0 , '1078' : 0 , '3449' : 0 , '4237' : 0 , '1536' : 0 , '673' : 0 , '3753' : 0 , '7762' : 0 , '1135' : 0 , '6542' : 0 , '335' : 0 , '1361' : 0 , '6445' : 0 , '313' : 0 , '576' : 0 , '2102' : 0 , '3564' : 0 , '7576' : 0 , '1574' : 0 , '4739' : 0 , '5282' : 0 , '7683' : 0 , '7617' : 0 , '2402' : 0 , '674' : 0 , '1530' : 0 , '8068' : 0 , '1398' : 0 , '1474' : 0 , '1822' : 0 , '459' : 0 , '489' : 0 , '1578' : 0 , '3978' : 0 , '392' : 0 , '6423' : 0 , '5432' : 0 , '7465' : 0 , '6463' : 0 , '7357' : 0 , '3100' : 0 , '6325' : 0 , '3769' : 0 , '5935' : 0 , '5201' : 0 , '7094' : 0 , '5605' : 0 , '3737' : 0 , '7114' : 0 , '7405' : 0 , '7342' : 0 , '3833' : 0 , '2413' : 0 , '1687' : 0 , '2465' : 0 , '3711' : 0 , '5858' : 0 , '8075' : 0 , '558' : 0 , '6805' : 0 , '2260' : 0 , '1663' : 0 , '5966' : 0 , '1080' : 0 , '4476' : 0 , '2378' : 0 , '6823' : 0 , '7234' : 0 , '7656' : 0 , '6729' : 0 , '5260' : 0 , '7103' : 0 , '3516' : 0 , '1839' : 0 , '5422' : 0 , '3772' : 0 , '242' : 0 , '6233' : 0 , '2678' : 0 , '4914' : 0 , '3455' : 0 , '4099' : 0 , '8051' : 0 , '2553' : 0 , '3517' : 0 , '4341' : 0 , '8177' : 0 , '6548' : 0 , '1566' : 0 , '7024' : 0 , '7506' : 0 , '2016' : 0 , '5942' : 0 , '654' : 0 , '5713' : 0 , '8090' : 0 , '6733' : 0 , '540' : 0 , '2687' : 0 , '4634' : 0 , '1146' : 0 , '6560' : 0 , '1062' : 0 , '4998' : 0 , '7297' : 0 , '7002' : 0 , '6643' : 0 , '1894' : 0 , '5513' : 0 , '7360' : 0 , '6826' : 0 , '5111' : 0 , '4986' : 0 , '3565' : 0 , '5569' : 0 , '7795' : 0 , '6348' : 0 , '5465' : 0 , '6755' : 0 , '6871' : 0 , '5752' : 0 , '5268' : 0 , '1397' : 0 , '7555' : 0 , '3502' : 0 , '3555' : 0 , '2042' : 0 , '1929' : 0 , '4954' : 0 , '3172' : 0 , '1971' : 0 , '3610' : 0 , '6921' : 0 , '3583' : 0 , '4848' : 0 , '6906' : 0 , '7068' : 0 , '5145' : 0 , '7804' : 0 , '2362' : 0 , '4176' : 0 , '7550' : 0 , '8169' : 0 , '4912' : 0 , '3257' : 0 , '4369' : 0 , '8188' : 0 , '6253' : 0 , '5679' : 0 , '4611' : 0 , '8083' : 0 , '4670' : 0 , '1745' : 0 , '76' : 0 , '5824' : 0 , '13' : 0 , '5105' : 0 , '7976' : 0 , '5266' : 0 , '5072' : 0 , '3657' : 0 , '6940' : 0 , '4955' : 0 , '1595' : 0 , '848' : 0 , '1430' : 0 , '5689' : 0 , '8001' : 0 , '430' : 0 , '3259' : 0 , '2062' : 0 , '1494' : 0 , '7288' : 0 , '1991' : 0 , '2959' : 0 , '4913' : 0 , '6719' : 0 , '2997' : 0 , '568' : 0 , '1661' : 0 , '1458' : 0 , '228' : 0 , '1713' : 0 , '4666' : 0 , '2954' : 0 , '7627' : 0 , '3225' : 0 , '7531' : 0 , '5501' : 0 , '764' : 0 , '7001' : 0 , '5652' : 0 , '4348' : 0 , '7514' : 0 , '5763' : 0 , '6066' : 0 , '1717' : 0 , '3678' : 0 , '5671' : 0 , '784' : 0 , '6409' : 0 , '5770' : 0 , '7990' : 0 , '1255' : 0 , '6517' : 0 , '256' : 0 , '6041' : 0 , '3234' : 0 , '1310' : 0 , '1593' : 0 , '7460' : 0 , '4722' : 0 , '7841' : 0 , '4317' : 0 , '4159' : 0 , '7515' : 0 , '7603' : 0 , '5467' : 0 , '252' : 0 , '1541' : 0 , '7290' : 0 , '2431' : 0 , '5044' : 0 , '4256' : 0 , '3181' : 0 , '6825' : 0 , '1740' : 0 , '6072' : 0 , '6247' : 0 , '3243' : 0 , '6408' : 0 , '4319' : 0 , '1079' : 0 , '5169' : 0 , '6955' : 0 , '4121' : 0 , '2942' : 0 , '797' : 0 , '1485' : 0 , '2332' : 0 , '4560' : 0 , '4449' : 0 , '6030' : 0 , '2922' : 0 , '6116' : 0 , '1798' : 0 , '8189' : 0 , '148' : 0 , '78' : 0 , '2888' : 0 , '4594' : 0 , '1921' : 0 , '1415' : 0 , '6611' : 0 , '7239' : 0 , '5440' : 0 , '5474' : 0 , '2789' : 0 , '4797' : 0 , '7105' : 0 , '4942' : 0 , '2726' : 0 , '1769' : 0 , '2577' : 0 , '5453' : 0 , '5102' : 0 , '6122' : 0 , '2366' : 0 , '7574' : 0 , '4156' : 0 , '267' : 0 , '7727' : 0 , '5471' : 0 , '6213' : 0 , '4771' : 0 , '740' : 0 , '2988' : 0 , '5812' : 0 , '5534' : 0 , '4308' : 0 , '45' : 0 , '2373' : 0 , '5355' : 0 , '2910' : 0 , '1650' : 0 , '2861' : 0 , '5724' : 0 , '2797' : 0 , '4505' : 0 , '3189' : 0 , '7994' : 0 , '4714' : 0 , '2360' : 0 , '755' : 0 , '3536' : 0 , '2702' : 0 , '4926' : 0 , '7435' : 0 , '1683' : 0 , '8055' : 0 , '3959' : 0 , '879' : 0 , '6739' : 0 , '4827' : 0 , '4753' : 0 , '5500' : 0 , '5523' : 0 , '5607' : 0 , '4614' : 0 , '206' : 0 , '8182' : 0 , '1545' : 0 , '3757' : 0 , '4102' : 0 , '4628' : 0 , '6154' : 0 , '3182' : 0 , '7957' : 0 , '5674' : 0 , '3643' : 0 , '528' : 0 , '3719' : 0 , '4747' : 0 , '328' : 0 , '4271' : 0 , '5335' : 0 , '3283' : 0 , '6919' : 0 , '7366' : 0 , '5925' : 0 , '8138' : 0 , '4054' : 0 , '7008' : 0 , '4126' : 0 , '4934' : 0 , '1585' : 0 , '7673' : 0 , '5472' : 0 , '825' : 0 , '1281' : 0 , '6802' : 0 , '3962' : 0 , '4115' : 0 , '1232' : 0 , '4917' : 0 , '3535' : 0 , '865' : 0 , '1113' : 0 , '468' : 0 , '5373' : 0 , '6912' : 0 , '964' : 0 , '4595' : 0 , '1258' : 0 , '5941' : 0 , '3803' : 0 , '4305' : 0 , '2704' : 0 , '3660' : 0 , '5348' : 0 , '5029' : 0 , '6994' : 0 , '4749' : 0 , '279' : 0 , '1425' : 0 , '4145' : 0 , '4373' : 0 , '5712' : 0 , '1106' : 0 , '3280' : 0 , '5733' : 0 , '3123' : 0 , '2908' : 0 , '5902' : 0 , '2887' : 0 , '2516' : 0 , '6068' : 0 , '4601' : 0 , '617' : 0 , '7602' : 0 , '7710' : 0 , '6333' : 0 , '472' : 0 , '3425' : 0 , '5956' : 0 , '6942' : 0 , '3249' : 0 , '2115' : 0 , '4352' : 0 , '761' : 0 , '627' : 0 , '4343' : 0 , '131' : 0 , '4524' : 0 , '4851' : 0 , '1475' : 0 , '3435' : 0 , '4593' : 0 , '4137' : 0 , '2351' : 0 , '2565' : 0 , '7406' : 0 , '2771' : 0 , '6192' : 0 , '7508' : 0 , '8097' : 0 , '6157' : 0 , '5655' : 0 , '1459' : 0 , '5820' : 0 , '5362' : 0 , '6664' : 0 , '798' : 0 , '180' : 0 , '6132' : 0 , '5114' : 0 , '889' : 0 , '1498' : 0 , '7042' : 0 , '4648' : 0 , '5293' : 0 , '2654' : 0 , '7584' : 0 , '7732' : 0 , '4481' : 0 , '5810' : 0 , '6156' : 0 , '4479' : 0 , '6502' : 0 , '6857' : 0 , '8144' : 0 , '3482' : 0 , '5923' : 0 , '3631' : 0 , '586' : 0 , '5084' : 0 , '667' : 0 , '3066' : 0 , '7715' : 0 , '7806' : 0 , '5276' : 0 , '5982' : 0 , '1838' : 0 , '2469' : 0 , '3407' : 0 , '5754' : 0 , '4504' : 0 , '6297' : 0 , '2137' : 0 , '4849' : 0 , '6790' : 0 , '4244' : 0 , '469' : 0 , '6130' : 0 , '713' : 0 , '6481' : 0 , '3383' : 0 , '5032' : 0 , '43' : 0 , '4131' : 0 , '530' : 0 , '6837' : 0 , '7744' : 0 , '3488' : 0 , '1158' : 0 , '4724' : 0 , '709' : 0 , '7152' : 0 , '7426' : 0 , '2595' : 0 , '1388' : 0 , '2703' : 0 , '5393' : 0 , '3941' : 0 , '3246' : 0 , '1375' : 0 , '1607' : 0 , '3644' : 0 , '1616' : 0 , '2646' : 0 , '2503' : 0 , '2454' : 0 , '2558' : 0 , '4463' : 0 , '236' : 0 , '7632' : 0 , '3133' : 0 , '7736' : 0 , '2321' : 0 , '2266' : 0 , '7511' : 0 , '2398' : 0 , '4623' : 0 , '2242' : 0 , '7907' : 0 , '4941' : 0 , '1068' : 0 , '509' : 0 , '8008' : 0 , '3432' : 0 , '4568' : 0 , '1445' : 0 , '3964' : 0 , '3033' : 0 , '5893' : 0 , '4539' : 0 , '2094' : 0 , '5218' : 0 , '1612' : 0 , '3946' : 0 , '8158' : 0 , '4834' : 0 , '1070' : 0 , '7642' : 0 , '8170' : 0 , '7422' : 0 , '1263' : 0 , '4880' : 0 , '6967' : 0 , '5203' : 0 , '4899' : 0 , '7445' : 0 , '1442' : 0 , '4071' : 0 , '6087' : 0 , '1432' : 0 , '1159' : 0 , '1358' : 0 , '3422' : 0 , '1588' : 0 , '4374' : 0 , '1537' : 0 , '3641' : 0 , '813' : 0 , '4642' : 0 , '486' : 0 , '4932' : 0 , '7378' : 0 , '7908' : 0 , '3956' : 0 , '4289' : 0 , '3179' : 0 , '1097' : 0 , '2533' : 0 , '5765' : 0 , '1376' : 0 , '7411' : 0 , '1531' : 0 , '3749' : 0 , '3137' : 0 , '6064' : 0 , '3605' : 0 , '1122' : 0 , '2164' : 0 , '4392' : 0 , '7880' : 0 , '5150' : 0 , '2055' : 0 , '4938' : 0 , '1781' : 0 , '4778' : 0 , '4807' : 0 , '5212' : 0 , '721' : 0 , '6129' : 0 , '4873' : 0 , '7232' : 0 , '7108' : 0 , '141' : 0 , '6778' : 0 , '2352' : 0 , '4605' : 0 , '205' : 0 },
'keysConsumed' : 0 ,
'nextKey' : 0
},
'state' :
{
'tokens' : {},
'slave_pks_access_type' : {},
'ots_counter' : '0' ,
'nonce' : '0' ,
'latticePK_list' : [],
'address' :
{
'data' : [ 1 , 4 , 0 , 7 , 165 , 145 , 166 , 44 , 35 , 237 , 39 , 173 , 254 , 61 , 248 , 235 , 129 , 46 , 229 , 228 , 183 , 62 , 71 , 251 , 132 , 113 , 232 , 215 , 142 , 205 , 155 , 76 , 173 , 195 , 37 , 202 , 54 , 216 , 110 ],
'type' : 'Buffer'
},
'transaction_hashes' : [],
'balance' : '0' ,
'ots_bitfield' : [
{
'data' : [ 0 ],
'type' : 'Buffer'
},
{
'data' : [ 0 ],
'type' : 'Buffer'
},
## TRUNICATED FOR CLARITY ##
{
'data' : [ 0 ],
'type' : 'Buffer'
},
{
'data' : [ 0 ],
'type' : 'Buffer'
},
{
'data' : [ 0 ],
'type' : 'Buffer'
}]
}
}
Get address data by number.
Request
Parameter
Description
address
QRL Address
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Address Details in JSON Response
Info: /api/a/ requests will only return in JSON format.
Parse the response using json tools in a language of your choice.
Emission
Returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/emission
# Response
{
"found" :true,
"emission" :67091254.15686654
}
def getEmission ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/emission" )
response = request . text
getEmissionResp = json . loads ( response )
jsonResponse = getEmissionResp
return ( jsonResponse )
getEmission ()
# Response
{
'emission' : 67091254.15686654 ,
'found' : True
}
Get the total QRL emission to date.
Request
Parameter
Description
emission
emission request
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Emission Details in JSON Response
Info: /api/emission requests can return both JSON format as well as simple text.
Returns a text response
# Request
curl -XGET https://explorer.theqrl.org/api/emission/text
# Response
67091254.15686654
def getEmissionText ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/emission/text" )
response = request . text
getEmissionResp = json . loads ( response )
jsonResponse = getEmissionResp
return ( jsonResponse )
getEmissionText ()
# Response
67091254.15686654
Text Request
Parameter
Description
emission/text
emission text request
Text Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
text
Emission Details in simple TEXT Response
Reward
Returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/reward
# Response
{
"found" :true,
"reward" :6.311586903
}
def getReward ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/reward" )
response = request . text
getRewardResp = json . loads ( response )
jsonResponse = getRewardResp
return ( jsonResponse )
getReward ()
# Response
{
'reward' : 6.311586903 ,
'found' : True
}
Get the current reward amount.
Request
Parameter
Description
reward
Reward Request
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Current reward Details in JSON Response
Info: /api/reward requests can return both JSON format as well as simple text.
Returns a text response
# Request
curl -XGET https://explorer.theqrl.org/api/reward/text
# Response
6.311586903
def getRewardText ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/reward/text" )
response = request . text
getRewardTextResp = json . loads ( response )
jsonResponse = getRewardTextResp
return ( jsonResponse )
getRewardText ()
# Response
6.311586903
Text Request
Parameter
Description
reward/text
reward text request
Text Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
text
Emission Details in simple TEXT Response
RewardShor
Returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/rewardshor
# Response
{
"found" :true,
"reward" :6311582702
}
def getRewardShor ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/rewardshor" )
response = request . text
getRewardShorResp = json . loads ( response )
jsonResponse = getRewardShorResp
return ( jsonResponse )
getRewardShor ()
# Response
{
'reward' : 6311582702 ,
'found' : True
}
Get the current reward amount in shor.
Request
Parameter
Description
rewardshor
rewardshor request
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Reward Details in shor JSON Response
Info: /api/rewardshor requests can return both JSON format as well as simple text.
Returns a text response
# Request
curl -XGET https://explorer.theqrl.org/api/rewardshor/text
# Response
6311582702
def getRewardShorText ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/rewardshor/text" )
response = request . text
getRewardShorTextResp = json . loads ( response )
jsonResponse = getRewardShorTextResp
return ( jsonResponse )
getRewardShor ()
# Response
6311582702
Text Request
Parameter
Description
rewardshor/text
rewardshor text request
Text Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
text
rewardshor Details in simple TEXT Response
Blockheight
Returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/blockheight
# Response
{
"found" :true,
"blockheight" :319606
}
def getBlockheight ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/blockheight" )
response = request . text
getBlockheightResp = json . loads ( response )
jsonResponse = getBlockheightResp
return ( jsonResponse )
getBlockheight ()
# Response
{
'blockheight' : 319608 ,
'found' : True
}
Get the current Blockheight.
Request
Parameter
Description
blockheight
blockheight Request
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
Blockheight Details in JSON Response
Info: /api/blockheight requests can return both JSON format as well as simple text.
Returns a text response
# Request
curl -XGET https://explorer.theqrl.org/api/blockheight/text
# Response
319606
def getBlockheightText ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/blockheight/text" )
response = request . text
getBlockheightTextResp = json . loads ( response )
jsonResponse = getBlockheightTextResp
return ( jsonResponse )
getBlockheightText ()
# Response
319608
Text Request
Parameter
Description
blockheight/text
rewardshor text request
Text Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
text
blockheight Details in simple TEXT Response
Network Status
This function only returns a json response
# Request
curl -XGET https://explorer.theqrl.org/api/status
# Response
{
"_id" :"r7h7u3ynXc4XPHngw" ,
"node_info" :
{
"version" :"1.1.11 python" ,
"state" :"SYNCED" ,
"num_connections" :33,
"num_known_peers" :22645,
"uptime" :"1765885" ,
"block_height" :"319612" ,
"block_last_hash" :
{
"0" :239,
"1" :173,
"2" :170,
"3" :80,
"4" :71,
"5" :106,
"6" :233,
"7" :132,
"8" :53,
"9" :240,
"10" :179,
"11" :60,
"12" :30,
"13" :139,
"14" :70,
"15" :140,
"16" :84,
"17" :108,
"18" :204,
"19" :169,
"20" :109,
"21" :244,
"22" :245,
"23" :191,
"24" :39,
"25" :108,
"26" :74,
"27" :179,
"28" :0,
"29" :0,
"30" :0,
"31" :0
} ,
"network_id" :"The sleeper must awaken"
} ,
"epoch" :"3196" ,
"uptime_network" :"19019880" ,
"block_last_reward" :"6311574300" ,
"block_time_mean" :"60" ,
"block_time_sd" :"51" ,
"coins_total_supply" :"105000000" ,
"coins_emitted" :"67071863648982756" ,
"block_timeseries" :
[{
"number" :"318173" ,
"difficulty" :"2335047113" ,
"timestamp" :"1548947468" ,
"time_last" :"142" ,
"time_movavg" :"52" ,
"hash_power" :2694285056,
"header_hash" :
{
"0" :201,
"1" :37,
"2" :128,
"3" :206,
"4" :234,
"5" :73,
"6" :50,
"7" :197,
"8" :19,
"9" :245,
"10" :1,
"11" :247,
"12" :106,
"13" :57,
"14" :73,
"15" :3,
"16" :144,
"17" :180,
"18" :250,
"19" :62,
"20" :173,
"21" :165,
"22" :222,
"23" :218,
"24" :239,
"25" :75,
"26" :30,
"27" :184,
"28" :1,
"29" :0,
"30" :0,
"31" :0
} ,
}]
}
Note: This response has been trunicated for clarity in this documentation.
def getStatus ():
import requests
import json
request = requests . get ( "https://explorer.theqrl.org/api/status" )
response = request . text
getStatusResp = json . loads ( response )
jsonResponse = getStatusResp
#return(jsonResponse)
return ( json . dumps ( jsonResponse , indent = 4 , sort_keys = True ))
getStatus ()
# Response
{
"_id" : "MHE7CqGAGyQ56ZjMo" ,
"block_last_reward" : "6311004012" ,
"block_time_mean" : "60" ,
"block_time_sd" : "54" ,
"block_timeseries" : [
{
"difficulty" : "2502531160" ,
"hash_power" : 2502531072 ,
"header_hash" : {
"0" : 230 ,
"1" : 205 ,
"10" : 179 ,
"11" : 244 ,
"12" : 53 ,
"13" : 255 ,
"14" : 225 ,
"15" : 99 ,
"16" : 98 ,
"17" : 58 ,
"18" : 96 ,
"19" : 99 ,
"2" : 30 ,
"20" : 15 ,
"21" : 183 ,
"22" : 7 ,
"23" : 101 ,
"24" : 79 ,
"25" : 64 ,
"26" : 75 ,
"27" : 177 ,
"28" : 0 ,
"29" : 0 ,
"3" : 63 ,
"30" : 0 ,
"31" : 0 ,
"4" : 101 ,
"5" : 136 ,
"6" : 146 ,
"7" : 224 ,
"8" : 222 ,
"9" : 151
},
"header_hash_prev" : {
"0" : 113 ,
"1" : 138 ,
"10" : 167 ,
"11" : 119 ,
"12" : 119 ,
"13" : 104 ,
"14" : 165 ,
"15" : 63 ,
"16" : 128 ,
"17" : 91 ,
"18" : 122 ,
"19" : 146 ,
"2" : 90 ,
"20" : 191 ,
"21" : 249 ,
"22" : 227 ,
"23" : 227 ,
"24" : 63 ,
"25" : 196 ,
"26" : 72 ,
"27" : 86 ,
"28" : 0 ,
"29" : 0 ,
"3" : 7 ,
"30" : 0 ,
"31" : 0 ,
"4" : 233 ,
"5" : 221 ,
"6" : 60 ,
"7" : 154 ,
"8" : 137 ,
"9" : 63
},
"number" : "318716" ,
"time_last" : "96" ,
"time_movavg" : "60" ,
"timestamp" : "1548979234"
},
{ "TRUNICATED FOR CLARITY" : "" },
{
"difficulty" : "2336533837" ,
"hash_power" : 2031768576 ,
"header_hash" : {
"0" : 54 ,
"1" : 201 ,
"10" : 249 ,
"11" : 239 ,
"12" : 246 ,
"13" : 144 ,
"14" : 132 ,
"15" : 98 ,
"16" : 136 ,
"17" : 84 ,
"18" : 217 ,
"19" : 222 ,
"2" : 251 ,
"20" : 51 ,
"21" : 138 ,
"22" : 235 ,
"23" : 92 ,
"24" : 220 ,
"25" : 101 ,
"26" : 231 ,
"27" : 210 ,
"28" : 0 ,
"29" : 0 ,
"3" : 50 ,
"30" : 0 ,
"31" : 0 ,
"4" : 25 ,
"5" : 231 ,
"6" : 101 ,
"7" : 13 ,
"8" : 210 ,
"9" : 215
},
"header_hash_prev" : {
"0" : 108 ,
"1" : 70 ,
"10" : 9 ,
"11" : 182 ,
"12" : 151 ,
"13" : 91 ,
"14" : 4 ,
"15" : 134 ,
"16" : 118 ,
"17" : 191 ,
"18" : 191 ,
"19" : 6 ,
"2" : 227 ,
"20" : 116 ,
"21" : 243 ,
"22" : 156 ,
"23" : 0 ,
"24" : 107 ,
"25" : 103 ,
"26" : 223 ,
"27" : 182 ,
"28" : 1 ,
"29" : 0 ,
"3" : 171 ,
"30" : 0 ,
"31" : 0 ,
"4" : 45 ,
"5" : 72 ,
"6" : 250 ,
"7" : 133 ,
"8" : 37 ,
"9" : 67
},
"number" : "320155" ,
"time_last" : "325" ,
"time_movavg" : "69" ,
"timestamp" : "1549066690"
}
],
"coins_emitted" : "67075290678706676" ,
"coins_total_supply" : "105000000" ,
"epoch" : "3201" ,
"node_info" : {
"block_height" : "320155" ,
"block_last_hash" : {
"0" : 54 ,
"1" : 201 ,
"10" : 249 ,
"11" : 239 ,
"12" : 246 ,
"13" : 144 ,
"14" : 132 ,
"15" : 98 ,
"16" : 136 ,
"17" : 84 ,
"18" : 217 ,
"19" : 222 ,
"2" : 251 ,
"20" : 51 ,
"21" : 138 ,
"22" : 235 ,
"23" : 92 ,
"24" : 220 ,
"25" : 101 ,
"26" : 231 ,
"27" : 210 ,
"28" : 0 ,
"29" : 0 ,
"3" : 50 ,
"30" : 0 ,
"31" : 0 ,
"4" : 25 ,
"5" : 231 ,
"6" : 101 ,
"7" : 13 ,
"8" : 210 ,
"9" : 215
},
"network_id" : "The sleeper must awaken" ,
"num_connections" : 33 ,
"num_known_peers" : 22649 ,
"state" : "SYNCED" ,
"uptime" : "1798331" ,
"version" : "1.1.11 python"
},
"uptime_network" : "19052326"
}
Get status of the blockchain including node details.
Request
Parameter
Description
status
Network status
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
status Details in JSON Response
Info: /api/status requests will only return in JSON format.
Parse the response using json tools in a language of your choice.
Mining stats
Get different mining stats.
Request
Parameter
Description
miningstats
Mining stats
Response
Parameter
Description
code
Error Code. Only appears if an exception is triggered.
json
status Details in JSON Response
JSON Response
Parameter
Description
block
Current blockheight of chain
hashrate
Current hashrate.*
difficulty
Current difficulty
blocktime
Current hashrate
* Hashrate is per block. To find your hashes/s, divide the hashrate
by the the blocktime
.
curl -s https://explorer.theqrl.org/api/miningstats
# response
{ "block" :"954426" ,"hashrate" :533590080,"difficulty" :"542483240" ,"blocktime" :"61" }
# Get just one value
curl -s "https://explorer.theqrl.org/api/miningstats" | jq '.hashrate'
# Get an approximate hashrate
expr $( curl -s "https://explorer.theqrl.org/api/miningstats" | jq '.hashrate' ) / 60
QRL Mining Protocol MiningAPI
Field
Type
Label
Description
height
uint64
GetBlockMiningCompatible GetBlockMiningCompatibleReq
Field
Type
Label
Description
height
uint64
Used for getlastblockheader and getblockheaderbyheight if height = 0, this means getlastblockheader
GetBlockMiningCompatibleResp
GetBlockToMine GetBlockToMineReq
Field
Type
Label
Description
wallet_address
bytes
GetBlockToMineResp
Field
Type
Label
Description
blocktemplate_blob
string
max length 112 bytes, otherwise xmr-stak will hiccup
difficulty
uint64
difficulty that the new block should meet
height
uint64
reserved_offset
uint32
SubmitMinedBlock SubmitMinedBlockReq
Field
Type
Label
Description
blob
bytes
blocktemplate_blob with the correct nonce
SubmitMinedBlockResp
Field
Type
Label
Description
error
bool
It seems there are no special fields for success/error reporting, does gRPC automatically give me something?
qrlwallet.proto AddAddressFromSeedReq
Field
Type
Label
Description
seed
string
Seed can be either hexseed or mnemonic
AddAddressFromSeedResp
AddressFromPKReq
Field
Type
Label
Description
pk
string
Private Key
AddressFromPKResp
AddNewAddressReq
Field
Type
Label
Description
height
uint64
Seed can be either hexseed or mnemonic
hash_function
string
AddNewAddressResp
AddNewAddressWithSlavesReq
Field
Type
Label
Description
height
uint64
Height of Master Address
number_of_slaves
uint64
hash_function
string
BalanceReq
Field
Type
Label
Description
address
string
BalanceResp
BlockByNumberReq
Field
Type
Label
Description
block_number
uint64
BlockReq
Field
Type
Label
Description
header_hash
string
BlockResp
ChangePassphraseReq
Field
Type
Label
Description
oldPassphrase
string
newPassphrase
string
ChangePassphraseResp
CoinBase
EncryptWalletReq
Field
Type
Label
Description
passphrase
string
EncryptWalletResp
GetRecoverySeedsReq
Field
Type
Label
Description
address
string
GetRecoverySeedsResp
GetWalletInfoReq GetWalletInfoResp
HeightReq HeightResp
LatticePublicKey
Field
Type
Label
Description
kyber_pk
string
dilithium_pk
string
ListAddressesReq ListAddressesResp
LockWalletReq LockWalletResp
Message
Field
Type
Label
Description
message_hash
string
NodeInfoReq NodeInfoResp
OTSReq
Field
Type
Label
Description
address
string
OTSResp
PlainAddressAmount
PlainGenesisBalance
PlainBlock
PlainTransaction
oneof transactionType
RelayMessageTxnReq
RelayMessageTxnBySlaveReq
RelaySlaveTxnBySlaveReq
Field
Type
Label
Description
slave_pks
bytes
repeated
access_types
uint32
repeated
fee
uint64
master_address
string
RelaySlaveTxnReq
RelayTokenTxnReq
RelayTokenTxnBySlaveReq
RelayTransferTokenTxnReq
RelayTransferTxnReq
RelayTransferTxnBySlaveReq
RelayTransferTokenTxnBySlaveReq
RelayTxnResp
RemoveAddressReq
Field
Type
Label
Description
address
string
RemoveAddressResp
Slave
Field
Type
Label
Description
slave_pks
string
repeated
access_types
uint32
repeated
Token
TransactionReq
Field
Type
Label
Description
tx_hash
string
TransactionResp
TransactionsByAddressReq
Field
Type
Label
Description
address
string
TransactionsByAddressResp
Transfer
Field
Type
Label
Description
addrs_to
string
repeated
amounts
uint64
repeated
TransferToken
Field
Type
Label
Description
token_txhash
string
addrs_to
string
repeated
amounts
uint64
repeated
UnlockWalletReq
Field
Type
Label
Description
passphrase
string
UnlockWalletResp
ValidAddressReq
Field
Type
Label
Description
address
string
ValidAddressResp
QRL State Info Protocol ForkState
Field
Type
Label
Description
initiator_headerhash
bytes
Stores the headerhash of the block initiated the fork recovery
fork_point_headerhash
bytes
Stores the headerhash of the block after which forked happened
old_mainchain_hash_path
bytes
repeated
Stores the hash path of old main chain which needs to be played
new_mainchain_hash_path
bytes
repeated
if the fork recovery fails
Alternate chain hash path which is eligible to become mainchain |
LastTransactions
QRL Base Protocol Base
GetNodeInfoReq GetNodeInfoResp
Field
Type
Label
Description
version
string
grpcProto
string
QRL Debug Protocol DebugAPI
This service describes the Debug API used for debugging
GetFullStateReq GetFullStateResp
QRL Legacy Protocol BKData
FBData
Field
Type
Label
Description
index
uint64
LegacyMessage
Adding old code to refactor while keeping things working
MRData
NoData
What did you expect, some data?
PBData
Field
Type
Label
Description
block
Block
PLData
Field
Type
Label
Description
peer_ips
string
repeated
public_port
uint32
PONGData SYNCData
Field
Type
Label
Description
state
string
VEData
Field
Type
Label
Description
version
string
genesis_prev_hash
bytes
rate_limit
uint64
LegacyMessage.FuncName
Name
Number
Description
VE
0
Version
PL
1
Peers List
PONG
2
Pong TODO: Obsolete
MR
3
Message received
SFM
4
Send Full Message
BK
5
Block
FB
6
Fetch request for block
PB
7
Push Block
BH
8
Block Height
TX
9
Transfer Transaction
LT
10
Lattice Transaction
EPH
11
Ephemeral
MT
12
Message Transaction
TK
13
Token Transaction
TT
14
Transfer Token Transaction
SL
15
Slave Transaction
SYNC
16
Add into synced list, if the node replies
CHAINSTATE
17
Chain State
HEADERHASHES
18
P2P_ACK
19
P2P Acknowledgement
Scalar Value Types
.proto Type
Notes
C++ Type
Java Type
Python Type
Bool
bool
boolean
boolean
Bytes
May contain any arbitrary sequence of bytes.
string
ByteString
str
Double
double
double
float
Fixed32
Always four bytes. More efficient than uint32 if values are often greater than 2^28.
uint32
int
int
Fixed64
Always eight bytes. More efficient than uint64 if values are often greater than 2^56.
uint64
long
int/long
Float
float
float
float
Int32
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.
int32
int
int
Int64
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.
int64
long
int/long
sfixed32
Always four bytes.
int32
int
int
sfixed64
Always eight bytes.
int64
long
int/long
sint32
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.
int32
int
int
sint64
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.
int64
long
int/long
String
A string must always contain UTF-8 encoded or 7-bit ASCII text.
string
String
str/unicode
uint32
Uses variable-length encoding.
uint32
int
int/long
uint64
Uses variable-length encoding.
uint64
long
int/long