NAV Navbar
JavaScript cURL Python

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

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.

Important information

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.

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.

API Usage
QRL Protocol Main QRL Protocol
Wallet API Wallet API used for automating functions
Automatic Wallet API Expansion of the WalletAPI with unlimited* OTS slave trees
Explorer API For basic calls to query information from the network
QRL Mining Protocol The mining protocol used by the QRL
QRL Wallet Protocol Base wallet protocol for the QRL
QRL State Info Protocol
QRL Base Protocol
QRL Debug Protocol
QRL Legacy Protocol

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

Method Name Request Type Response Type
GetAddressFromPK GetAddressFromPKReq GetAddressFromPKResp
GetAddressState GetAddressStateReq GetAddressStateResp
GetKnownPeers GetKnownPeersReq GetKnownPeersResp
GetLatestData GetLatestDataReq GetLatestDataResp
GetMessageTxn MessageTxnReq TransferCoinsResp
GetNodeState GetNodeStateReq GetNodeStateResp
GetObject GetObjectReq GetObjectResp
GetPeersStat GetPeersStatReq GetPeersStatResp
GetSlaveTxn SlaveTxnReq TransferCoinsResp
GetStats GetStatsReq GetStatsResp
GetTokenTxn TokenTxnReq TransferCoinsResp
GetTransferTokenTxn TransferTokenTxnReq TransferCoinsResp
PushTransaction PushTransactionReq PushTransactionResp
TransferCoins TransferCoinsReq TransferCoinsResp

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;
}
Field Type Label Description
state AddressState

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;
}
Field Type Label Description
blockheaders BlockHeaderExtended repeated
transactions TransactionExtended repeated
transactions_unconfirmed TransactionExtended repeated

GetMessageTxn

MessageTxnReq

Field Type Label Description
master_addr bytes
message bytes
fee uint64
xmss_pk bytes

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;
    }
}
Field Type Label Description
found bool
address_state AddressState
transaction TransactionExtended
block_extended BlockExtended

GetPeersStat

GetPeersStatReq

message GetPeersStatReq { }

Represents a query to get connected peers stat

GetPeersStatResp

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

Field Type Label Description
master_addr bytes
slave_pks bytes repeated
access_types uint32 repeated
fee uint64
xmss_pk bytes

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

Field Type Label Description
master_addr bytes
symbol bytes
name bytes
owner bytes
decimals uint64
initial_balances AddressAmount repeated
fee uint64
xmss_pk bytes

GetTransferTokenTxn

TransferTokenTxnReq

Field Type Label Description
master_addr bytes
addresses_to bytes repeated
token_txhash bytes
amounts uint64 repeated
fee uint64
xmss_pk bytes

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;
}
Field Type Label Description
error_code PushTransactionResp.ResponseCode
error_description string
tx_hash bytes

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;
}
Field Type Label Description
extended_transaction_unsigned TransactionExtended

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);
    });
});
Field Type Label Description
address bytes
balance uint64
nonce uint64 FIXME: Discuss. 32 or 64 bits?
ots_bitfield bytes repeated
transaction_hashes bytes repeated
tokens AddressState.TokensEntry repeated
latticePK_list LatticePK repeated
slave_pks_access_type AddressState.SlavePksAccessTypeEntry repeated
ots_counter uint64

AddressState.SlavePksAccessTypeEntry

Field Type Label Description
key string
value uint32

AddressState.TokensEntry

Field Type Label Description
key string
value uint64

Block

Field Type Label Description
header BlockHeader
transactions Transaction repeated
genesis_balance GenesisBalance repeated This is only applicable to genesis blocks

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

Field Type Label Description
header BlockHeader
extended_transactions TransactionExtended repeated
genesis_balance GenesisBalance repeated This is only applicable to genesis blocks
size uint64

BlockHeader

Field Type Label Description
hash_header bytes Header
block_number uint64
timestamp_seconds uint64
hash_header_prev bytes
reward_block uint64
reward_fee uint64
merkle_root bytes
mining_nonce uint32
extra_nonce uint64

BlockHeaderExtended

Field Type Label Description
header BlockHeader
transaction_count TransactionCount

BlockHeightData

Field Type Label Description
block_number uint64
block_headerhash bytes
cumulative_difficulty bytes

BlockMetaData

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

BlockMetaDataList

Field Type Label Description
block_number_hashes BlockMetaData repeated

BlockNumberMapping

Field Type Label Description
headerhash bytes
prev_headerhash bytes

Empty

Empty message definition

EncryptedEphemeralMessage

Field Type Label Description
msg_id bytes b'NEW' or PRF
ttl uint64 Expiry Timestamp in seconds
ttr uint64 Time to relay
channel EncryptedEphemeralMessage.Channel
nonce uint64 nonce
payload bytes JSON content, encrypted by aes256_symkey

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

Field Type Label Description
node_info NodeInfo
block Block

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
header_hash bytes
cumulative_difficulty bytes
version string
timestamp uint64

NodeHeaderHash

Field Type Label Description
block_number uint64
headerhashes bytes repeated

NodeInfo

Field Type Label Description
version string
state NodeInfo.State
num_connections uint32
num_known_peers uint32
uptime uint64 Uptime in seconds
block_height uint64
block_last_hash bytes
network_id string

P2PAcknowledgement

Field Type Label Description
bytes_processed uint32

Peer

Field Type Label Description
ip string

PeerInfo

Field Type Label Description
peer_ip bytes
port uint32
banned_timestamp uint32
credibility uint32
last_connections_timestamp uint32 repeated

PeerStat

Field Type Label Description
peer_ip bytes
port uint32
node_chain_state NodeChainState

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

TokenMetadata

Field Type Label Description
token_txhash bytes
transfer_token_tx_hashes bytes repeated

Transaction

Field Type Label Description
master_addr bytes
fee uint64
public_key bytes
signature bytes
nonce uint64
transaction_hash bytes
transfer Transaction.Transfer
coinbase Transaction.CoinBase
latticePK Transaction.LatticePublicKey
message Transaction.Message
token Transaction.Token
transfer_token Transaction.TransferToken
slave Transaction.Slave

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

Field Type Label Description
symbol bytes
name bytes
owner bytes
decimals uint64
initial_balances AddressAmount repeated

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

Field Type Label Description
count TransactionCount.CountEntry repeated

TransactionCount.CountEntry

Field Type Label Description
key uint32
value uint32

TransactionExtended

Field Type Label Description
header BlockHeader
tx Transaction
addr_from bytes
size uint64
timestamp_seconds uint64

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.

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.

  1. Install the QRL Node and sync
  2. Run the QRL wallet daemon
    • qrl_walletd
  3. Install golang-go v1.8 or greater
  4. Clone walletd-rest-proxy from the repo hosted at https://github.com/theQRL/walletd-rest-proxy
    • go get github.com/theQRL/walletd-rest-proxy
  5. Start the wallet-rest-proxy
    • This allows connection to the WalletDaemon
  6. Send commands using cURL and begin using the QRL!
# 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

Method Name Request Type Response Type
AddNewAddress AddNewAddressReq AddNewAddressResp
ChangePassphrase ChangePassphraseReq ChangePassphraseResp
EncryptWallet EncryptWalletReq EncryptWalletResp
GetAddressFromPK GetAddressFromPKReq GetAddressFromPKResp
GetBalance BalanceReq BalanceResp
GetBlock BlockReq BlockResp
GetBlockByNumber BlockByNumberReq BlockResp
GetHeight HeightReq HeightResp
GetNodeInfo GetNodeInfoReq GetNodeInfoResp
GetOTS OTSReq OTSResp
GetRecoverySeeds GetRecoverySeedsReq GetRecoverySeedsResp
GetTotalBalance GetTotalBalanceReq GetTotalBalanceResp
GetTransaction TransactionReq TransactionResp
GetTransactionsByAddress TransactionsByAddressReq ransactionsByAddressResp
GetWalletInfo GetWalletInfoReq GetWalletInfoResp
IsValidAddress ValidAddressReq ValidAddressResp
ListAddresses ListAddressesReq ListAddressesResp
LockWallet LockWalletReq LockWalletResp
RelayMessageTxn RelayMessageTxnReq RelayTxnResp
RelaySlaveTxn RelaySlaveTxnReq RelayTxnResp
RelayTokenTxn RelayTokenTxnReq RelayTxnResp
RelayTransferTxn RelayTransferTxnReq RelayTxnResp
RelayTransferTokenTxn RelayTransferTokenTxnReq RelayTxnResp
RemoveAddress RemoveAddressReq RemoveAddressResp
UnlockWallet UnlockWalletReq UnlockWalletResp

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.

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.

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.

Method Name Request Type Response Type
AddNewAddressWithSlaves AddNewAddressWithSlavesReq AddNewAddressResp
RelayMessageTxnBySlave RelayMessageTxnBySlaveReq RelayTxnResp
RelaySlaveTxnBySlave RelaySlaveTxnBySlaveReq RelayTxnResp
RelayTokenTxnBySlave RelayTokenTxnBySlaveReq RelayTxnResp
RelayTransferTxnBySlave RelayTransferTxnBySlaveReq RelayTxnResp
RelayTransferTokenTxnBySlave RelayTransferTokenTxnBySlaveReq RelayTxnResp

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.

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.

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.

For an easy to read output use a browser add-on like Chrome's jsonview and browse to the endpoint.

Explorer API Methods

Method Name Endpoint Description
Block /api/block/# Get data from a specific block number
Transaction /api/tx/ Get data from a transaction by number
Address /api/a/ Get data from an address
Emission /api/emission Get the total emission of coins to date
reward /api/reward Get the current payout reward value
rewardshor /api/rewardshor Get the current reward in shor
blockheight /api/blockheight Get the current blockheight
status /api/status Get the status of the network
miningstats /api/miningstats Get mining stats

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

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

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

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

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

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

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

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

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

Method Name Request Type Response Type Description
GetLastBlockHeader GetLastBlockHeaderReq GetLastBlockHeaderResp
GetBlockMiningCompatible GetBlockMiningCompatibleReq GetBlockMiningCompatibleResp
GetBlockToMine GetBlockToMineReq GetBlockToMineResp
SubmitMinedBlock SubmitMinedBlockReq SubmitMinedBlockResp

GetLastBlockHeader

GetLastBlockHeaderReq

Field Type Label Description
height uint64

GetLastBlockHeaderResp

Field Type Label Description
difficulty uint64
height uint64
timestamp uint64
reward uint64
hash string
depth uint64

GetBlockMiningCompatible

GetBlockMiningCompatibleReq

Field Type Label Description
height uint64 Used for getlastblockheader and getblockheaderbyheight if height = 0, this means getlastblockheader

GetBlockMiningCompatibleResp

Field Type Label Description
blockheader BlockHeader
blockmetadata BlockMetaData

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

Field Type Label Description
code uint32
error string
address string

AddressFromPKReq

Field Type Label Description
pk string Private Key

AddressFromPKResp

Field Type Label Description
code uint32
error string
address string

AddNewAddressReq

Field Type Label Description
height uint64 Seed can be either hexseed or mnemonic
hash_function string

AddNewAddressResp

Field Type Label Description
code uint32
error string
address string

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

Field Type Label Description
code uint32
error string
balance uint64

BlockByNumberReq

Field Type Label Description
block_number uint64

BlockReq

Field Type Label Description
header_hash string

BlockResp

Field Type Label Description
code uint32
error string
block PlainBlock

ChangePassphraseReq

Field Type Label Description
oldPassphrase string
newPassphrase string

ChangePassphraseResp

Field Type Label Description
code uint32
error string

CoinBase

Field Type Label Description
addr_to string
amount uint64

EncryptWalletReq

Field Type Label Description
passphrase string

EncryptWalletResp

Field Type Label Description
code uint32
error string

GetRecoverySeedsReq

Field Type Label Description
address string

GetRecoverySeedsResp

Field Type Label Description
code uint32
error string
hexseed string
mnemonic string

GetWalletInfoReq

GetWalletInfoResp

Field Type Label Description
code uint32
error string
version uint32
address_count uint64
is_encrypted bool

HeightReq

HeightResp

Field Type Label Description
code uint32
error string
height uint64

LatticePublicKey

Field Type Label Description
kyber_pk string
dilithium_pk string

ListAddressesReq

ListAddressesResp

Field Type Label Description
code uint32
error string
addresses string repeated

LockWalletReq

LockWalletResp

Field Type Label Description
code uint32
error string

Message

Field Type Label Description
message_hash string

NodeInfoReq

NodeInfoResp

Field Type Label Description
code uint32
error string
version string
num_connections string
num_known_peers string
uptime uint64 Uptime in seconds
block_height uint64
block_last_hash string
network_id string

OTSReq

Field Type Label Description
address string

OTSResp

Field Type Label Description
code uint32
error string
ots_bitfield bytes repeated
next_unused_ots_index uint64

PlainAddressAmount

Field Type Label Description
address string
amount uint64

PlainGenesisBalance

Field Type Label Description
address string
amount uint64

PlainBlock

Field Type Label Description
header PlainBlockHeader
transactions PlainTransaction repeated
genesis_balance PlainGenesisBalance repeated

PlainBlockHeader

Field Type Label Description
hash_header string
block_number uint64
timestamp_seconds uint64
hash_header_prev string
reward_block uint64
reward_fee uint64
merkle_root string
mining_nonce uint32
extra_nonce uint64

PlainTransaction

Field Type Label Description
master_addr string
fee uint64
public_key string
signature string
nonce uint64
transaction_hash string
signer_addr string

oneof transactionType

Field Type Label Description
transfer Transfer
coinbase Coinbase
latticePK LatticePublicKey
message Message
token Token
transfer_token TransferToken
slave Slave

RelayMessageTxnReq

Field Type Label Description
message string
fee uint64
master_address string
signer_address string
ots_index uint64

RelayMessageTxnBySlaveReq

Field Type Label Description
message string
fee uint64
master_address string

RelaySlaveTxnBySlaveReq

Field Type Label Description
slave_pks bytes repeated
access_types uint32 repeated
fee uint64
master_address string

RelaySlaveTxnReq

Field Type Label Description
slave_pks bytes repeated
access_types uint32 repeated
fee uint64
master_address string
signer_address string
ots_index uint64

RelayTokenTxnReq

Field Type Label Description
symbol string
name string
owner string
decimals uint64
addresses string repeated
amounts uint64 repeated
fee uint64
master_address string
signer_address string
ots_index uint64

RelayTokenTxnBySlaveReq

Field Type Label Description
symbol string
name string
owner string
decimals uint64
addresses string repeated
amounts uint64 repeated
fee uint64
master_address string

RelayTransferTokenTxnReq

Field Type Label Description
addresses_to string repeated
token_txhash string
amounts uint64 repeated
fee uint64
master_address string
signer_address string
ots_index uint64

RelayTransferTxnReq

Field Type Label Description
addresses_to string repeated
amounts uint64 repeated
fee uint64
master_address string
signer_address string
ots_index uint64

RelayTransferTxnBySlaveReq

Field Type Label Description
addresses_to string repeated
amounts uint64 repeated
fee uint64
master_address string

RelayTransferTokenTxnBySlaveReq

Field Type Label Description
addresses_to string repeated
token_txhash string
amounts uint64 repeated
fee uint64
master_address string

RelayTxnResp

Field Type Label Description
code uint32
error string
tx PlainTransaction

RemoveAddressReq

Field Type Label Description
address string

RemoveAddressResp

Field Type Label Description
code uint32
error string

Slave

Field Type Label Description
slave_pks string repeated
access_types uint32 repeated

Token

Field Type Label Description
symbol string
name string
owner string
decimals string
initial_balances PlainAddressAmount repeated

TransactionReq

Field Type Label Description
tx_hash string

TransactionResp

Field Type Label Description
code uint32
error string
tx PlainTransaction
confirmations string
block_number uint64
block_header_hash string

TransactionsByAddressReq

Field Type Label Description
address string

TransactionsByAddressResp

Field Type Label Description
code uint32
error string
mini_transactions MiniTransaction repeated
balance uint64

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

Field Type Label Description
code uint32
error string

ValidAddressReq

Field Type Label Description
address string

ValidAddressResp

Field Type Label Description
code uint32
error string
valid string

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

Field Type Label Description
tx_metadata TransactionMetadata repeated

TransactionMetadata

Field Type Label Description
transaction Transaction
block_number uint64
timestamp uint64

QRL Base Protocol

Base

Method Name Request Type Response Type Description
GetNodeInfo GetNodeInfoReq GetNodeInfoResp

GetNodeInfoReq

GetNodeInfoResp

Field Type Label Description
version string
grpcProto string

QRL Debug Protocol

DebugAPI

This service describes the Debug API used for debugging

Method Name Request Type Response Type Description
GetFullState GetFullStateReq GetFullStateResp

GetFullStateReq

GetFullStateResp

Field Type Label Description
coinbase_state AddressState
addresses_state AddressState repeated

QRL Legacy Protocol

BKData

Field Type Label Description
mrData MRData
block Block

FBData

Field Type Label Description
index uint64

LegacyMessage

Adding old code to refactor while keeping things working

Field Type Label Description
func_name LegacyMessage.FuncName
noData NoData
veData VEData
plData PLData
pongData PONGData
mrData MRData
block Block
fbData FBData
pbData PBData
bhData BlockHeightData
txData Transaction
mtData Transaction
tkData Transaction
ttData Transaction
ltData Transaction
slData Transaction
ephData EncryptedEphemeralMessage
syncData SYNCData
chainStateData NodeChainState
nodeHeaderHash NodeHeaderHash
p2pAckData P2PAcknowledgement

MRData

Field Type Label Description
hash bytes FIXME: rename this to block_headerhash
type LegacyMessage.FuncName FIXME: type/string what is this
stake_selector bytes
block_number uint64
prev_headerhash bytes
reveal_hash bytes

NoData

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