Daemon RPC API Reference

Introduction

This is a list of the ryo-daemon-rpc calls, their inputs and outputs, and examples of each. If you need wallet-rpc-calls refer to: Wallet RPC API Reference




JSON RPC Methods

get_block_count

Aliases: getblockcount

Look up how many blocks are in the longest chain known to the node.

Output

  • count unsigned int

    Number of blocks in longest chain seen by the node.

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block_count"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "count": 191888,
    "status": "OK"
  }
}

on_get_block_hash

Look up a block's hash by its height.

Input

    block height int array of length 1 Required

Output

  • block hash string

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "on_get_block_hash",
    "params": [
      123456
    ]
  }'
Response
{
  "id":"0",
  "jsonrpc":"2.0",
  "result":"b095915253b892d27b65000a6a15208054868d52654af964245c84613904b178"
}

get_block_template

Aliases: getblocktemplate

Get a block template on which mining a new block.

Input

  • wallet_address string Required

    Address of wallet to receive coinbase transactions if block is successfully mined.

  • reserve_size unsigned int Required

    Reserve size.

Output

  • blocktemplate_blob string

    Blob on which to try to mine a new block.

  • blockhashing_blob string

    Blob on which to try to find a valid nonce.

  • difficulty unsigned int

    Difficulty of next block.

  • expected_reward unsigned int

    Coinbase reward expected to be received if block is successfully mined.

  • height unsigned int

    Height on which to mine.

  • prev_hash string

    Hash of the most recent block on which to mine the next block.

  • reserved_offset unsigned int

    Reserved offset.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block_template",
    "params": {
      "wallet_address": "RYoLshX6LjnhVXCsuejzkx4ayP52N1YcWinMtUqXVbE85uD7HYwwfKH15KAXiYEwo9SCA96Yfg3gVT6CQBqyp1w9cL1zVLjCUXf",
      "reserve_size": 60
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "blockhashing_blob": "05058fabf1df0506d7f32353343fc8e690364f411845d37d7c5fbe481b719234c9987211a2a7b70000000034a19e43a430a390456c1719870416e651ddac28965a7d6e70f0776e0f08b9e205",
    "blocktemplate_blob": "05058fabf1df0506d7f32353343fc8e690364f411845d37d7c5fbe481b719234c9987211a2a7b70000000003f59e0c01ffb99e0c01c096df9bb501021d0da234cedf350494d1d4e6c5ab36ecefe397b94a11b9d13c0bd6f0b64a3aa35f01ddc6f501df42144e4ecd470cc720edd85f85bcf9bc1851955c4fcd3227283b93023c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000422505392e7c6efe9090bc3eb253e98e7f42c0e4af7ddc81c9cf933c054546feb2d7514fcef282ee6019b7217d67d1ef86270e6d376b4e08762f7baa6bf2cdf8e0b7a92a2315faf46f40c0c7d9a0e5716a58a41fc35f55235471e3ac6268716883c0018a44bf15e0554bf8c57030622e0a79b05921ff5836b0409df7e9615e0cf",
    "difficulty": 963430375,
    "expected_reward": 48645000000,
    "height": 200505,
    "prev_hash": "06d7f32353343fc8e690364f411845d37d7c5fbe481b719234c9987211a2a7b7",
    "reserved_offset": 128,
    "status": "OK",
    "untrusted": false
  }
}

submit_block

Aliases: submitblock

Submit a mined block to the network.

Input

  • Block blob data array of strings Required

    list of block blobs which have been mined. See get_block_template to get a blob on which to mine.

Output

  • status string

    Block submit status.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "submit_block",
    "params": [
      "5ccf1512a68a56799ce2b80d5672ed8a2ee06ac3d1b229c0aa990f2a7b743257"
    ]
  }'
Response
{
  "error": {
    "code": -6,
    "message": "Wrong block blob"
  },
  "id": "0",
  "jsonrpc": "2.0"
}

get_last_block_header

Aliases: getlastblockheader

Block header information for the most recent block is easily retrieved with this method. No inputs are needed.

Output

  • block_header

    A structure containing block header information

    • block_size unsigned int

      The block size in bytes.

    • depth unsigned int

      The number of blocks succeeding this block on the blockchain. A larger number means an older block.

    • difficulty unsigned int

      The strength of the Ryo network based on mining power.

    • hash unsigned int

      The hash of this block.

    • height unsigned int

      The number of blocks preceding this block on the blockchain.

    • major_version unsigned int

      The major version of the ryo protocol at this block height.

    • minor_version unsigned int

      The minor version of the ryo protocol at this block height.

    • nonce unsigned int

      a cryptographic random one-time number used in mining a Ryo block.

    • num_txes unsigned int

      Number of transactions in the block, not counting the coinbase tx.

    • orphan_status boolean

      Usually false. If true, this block is not part of the longest chain.

    • prev_hash string

      The hash of the block immediately preceding this block in the chain.

    • reward unsigned int

      The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 Ryo = 1e12 atomic units.

    • timestamp unsigned int

      The unix time at which the block was recorded into the blockchain.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_last_block_header"
  }'
Response
{
  "id":"0",
  "jsonrpc":"2.0",
  "result":{
    "block_header":{
      "block_size":99,
      "depth":0,
      "difficulty":781134457,
      "hash":"6f27aac753bbe51030847319c64e0b0f1d4ced4518613422a85159822fb7c167",
      "height":191929,
      "major_version":5,
      "minor_version":5,
      "nonce":3252007811,
      "num_txes":0,
      "orphan_status":false,
      "prev_hash":"fe1020f3c74ea7b852176334859d80e87e5b7cb17926976d05f10a85217a8b3b",
      "reward":41970000000,
      "timestamp":1541163146
    },
    "status":"OK",
    "untrusted":false
  }
}

get_block_header_by_hash

Aliases: getblockheaderbyhash

Block header information can be retrieved using either a block's hash or height. This method includes a block's hash as an input parameter to retrieve basic information about the block.

Input

  • hash string Required

    The block's sha256 hash.

Output

  • block_header

    A structure containing block header information. See get_last_block_header.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block_header_by_hash",
    "params": {
      "hash": "5e47a6519f68ccfa6dbd834311ecab9a5231a02ef8bd0c3cc8b42735115f3555"
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "block_header": {
      "block_size": 99,
      "depth": 9,
      "difficulty": 749971010,
      "hash": "5e47a6519f68ccfa6dbd834311ecab9a5231a02ef8bd0c3cc8b42735115f3555",
      "height": 191922,
      "major_version": 5,
      "minor_version": 5,
      "nonce": 1006992908,
      "num_txes": 0,
      "orphan_status": false,
      "prev_hash": "f2bb09a007e4b2f3afbfa31a1fb78a750a4873c7b1d2abf43a610f0a00ac6114",
      "reward": 41970000000,
      "timestamp": 1541161657
    },
    "status": "OK",
    "untrusted": false
  }
}

get_block_header_by_height

Aliases: getblockheaderbyheight

Similar to get_block_header_by_hash above, this method includes a block's height as an input parameter to retrieve basic information about the block.

Input

  • height unsigned int Required

    The block's height.

Output

  • block_header

    A structure containing block header information. See get_last_block_header.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block_headerby_height",
    "params": {
      "height": 1345
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "block_header": {
      "block_size": 99,
      "depth": 9,
      "difficulty": 749971010,
      "hash": "5e47a6519f68ccfa6dbd834311ecab9a5231a02ef8bd0c3cc8b42735115f3555",
      "height": 191922,
      "major_version": 5,
      "minor_version": 5,
      "nonce": 1006992908,
      "num_txes": 0,
      "orphan_status": false,
      "prev_hash": "f2bb09a007e4b2f3afbfa31a1fb78a750a4873c7b1d2abf43a610f0a00ac6114",
      "reward": 41970000000,
      "timestamp": 1541161657
    },
    "status": "OK",
    "untrusted": false
  }
}

get_block_headers_range

Aliases: getblockheadersrange

Similar to get_block_header_by_height above, but for a range of blocks. This method includes a starting block height and an ending block height as parameters to retrieve basic information about the range of blocks.

Input

  • start_height unsigned int Required

    The starting block's height.

  • end_height unsigned int Required

    The ending block's height.

Output

  • headers

    array of block_header (a structure containing block header information. See get_last_block_header ).

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block_headers_range",
    "params": {
      "start_height": 123,
      "end_height": 125
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "headers": [
      {
        "block_size": 80,
        "depth": 191809,
        "difficulty": 16359,
        "hash": "5f2c43760f54e7c4ac529e731631b21e9099a705851309742a61919a1b47effb",
        "height": 123,
        "major_version": 1,
        "minor_version": 1,
        "nonce": 2054154951,
        "num_txes": 0,
        "orphan_status": false,
        "prev_hash": "3a959d549804eb325432b06d0d7f5964834bd2c9cea33a4329b4ac08f4ee6304",
        "reward": 32000000000,
        "timestamp": 1492507280
      },
      {
        "block_size": 90,
        "depth": 191808,
        "difficulty": 16525,
        "hash": "4aca8ef763241978e3fdc0af6fb55322ac28fa4a4401c2c396d9259bb7d0b2fc",
        "height": 124,
        "major_version": 1,
        "minor_version": 1,
        "nonce": 2266,
        "num_txes": 0,
        "orphan_status": false,
        "prev_hash": "5f2c43760f54e7c4ac529e731631b21e9099a705851309742a61919a1b47effb",
        "reward": 32000000000,
        "timestamp": 1492507283
      },
      {
        "block_size": 90,
        "depth": 191807,
        "difficulty": 16713,
        "hash": "0d6d59bfb02a5528d1799734c3eb0ab2158b4f612f40184dd00ebc423f81e5b0",
        "height": 125,
        "major_version": 1,
        "minor_version": 1,
        "nonce": 443,
        "num_txes": 0,
        "orphan_status": false,
        "prev_hash": "4aca8ef763241978e3fdc0af6fb55322ac28fa4a4401c2c396d9259bb7d0b2fc",
        "reward": 32000000000,
        "timestamp": 1492507339
      }
    ],
    "status": "OK",
    "untrusted": false
  }
}

get_block

Aliases: getblock

Full block information can be retrieved by either block height or hash, like with the above block header calls. For full block information, both lookups use the same method, but with different input parameters.

Input

  • height unsigned int Required

    The block's height.

  • OR
  • hash string Required

    The block's hash.

Output

  • blob string

    Hexadecimal blob of block information.

  • block_header string

    A structure containing block header information. See get_last_block_header.

  • json json string

    JSON formatted block details:

    • major_version

      Same as in block header.

    • minor_version

      Same as in block header.

    • timestamp

      Same as in block header.

    • prev_id

      Same as prev_hash in block header.

    • nonce

      Same as in block header.

    • miner_tx

      Miner transaction information

      • version

        Transaction version number.

      • unlock_time

        The block height when the coinbase transaction becomes spendable.

      • vin

        List of transaction inputs:

        • gen

          Miner txs are coinbase txs, or "gen".

          • height

            This block height, a.k.a. when the coinbase is generated.

      • vout

        List of transaction outputs. Each output contains:

        • amount

          The amount of the output, in atomic units.

        • target

          structure with the following parameters:

          • key string

      • extra

        Usually called the "transaction ID" but can be used to include any random 32 byte/64 character hex string.

      • signatures

        Contain signatures of tx signers. Coinbased txs do not have signatures.

    • tx_hashes

      List of hashes of non-coinbase transactions in the block. If there are no other transactions, this will be an empty list.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_block",
    "params": {
      "height": 345
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "block_header": {
      "block_size": 99,
      "depth": 0,
      "difficulty": 781134457,
      "hash": "6f27aac753bbe51030847319c64e0b0f1d4ced4518613422a85159822fb7c167",
      "height": 191929,
      "major_version": 5,
      "minor_version": 5,
      "nonce": 3252007811,
      "num_txes": 0,
      "orphan_status": false,
      "prev_hash": "fe1020f3c74ea7b852176334859d80e87e5b7cb17926976d05f10a85217a8b3b",
      "reward": 41970000000,
      "timestamp": 1541163146
    },
    "status": "OK",
    "untrusted": false
  }
}

get_connections

Retrieve information about incoming and outgoing connections to your node.

Output

  • connections

    List of all connections and their info:

    • address string

      The peer's address, actually IPv4 & port

    • avg_download unsigned int

      Average bytes of data downloaded by node.

    • avg_upload unsigned int

      Average bytes of data uploaded by node.

    • connection_id string

      The connection ID

    • current_download unsigned int

      Current bytes downloaded by node.

    • current_upload unsigned int

      Current bytes uploaded by node.

    • height unsigned int

      The peer height

    • host string

      The peer host

    • incoming boolean

      Is the node getting information from your node?

    • ip string

      The node's IP address.

    • live_time unsigned int

    • local_ip boolean

    • localhost boolean

    • peer_id string

      The node's ID on the network

    • port string

      The port that the node is using to connect to the network.

    • recv_count unsigned int

    • recv_idle_time unsigned int

    • send_count unsigned int

    • send_idle_time unsigned int

    • state string

    • support_flags unsigned int

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_connections"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "connections": [
      {
        "address": "5.2.65.14:50474",
        "avg_download": 0,
        "avg_upload": 0,
        "connection_id": "45d2d386075db6402d4d6025106ab4bc",
        "current_download": 2,
        "current_upload": 0,
        "height": 191935,
        "host": "5.2.65.14",
        "incoming": true,
        "ip": "5.2.65.14",
        "live_time": 2644028,
        "local_ip": false,
        "localhost": false,
        "peer_id": "2bc73e240c424687",
        "port": "50474",
        "recv_count": 1167493168,
        "recv_idle_time": 7,
        "send_count": 987026736,
        "send_idle_time": 7,
        "state": "state_normal",
        "support_flags": 1
      }
    ],
    "status": "OK"
  }
}

get_info

Aliases: getinfo

Retrieve general information about the state of your node and the network. See other RPC Methods /get_info (not JSON)

Output

  • alt_blocks_count unsigned int

    Number of alternative blocks to main chain.

  • block_size_limit unsigned int

    Maximum allowed block size

  • block_size_median unsigned int

    Median block size of latest 100 blocks

  • bootstrap_daemon_address string

    bootstrap node to give immediate usability to wallets while syncing by proxying RPC to it. (Note: the replies may be untrustworthy).

  • cumulative_difficulty unsigned int

    Cumulative difficulty of all blocks in the blockchain.

  • difficulty unsigned int

    Network difficulty (analogous to the strength of the network)

  • free_space unsigned int

    Available disk space on the node.

  • grey_peerlist_size unsigned int

    Grey Peerlist Size

  • height unsigned int

    Current length of longest chain known to daemon.

  • height_without_bootstrap unsigned int

    Current length of the local chain of the daemon.

  • incoming_connections_count unsigned int

    Number of peers connected to and pulling from your node.

  • mainnet boolean

    States if the node is on the mainnet ( true ) or not ( false ).

  • offline boolean

    States if the node is offline ( true ) or online ( false ).

  • outgoing_connections_count unsigned int

    Number of peers that you are connected to and getting information from.

  • rpc_connections_count unsigned int

    Number of RPC client connected to the daemon (Including this RPC request).

  • stagenet boolean

    States if the node is on the stagenet ( true ) or not ( false ).

  • start_time unsigned int

    Start time of the daemon, as UNIX time.

  • status string

    General RPC error code. "OK" means everything looks good.

  • target unsigned int

    Current target for next proof of work.

  • target_height unsigned int

    The height of the next block in the chain.

  • testnet boolean

    States if the node is on the testnet ( true ) or not ( false ).

  • top_block_hash string

    Hash of the highest block in the chain.

  • tx_count unsigned int

    Total number of non-coinbase transaction in the chain.

  • tx_pool_size unsigned int

    Number of transactions that have been broadcast but not included in a block.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

  • was_bootstrap_ever_used boolean

    States if a bootstrap node has ever been used since the daemon started.

  • white_peerlist_size unsigned int

    White Peerlist Size

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_info"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "alt_blocks_count": 9,
    "block_size_limit": 491520,
    "block_size_median": 14675,
    "bootstrap_daemon_address": "",
    "cumulative_difficulty": 311189958911269,
    "difficulty": 861184095,
    "free_space": 7467184128,
    "grey_peerlist_size": 636,
    "height": 192009,
    "height_without_bootstrap": 192009,
    "incoming_connections_count": 30,
    "is_ready": true,
    "mainnet": true,
    "offline": false,
    "outgoing_connections_count": 8,
    "rpc_connections_count": 2,
    "stagenet": false,
    "start_time": 1538516750,
    "status": "OK",
    "target": 240,
    "target_height": 191791,
    "testnet": false,
    "top_block_hash": "75c63c6231a9cf01ef4ac13497c4618d9de7cdb763deac6ad996cdd964814120",
    "tx_count": 510900,
    "tx_pool_size": 5,
    "untrusted": false,
    "was_bootstrap_ever_used": false,
    "white_peerlist_size": 451
  }
}

hard_fork_info

Look up information regarding hard fork voting and readiness.

Output

  • earliest_height unsigned int

    Block height at which hard fork would be enabled if voted in.

  • enabled boolean

    Tells if hard fork is enforced.

  • state unsigned int

    Current hard fork state: 0 (There is likely a hard fork), 1 (An update is needed to fork properly), or 2 (Everything looks good).

  • status string

    General RPC error code. "OK" means everything looks good.

  • threshold unsigned int

    Minimum percent of votes to trigger hard fork. Default is 80.

  • version unsigned int

    The major block version for the fork.

  • votes unsigned int

    Number of votes towards hard fork.

  • voting unsigned int

    Hard fork voting status.

  • window unsigned int

    Number of blocks over which current votes are cast. Default is 10080 blocks.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "hard_fork_info"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "earliest_height": 161500,
    "enabled": true,
    "state": 2,
    "status": "OK",
    "threshold": 0,
    "untrusted": false,
    "version": 5,
    "votes": 10080,
    "voting": 5,
    "window": 10080
  }
}

set_bans

Ban another node by IP.

Input

  • bans Required

    A list of nodes to ban:

    • host string Required

      Host to ban (IP in A.B.C.D form - will support I2P address in the future).

    • ip unsigned int Required

      IP address to ban, in Int format.

    • ban boolean Required

      Set true to ban.

    • seconds unsigned int Required

      Number of seconds to ban node.

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "set_bans",
    "params": {
      "bans": [
        {
          "host": "192.168.1.51",
          "ban": true,
          "seconds": 30
        }
      ]
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "status": "OK"
  }
}

get_bans

Get list of banned IPs.

Output

  • bans

    A list of nodes to ban:

    • host string

      Banned host (IP in A.B.C.D form).

    • ip unsigned int

      Banned IP address, in Int format.

    • seconds unsigned int

      Local Unix time that IP is banned until.

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_bans"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "status": "OK"
  }
}

or

{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "bans": [
      {
        "host": "188.166.98.76",
        "ip": 1281533628,
        "seconds": 26450
      },
      {
        "host": "206.81.3.50",
        "ip": 839078350,
        "seconds": 30467
      }
    ],
    "status": "OK"
  }
}

flush_txpool

Flush tx ids from transaction pool

Output

  • txids array of strings

    Optional, list of transactions IDs to flush from pool (all tx ids flushed if empty).

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "flush_txpool",
    "params": {
      "txids": [
        "d0f43e0e98b29c85fe918fb91319d34fed9d676bae2eeafa4447121697d7b69f",
        ""
      ]
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "status": "OK"
  }
}

get_output_histogram

Get a histogram of output amounts. For all amounts (possibly filtered by parameters), gives the number of outputs on the chain for that amount. RingCT outputs counts as 0 amount.

Input

  • amounts list of unsigned int Required

  • min_count unsigned int Required

  • max_count unsigned int Required

  • unlocked unsigned int Required

  • recent_cutoff unsigned int Required

Output

  • histogram

    list of histogram entries, in the following structure:

    • amount unsigned int

      Output amount in atomic units

    • total_instances unsigned int

      Output amount in atomic units

    • unlocked_instances unsigned int

      Output amount in atomic units

    • recent_instances unsigned int

      Output amount in atomic units

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_output_historam",
    "params": {
      "amounts": [
        2000000000
      ]
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "histogram": [
      {
        "amount": 2000000000,
        "recent_instances": 0,
        "total_instances": 0,
        "unlocked_instances": 0
      }
    ],
    "status": "OK",
    "untrusted": false
  }
}

get_coinbase_tx_sum

Get the coinbase ammount and the fees ammount for n last blocks starting at particular height.

Input

  • height unsigned int Required

    Block height from which getting the amounts

  • count unsigned int Required

    number of blocks to include in the sum

Output

  • emission_amount unsigned int

    amount of coinbase reward in atomic units

  • fee_amount unsigned int

    amount of fees in atomic units

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_coinbase_tx_um",
    "params": {
      "height": 6000,
      "count": 100
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "emission_amount": 3200000000000,
    "fee_amount": 217153700,
    "status": "OK"
  }
}

get_version

Give the node current version

Output

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

  • version unsigned int

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_version"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "untrusted": false,
    "version": 65555
  }
}

get_alternate_chains

Display alternative chains seen by the node.

Output

  • chains string

    array of chains, the following structure:

    • block_hash string

      the block hash of the first diverging block of this alternative chain.

    • difficulty unsigned int

      the cumulative difficulty of all blocks in the alternative chain.

    • height unsigned int

      the block height of the first diverging block of this alternative chain.

    • length unsigned int

      the length in blocks of this alternative chain, after divergence.

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_alternate_chains"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "chains": [
      {
        "block_hash": "7de4684a0c1ed90a257865c6a2cebb9ad896545fd4dcd8121088807038f3df42",
        "difficulty": 308653395254775,
        "height": 188941,
        "length": 1
      },
      {
        "block_hash": "f94f80f930a2a6844b49eed3e4f3a53ea55e8b02695be6f7360c344c419e821f",
        "difficulty": 303628545431417,
        "height": 182124,
        "length": 1
      }
    ],
    "status": "OK"
  }
}

relay_tx

Relay a list of transaction IDs.

Input

  • txids array of string Required

    list of transaction IDs to relay

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "relay_tx",
    "params": {
      "txids": [
        "f5612f356cd3b982f64c74831b52d0b91cb331151c01429e9320d468efa9ec82"
      ]
    }
  }'
Response
{
  "error": {
    "code": -32700,
    "message": "Parse error"
  },
  "id": 0,
  "jsonrpc": ""
}

or

{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "status": "OK"
  }
}

sync_info

Get synchronisation informations

Output

  • height unsigned int

  • peers array of peer structure

    defined as follows

    • info

      structure of connection info, as defined in get_connections

  • spans array of span structure

    defined as follows (optional, absent if node is fully synced):

    • connection_id string

      Id of connection

    • nblocks unsigned int

      number of blocks in that span

    • rate unsigned int

      connection rate

    • remote_address string

      peer address the node is downloading (or has downloaded) than span from

    • size unsigned int

      total number of bytes in that span's blocks (including txes)

    • speed unsigned int

      connection speed

    • start_block_height unsigned int

      block height of the first block in that span

  • status string

    General RPC error code. "OK" means everything looks good.

  • target_height unsigned int

    target height the node is syncing from (optional, absent if node is fully synced)

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_output_distribution",
    "params": {
      "amounts": [
        62878000
      ],
      "from_height": 12078
    }
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "distributions": [
      {
        "amount": 62878000,
        "base": 0,
        "distribution": "",
        "start_height": 12078
      }
    ],
    "status": "OK"
  }
}

get_txpool_backlog

Get all transaction pool backlog

Output

  • backlog

    array of structures tx_backlog_entry (in binary form):

    • blob_size unsigned int (in binary form)

    • fee unsigned int (in binary form)

    • time_in_pool unsigned int (in binary form)

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_txpool_backlog"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "backlog": "5`â–’â–’â–’â–’â–’â–’â–’â–’â–’75`â–’â–’
â–’â–’â–’â–’â–’â–’â–’5`â–’â–’â–’â–’â–’â–’â–’â–’â–’45`â–’â–’â–’â–’â–’â–’â–’â–’â–’45`â–’â–’â–’â–’â–’â–’â–’â–’â–’",
    "status": "OK",
    "untrusted": false
  }
}

get_output_distribution

Input

  • amounts array of unsigned int Required

    amounts to look for

  • cumulative boolean

    (optional, default is false) States if the result should be cumulative (true) or not (false)

  • from_height unsigned int

    (optional, default is 0) starting height to check from

  • to_height unsigned int

    (optional, default is 0) ending height to check up to

Output

  • distributions

    array of structure distribution as follows:

    • amount

      unsigned int

    • base

      unsigned int

    • distribution

      array of unsigned int

    • start_height

      unsigned int

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/json_rpc \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "0",
    "method": "get_txpool_backlog"
  }'
Response
{
  "id": "0",
  "jsonrpc": "2.0",
  "result": {
    "backlog": "5`â–’â–’â–’â–’â–’â–’â–’â–’â–’75`â–’â–’
â–’â–’â–’â–’â–’â–’â–’5`â–’â–’â–’â–’â–’â–’â–’â–’â–’45`â–’â–’â–’â–’â–’â–’â–’â–’â–’45`â–’â–’â–’â–’â–’â–’â–’â–’â–’",
    "status": "OK",
    "untrusted": false
  }
}

Other Daemon RPC Calls

Not all daemon RPC calls use the JSON_RPC interface. This section gives examples of these calls.
The data structure for these calls is different than the JSON RPC calls. Whereas the JSON RPC methods were called using the /json_rpc extension and specifying a method, these methods are called at their own extensions. For example:
Note: It is recommended to use JSON RPC where such alternatives exist, rather than the following methods. For example, the recommended way to get a node's height is via the JSON RPC methods get_info or get_last_block_header, rather than getheight below.
For calls that end with .bin , the data is exchanged in the form of binary, serialized objects, as defined in the Core RPC Server.

/get_height

Aliases: getheight

Get the node's current height.

Output

  • height unsigned int

    Current length of longest chain known to daemon.

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

Example request
curl -X POST http://127.0.0.1:12211/get_height \
  -H "Content-Type: application/json"
Response
{
  "height": 192251,
  "status": "OK",
  "untrusted": false
}

/get_blocks.bin

Aliases: /getblocks.bin

Get all blocks info. Binary request.

Input

  • block_ids

    binary array of hashes; first 10 blocks id goes sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on, and the last one is always genesis block

  • start_height unsigned int

  • prune boolean

Output

  • blocks

    array of block complete entries

  • current_height unsigned int

  • output_indices

    structure as follows

    • indices

      array of tx output indices, structure as follows:

      • indices array of unsigned int

  • start_height unsigned int

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_blocks_by_height.bin

Aliases: /getblocks_by_height.bin

Get blocks by height. Binary request.

Input

  • heights array of unsigned int

    list of block heights

Output

  • blocks

    array of block complete entries

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_hashes.bin

Aliases: /gethashes.bin

Get hashes. Binary request.

Input

  • block_ids binary array of hashes

    first 10 blocks id goes sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on, and the last one is always genesis block

  • start_height unsigned int

Output

  • current_height unsigned int

  • m_block_ids binary array of hashes

    see block_ids above.

  • start_height unsigned int

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_o_indexes.bin

Get global outputs of transactions. Binary request.

Input

  • txid

    binary txid

Output

  • o_indexes array of unsigned int

    List of output indexes

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_random_outs.bin

Aliases: /getrandom_outs.bin

Get a list of random outputs for a specific list of amounts. Binary request.

Input

  • amounts array of unsigned int

    amounts to get random outputs for

  • outs_count unsigned int

    Number of output to get

Output

  • outs

    array of structure

    • amount unsigned int

      • outs

        array of structure out_entry as follows:

        • global_amount_index unsigned int

        • public key

          public key

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_outs.bin

Get outputs. Binary request.

Input

  • outputs

    array of structure get_outputs_out as follows

    • amount unsigned int

    • index unsigned int

Output

  • outs

    array of structure outkey as follows:

    • amount unsigned int

    • height unsigned int

      block height of the output

    • key

      the public key of the output

    • mask

    • txid

      transaction id

    • unlocked boolean

      States if output is locked (false) or not (true)

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_outs.bin

Get outputs. Binary request.

Input

  • outputs

    array of structure get_outputs_out as follows

    • amount unsigned int

    • index unsigned int

Output

  • outs

    array of structure outkey as follows:

    • amount unsigned int

    • height unsigned int

      block height of the output

    • key

      the public key of the output

    • mask

    • txid

      transaction id

    • unlocked boolean

      States if output is locked (false) or not (true)

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted (true), or when the daemon is fully synced (false).

/get_random_rctouts.bin

Aliases: /getrandom_rctouts.bin

Get random RingCT outputs. Binary request.

Input

  • outs_count unsigned int

    amount of RingCT output to get

Output

  • outs

    array of structure out_entry as follows:

    • amount unsigned int

    • commitment

      RingCT Key

    • global_amount_index unsigned int

    • out_key

      public key

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

/get_transactions

Aliases: /gettransactions

Look up one or more transactions by hash.

Input

  • txs_hashes string list Required

    List of transaction hashes to look up.

  • decode_as_json boolean

    Optional ( false by default). If set true , the returned transaction information will be decoded rather than binary.

  • prune boolean

    Optional ( false by default).

Output

  • missed_tx array of strings

    Optional - returned if not empty. Transaction hashes that could not be found.

  • status

    General RPC error code. "OK" means everything looks good.

  • txs

    array of structure entry as follows:

    • as_hex string

      Full transaction information as a hex string.

    • as_json json string

      List of transaction info:

      • version

        Transaction version

      • unlock_time

        If not 0, this tells when a transaction output is spendable.

      • vin

        List of inputs into transaction:

        • key

          The public key of the previous output spent in this transaction.

          • amount

            The amount of the input, in atomic units.

          • key_offsets

            A list of integer offets to the input.

          • k_image

            The key image for the given input

      • vout

        List of outputs from transaction:

        • amount

          Amount of transaction output, in atomic units.

        • target

          Output destination information:

          • key

            The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output.

      • extra

        Usually called the "payment ID" but can be used to include any random 32 bytes.

      • signatures

        List of signatures used in ring signature to hide the true origin of the transaction.

    • block_height unsigned int

      block height including the transaction

    • block_timestamp unsigned int

      Unix time at which the block has been added to the blockchain

    • double_spend_seen boolean

      States if the transaction is a double-spend ( true ) or not ( false )

    • in_pool boolean

      States if the transaction is in pool ( true ) or included in a block ( false )

    • output_indices array of unsigned int

      transaction indexes

    • tx_hash string

      transaction hash

  • txs_as_hex string

    Full transaction information as a hex string (old compatibility parameter)

  • txs_as_json json string

    (Optional - returned if set in inputs. Old compatibility parameter) List of transaction as in as_json above:

Example request
curl -X POST http://127.0.0.1:12211/get_transactions \
  -H "Content-Type: application/json" \
  -d '{
    "txs_hashes": [
      "b049e3f468f3421e4cfe6feab4b69b27a26203b1370470da7103b340caa23a1e"
    ]
  }'
Response
{
  "status": "OK",
  "txs": [{
    "as_hex": "03000502000d9cfe4df0fa1ac7ed08c6f101c611c931df2fb414d80aed02f1037e15f7b3aa78fe29e26ac20ee62dca29eec2368afaed9467badb1a4f03f3ccc6470a02000deb8f28ab9e36eedb06b4e907d121eca201859401979d05d6028e029001767852ca72865af790144aa47d29844d47696b3a5233e783e7aecd9a9e4a9ecacd0102000db68112af9512deff25ab3d8be50ed6bd02a6bf11d9d106d918874d90030b214b2463f9eac5b410b1e3207df7ddaf77dd52962b4afbb40a71a79ed29a285c6802000da4d055f3870fcf9904f79906f90fc7ea01bddb038108b803d501c4011cad0214621cfd62916fc6e713a21e3dc39e6b85968a7c9dccb3b3089dea654fa16df602000db6963bb7bd028aa40ad6af14b39201c3de039d03b536b2c307b0d70b6b79be0110db8ed64be36f2d3d8e5a984811208e8f3e4a81ebd786429d4f4833a42dff97020002e9d6d245254bff7a315f2ac8bce62c9a1b6e9e0de9a457246b2e468f15f45fc30002f0d725c3069af8013cb238b729777b56e90fc41f130c37cc8ee62a743e15fd862c02090175ea3c296ac2437a010860fa1818a8e62063884825532997113c4cc0938bc01f0f0a9f26a6c7c0bfcc02e085b207c3f66ec3ddce80f67e12a9884d0f85686b5725ba733a7d7604ac308d42602c8b079a0b6a5b888c75ad01dbf79c08986bfc928f639c7424dc0eefc9d9fede87e61048d2613619cf3b9215856ba34f880533c839fd57c038db777916cd420f92e6e034146113807df465861a98a664a76f4cd2d4ff397ff8ed24932a71e49afd5ce0fa5301cd60e44a98830444a795d9334208e52cde92fcbf2e1bce1041908c54677dccb3960a5f905a85e09120cb39a0d84bbf65ca6e3473fa1e9c1ebd2d9603e53e65e961bc29d8a7c8335b08827194199e36e0aa23fc2160f04bc4bb81390c905b2fb38461bcef62426267ed58e319cd82f9a517507ff6e1fa5e7e3d06e2028de09d2dec89e18d6440dc8d181f2bbda92afc40b59bf10ae3f7778ae49a060ef77cd8fdee1f39b2f244163810f1323a17b61ca6b1eddf51e2f7c9cbb2751a566047831b93e6c40f60d998f3ff8822856383bb27cac229eb670c6f8e033aeca96a0d1ff3d7d1745f06af37bbd7f23423d90665e5d0244a7fd168fb19149a40047ab98174ca82438df3368a016ecc0e45682b067e0a8e42d8e1390445722d8a049955794fa0e2ba263358e3e408eafa696d2b8c82a56c73c4e7867ff45b976a030c827176c5a7369a46b01554208a9f18cf1270011870b80f9bc50cd5988b7d0b6f1ba4f677252f2a9848d9559a0c5d5e4bf29450ceb22bb67ba26195cfc64f03cf62171807f24bf26ca1fa6cbf8e230995d29afe516cd445eabc13846a3d960255000bebcf438351108f0588f4b00691a86bcaf74a21e5b8e7593579226d450e6fd998a7334d5f725055090f670ff91bc9e31c42b2e8f8a579bab302af38b10f5fd03ceb021fff02794c21d48f57dc1c2a1711304fa2482b7db59ea34eb8000baefd910fc420f8feceeeba01f79a016c3fe1d622a1d18837e1298b489a27590f3ec7d708bd600128e5fbf2ffa207ef15b50a98390c0835d8d37d9037c55e29096ee5a9ccc0c5f6a49d94e439842b34d30aab256a2f3f0d77f855aaabc40fcf056301848811e3f2b13d9a4b5fd3b5a3fbd37a32c857a5a03d7b6a6f43bb40130dd374ccec2f39784e9ec784c713b4bd9b5b3e1f5274060651d6b4caf016545901a91f08f9164dcbe30d24069a4acd1d4f98a576162d92ff35286740528a9fbc0fccbf38a41fcca929661ba2218fd82080b989d6f2375a6ef310310a16c0fdc300c95a62a75f0ce12b582769d69be4b73ebd45dc62328e53b2db7e5c6a1963bb056c4ae9109041618ffab8dd3d796eed7996985b8d848c24315e323db2e5dbc9086c07c5230a1e2bfc2769f36d9ccf8485f577abae6485b72abbbb04331c74ee060b23e7325d7263bc0123353d63feaa2d393d46d905e6b4078abbf0e9aefb470cfe9a30759f28920ca67eea05c50f7d5710ef247ef601ee328b0be7aa85a1990010c8f9ce03cf052559c7b6aa73982481c838f60bb09745fe9e07cce1dba4a60a37cf6d2c2da8f068b280e75910907e3b939e023832448214d72c82cea09268016508ef3b8b447b185389ec1389cba270868efb88cd9d4fcc2350f4756de3d3002edf8bfdb2c1c7f15a31b455f7e834ac82f5c72b32d2115ed29ba45175146d0337d7fe0019c027feb1c42143221f5dd3bd777bbb9dff14adaeb054daa9d26a0e4f3ba3b5147daf94187c844f5ff5138a214e27723d1f17463bfbd6ad99950c0927ea1d171336aa6e3e57e0864d8fc36e631dd2f6045b33029feed037834d640d2d0e2788b4212c309652a4fccc8caef6d36f5e853415f02932f99a7fa1f3300cc74279deae0ef9d22827934363e41f30aca544efb5f25d4136139b2d46ae150519767a29598ecaebb6476bbec4944c5453b88ddd140922f9f01d39f272fade091546d66de47f67de8fdbdc9e20bbe9263eb36d9266c4edd57e9b5a7a9b11b404c827331bda025d13ed2fce1e6b74b38171869bb901db14eb58e5fdbeae36ef0382a880b704371905e5573184c720887864bdbadd26f0a8e95e74f87b3c78bf062dbf106ffd060ab2239fd15071f0b0d16531b604e1aaf2076603ba6b515e740b93a8b6c36cbb35bb8e7e6b4cb9e3e0df69e0170bd4fb290b745c5b6c39098e030ff4c42af350e4e260b619c32dca21c57d7211f7f3cfb87a8208989ec7d132083c90759d8fb4c9a82189953b7461f765087105681347a6834820a90dab3a8508bd4682687e957369cabbd300dfdba1cc6284a7fd714d7ee5fa99de4f69a5690fa8974f6d04f1d57cdd8d826d79f87aef07dfcd78bdfc3a2869da8c45aa05940fcec2cbf2dcbcc0ae44142a53552b63abb2a5ab4b690f419575cc4e8ea084c60b6fd32431e66e48ffdae48a8378a04688a972058f70874d48f85247c4a7eb9c00b67bc3c7cc9cc100659953b40e6234714ccc8adf8b5a0e72b5615ce958099d021292592301bb041b5e2adaac30a298e4c7f0ec65db8667294ac1e951fa2d0007026054d9d6c7458ab8b5ff80dc10e76f2697b3e78bb4390156d9e4de2e300b095af23606c7d963ed316f5468373a82cd18f3a0e5e149afe4d3fb56c5a3397b0e83c8560ab3cf589738bcecf8600a35b7a9bfd4d6fdf26d23eb38637a4911810c42eafe3065f3bdb7cbe2f750c39ee0217a60d6ee8bab7da9829032710af75d0b66b1d893a3dba9d370aa4816d5639e605f50320963d6f43833009e55a27701086ee11ba0c670d5000e918cdd030207f014f477d0694c8023d4087b13aa942204dcf5700daef769361c4cea7959f29fb6d15bb97d0b6a0f65a0ab5cb9cef55a09b16d8369a045f45984b4ac030f9f72610ff704edaab1b865baad0c86260da60700430bba0f5711babe2dbcc6eea7520caed9437199243c74ecaac259e2034c0fd54831a537f56c96eea4e19045220b9973266f554f8c2bc13476c8f9576a8c00f008ac2f6a5b236c609fda9e344e582b873e554dc73b6854375bb19e49e0360045ce38f6c12081e0c820484ec4ce94fd8caa7621593b4416a9a229602aebb5068c238ed2d2acab520dc3f2b5a2566e783ad32fce9f50ed8de3d3b9361e0f6c091cec2231546a6c56072741fb1bea98f4cc3cd657c575ae86d8d5c1123bea790f3a3a78a51ff10571a99fb34f34911b5cbcf8cbaa3912a5da99a74155deb4ca0b32615a15fadcc63cf72e1e4e342d947c86a371ca9572696588091291af80650df6c64b224d9dc11afdf61491bbcc55676a2877b629656d75b094ae37aed29f0a9fde975836da50a0adfe99220609c62c98273ce5380ce00bbc685eadc3f2c1060c1067aa5957bb5215b147161b8109056bf2487206a1e0b894c503dda8ce25032952c6856a5e36da99fe92d069e6509a3c1cb9aa849bb2f440da12f446bbdd08c81816fd146b45edbaf70f199638668cfc2dd9aaa0f92512d0774ee32395050f39c40b3dd1bb39cf054b864c4e8ec393f5446cde37e7c053871876ca64ae930d28dc4d7a135fd7f09e20ccbcfaa73b3c2988c6bc1bcd163d3873f3b07e03e504a77ba36c19067a4a231816429ee5eb2e61169dd09d5ee23e69a9ff3af79c6a0d2366c45c7853507e9a3c018d7aa4cc6c0c38f2983b49edcec6a1432fdc20d207f45e8f44f132a57647031cc3e3bcc512ac9c9ce63d0520c8df4f21822e4a5b0d8a11d850cfde49ff766d07d87981beafca813afc63260a39d5fe577c34944105b238feace2b4985c7599fb0639f4c2bbfb4a05e27776d3cf7d5fa2bb2ef384009930e1c8fb5595eff857aba15cb7561b6fb99bc1de2f4f39577a26e036f1fd0ed25895922ea740cf2ea316e2da226021f6da57a2519d2e6e51507f25d99a5a0c3f3dd3664ba52eeb1b4e5c97ca5dd418971566ffc3482309779b175223b7da0c85b32d2ac73a3af1c3fcc771e388895197717b060a6f448da6b1a6e550363b06c9818d26fb95269d77263dd55ebfac145b7c9062c92b29204ec3829d6a0acd0ef4c3be558d1213c30d15ddc665f5743437e7e9d41ef10929a8ebac88594e330f99f6ea8be7bb53a3da25d63676113bc3841ff42d10ef07aadeebeea4cdcf6104c7059d24b69894a7c9933419fe66545d07e1bab10e939b336f147af20727c201fbaceff8f896af920e49917025e854b4e9d1b6a77cd4bf3913a1b7991aad4605ab53b606632924170f1ebda69fb4f68f00cc577a5549a48effc119206c257a0d912d93bf8b34bbda8323a8ef03195b51955cf6968b0147e00de618077f33c107586bdb97c8d2cf99968586fa2b25de0dbf220b81977234280c70043e2ab2d90f7477e733afae08219b53194ee699c97753791e01cfcfec4f70328cbfe68b160ee8ef059514772526be582f90692ffca917b15c19993ba1bc73c45d235acb0801c1a69be536b8c56885a775a38d9d9b5839ca6b6ebff0bbf5f951af681bbdd3049aa45a3180e9a78cc7a6ac3ff720c6369976969eafa4e9c8ad992b71e0259002fb54cffbe3edae3ddc31f2af5bf9fd3bc329305c29773782ae3c3c480c64ff00737095cc9b15a3f5e2ec81eb8754c938bedbb22695a39df3c28da66e1abfdb0e15df272b2e474d000715328e1aa0003453c23518244ca30b1267896fb27d080cc54d011d59cd8d6e7f33cfb6bdb10a60e2318762be8472d0bc2bb668b58af506f889918ac4e21df31516c7070a36a9991a985e47fdb0f7e265f6ebfb63329101c9eae2a6edcadb6b84ecedf7b970b0b2d565b5bf66280e305dff6e956859760c51c7ca1b903d0725c10ec36f49df419c8cc95b0df66a0af2631fbe2f8680a002602c5c16d5eb0f73994bd5f23aaaca5a8dddf566e904e7207f0a4e725d3e2d0586369f9e5ff9837e7c8f97f96d4e760284974677b68072c160ae5be287a94d06d04b0ea07d7dd042333375ba48eec905e79ff15cf70294432d2ec5603e2ce302d75b445a6bc3abc6bfe57fd5b63ff392814bacd5b8ca51269a1277085846db019dc2451384273e3de5e2b1197aceebc6b9f36bc4cb0c01f4d85e1d13e921040d2c735376cedcc6c96668f6be1edc23b40ae1c46db4bc6da939351e7e9740ff0efe375210fde9bc70e8630a174f604c11ff03ce3f99421023d7c5f16f9e0a0a0268ab562cdf9d75cc24d4d778d60c8d4b9a466c7a2a007590141b2feffb30200ce7ea5abff3dbb6212e26a2d7d5f5e3217d89ecb78f03b0f0f9692c2bfff85d0009a0dd827502e946feeb2d084f6ea239da394215ae6881b4c72f9410e587b905dee627662aa184f5f12d08ae069df8a605fda77f6b87bcc870969691600baf00ff8cf6d0ffd2e7584e85a765c99a1636000a0312e21e392a393f4758774c29076a0ef0585ac8765caa614da326ca708b54b39422f3be6f36905670f07b7e640078a2402c819f80b633a66d0b2319d392042d15d60a90c6a7e64990c1efa9420563c8e5c908cbde8d97b5f8d4b7d82537da3f170234b4279a8839035e84baf50d28e242464e1fbcc44e0cbee634a3547bcf123f6b935c13546848eb734c672b042a5096ce8f018e3f02224b20cad904ccee3a9bfcb59ffe28b1aee3165d7c510b8c49ebae5a4c245bdc8845d2f5e541989a4690819bc87f2ef197d55c041a8306c2aa3f10d52a1a60e25cbc4d5dba7cfebdd23fec4369a0701eeeb1e3d989d70519924ae40272e4b3832a676b965711e734ccec27687c6ee6a06955121a65c602f2814c3519d7f7ea3f441e1661ae140755cf68f04aab6c204b1ffa0eadca6c07cc5888ffd7f709afbc709ee67ae68dfee3674357ddb7679ec5d24b951e49be0071d66a876702e5de41666f4948e4f618699f5677284f80cdab2a2e0a2d07890b9939e9eeb86f4777435caa19c9d488345ebeda58aa94acc85ef54ef342a1a40d44aee4bdd4741f96869b710051359dad05aca087703277565a0ed9258771260f66d1e864df2d428e448c834b82ea0d3905cc20f9601f714a1e0fea9d6a2f4f040e3c071944b950e31fc892c0ae04ee3d64e8c9bd1c8b69b08f39dc8973b6450c6aecf08a8814636e9bfa33376ca62e3a727b11fd7d1ed8d62496239f8eedf0041750182f89e337759a309890a8034dfc3e2e20a868fbb0b7578b24544984a6065937ab14506da8546e042bf8daba5485f3a6e0a6f8c409221b3b8a7dee2e26042536ae45fb30e56e19087abe8c776a5351865d40f6687ccf23e9867fcdfad507ee7d66c87bec3d2b52f8435bbe96ce61f5d52737f15c2179a5c0c0781cce310eaed4261bf24eec9b87d7abaffcc8875d2ea621100e2f62e0b7f0a5193827790d9f699ef69c0105bd9381e072a56033b7f6bb3583898d6f800c27bba371f2fd07d8c65f475887185de80ac9210da22ac5237624219fa5685be0a827beafb7d962b0aba75211f41d61679ba0bbd7f2c848ef07a3cefa8fa6928f0a98ebbf6ef7ccd9d96e978e091d6fc07e4f0ae5bb182b82106509635056ff08a6ebb6e57a240fd16ad986416f3068a83b84f757390759b3af46dc5fea13bda89d593d2abc462a8caed872d2ed2ea5c5f2a6cc9712882194133732d8fcf445c042dad4a7bac13e992e418fcbf94cd8428b763e71b2d38d265280861e709028327b2ba3dea81860f172b77d83bce2793f0ceef40ef1ee8a7b2d8bba4f54bfa194da25fe39cc8e57c1b019836d0a2345b067e057d811de900ff8eab103fbdf06d3eadcd2bc95032ba7d3c9ace1183e4cbe8683cd593cc0e0bc972f0c9f6e78875607f2752ca353f8df576def433c55c6e7811fa85be6a8239be5a5974e40960443c32d517646d90939cf937c48e059cdb5d3630eae04ba1d0d8987bc2939bddec064b4c023a791f372fa7963346bd86fad82d8e841cf4c78bd75aae19b149e5c9b929d29b1fb8e4fef736b7a0ce61aaca35040817156b4cc766d381fd607cbede75d507f558d2d63676eb55e5947c67bc28670283b024d38d3f295baab408ed052f923e548bad17e121bc6f42de162c2bf9255066fa76d7f9e5aa605d725986d540b38e8da1b6d22a244c3a2bc168915cfa07a95054ae5e71ad91adff429ae84dfd52ca42d88281a39794102f25ff8e01f5b0dc84e782f0b9a336088b5efe9d84705b46db465fc13ccf94baa2ab333a2796af1cab7ffe2d83f2531c7b669ea092279470acfa3111212e882aedc5c7e7b5eed6a1ace2ca918c8012e5bf3ad84322e4ec6f81feaa6102749bcca332253664f17d0ca903021730d62ea94139e9de8342d51837a3cebd034412839bd5baeff00862108ec58c015db77e52725101e5f5a957d0b644058097d686bc493ac220940d6020a2afca421190291b6e6f5836bfeea32a895b0af3409ef8bf375a5d06276f2380a321a103d6f377a3e671985ae91b10b8e3fdc6fe0088e85381f03bcf4cf479f16d0019bd5b482d9dbf893812742895bfbb930c04342ee3fcec3326ca127e6b66f562bc5051dd127fe13f5733768ad55909fbe0df7998f17434806b5169a81cfc4620b48e80607ab7871ba790720aa6194fa8bf073a0e0608a9da33eba6d83b94ab22c6eadaabf931e1af7022eb294a9e862537e076f9df7e9dc924adfaabe29f4241457989c1a2d8d6848379259c586ca715bc1c17b8eacd6c9936e0ea2241ee621332ea1ba782639e0f6bc221bc0f4fd824455970aac86d25cc2246c2125c5663fef76a83843cae6e7204eeafc2c88e340b3a5422e921c6de52d8eb6da250b681d1ce071c3b792063c84b55e158bf7f9d93b4179f7670905e6c1fa6323efb81a64e679b27b2112cef48c7282f889fd24ee138d01c8a99efee7e17cf9435d404d1360ed33ddb76aa0cc8e0165c8f26f274fdf9cecb04d6f476b6ce7205f73152178560d048dea2bb4daf5e0cc771a0b3e1b91983357fc320999e509bffd84006716a79cbf049a78874d1f69890e672f9aca9b298813667dd0753914a73274fa9cc421e35a5d1b71d947c4a84ebaa54d8a0d845e199c1cb730f0287033bd3601ff6a2aabafbd53242fe28694f47fac96790c1ac154d186a1e764092fee42c0523e63eff600048afdfdadd9856f1578792d96c61114255527d14a6a79199d807107e7c4381c5ac08207a8a62d6ee30efd9a4ba15303bf44bde70eeb809bcba67b3e92fff28d4af7f06fc41c3cdb74b5bc0668852bc898ee7bb689db0ae706fff3a102cf4672c93990ef079f778b0327fde00ac5a565df1c8b69d2d83ac3173cdb250e77d8d0622af932d576c9daee13c5c2ee6e7af24d2e9123b621de7bef80617b75f0dc9fe93aaf9dd3b94786d63f071dc4288afaa32cb05d2880ed7d15329c41cca14ad77c7f557566d7beef61c37402a78ef07fe83f29560fe28b15f26f32fe6887ebc038682e7d04e999dcac1af2cc604c703b5366c5ab4c8c441e8141d9b8551481a4af602d6035464c7e8020764281b6a190942e7f7e085783ee071b47f66dd77349273954a0a9f44960420b9cee023a7ab4a5acc4fee6dfcd8132ceb4796b5a47d6f546f332642cf5c8b47be7009e489481c9a4c26f2f3d0e03f0e931a42f2d3be3fa3535964a6e3d36c850bcc3a355fdb2c4c169f16fa6b3590e64dc0b9baf38c1d307f85602a2653ec9f89b162083d89f220e7a4a8aac0ff4f28d84d76bf17a6792c7c1bfba97e806ab608477efbe0555f7ff46963d8c9c6a5cfc17e75274aa3fa02ed41996f376e79c2861edd8d6488e7ade5ba81e9b23f21c16f7e455fff2cb6056ec9bb9b7a176d560453acfd0e6fd56023cc9d1f5735fba97428d8af63d051b68f6192464d9e09825fad81845a897be84de1b8fa988d3b1410805c4f7762f37f894cf044e05983009a536a9c41088c6ecada785013ac581aace5369c9febb37394135169c84d3aa9e3da52b8795e4cfd31220bb1bd96ee1323c1065afcf439912d3fa0135706da11e42efeb2a8fcb497e6b9d9d47c1900163e482a0177ee55bd17ac9e5f323de103186b7362eeb536098b1a9d51a230f495f34f739ac393dbb23ef74fb0f839effbd6d0c72feb6a215a3a72941af172f8f68fda0f9831cc1c0a676fb3ae7a7e95f96202de0bb0d917909a81ad8cb8ae733bb4402e8c217130225f029fd0d14a695a0be8c174860edc2535f7db6a953cea4fecef0a4acb8f9915dcbed8d13cb46d7bb859c656a6aa9fc9b67744dd611e2e44c6fe309b690f848d00e9f7c18b9ecfb5f6df3326a33b5fc6656fbe6d84c0ca0e999604ed852ddff3b2dcf524263950fbd5ce039a3f6322ae6b3dfe74ebf2b8e56ec9e3847c6e34f06474b4ff31c575e89bcc955f15706a89bbce87a44c7663990cdafa4ea69ce1650dd03897812aa7c5574ffeafe0e0e554f8181078c5d1b82fe0973667a461e48752c34159524978260ed93e2789e0109461e5dfbb5f72f5e51afcb516ce35f3882780e84ff69628e874497b66be70c3ad6521b2397e943cc1397a2d88397d4b44dc57d4823c8507e6c5585b691a60e38978f9d45f55a409f447639bf23de8af83683191d4cabea4b3c23c53be20b0ba8a8a1564fdb0c86753dbe464cec3dee9cf9bd6984b87757d771d80484b0b7042ae133cdb7ef094c849739f739081d24489b73a8a3ae3a2407288b08c123f7032795a3f474d153dcf4e348e41d490ce77004e6ae298cce850221f6d465fcb70b83f487cad160d13627189efbdee043c944ea5b691a083458b02450892544bf0d7d1969731302a1e6daec138b64eec8fbed06f6a8e8222637b3fd36ee4852de0b1e8896bb12b2c2f6fabe83a8a381b6c4f2cde807eb7190e942e25f0b835478014d30a4ed976e3ebfc2c060f03686e7f6778d292f8a0ae3d77e0873dea5f0b70c2d27c6caa9802b5d7a88770b27bffcff1369e78c3f2c4b7037cd32a1f489cb06e3d22df1a4b01f0633ed44193d41bc89e47e7adbfe9e0c46afb88c7abe066507f8f2d22c6bb789275cf8879078fa6abc913c4f03509a26f94baf2402d2baab0a7b3c352d5f24c8682f92a22ac5444a83eef713dadf20a5e92093a9e34d107c073db51427db02aef6f76cebfb51ea3667b34c5eb7d097aeb3059c495072630d0284479c2ce81ee2e891bb46bb304b59b1424833c4d4853dc601d99cd5d938ef002dabef242bf5494a5f6a6327678d1fcdee1282d733b09edb8a67588fd8c64603ad1e2e7d59e0bc9a8dc1a18fddd1b0ad1f7467ff3f071f3a150110817ac4af01885dbebb27fa5224a21e5a90e015e56b6c26912ff31a99aef386d7f6fc4d7f045852c4a5cc614ff75d67553139d0ffb9e366cbb54595fc470a6f9857b6f533016cbb51e765c5310d81caca67298cf4f0f6e26cd21b9f7944b84e914483d8010d77a40af51a44408497a5f31a7bd7d4286df7bf4b0319729cb76e0323f976f40e27c1f1af2d2ba98b5851b71a22ca899405b867544e899e7236a5b7264f411a00bf283caf69d83ae5323965375e72d0ea849731da1b0f950ec8db6321148775065614b803b89806cfb6619c10094186198af18bd5519c60e178d013bba69ced01ea9f0ef05eccf18b48a41ee458037d9a76a4495b88b8149f7841c10ba248f108c6b7caf3042881efb1a40441eb73941395db4811c3d464a93e8f53288a1ae7096e8daf375a9120d32322b01adaec99366a5f2b352e117d32b0a8661b29d5f905b90e31b8a90a08790de30bb238d566ccafb5bacaa7bef8be9e17338f20b42c04370a3f08129c51a3e6b82b9b52e4c8835af91ba8cebbe8bb0fdd71283ffd8c088322e100f746c66d1803a25c2341a428cea5db5401f9b43f841d6031fac5ec0ceaa5017114c8d576031f6565e317d825766239a790c18df311be7bf1ff5ba101408a233aaee53bb2556c9845bfa249ddb171f2b77e3cb0d322aa6d45ed2bb7026f042d35244511a028ca2abe55d11ddf9e2690976ac8142f7e68b97608e4420380dacec973f661318b501dcb652dd0d4314624aee0366b3ffbaae97cb42a9802695bcf6e36aa1092e6a7abd9fa6652184193c8fa414cf0d013f945141b3ee80aafc340eeb493b9d7f03d15f18059808b78c53d0393ec0feffe977c452cbd1b007d5b558b1436f687fe1e80e007f0335949f9519fd523b1a8ec74b4ea5eb2bb05114bf356ef96cd6429ab18654f8fb062877aefc9d74b6d05934f6f008a7551030a99c9a90793ba2a663d88d6e097c875dacc1c103682dab6c472f9e08110080c588ebe7bb5f00cf18ba6cab8bdb4f44498a0733ede517822d1ea3587637694081f6d1fa58cc18b1189282c3bd55808c636dc1f258b5bedfb68b1d6a729352709261d59b23cca54edf2f83f01db88e3a75905d44d46584822661caf6606dc3703a7b9fa2660acf3e413d36af86c34d029968b253c88b6a2901d4be41c0baffc08bf365485e9cc3b211966ef5ee6350cf1481aed6352c3e65a035759c4968247059b2cea2118c6e4c10c83ba817fbdc20f92784fd630f9aa633a94207237b2d60cb888850dc399447bde6c11617dfc1e9ec50283ab6e3e4979e4e90f6c9322cf03db9c0265b0d6d7b195fc7953954ab26d120ccf0d47173d423a4bf17c573e1202f4babc95a1cc1b9a3ca9e0b2091e458c37ce41d1f398e4a6a27ebdf389845d048691b5cdf6fca40ba08b8bb956026ea48280ccce04911d8122a68252151616016f759be211b4430070bdc9c88ade714b9812b1a3d42a9070fc9f27c00d7c540490d97719950112f39edaf0f34b429225340bedf66a4bc80d93a7dfce08e15c053774f995adcd655b0eec2ec227168f606e6126899d4e1cc8d0579c3e3862e70a290fb09a0c4b10c6be2f6d1da2718ab40487eeaa73c2262c0b182218d33afd0e4cc89b623b08caab4c31f785a166ea6d6e44672d2f8c095ebbf630ed6c2de00b2f9d942c69951c649686b7e2fc18843c69eba5a5f564c5c6cd3cc485d5811401f30094aa7cf72e03bd726a3433c9b9f4353c21fa774eab7f97a9f63dc57193001c1d83773859cfdfa44c008938f7e3a7b2242c80037048427951c56944fa140b9f9071d5f8e6db0b23f2bb4c8a3c8d7e0c1bd6f84ece612b3058b4446b772d09518713cb9a653e81f100b0897ae4713aaacc1a3a8a1cc650e2e7147b7fb6410a415029971966a517470a1f367a0a283d3c043f36c1cb062877693ae275666301c4e42312e727f2d873ec85478e8621b4862be0c232e0e3b41c3327d67afa8a0b18a4aa8ed1d2904c06acae21198a25156d78900d853b417853f38d0d0363840211ccb0f59044dba0ff60535425609a391108a301d4f258d7478bc2ef5b987904d6fab14010b58a35c81cc1351c0b1e05c772310b14aa2851b5efdb0431c6b20782fb1bd9ee48c44ad2ffa7aedc9309c89b4be4385e0f355045ca3ac10221390152b222977b64bbf6b8734814ea90387f47e01bb8a84c061076d6399db1aa5806696ff684a9407435866fae14e34b1b8a1368a3857b59a2deaeb91fc197bfdb012f0f58aa354f8c3d6611eff2d79371644090a54a26f7083a2cedaf841cbbb308b42700e5a14504df26c430dd13a72086e5ba9897b5dd3273d0b492c404bc6506329ddbdc83279e134c03c311ddce572b46a5a73690ac701123f9e25a9bcd3b0514a4b8bb256be8ff04034747ee40cd0fc03135c67e81764c55750dc4766b9f099ee7ca3109d5d4b0e8f0eacef8e9879d2dc962b8080156e98db18262c1f4a6013ddaa6773135769306d0c621390ec8a6e2717554b6249d46404ec9d1ef70c606ef355a0a74c0642e0d66be4ea3dae8a571e930058d8c5c1441cf5b9ef7216906b63e669b25ae3c49ed58269034b44472a47bddf79803cb2eebd2f1202a32020bfec9adef127fe3bb9d7cf3becbf4c2a4ce4a4eb83e2c4f920e0c746e65e68304f3beb5fddb9ce5c2b25cc2ee862736bec3b7e5081b3a97cf0fff496678879a0736119c4ca41c597bedde2ad40ca265b49deea7e6dac1805fe2a955166dba92063d5b782d7ca6c96736ce630b813f292d06b9df7949488ab92ecedeb48c47d505d7436aaaf3eede9c3c599c4b3208729105b68cff2bce45b92abaaa802ae9c30da8ce947887aaf4dd75eb083753b1a019768e98ac9291d596bd021660e8b09401270dd13526677127b5526ae69669952d188897e577f9166b62d5727cea91d20741613dddba467a85d8e7d4dbe54226c4c662fa311269714e9dda38858ccae90daafbfbcbd8e64abbf5ad0630ab8d7ba77355865691951caa392aa51d23d89f01791f9930ddabe1ea2d9e7d81821306c61714c40ba437780c94372e341a8a890ab7a9fc3663a1d4c57bfe1ceb5c4e70cec7cfb05ea250b31c8b0e8a5fd5d8c60c2251501b73c851d0b6f0bbe401bdeffe4c70b01fb694d8ff7b51e29d6a694c03ec62aa1c55f941e61d0ef154665a90975dfb95dff00919d7e478062193300a0ef443ad37d039211f9d2a74e134201ecb9cc360d26a6c6ab2522cc774543b740b65134c6966efe3a0f8fe17b1b7246777cbba39fcbfc25509a3e2f795d32a880c27081c258aa2235f7e5ec513e77b4a0609c4e287fd399938c974187c99259c080ea6ce1274cf00de0e24bb3fe91df5ee3db8e25d198d4e2ea44a01d87ee2170895918886d9ffd7a88e58b4dd28f8d558285cbcb0b9ab8359d0471354f587fd01f06b6b6370bb281a601a68eaeea4c154901fa1878184a05b6f118145e35ee409d9dbeb4b73552e85ceb60b4c96de91fab5f754b237b6e60673af96a7e603b50daa04a7667ccf2d78f249d81e32136b7a3fb2e83740a1546d4822bc99f6c05c04081bcfc4aec7a6fb65406bd342bf0adde07270d9495954234079b65fcdb3f3063793af6756edc45857e306464be5508e349ce080e9f62bba8fc54fc35c6b0c042de94bdf761a460654e6dbdec4cd8cd84ca3c96d4b4644a7ba2d2391d78647081373874cdd6dfee70fc440738c6852a817e993001108933740bb96d4b0661f0d73a9a21c46b14cb83f0f2149a41a3fa1a90db18885a871493309e61bf05ebe0ca14fa3d3bd7b03a73e3559e2d9ea06166c1385cad8c2d3e324a30fd872f1950851890b4a1178b1c989228e021060b31eb8eca71d04e8502e59274b249feba30c7769b01ae87bf0dd2b4f2cc75f2044c7c4c3ab513e6d5af7f328286bdf112e0633f600c2c75be2483e412a84f3b137cf59ae502d11c1ac645dc9763e8d542f085135330e6a3441ef6723d1b0cb22169667b247a97ba70b9928ae2471405b4b0a9c97b425f6ea3246ab58a9ed0e3fadba4434f4f9ed5fec0ad7e218393ff6db05fba1eecd8a13fcd0f4b547cfe23b4d3643b7593ce5e1c43de8fab5e17b84ff0e14d4c8434bf5d4e3f084ba3badfea3bac9bcd1b34597ba3bc9c48e3a057267054dddef3bd293dfb560be0fb64983908a43fc118f287afaf59eeb66a9f4b2d708892f8501dce95855e5c1c31832d16e2aeaa911789dd46dd96502fb216546fe025ae9b4ea03a8a405466cd20206d2eec109d08601dc87bc2e72d1bb82164e8c0f2b5957b48b1576a08f536cc219e778e515d713090d6ffc56869244a4428f56094d44b2be23fd8931c40202cafbab749bb5441719994324361dc4b676c21624070111f7dd3a8fe3fe0b7cfdd37382e93fa71e339b1aa0f69657972a55c2684903e5a9f657c728ee65ac77767579490331b73daa6e803120e47ce95067f81ea809aeedd5fb0360abd61aa5da69137701c6f008adfec99b00d64204ac4249b3dc0d8c08c00e4f7009530d0ff3aab1ca3d1b7297304a03207119298eeec646b56502fb0eb810172276b77828de960d4371dc172bdc09f477d53c29a9f45089c49503f3c48613f70974be5a7e2db0a6db1f2e08bbb38ada1469e42ba96c7e664b2905c5b91add5aed6b08c601d6bbc5cde8ec07ebd06ac13259c88f07bafa995189048a39a2791e85cb30b99d51cc943945f8c1c23e0889b6462741b9d757290e0c040878228722d092c7037c80ca0748e8843e25ed1f35ad5d0b19229594b9793d0fb52d3e69f38d8f37590086b7fba6e50196c9b22b4fd3f4b2b1f222d5a10244054593dfbc5b36073991dfe5b37787c8bc75acd478844045e9448b2e01682d3009d1f21d292e28708314d289710d4c316e17ea2dc917eb4cdf3605eef3d460941fd0f628926aecbc1cc58ea18a06fd8ff6de0591c697987c8493b6f103924b3ad2a7e6c6d7761d32d2293ffe8bcb2f4505948576421ef9968d7876d425a08cb2b844e027f44681c9655f085ff3aeb270cebc0430944214460675394056899711c156a57666477ab0d00d361443a34dfcc182ac615af490224be0147dbb8b75767148563a1976b560a138fc6600ad3cc3282fcdd57fe810b04158a31325a17aceed1e801cef581565f18e73f7a119983dbc56b6c43f91cc236ea16b8878cca83b104e621ba9a1f38bdaa360ee30428aafdaa7bc5c970e67e30ba8fe71e7652c26ae4e3418e891016c0dd23fee78d1b9b7cf26a572bc52bd3e3a9d7f3ebc98aa51aabe53e752ad0641bc13d235893a272bf106c1b55e86b2bb9da8d1f89baf7ee7e933b3ca8d3b7a3e3093c3c43e686a826addab1bfda32c04e722fe1189df1aac7f2107e8a6aa9ef89b64d0fd2ea2536e7ded99560dafdf3a504493e2913902686774863084bf4d5557ce3a993f7a11d4c9ffc5af8cddb69fe5f7e8a9c80c2cad3ef9774a251f0d030b3a123952c72b732b05b5d1b5e4acada11b69607f899a8ddc9e84c883f2480a53a4c269d28d5fc241fa133ef9d7a40f2de1c67a61508db78ee697df3abd1ba2bd1f5e05dea47288aacad5712cfe406e3dafd0230b5f315dc319be10268cacdcf76198867efc2b05cf816ca3bd7c363ac37b03192efc129acdce301b1077bd137be2a609b07256ab6601ec2d4ca6daa55e0f3f4789e74e96672829f88d32ab199615d1d90a0e0681c3f3c29c75e661a013f8130b39ead94db39a3535ed241538eacddfbf2e223b9b46d0bd5b68bfe7ea7376c16587403dbba3c7563d94bf320670d96ce901f3340598ebe8197954426eea1385245af9e79cffa9d7e3284adb3d421d24b545bd6352440d396b56b96ba666e339df5b3be01990daf7ca3557f8070c4ff79c0931fa6940a327d29dfb0654ed00d6ebdef72ee4fc6cda55f0d3bb0172dfaad522425421c855557428ac647d20952965b299d194b5b4d6f774d09105d2aea8174c70d75cd901898a2cc7c8cbbd8be0c709464ec780b5e1b05e1a5b69b2ced334ec706a231693d73b94058e06a6e64a1000d41d0a6a20a5575c3397bb5a66bf0faaefc9d703bf87aa99dcb945cedcb61924b9c957b7be212deb682dd3d862b04f473a41e46a9594cd9d853b2511eae7db523e5a51aaeffc69fe5103ddb8da9ed1a8c0bec321d0df7895fcb4810157b7cf97a88c62b7de24fedc021f4cee6b03f70eedae210b9189bb4865e75caf24d230788f33da7fc51c325bbfaa17d381374afc4613186ac434b5ed4463b9792f59d85b265b00b544818b2b9244275c724f32206e2e1278e2250b211fa4cd0dede23c6e36121ecfe11978dfc28b86cd21c89d07ce6e67ffee976f9ec4afe68f804c3dc6765a0645cb011fcdd58c57a1bc80f1f33e55c98b62e2fe831f4104e79a4f985faa3afa1c78b5079c860198da9b9635b4fa5b874c94d56d9dca474b6b32687cbc4b80e2235e3b3ddeac6c3da3f752f5e434683e5954c98940395ea84820e332b4a2819f453ed5914c9630461c7607f1febeab2d64a743f6c04980e438d9be0bf73df2f1c012fe412cdd3994fc7626b7a24fca5843925cefa42e6df01466c6204c7fb3d7f8edb9f38d0e13bfcb09276c400266f2233b9708b47ec7afeef69fc26f64a6cf0f8fb64892e0d4fdb1c6638996ad4f80569be8b542f09e422afcb70b6569a4fab0ab5077fa88e637ac70f1d588dc086a119d53ba1073d83df817b9f10347c202852a3e7755442e0e97f4a8a8eebd4637e3f35f9e23649aaec8d77395ee01674d625180f3be406c587f732203e8e09146e07d4e2a754f118d45b59fc8680d47632f330236265c97f841533f4e215949a98d03007968acf1a335730112e5f8cafda1de78df3f6bf38dc530ca03b3c0d7dfdb01ad2ce42bbe59483e8b7a3f82939f6e39a2bfedd8c63d42a1d03aa3dcbb6c7089ac46de5308ca35b396bc771633202aa2f2309dcaf8f06e373d670e05e714889d337c640e138983f91738e7096504675a666f987ea858ae222115b45868ca3db65d7ee080c40a2f6c4064e7d23a91b4f1d2330c21b2110fc1bfaf03ec1d8b79444f4a16da20f586f027633508c193fd9abd8ca0cdafb0989b2ec223fa34738c58e999253480f9e18b50e4e8e0984d5f996f2e0a45c60cf3df1d6d1757e652587f0daede3e9ec7142084988dfe9b6b61085061a1a32e7e78e47eb664b18402f6e3fb8a73ff3f0f74cf17c27997ca676e9f98f9966de59abba9511228fdf2b4b18591fdd56bcf13a57b2a1f5befa0fd27db2e5d80450b356087b51adebcf32186bc4008abe9cfd69a3ec6c8cf07e085e0ed82c81bf527e68068107b57320160ee5728bcbab1fe53f71f2f2e9e3abe74180cbee52383d739d0b2a9038dc1aba1e0500bf8b97c63a3639974024bb83641f0031a006db4b8de386e86743776c37031ad7893638db8202b8e3e1bc4b4ebd24512021b8652c42d0c3e9ef56834fc8600715ed4876bb94d2b88ee6112f6ba90cf7f351a463eba4e7bc9b1d8c50facf2a55bcdb77ab40f72f1caceee4824681471ac0d8d501e1a33056286b9c74ca4a9212f5c26d00249a205f658bb5e35a630f5cb4fbab2e546f004c37955f940e1730cfac86698c31de0730dad0bf1eb5a478da073ede45c6155ef45a94d10b72be776f9c4d8aa4e730120087612e1f3f2bd0cc514bb78df127da911d3e21c59620cd120f74b8d92b7014382551d93b91c371f84a4a648e901df3e4a4afb8f7fb6df6de84eebf8419f40cc6a745076fa489ebda46ebd0a4aa7a0efb96c59364ae12d4d922c0e3b12379ca5612610f03fcde40ad208dc279f6a4202145cd504d20430eb4e16ed3d8f07369da4158d95f80fe20556bb18a22b20218d05f514c9cefe9d07d875cea62f4fb7a1b358dcee5ad1ac08f735fe98f11931a16a96b5f91d489f1574da1fa32ab4c4e81ee95da587aeb20305e7a94a8df6eab9567d5525ca3dcb81787d83cc368d66542f8229f055125c03001883b0947575458812d7229c5090ac7d5fec1b6fe52385a31ddd9ec88ac60ed481d96e161eb70688ddca9c34e3d29c96bb4d4c0099a69d6e15c319249b020314ac6238d21c2e96d5bbe9c6010ebef3ed7a5741c78b40dfd45f23ce438eb2019f39cf39989247d07460c0a9e6c245cff2663898fb8dc18678dfc86b2c44d80f6b994b9a1e96ece9e6ee2db408591b3d8533ac5155a33c16206a603a123ddd0a9866fef25a5d5369abe28e8829f8cb0d1cb7b3e49d29739d221ff6c6e9a26205d0e9d8306ee182dc202c840c277cc3b388b3f59307a766658c8317062dcb0901fe44761f48941ec24d2a1a4743f45eede0253a45c6787d22b047b2c8bbf1370284ccd98d973d41f3c000e64c7d8dcda32829951f376207a0c2e8de42b4105c0fd76e53cba0b6e2dc8d01cc13a192df222b9ae38607a1f9f472e438d9af45ec00a4b6374c1ce0023ae1a274a30b2849d64d800e94eee3aa0ff637e1989a88d10ad70bd8b4c380b6dd573973f2b95a6322dd59b3d20527bf5debb8449a59c01b089a90fa9090d59c5ec6f29a91e6544e43137f68897d40156e8e1d14664f7a8406c3117b3dc8e7a96fd338066cd80031a0ba76dd194f846d0464aa7b052e66190098017166366187269397694bd89398d7a8e3f94ed1e713573bd2ab449d85f3002676aa3e6e072cd74d7372aa29089e47d83b261f8ec970bc60dd80b77b0c3e0d1f154d5c0ad71cdd3e4738ab6cdfd302d58cc44c9e72248952c262dcca517a0f7fe04e6baa17ab43db16da60c54572d6be8b3bbc556bd0f6176f21600a606b0b73403b71e66aad4bf39297d2638139e8b3aa4b9d84416402ec557a1dbc066c0977a85b1177f62f0e6f0165f5e00305c39c18293a7d23e58a2540958d2de9c5054f54237c104615e58a52877dbbe0437c7811d098f31c690e146a327d231376091820670003b0299ff17940b8a947caa3b43de2cb3b0e38568378723ea87acd029c2a5709766f264bf06c6ea3b5c44fd514512a04542fb11469aefcdaeab6e80acbe04b07b1e44c2a1910e9317064efab5c417f5210d134fdd3d6979e060f8009cc0b23dba29061dc65b2f8695a4d894a0c6376fc7ac9c92201c02c553b334707df2597bc098176cb5a4e0f39b341fa58deb83da6bc2e7c64fabb49a4d35f680d50973d4355ef50773b29b0d5ba6203c81bc4eb3fe1029d395c5b7c9cac7da400c75e82a82a0599645714158e427f27469df1a3f9da5df0d5bda8a68e11ea580b055cf211a8c1d35324241e3eac2176d690e38f749564a1f3c740905788995b05aaa5d1ad99f2930b8f355a4b3612c9761cd72c2d3e44af21d973d2554a82270512d62398c135ad431bf1dcee11eb5aef8e79584b6c7e59f2b6f81c4b11c9e0048f998a7d72c681a13b4fe8cab41fccab31d5e07a8d619bb9f9dfd40efac57e04a883844b02a6358facf3ee25e407900c4fa572d1da4ed9af916991affbf119078beeb47d484ccc5429285a9e530e66ebc99d921fbeb4e61a2bf1ac8b8c7b340a665ce03447b2e95df083ee3eb59c63421583bcf33b3644fcb851ac607e63d70ef5629be2a079bb10b2dbec2ba3b3bc7dd61f83d6f9bbc2bc5a30836d0ff8270a82565ef62b39616dfc694f16e773682f6e6abe42b65595cd4d9249e2bb4e3c019b17a7dcec6d742910124f97507943127282d3c2fdbe41b52348215aad744104c3dd2ba68f3747136acfa7674c64c7c5c488b9f415ed45df5cbed5fd79401c08f16360ffcd8161aa7da3c5214269212cae4ad148f15007ea0a257e8516a2a20fe9faf40aae72c368b77a1a7ddd7dd5bc8b1d87977fa6bc1d6191a79148b3290f5484a825ecfded4e6d1018488de22116fb54f51322ebe33f9d9b1d61e2669903c6c17266f46f9aa134c2a171513f01390bbd3e5987955eafd25c61a19a38d80ba4f423671ac2d1eb9a1e529b17c0633c4b336cad8450764576197475f2fb790a840e6cb44ddf73ffd813759193e68262a96d5d0ad0cf720149c4e461e7e8120c08ae3a1fde1881f1be1616695b26e61b90a5f9346dcd8560ba57caa04c75b10c6c9cb8802507801fbed5023e104b4461b82f2b929f4e0a9a942b4d7f4e897d0d583fbd118ef1aeed2687330542de892cc51f4ff6e7184a58b9c5049fb838e600de79ca8ba976a06ebd53a89c4fbfc34070adb5cbee85a3db4e8eb9708ba253083b7ee96e5fdf7de5796a93ba6a729281e89307c8190beff53a9949f3f55d500b78f1dd1e92cbc7ab6368c31dad15d9f9bede1524fce938fd97d85642177f1a05edfe5412a0a2dd60e58a320f44eaac09e9aec40a6dac063cbdc3822795892402b42dbe1ccdcad777066c9a3c0de3c0ca08a8d2a1d927baf06b730ea6a4ee950c1afd7e8d5fe4b63bf69100deda5ff7647f175ef695c74159724086b2511d130035260ff051d6ee0d809fb5f8240b51d1b0a9b9c323d6c28d3248b8a2197ca20f0cc6bce7385586098a616d098c28db26603121fad91c891b1219db714ae6350fe63c977da6b744788cbe892014b0fb179b18d2235a4c29e353f054c1e9251b068488ceca6feba7200ab7b9ac3c1546013bfe43e7e54c88d97e8b95b69fcbc70da9f20b41e98a944f80731497e6d2899ec07250fd0b08bbfe8df6ca9d8fab9e07ed7a27393e6ab0f1ee5dc35915e099baf529f15853a1487794797a1ea5f60d01debcff56f49a8762e3fbb1746846cb04b2047e3b90e9dfdc577024fd50d89303baa1ece572dea74a9dfd47c88c690a374f0d7e277dc0a4d7e8be914be7348308b630bdba8987e2ea13012217ba6c1f3cba432a3fcfcf26a129c6d0a0f289190b4a3e418898307b6e503d97ebd5013734ddefee2b32e91d282b1acb4e954c6f06e484717e9f6d305e0242c1c3b3ee5f6277eec1555e945e0f9773e423d2318c0ec533606b43d2e4c710e22630697b0e90ec6d772bdb5c94718561ab1846e9310d65a112c3bb2dae40a95a29a703beb398a7ac557256be4c735a9a89da5a63390aff29d02e32683419e30dd11d36b367727115a734791be878e493ddb876d1ff0d709539f8fb45dac5974e034bf57f298d7e99e02ded50dd4392b206fb9ea7cd02fb90b568632f9c2f1404a7f46b2db28630be5323e0beba01c9c52be8e7c1d300ad45c732a447a1b46f14d9c264335ae6b3ec8c432d882816219f80cdeeca9c0daab6cf88026425c9a14208b13f0b16ce65de090d286026ce420eae21fe480e063390be3ec8ff28cfa9cbae095b6343aafdc1028050bfff8d32fa979138f6f60681843f3aefb24c23b888cc392437e9da504226bf80f997b6c3cf9fd91973e1081dc77509fc2f170dbf7aca58fad691813f7601963507a3247f8988b88b922e0464294471314a8ccc85a477c96f64c9caf5c9017365044c203f2d3adbd978fc0f04d8dc34c1a98f3bfaa4f46b7f5f220f9fe398efc1e4a8cb01defb29427b86097618197d2d594a6c31e27c36ad9bf4a5d0a352c1ff9186a827d8d384a0433500deba383186d5f6dc07c3204bc4e9c7b0455ec07e39f82ee917ab053cfcbfcb05a39f7066cca47c1e8b2e0cd96397b93495dc53a45b4b9aea45d687ea1e10760b19fe015082e8b88e8811d54b6e533a510e387ce7dbbddb430bb8b538baed3d0aebf558867f43a8e4a038e511f6f735a6691fc782dda15ad001ecf601904dbb01a3aecb9fdbf1bd5a90222965e42179a4ba8a148e474919889a28eb0b91b1f30e9acbb7dbe30f3d7314deaaa76f2dc27a658dd2964afb79b3ce2890b1c866dd03e706449088011091f8e742ffdc6b420f848985b2211748dd6ca34ed53051a20f8178fd299c360ff3b69403298ec39c1c3576b43a29749c15e687e3772b266f0e2567c4e88aa9ff8bd7f4898801c41f2d1b0133de64e827beba8d6433cf33f20e1d7bc0d9e27d05454539fec6b0834b555b5770ae771f470f03005f2b98773e0b5360a993ad9a147620f849057e77531426520beeea808071924925a7b1855209218f0ac86b237e0ec4b131b2b63bdd1c1ef74842e5cfab5fcda673aff1fdb703e2686b57d713490b0b576bf3cc7a86ce9c8ad4ee320ae750a46453f509b3f90056207e950b877f969736a49387ae3ff8ce793d61e5a0591886fadbef4373180c8b221ec8c9e40b37e7473ac16501552679057da6766f210aede37e8ee760610fd5ac0e35ba0404aed3bb6c17de532ebf574d47377b9a90594fde8c96cf61cc09c479f81f0f7f8ef2473c4be207027fa6901508a1898c022cc30986c2dcf2b201e68d2226820fab3251f233c3580644125a356dbdd1c30eec406bca64e904700d689e1a0a38bc9c7e8d91d3d4ea7049352902abd252bd9fb28fffe6bb12c1ed050dccba204f15cb3f4c9ecc85688eb2bbefc6d53a3e81012866311a88752a6303684d8e827b27b4fb855093b560ca82b22be87beeb7905bbdd295c81345e3e7015d11e983c0c12aa5cc20cd48105ce0d1bd332ce9c1a3af9614b08af42d69af0fa8788104043e374554c0cd194b1c94bae9d50e8c5c511e6d93569111d7e12b0b2330e051132470f91460d01da30fe8d5b3442251badcc0f0fcfc5cbd517db2061d0cd35765db01278da067b2d469e9fac3979eaf07bb85bd7ac06700794df3096bba6804df1b442c2dae56bdf2012bbb04f505c06d7639a7ae45bbab7f5039084a26ae692f9c6c342f20cff3fa4c3dcc39d35601073e0cc0021edabce5866e0bfade771bfd0f0ac243c2555f5f4c3e3986fe864ccf47d93c5cf157b892a4480718a309c2c3814289b0e1a20baf061003a9455b67b36ce951f024ff1b8714b707a829afc20d688b08b74aca83c55a33ad614bbc5fa5099500d92caf61fef9150b2563c431d915723730fe5f27d02893c42f70cb6ddaa3d0018c48989e06e0b80598bd8b6c932d0d8866ff48953a7b8a083b1ed51604d9c29a94c04047e87d620419b215283ac0fa38b38ba05f5585463e4f4543c53b081e8fd8e0447a21679f0ae4f6ba1523f7806b7eb3f57b492db5cdbe6bd032d5ccdd4be8fbe352496e6f0bb5f5f1977177977b4bd74ea2ed2b6908a9694415546762578e16fcdb11fc220f13a427693db462639f72d0bc54d49c1b9f14dea9ca53837adcb7e814a3039f0c1881447a31c1fdf02831be24836766120baeac5b81f5ec189ccdd5fd43b98a0f7561ec58e0958e2f42e48f6c23ed0d5d86d79b652b9c04d023fc75f87cffe10f84aad3f8cf3c684f46ce28a19e357cc3676080fb44e72ddba7e17e67246d960dcd5cdbc5e4b91a416463ed02c2eadc1a48bd5aec15bf082ec5e7fec1f4f01a0e3e1bac65b6062751acad645ed00c641be825e88cf8f7cc51ffdf934e4d60020a96e23b5ab46e37d3daa2c9947e8783d08246f32eb7d52884741c16a6b8e23609cce3ff8e8dbdb95e727bbfbae679b81ef17c45beedb1d523400b3018e2c8710564c41d2108f5368cb8c960ab7587f571853c0da68bda82000f94b38631aa3b05c4fe8d45608f23f311dedcd1fdfdf3a6bd9970dc779282d4dc38de8d30c53205cfbf9a9045a1fbcbe5cd0909025420a324678342fc8b39a32de22b7f4604960a96b6ebbbc8c19f63e6ab953f4d88497b8403fb8335a12b4287004de5fbfe83084e5d16f2823d57404d54a0339b01c63471d8b9ebb001ddb2d09e4874eb1bab0a542ecfd8d9ae5fb63f4f557e568532e8be80c76d00c7a29b8229996156d0180b9d3dbfed3d49738abc1d08fae6d9f1bfe97240a595d95912f2328233a76e19020432d31bc2d0dd105d3e18b3b2ad4863b0585548954e9b0fd4b04bd303e7850421873ff2b756a48de0411796cfc9d682104aa78afc4f5bf816f0a8a712277e0d",
    "as_json": "",
    "block_height": 192055,
    "block_timestamp": 1541192974,
    "double_spend_seen": false,
    "in_pool": false,
    "output_indices": [1915328,1915329],
    "tx_hash": "b049e3f468f3421e4cfe6feab4b69b27a26203b1370470da7103b340caa23a1e"
  }],
  "txs_as_hex": ["03000502000d9cfe4df0fa1ac7ed08c6f101c611c931df2fb414d80aed02f1037e15f7b3aa78fe29e26ac20ee62dca29eec2368afaed9467badb1a4f03f3ccc6470a02000deb8f28ab9e36eedb06b4e907d121eca201859401979d05d6028e029001767852ca72865af790144aa47d29844d47696b3a5233e783e7aecd9a9e4a9ecacd0102000db68112af9512deff25ab3d8be50ed6bd02a6bf11d9d106d918874d90030b214b2463f9eac5b410b1e3207df7ddaf77dd52962b4afbb40a71a79ed29a285c6802000da4d055f3870fcf9904f79906f90fc7ea01bddb038108b803d501c4011cad0214621cfd62916fc6e713a21e3dc39e6b85968a7c9dccb3b3089dea654fa16df602000db6963bb7bd028aa40ad6af14b39201c3de039d03b536b2c307b0d70b6b79be0110db8ed64be36f2d3d8e5a984811208e8f3e4a81ebd786429d4f4833a42dff97020002e9d6d245254bff7a315f2ac8bce62c9a1b6e9e0de9a457246b2e468f15f45fc30002f0d725c3069af8013cb238b729777b56e90fc41f130c37cc8ee62a743e15fd862c02090175ea3c296ac2437a010860fa1818a8e62063884825532997113c4cc0938bc01f0f0a9f26a6c7c0bfcc02e085b207c3f66ec3ddce80f67e12a9884d0f85686b5725ba733a7d7604ac308d42602c8b079a0b6a5b888c75ad01dbf79c08986bfc928f639c7424dc0eefc9d9fede87e61048d2613619cf3b9215856ba34f880533c839fd57c038db777916cd420f92e6e034146113807df465861a98a664a76f4cd2d4ff397ff8ed24932a71e49afd5ce0fa5301cd60e44a98830444a795d9334208e52cde92fcbf2e1bce1041908c54677dccb3960a5f905a85e09120cb39a0d84bbf65ca6e3473fa1e9c1ebd2d9603e53e65e961bc29d8a7c8335b08827194199e36e0aa23fc2160f04bc4bb81390c905b2fb38461bcef62426267ed58e319cd82f9a517507ff6e1fa5e7e3d06e2028de09d2dec89e18d6440dc8d181f2bbda92afc40b59bf10ae3f7778ae49a060ef77cd8fdee1f39b2f244163810f1323a17b61ca6b1eddf51e2f7c9cbb2751a566047831b93e6c40f60d998f3ff8822856383bb27cac229eb670c6f8e033aeca96a0d1ff3d7d1745f06af37bbd7f23423d90665e5d0244a7fd168fb19149a40047ab98174ca82438df3368a016ecc0e45682b067e0a8e42d8e1390445722d8a049955794fa0e2ba263358e3e408eafa696d2b8c82a56c73c4e7867ff45b976a030c827176c5a7369a46b01554208a9f18cf1270011870b80f9bc50cd5988b7d0b6f1ba4f677252f2a9848d9559a0c5d5e4bf29450ceb22bb67ba26195cfc64f03cf62171807f24bf26ca1fa6cbf8e230995d29afe516cd445eabc13846a3d960255000bebcf438351108f0588f4b00691a86bcaf74a21e5b8e7593579226d450e6fd998a7334d5f725055090f670ff91bc9e31c42b2e8f8a579bab302af38b10f5fd03ceb021fff02794c21d48f57dc1c2a1711304fa2482b7db59ea34eb8000baefd910fc420f8feceeeba01f79a016c3fe1d622a1d18837e1298b489a27590f3ec7d708bd600128e5fbf2ffa207ef15b50a98390c0835d8d37d9037c55e29096ee5a9ccc0c5f6a49d94e439842b34d30aab256a2f3f0d77f855aaabc40fcf056301848811e3f2b13d9a4b5fd3b5a3fbd37a32c857a5a03d7b6a6f43bb40130dd374ccec2f39784e9ec784c713b4bd9b5b3e1f5274060651d6b4caf016545901a91f08f9164dcbe30d24069a4acd1d4f98a576162d92ff35286740528a9fbc0fccbf38a41fcca929661ba2218fd82080b989d6f2375a6ef310310a16c0fdc300c95a62a75f0ce12b582769d69be4b73ebd45dc62328e53b2db7e5c6a1963bb056c4ae9109041618ffab8dd3d796eed7996985b8d848c24315e323db2e5dbc9086c07c5230a1e2bfc2769f36d9ccf8485f577abae6485b72abbbb04331c74ee060b23e7325d7263bc0123353d63feaa2d393d46d905e6b4078abbf0e9aefb470cfe9a30759f28920ca67eea05c50f7d5710ef247ef601ee328b0be7aa85a1990010c8f9ce03cf052559c7b6aa73982481c838f60bb09745fe9e07cce1dba4a60a37cf6d2c2da8f068b280e75910907e3b939e023832448214d72c82cea09268016508ef3b8b447b185389ec1389cba270868efb88cd9d4fcc2350f4756de3d3002edf8bfdb2c1c7f15a31b455f7e834ac82f5c72b32d2115ed29ba45175146d0337d7fe0019c027feb1c42143221f5dd3bd777bbb9dff14adaeb054daa9d26a0e4f3ba3b5147daf94187c844f5ff5138a214e27723d1f17463bfbd6ad99950c0927ea1d171336aa6e3e57e0864d8fc36e631dd2f6045b33029feed037834d640d2d0e2788b4212c309652a4fccc8caef6d36f5e853415f02932f99a7fa1f3300cc74279deae0ef9d22827934363e41f30aca544efb5f25d4136139b2d46ae150519767a29598ecaebb6476bbec4944c5453b88ddd140922f9f01d39f272fade091546d66de47f67de8fdbdc9e20bbe9263eb36d9266c4edd57e9b5a7a9b11b404c827331bda025d13ed2fce1e6b74b38171869bb901db14eb58e5fdbeae36ef0382a880b704371905e5573184c720887864bdbadd26f0a8e95e74f87b3c78bf062dbf106ffd060ab2239fd15071f0b0d16531b604e1aaf2076603ba6b515e740b93a8b6c36cbb35bb8e7e6b4cb9e3e0df69e0170bd4fb290b745c5b6c39098e030ff4c42af350e4e260b619c32dca21c57d7211f7f3cfb87a8208989ec7d132083c90759d8fb4c9a82189953b7461f765087105681347a6834820a90dab3a8508bd4682687e957369cabbd300dfdba1cc6284a7fd714d7ee5fa99de4f69a5690fa8974f6d04f1d57cdd8d826d79f87aef07dfcd78bdfc3a2869da8c45aa05940fcec2cbf2dcbcc0ae44142a53552b63abb2a5ab4b690f419575cc4e8ea084c60b6fd32431e66e48ffdae48a8378a04688a972058f70874d48f85247c4a7eb9c00b67bc3c7cc9cc100659953b40e6234714ccc8adf8b5a0e72b5615ce958099d021292592301bb041b5e2adaac30a298e4c7f0ec65db8667294ac1e951fa2d0007026054d9d6c7458ab8b5ff80dc10e76f2697b3e78bb4390156d9e4de2e300b095af23606c7d963ed316f5468373a82cd18f3a0e5e149afe4d3fb56c5a3397b0e83c8560ab3cf589738bcecf8600a35b7a9bfd4d6fdf26d23eb38637a4911810c42eafe3065f3bdb7cbe2f750c39ee0217a60d6ee8bab7da9829032710af75d0b66b1d893a3dba9d370aa4816d5639e605f50320963d6f43833009e55a27701086ee11ba0c670d5000e918cdd030207f014f477d0694c8023d4087b13aa942204dcf5700daef769361c4cea7959f29fb6d15bb97d0b6a0f65a0ab5cb9cef55a09b16d8369a045f45984b4ac030f9f72610ff704edaab1b865baad0c86260da60700430bba0f5711babe2dbcc6eea7520caed9437199243c74ecaac259e2034c0fd54831a537f56c96eea4e19045220b9973266f554f8c2bc13476c8f9576a8c00f008ac2f6a5b236c609fda9e344e582b873e554dc73b6854375bb19e49e0360045ce38f6c12081e0c820484ec4ce94fd8caa7621593b4416a9a229602aebb5068c238ed2d2acab520dc3f2b5a2566e783ad32fce9f50ed8de3d3b9361e0f6c091cec2231546a6c56072741fb1bea98f4cc3cd657c575ae86d8d5c1123bea790f3a3a78a51ff10571a99fb34f34911b5cbcf8cbaa3912a5da99a74155deb4ca0b32615a15fadcc63cf72e1e4e342d947c86a371ca9572696588091291af80650df6c64b224d9dc11afdf61491bbcc55676a2877b629656d75b094ae37aed29f0a9fde975836da50a0adfe99220609c62c98273ce5380ce00bbc685eadc3f2c1060c1067aa5957bb5215b147161b8109056bf2487206a1e0b894c503dda8ce25032952c6856a5e36da99fe92d069e6509a3c1cb9aa849bb2f440da12f446bbdd08c81816fd146b45edbaf70f199638668cfc2dd9aaa0f92512d0774ee32395050f39c40b3dd1bb39cf054b864c4e8ec393f5446cde37e7c053871876ca64ae930d28dc4d7a135fd7f09e20ccbcfaa73b3c2988c6bc1bcd163d3873f3b07e03e504a77ba36c19067a4a231816429ee5eb2e61169dd09d5ee23e69a9ff3af79c6a0d2366c45c7853507e9a3c018d7aa4cc6c0c38f2983b49edcec6a1432fdc20d207f45e8f44f132a57647031cc3e3bcc512ac9c9ce63d0520c8df4f21822e4a5b0d8a11d850cfde49ff766d07d87981beafca813afc63260a39d5fe577c34944105b238feace2b4985c7599fb0639f4c2bbfb4a05e27776d3cf7d5fa2bb2ef384009930e1c8fb5595eff857aba15cb7561b6fb99bc1de2f4f39577a26e036f1fd0ed25895922ea740cf2ea316e2da226021f6da57a2519d2e6e51507f25d99a5a0c3f3dd3664ba52eeb1b4e5c97ca5dd418971566ffc3482309779b175223b7da0c85b32d2ac73a3af1c3fcc771e388895197717b060a6f448da6b1a6e550363b06c9818d26fb95269d77263dd55ebfac145b7c9062c92b29204ec3829d6a0acd0ef4c3be558d1213c30d15ddc665f5743437e7e9d41ef10929a8ebac88594e330f99f6ea8be7bb53a3da25d63676113bc3841ff42d10ef07aadeebeea4cdcf6104c7059d24b69894a7c9933419fe66545d07e1bab10e939b336f147af20727c201fbaceff8f896af920e49917025e854b4e9d1b6a77cd4bf3913a1b7991aad4605ab53b606632924170f1ebda69fb4f68f00cc577a5549a48effc119206c257a0d912d93bf8b34bbda8323a8ef03195b51955cf6968b0147e00de618077f33c107586bdb97c8d2cf99968586fa2b25de0dbf220b81977234280c70043e2ab2d90f7477e733afae08219b53194ee699c97753791e01cfcfec4f70328cbfe68b160ee8ef059514772526be582f90692ffca917b15c19993ba1bc73c45d235acb0801c1a69be536b8c56885a775a38d9d9b5839ca6b6ebff0bbf5f951af681bbdd3049aa45a3180e9a78cc7a6ac3ff720c6369976969eafa4e9c8ad992b71e0259002fb54cffbe3edae3ddc31f2af5bf9fd3bc329305c29773782ae3c3c480c64ff00737095cc9b15a3f5e2ec81eb8754c938bedbb22695a39df3c28da66e1abfdb0e15df272b2e474d000715328e1aa0003453c23518244ca30b1267896fb27d080cc54d011d59cd8d6e7f33cfb6bdb10a60e2318762be8472d0bc2bb668b58af506f889918ac4e21df31516c7070a36a9991a985e47fdb0f7e265f6ebfb63329101c9eae2a6edcadb6b84ecedf7b970b0b2d565b5bf66280e305dff6e956859760c51c7ca1b903d0725c10ec36f49df419c8cc95b0df66a0af2631fbe2f8680a002602c5c16d5eb0f73994bd5f23aaaca5a8dddf566e904e7207f0a4e725d3e2d0586369f9e5ff9837e7c8f97f96d4e760284974677b68072c160ae5be287a94d06d04b0ea07d7dd042333375ba48eec905e79ff15cf70294432d2ec5603e2ce302d75b445a6bc3abc6bfe57fd5b63ff392814bacd5b8ca51269a1277085846db019dc2451384273e3de5e2b1197aceebc6b9f36bc4cb0c01f4d85e1d13e921040d2c735376cedcc6c96668f6be1edc23b40ae1c46db4bc6da939351e7e9740ff0efe375210fde9bc70e8630a174f604c11ff03ce3f99421023d7c5f16f9e0a0a0268ab562cdf9d75cc24d4d778d60c8d4b9a466c7a2a007590141b2feffb30200ce7ea5abff3dbb6212e26a2d7d5f5e3217d89ecb78f03b0f0f9692c2bfff85d0009a0dd827502e946feeb2d084f6ea239da394215ae6881b4c72f9410e587b905dee627662aa184f5f12d08ae069df8a605fda77f6b87bcc870969691600baf00ff8cf6d0ffd2e7584e85a765c99a1636000a0312e21e392a393f4758774c29076a0ef0585ac8765caa614da326ca708b54b39422f3be6f36905670f07b7e640078a2402c819f80b633a66d0b2319d392042d15d60a90c6a7e64990c1efa9420563c8e5c908cbde8d97b5f8d4b7d82537da3f170234b4279a8839035e84baf50d28e242464e1fbcc44e0cbee634a3547bcf123f6b935c13546848eb734c672b042a5096ce8f018e3f02224b20cad904ccee3a9bfcb59ffe28b1aee3165d7c510b8c49ebae5a4c245bdc8845d2f5e541989a4690819bc87f2ef197d55c041a8306c2aa3f10d52a1a60e25cbc4d5dba7cfebdd23fec4369a0701eeeb1e3d989d70519924ae40272e4b3832a676b965711e734ccec27687c6ee6a06955121a65c602f2814c3519d7f7ea3f441e1661ae140755cf68f04aab6c204b1ffa0eadca6c07cc5888ffd7f709afbc709ee67ae68dfee3674357ddb7679ec5d24b951e49be0071d66a876702e5de41666f4948e4f618699f5677284f80cdab2a2e0a2d07890b9939e9eeb86f4777435caa19c9d488345ebeda58aa94acc85ef54ef342a1a40d44aee4bdd4741f96869b710051359dad05aca087703277565a0ed9258771260f66d1e864df2d428e448c834b82ea0d3905cc20f9601f714a1e0fea9d6a2f4f040e3c071944b950e31fc892c0ae04ee3d64e8c9bd1c8b69b08f39dc8973b6450c6aecf08a8814636e9bfa33376ca62e3a727b11fd7d1ed8d62496239f8eedf0041750182f89e337759a309890a8034dfc3e2e20a868fbb0b7578b24544984a6065937ab14506da8546e042bf8daba5485f3a6e0a6f8c409221b3b8a7dee2e26042536ae45fb30e56e19087abe8c776a5351865d40f6687ccf23e9867fcdfad507ee7d66c87bec3d2b52f8435bbe96ce61f5d52737f15c2179a5c0c0781cce310eaed4261bf24eec9b87d7abaffcc8875d2ea621100e2f62e0b7f0a5193827790d9f699ef69c0105bd9381e072a56033b7f6bb3583898d6f800c27bba371f2fd07d8c65f475887185de80ac9210da22ac5237624219fa5685be0a827beafb7d962b0aba75211f41d61679ba0bbd7f2c848ef07a3cefa8fa6928f0a98ebbf6ef7ccd9d96e978e091d6fc07e4f0ae5bb182b82106509635056ff08a6ebb6e57a240fd16ad986416f3068a83b84f757390759b3af46dc5fea13bda89d593d2abc462a8caed872d2ed2ea5c5f2a6cc9712882194133732d8fcf445c042dad4a7bac13e992e418fcbf94cd8428b763e71b2d38d265280861e709028327b2ba3dea81860f172b77d83bce2793f0ceef40ef1ee8a7b2d8bba4f54bfa194da25fe39cc8e57c1b019836d0a2345b067e057d811de900ff8eab103fbdf06d3eadcd2bc95032ba7d3c9ace1183e4cbe8683cd593cc0e0bc972f0c9f6e78875607f2752ca353f8df576def433c55c6e7811fa85be6a8239be5a5974e40960443c32d517646d90939cf937c48e059cdb5d3630eae04ba1d0d8987bc2939bddec064b4c023a791f372fa7963346bd86fad82d8e841cf4c78bd75aae19b149e5c9b929d29b1fb8e4fef736b7a0ce61aaca35040817156b4cc766d381fd607cbede75d507f558d2d63676eb55e5947c67bc28670283b024d38d3f295baab408ed052f923e548bad17e121bc6f42de162c2bf9255066fa76d7f9e5aa605d725986d540b38e8da1b6d22a244c3a2bc168915cfa07a95054ae5e71ad91adff429ae84dfd52ca42d88281a39794102f25ff8e01f5b0dc84e782f0b9a336088b5efe9d84705b46db465fc13ccf94baa2ab333a2796af1cab7ffe2d83f2531c7b669ea092279470acfa3111212e882aedc5c7e7b5eed6a1ace2ca918c8012e5bf3ad84322e4ec6f81feaa6102749bcca332253664f17d0ca903021730d62ea94139e9de8342d51837a3cebd034412839bd5baeff00862108ec58c015db77e52725101e5f5a957d0b644058097d686bc493ac220940d6020a2afca421190291b6e6f5836bfeea32a895b0af3409ef8bf375a5d06276f2380a321a103d6f377a3e671985ae91b10b8e3fdc6fe0088e85381f03bcf4cf479f16d0019bd5b482d9dbf893812742895bfbb930c04342ee3fcec3326ca127e6b66f562bc5051dd127fe13f5733768ad55909fbe0df7998f17434806b5169a81cfc4620b48e80607ab7871ba790720aa6194fa8bf073a0e0608a9da33eba6d83b94ab22c6eadaabf931e1af7022eb294a9e862537e076f9df7e9dc924adfaabe29f4241457989c1a2d8d6848379259c586ca715bc1c17b8eacd6c9936e0ea2241ee621332ea1ba782639e0f6bc221bc0f4fd824455970aac86d25cc2246c2125c5663fef76a83843cae6e7204eeafc2c88e340b3a5422e921c6de52d8eb6da250b681d1ce071c3b792063c84b55e158bf7f9d93b4179f7670905e6c1fa6323efb81a64e679b27b2112cef48c7282f889fd24ee138d01c8a99efee7e17cf9435d404d1360ed33ddb76aa0cc8e0165c8f26f274fdf9cecb04d6f476b6ce7205f73152178560d048dea2bb4daf5e0cc771a0b3e1b91983357fc320999e509bffd84006716a79cbf049a78874d1f69890e672f9aca9b298813667dd0753914a73274fa9cc421e35a5d1b71d947c4a84ebaa54d8a0d845e199c1cb730f0287033bd3601ff6a2aabafbd53242fe28694f47fac96790c1ac154d186a1e764092fee42c0523e63eff600048afdfdadd9856f1578792d96c61114255527d14a6a79199d807107e7c4381c5ac08207a8a62d6ee30efd9a4ba15303bf44bde70eeb809bcba67b3e92fff28d4af7f06fc41c3cdb74b5bc0668852bc898ee7bb689db0ae706fff3a102cf4672c93990ef079f778b0327fde00ac5a565df1c8b69d2d83ac3173cdb250e77d8d0622af932d576c9daee13c5c2ee6e7af24d2e9123b621de7bef80617b75f0dc9fe93aaf9dd3b94786d63f071dc4288afaa32cb05d2880ed7d15329c41cca14ad77c7f557566d7beef61c37402a78ef07fe83f29560fe28b15f26f32fe6887ebc038682e7d04e999dcac1af2cc604c703b5366c5ab4c8c441e8141d9b8551481a4af602d6035464c7e8020764281b6a190942e7f7e085783ee071b47f66dd77349273954a0a9f44960420b9cee023a7ab4a5acc4fee6dfcd8132ceb4796b5a47d6f546f332642cf5c8b47be7009e489481c9a4c26f2f3d0e03f0e931a42f2d3be3fa3535964a6e3d36c850bcc3a355fdb2c4c169f16fa6b3590e64dc0b9baf38c1d307f85602a2653ec9f89b162083d89f220e7a4a8aac0ff4f28d84d76bf17a6792c7c1bfba97e806ab608477efbe0555f7ff46963d8c9c6a5cfc17e75274aa3fa02ed41996f376e79c2861edd8d6488e7ade5ba81e9b23f21c16f7e455fff2cb6056ec9bb9b7a176d560453acfd0e6fd56023cc9d1f5735fba97428d8af63d051b68f6192464d9e09825fad81845a897be84de1b8fa988d3b1410805c4f7762f37f894cf044e05983009a536a9c41088c6ecada785013ac581aace5369c9febb37394135169c84d3aa9e3da52b8795e4cfd31220bb1bd96ee1323c1065afcf439912d3fa0135706da11e42efeb2a8fcb497e6b9d9d47c1900163e482a0177ee55bd17ac9e5f323de103186b7362eeb536098b1a9d51a230f495f34f739ac393dbb23ef74fb0f839effbd6d0c72feb6a215a3a72941af172f8f68fda0f9831cc1c0a676fb3ae7a7e95f96202de0bb0d917909a81ad8cb8ae733bb4402e8c217130225f029fd0d14a695a0be8c174860edc2535f7db6a953cea4fecef0a4acb8f9915dcbed8d13cb46d7bb859c656a6aa9fc9b67744dd611e2e44c6fe309b690f848d00e9f7c18b9ecfb5f6df3326a33b5fc6656fbe6d84c0ca0e999604ed852ddff3b2dcf524263950fbd5ce039a3f6322ae6b3dfe74ebf2b8e56ec9e3847c6e34f06474b4ff31c575e89bcc955f15706a89bbce87a44c7663990cdafa4ea69ce1650dd03897812aa7c5574ffeafe0e0e554f8181078c5d1b82fe0973667a461e48752c34159524978260ed93e2789e0109461e5dfbb5f72f5e51afcb516ce35f3882780e84ff69628e874497b66be70c3ad6521b2397e943cc1397a2d88397d4b44dc57d4823c8507e6c5585b691a60e38978f9d45f55a409f447639bf23de8af83683191d4cabea4b3c23c53be20b0ba8a8a1564fdb0c86753dbe464cec3dee9cf9bd6984b87757d771d80484b0b7042ae133cdb7ef094c849739f739081d24489b73a8a3ae3a2407288b08c123f7032795a3f474d153dcf4e348e41d490ce77004e6ae298cce850221f6d465fcb70b83f487cad160d13627189efbdee043c944ea5b691a083458b02450892544bf0d7d1969731302a1e6daec138b64eec8fbed06f6a8e8222637b3fd36ee4852de0b1e8896bb12b2c2f6fabe83a8a381b6c4f2cde807eb7190e942e25f0b835478014d30a4ed976e3ebfc2c060f03686e7f6778d292f8a0ae3d77e0873dea5f0b70c2d27c6caa9802b5d7a88770b27bffcff1369e78c3f2c4b7037cd32a1f489cb06e3d22df1a4b01f0633ed44193d41bc89e47e7adbfe9e0c46afb88c7abe066507f8f2d22c6bb789275cf8879078fa6abc913c4f03509a26f94baf2402d2baab0a7b3c352d5f24c8682f92a22ac5444a83eef713dadf20a5e92093a9e34d107c073db51427db02aef6f76cebfb51ea3667b34c5eb7d097aeb3059c495072630d0284479c2ce81ee2e891bb46bb304b59b1424833c4d4853dc601d99cd5d938ef002dabef242bf5494a5f6a6327678d1fcdee1282d733b09edb8a67588fd8c64603ad1e2e7d59e0bc9a8dc1a18fddd1b0ad1f7467ff3f071f3a150110817ac4af01885dbebb27fa5224a21e5a90e015e56b6c26912ff31a99aef386d7f6fc4d7f045852c4a5cc614ff75d67553139d0ffb9e366cbb54595fc470a6f9857b6f533016cbb51e765c5310d81caca67298cf4f0f6e26cd21b9f7944b84e914483d8010d77a40af51a44408497a5f31a7bd7d4286df7bf4b0319729cb76e0323f976f40e27c1f1af2d2ba98b5851b71a22ca899405b867544e899e7236a5b7264f411a00bf283caf69d83ae5323965375e72d0ea849731da1b0f950ec8db6321148775065614b803b89806cfb6619c10094186198af18bd5519c60e178d013bba69ced01ea9f0ef05eccf18b48a41ee458037d9a76a4495b88b8149f7841c10ba248f108c6b7caf3042881efb1a40441eb73941395db4811c3d464a93e8f53288a1ae7096e8daf375a9120d32322b01adaec99366a5f2b352e117d32b0a8661b29d5f905b90e31b8a90a08790de30bb238d566ccafb5bacaa7bef8be9e17338f20b42c04370a3f08129c51a3e6b82b9b52e4c8835af91ba8cebbe8bb0fdd71283ffd8c088322e100f746c66d1803a25c2341a428cea5db5401f9b43f841d6031fac5ec0ceaa5017114c8d576031f6565e317d825766239a790c18df311be7bf1ff5ba101408a233aaee53bb2556c9845bfa249ddb171f2b77e3cb0d322aa6d45ed2bb7026f042d35244511a028ca2abe55d11ddf9e2690976ac8142f7e68b97608e4420380dacec973f661318b501dcb652dd0d4314624aee0366b3ffbaae97cb42a9802695bcf6e36aa1092e6a7abd9fa6652184193c8fa414cf0d013f945141b3ee80aafc340eeb493b9d7f03d15f18059808b78c53d0393ec0feffe977c452cbd1b007d5b558b1436f687fe1e80e007f0335949f9519fd523b1a8ec74b4ea5eb2bb05114bf356ef96cd6429ab18654f8fb062877aefc9d74b6d05934f6f008a7551030a99c9a90793ba2a663d88d6e097c875dacc1c103682dab6c472f9e08110080c588ebe7bb5f00cf18ba6cab8bdb4f44498a0733ede517822d1ea3587637694081f6d1fa58cc18b1189282c3bd55808c636dc1f258b5bedfb68b1d6a729352709261d59b23cca54edf2f83f01db88e3a75905d44d46584822661caf6606dc3703a7b9fa2660acf3e413d36af86c34d029968b253c88b6a2901d4be41c0baffc08bf365485e9cc3b211966ef5ee6350cf1481aed6352c3e65a035759c4968247059b2cea2118c6e4c10c83ba817fbdc20f92784fd630f9aa633a94207237b2d60cb888850dc399447bde6c11617dfc1e9ec50283ab6e3e4979e4e90f6c9322cf03db9c0265b0d6d7b195fc7953954ab26d120ccf0d47173d423a4bf17c573e1202f4babc95a1cc1b9a3ca9e0b2091e458c37ce41d1f398e4a6a27ebdf389845d048691b5cdf6fca40ba08b8bb956026ea48280ccce04911d8122a68252151616016f759be211b4430070bdc9c88ade714b9812b1a3d42a9070fc9f27c00d7c540490d97719950112f39edaf0f34b429225340bedf66a4bc80d93a7dfce08e15c053774f995adcd655b0eec2ec227168f606e6126899d4e1cc8d0579c3e3862e70a290fb09a0c4b10c6be2f6d1da2718ab40487eeaa73c2262c0b182218d33afd0e4cc89b623b08caab4c31f785a166ea6d6e44672d2f8c095ebbf630ed6c2de00b2f9d942c69951c649686b7e2fc18843c69eba5a5f564c5c6cd3cc485d5811401f30094aa7cf72e03bd726a3433c9b9f4353c21fa774eab7f97a9f63dc57193001c1d83773859cfdfa44c008938f7e3a7b2242c80037048427951c56944fa140b9f9071d5f8e6db0b23f2bb4c8a3c8d7e0c1bd6f84ece612b3058b4446b772d09518713cb9a653e81f100b0897ae4713aaacc1a3a8a1cc650e2e7147b7fb6410a415029971966a517470a1f367a0a283d3c043f36c1cb062877693ae275666301c4e42312e727f2d873ec85478e8621b4862be0c232e0e3b41c3327d67afa8a0b18a4aa8ed1d2904c06acae21198a25156d78900d853b417853f38d0d0363840211ccb0f59044dba0ff60535425609a391108a301d4f258d7478bc2ef5b987904d6fab14010b58a35c81cc1351c0b1e05c772310b14aa2851b5efdb0431c6b20782fb1bd9ee48c44ad2ffa7aedc9309c89b4be4385e0f355045ca3ac10221390152b222977b64bbf6b8734814ea90387f47e01bb8a84c061076d6399db1aa5806696ff684a9407435866fae14e34b1b8a1368a3857b59a2deaeb91fc197bfdb012f0f58aa354f8c3d6611eff2d79371644090a54a26f7083a2cedaf841cbbb308b42700e5a14504df26c430dd13a72086e5ba9897b5dd3273d0b492c404bc6506329ddbdc83279e134c03c311ddce572b46a5a73690ac701123f9e25a9bcd3b0514a4b8bb256be8ff04034747ee40cd0fc03135c67e81764c55750dc4766b9f099ee7ca3109d5d4b0e8f0eacef8e9879d2dc962b8080156e98db18262c1f4a6013ddaa6773135769306d0c621390ec8a6e2717554b6249d46404ec9d1ef70c606ef355a0a74c0642e0d66be4ea3dae8a571e930058d8c5c1441cf5b9ef7216906b63e669b25ae3c49ed58269034b44472a47bddf79803cb2eebd2f1202a32020bfec9adef127fe3bb9d7cf3becbf4c2a4ce4a4eb83e2c4f920e0c746e65e68304f3beb5fddb9ce5c2b25cc2ee862736bec3b7e5081b3a97cf0fff496678879a0736119c4ca41c597bedde2ad40ca265b49deea7e6dac1805fe2a955166dba92063d5b782d7ca6c96736ce630b813f292d06b9df7949488ab92ecedeb48c47d505d7436aaaf3eede9c3c599c4b3208729105b68cff2bce45b92abaaa802ae9c30da8ce947887aaf4dd75eb083753b1a019768e98ac9291d596bd021660e8b09401270dd13526677127b5526ae69669952d188897e577f9166b62d5727cea91d20741613dddba467a85d8e7d4dbe54226c4c662fa311269714e9dda38858ccae90daafbfbcbd8e64abbf5ad0630ab8d7ba77355865691951caa392aa51d23d89f01791f9930ddabe1ea2d9e7d81821306c61714c40ba437780c94372e341a8a890ab7a9fc3663a1d4c57bfe1ceb5c4e70cec7cfb05ea250b31c8b0e8a5fd5d8c60c2251501b73c851d0b6f0bbe401bdeffe4c70b01fb694d8ff7b51e29d6a694c03ec62aa1c55f941e61d0ef154665a90975dfb95dff00919d7e478062193300a0ef443ad37d039211f9d2a74e134201ecb9cc360d26a6c6ab2522cc774543b740b65134c6966efe3a0f8fe17b1b7246777cbba39fcbfc25509a3e2f795d32a880c27081c258aa2235f7e5ec513e77b4a0609c4e287fd399938c974187c99259c080ea6ce1274cf00de0e24bb3fe91df5ee3db8e25d198d4e2ea44a01d87ee2170895918886d9ffd7a88e58b4dd28f8d558285cbcb0b9ab8359d0471354f587fd01f06b6b6370bb281a601a68eaeea4c154901fa1878184a05b6f118145e35ee409d9dbeb4b73552e85ceb60b4c96de91fab5f754b237b6e60673af96a7e603b50daa04a7667ccf2d78f249d81e32136b7a3fb2e83740a1546d4822bc99f6c05c04081bcfc4aec7a6fb65406bd342bf0adde07270d9495954234079b65fcdb3f3063793af6756edc45857e306464be5508e349ce080e9f62bba8fc54fc35c6b0c042de94bdf761a460654e6dbdec4cd8cd84ca3c96d4b4644a7ba2d2391d78647081373874cdd6dfee70fc440738c6852a817e993001108933740bb96d4b0661f0d73a9a21c46b14cb83f0f2149a41a3fa1a90db18885a871493309e61bf05ebe0ca14fa3d3bd7b03a73e3559e2d9ea06166c1385cad8c2d3e324a30fd872f1950851890b4a1178b1c989228e021060b31eb8eca71d04e8502e59274b249feba30c7769b01ae87bf0dd2b4f2cc75f2044c7c4c3ab513e6d5af7f328286bdf112e0633f600c2c75be2483e412a84f3b137cf59ae502d11c1ac645dc9763e8d542f085135330e6a3441ef6723d1b0cb22169667b247a97ba70b9928ae2471405b4b0a9c97b425f6ea3246ab58a9ed0e3fadba4434f4f9ed5fec0ad7e218393ff6db05fba1eecd8a13fcd0f4b547cfe23b4d3643b7593ce5e1c43de8fab5e17b84ff0e14d4c8434bf5d4e3f084ba3badfea3bac9bcd1b34597ba3bc9c48e3a057267054dddef3bd293dfb560be0fb64983908a43fc118f287afaf59eeb66a9f4b2d708892f8501dce95855e5c1c31832d16e2aeaa911789dd46dd96502fb216546fe025ae9b4ea03a8a405466cd20206d2eec109d08601dc87bc2e72d1bb82164e8c0f2b5957b48b1576a08f536cc219e778e515d713090d6ffc56869244a4428f56094d44b2be23fd8931c40202cafbab749bb5441719994324361dc4b676c21624070111f7dd3a8fe3fe0b7cfdd37382e93fa71e339b1aa0f69657972a55c2684903e5a9f657c728ee65ac77767579490331b73daa6e803120e47ce95067f81ea809aeedd5fb0360abd61aa5da69137701c6f008adfec99b00d64204ac4249b3dc0d8c08c00e4f7009530d0ff3aab1ca3d1b7297304a03207119298eeec646b56502fb0eb810172276b77828de960d4371dc172bdc09f477d53c29a9f45089c49503f3c48613f70974be5a7e2db0a6db1f2e08bbb38ada1469e42ba96c7e664b2905c5b91add5aed6b08c601d6bbc5cde8ec07ebd06ac13259c88f07bafa995189048a39a2791e85cb30b99d51cc943945f8c1c23e0889b6462741b9d757290e0c040878228722d092c7037c80ca0748e8843e25ed1f35ad5d0b19229594b9793d0fb52d3e69f38d8f37590086b7fba6e50196c9b22b4fd3f4b2b1f222d5a10244054593dfbc5b36073991dfe5b37787c8bc75acd478844045e9448b2e01682d3009d1f21d292e28708314d289710d4c316e17ea2dc917eb4cdf3605eef3d460941fd0f628926aecbc1cc58ea18a06fd8ff6de0591c697987c8493b6f103924b3ad2a7e6c6d7761d32d2293ffe8bcb2f4505948576421ef9968d7876d425a08cb2b844e027f44681c9655f085ff3aeb270cebc0430944214460675394056899711c156a57666477ab0d00d361443a34dfcc182ac615af490224be0147dbb8b75767148563a1976b560a138fc6600ad3cc3282fcdd57fe810b04158a31325a17aceed1e801cef581565f18e73f7a119983dbc56b6c43f91cc236ea16b8878cca83b104e621ba9a1f38bdaa360ee30428aafdaa7bc5c970e67e30ba8fe71e7652c26ae4e3418e891016c0dd23fee78d1b9b7cf26a572bc52bd3e3a9d7f3ebc98aa51aabe53e752ad0641bc13d235893a272bf106c1b55e86b2bb9da8d1f89baf7ee7e933b3ca8d3b7a3e3093c3c43e686a826addab1bfda32c04e722fe1189df1aac7f2107e8a6aa9ef89b64d0fd2ea2536e7ded99560dafdf3a504493e2913902686774863084bf4d5557ce3a993f7a11d4c9ffc5af8cddb69fe5f7e8a9c80c2cad3ef9774a251f0d030b3a123952c72b732b05b5d1b5e4acada11b69607f899a8ddc9e84c883f2480a53a4c269d28d5fc241fa133ef9d7a40f2de1c67a61508db78ee697df3abd1ba2bd1f5e05dea47288aacad5712cfe406e3dafd0230b5f315dc319be10268cacdcf76198867efc2b05cf816ca3bd7c363ac37b03192efc129acdce301b1077bd137be2a609b07256ab6601ec2d4ca6daa55e0f3f4789e74e96672829f88d32ab199615d1d90a0e0681c3f3c29c75e661a013f8130b39ead94db39a3535ed241538eacddfbf2e223b9b46d0bd5b68bfe7ea7376c16587403dbba3c7563d94bf320670d96ce901f3340598ebe8197954426eea1385245af9e79cffa9d7e3284adb3d421d24b545bd6352440d396b56b96ba666e339df5b3be01990daf7ca3557f8070c4ff79c0931fa6940a327d29dfb0654ed00d6ebdef72ee4fc6cda55f0d3bb0172dfaad522425421c855557428ac647d20952965b299d194b5b4d6f774d09105d2aea8174c70d75cd901898a2cc7c8cbbd8be0c709464ec780b5e1b05e1a5b69b2ced334ec706a231693d73b94058e06a6e64a1000d41d0a6a20a5575c3397bb5a66bf0faaefc9d703bf87aa99dcb945cedcb61924b9c957b7be212deb682dd3d862b04f473a41e46a9594cd9d853b2511eae7db523e5a51aaeffc69fe5103ddb8da9ed1a8c0bec321d0df7895fcb4810157b7cf97a88c62b7de24fedc021f4cee6b03f70eedae210b9189bb4865e75caf24d230788f33da7fc51c325bbfaa17d381374afc4613186ac434b5ed4463b9792f59d85b265b00b544818b2b9244275c724f32206e2e1278e2250b211fa4cd0dede23c6e36121ecfe11978dfc28b86cd21c89d07ce6e67ffee976f9ec4afe68f804c3dc6765a0645cb011fcdd58c57a1bc80f1f33e55c98b62e2fe831f4104e79a4f985faa3afa1c78b5079c860198da9b9635b4fa5b874c94d56d9dca474b6b32687cbc4b80e2235e3b3ddeac6c3da3f752f5e434683e5954c98940395ea84820e332b4a2819f453ed5914c9630461c7607f1febeab2d64a743f6c04980e438d9be0bf73df2f1c012fe412cdd3994fc7626b7a24fca5843925cefa42e6df01466c6204c7fb3d7f8edb9f38d0e13bfcb09276c400266f2233b9708b47ec7afeef69fc26f64a6cf0f8fb64892e0d4fdb1c6638996ad4f80569be8b542f09e422afcb70b6569a4fab0ab5077fa88e637ac70f1d588dc086a119d53ba1073d83df817b9f10347c202852a3e7755442e0e97f4a8a8eebd4637e3f35f9e23649aaec8d77395ee01674d625180f3be406c587f732203e8e09146e07d4e2a754f118d45b59fc8680d47632f330236265c97f841533f4e215949a98d03007968acf1a335730112e5f8cafda1de78df3f6bf38dc530ca03b3c0d7dfdb01ad2ce42bbe59483e8b7a3f82939f6e39a2bfedd8c63d42a1d03aa3dcbb6c7089ac46de5308ca35b396bc771633202aa2f2309dcaf8f06e373d670e05e714889d337c640e138983f91738e7096504675a666f987ea858ae222115b45868ca3db65d7ee080c40a2f6c4064e7d23a91b4f1d2330c21b2110fc1bfaf03ec1d8b79444f4a16da20f586f027633508c193fd9abd8ca0cdafb0989b2ec223fa34738c58e999253480f9e18b50e4e8e0984d5f996f2e0a45c60cf3df1d6d1757e652587f0daede3e9ec7142084988dfe9b6b61085061a1a32e7e78e47eb664b18402f6e3fb8a73ff3f0f74cf17c27997ca676e9f98f9966de59abba9511228fdf2b4b18591fdd56bcf13a57b2a1f5befa0fd27db2e5d80450b356087b51adebcf32186bc4008abe9cfd69a3ec6c8cf07e085e0ed82c81bf527e68068107b57320160ee5728bcbab1fe53f71f2f2e9e3abe74180cbee52383d739d0b2a9038dc1aba1e0500bf8b97c63a3639974024bb83641f0031a006db4b8de386e86743776c37031ad7893638db8202b8e3e1bc4b4ebd24512021b8652c42d0c3e9ef56834fc8600715ed4876bb94d2b88ee6112f6ba90cf7f351a463eba4e7bc9b1d8c50facf2a55bcdb77ab40f72f1caceee4824681471ac0d8d501e1a33056286b9c74ca4a9212f5c26d00249a205f658bb5e35a630f5cb4fbab2e546f004c37955f940e1730cfac86698c31de0730dad0bf1eb5a478da073ede45c6155ef45a94d10b72be776f9c4d8aa4e730120087612e1f3f2bd0cc514bb78df127da911d3e21c59620cd120f74b8d92b7014382551d93b91c371f84a4a648e901df3e4a4afb8f7fb6df6de84eebf8419f40cc6a745076fa489ebda46ebd0a4aa7a0efb96c59364ae12d4d922c0e3b12379ca5612610f03fcde40ad208dc279f6a4202145cd504d20430eb4e16ed3d8f07369da4158d95f80fe20556bb18a22b20218d05f514c9cefe9d07d875cea62f4fb7a1b358dcee5ad1ac08f735fe98f11931a16a96b5f91d489f1574da1fa32ab4c4e81ee95da587aeb20305e7a94a8df6eab9567d5525ca3dcb81787d83cc368d66542f8229f055125c03001883b0947575458812d7229c5090ac7d5fec1b6fe52385a31ddd9ec88ac60ed481d96e161eb70688ddca9c34e3d29c96bb4d4c0099a69d6e15c319249b020314ac6238d21c2e96d5bbe9c6010ebef3ed7a5741c78b40dfd45f23ce438eb2019f39cf39989247d07460c0a9e6c245cff2663898fb8dc18678dfc86b2c44d80f6b994b9a1e96ece9e6ee2db408591b3d8533ac5155a33c16206a603a123ddd0a9866fef25a5d5369abe28e8829f8cb0d1cb7b3e49d29739d221ff6c6e9a26205d0e9d8306ee182dc202c840c277cc3b388b3f59307a766658c8317062dcb0901fe44761f48941ec24d2a1a4743f45eede0253a45c6787d22b047b2c8bbf1370284ccd98d973d41f3c000e64c7d8dcda32829951f376207a0c2e8de42b4105c0fd76e53cba0b6e2dc8d01cc13a192df222b9ae38607a1f9f472e438d9af45ec00a4b6374c1ce0023ae1a274a30b2849d64d800e94eee3aa0ff637e1989a88d10ad70bd8b4c380b6dd573973f2b95a6322dd59b3d20527bf5debb8449a59c01b089a90fa9090d59c5ec6f29a91e6544e43137f68897d40156e8e1d14664f7a8406c3117b3dc8e7a96fd338066cd80031a0ba76dd194f846d0464aa7b052e66190098017166366187269397694bd89398d7a8e3f94ed1e713573bd2ab449d85f3002676aa3e6e072cd74d7372aa29089e47d83b261f8ec970bc60dd80b77b0c3e0d1f154d5c0ad71cdd3e4738ab6cdfd302d58cc44c9e72248952c262dcca517a0f7fe04e6baa17ab43db16da60c54572d6be8b3bbc556bd0f6176f21600a606b0b73403b71e66aad4bf39297d2638139e8b3aa4b9d84416402ec557a1dbc066c0977a85b1177f62f0e6f0165f5e00305c39c18293a7d23e58a2540958d2de9c5054f54237c104615e58a52877dbbe0437c7811d098f31c690e146a327d231376091820670003b0299ff17940b8a947caa3b43de2cb3b0e38568378723ea87acd029c2a5709766f264bf06c6ea3b5c44fd514512a04542fb11469aefcdaeab6e80acbe04b07b1e44c2a1910e9317064efab5c417f5210d134fdd3d6979e060f8009cc0b23dba29061dc65b2f8695a4d894a0c6376fc7ac9c92201c02c553b334707df2597bc098176cb5a4e0f39b341fa58deb83da6bc2e7c64fabb49a4d35f680d50973d4355ef50773b29b0d5ba6203c81bc4eb3fe1029d395c5b7c9cac7da400c75e82a82a0599645714158e427f27469df1a3f9da5df0d5bda8a68e11ea580b055cf211a8c1d35324241e3eac2176d690e38f749564a1f3c740905788995b05aaa5d1ad99f2930b8f355a4b3612c9761cd72c2d3e44af21d973d2554a82270512d62398c135ad431bf1dcee11eb5aef8e79584b6c7e59f2b6f81c4b11c9e0048f998a7d72c681a13b4fe8cab41fccab31d5e07a8d619bb9f9dfd40efac57e04a883844b02a6358facf3ee25e407900c4fa572d1da4ed9af916991affbf119078beeb47d484ccc5429285a9e530e66ebc99d921fbeb4e61a2bf1ac8b8c7b340a665ce03447b2e95df083ee3eb59c63421583bcf33b3644fcb851ac607e63d70ef5629be2a079bb10b2dbec2ba3b3bc7dd61f83d6f9bbc2bc5a30836d0ff8270a82565ef62b39616dfc694f16e773682f6e6abe42b65595cd4d9249e2bb4e3c019b17a7dcec6d742910124f97507943127282d3c2fdbe41b52348215aad744104c3dd2ba68f3747136acfa7674c64c7c5c488b9f415ed45df5cbed5fd79401c08f16360ffcd8161aa7da3c5214269212cae4ad148f15007ea0a257e8516a2a20fe9faf40aae72c368b77a1a7ddd7dd5bc8b1d87977fa6bc1d6191a79148b3290f5484a825ecfded4e6d1018488de22116fb54f51322ebe33f9d9b1d61e2669903c6c17266f46f9aa134c2a171513f01390bbd3e5987955eafd25c61a19a38d80ba4f423671ac2d1eb9a1e529b17c0633c4b336cad8450764576197475f2fb790a840e6cb44ddf73ffd813759193e68262a96d5d0ad0cf720149c4e461e7e8120c08ae3a1fde1881f1be1616695b26e61b90a5f9346dcd8560ba57caa04c75b10c6c9cb8802507801fbed5023e104b4461b82f2b929f4e0a9a942b4d7f4e897d0d583fbd118ef1aeed2687330542de892cc51f4ff6e7184a58b9c5049fb838e600de79ca8ba976a06ebd53a89c4fbfc34070adb5cbee85a3db4e8eb9708ba253083b7ee96e5fdf7de5796a93ba6a729281e89307c8190beff53a9949f3f55d500b78f1dd1e92cbc7ab6368c31dad15d9f9bede1524fce938fd97d85642177f1a05edfe5412a0a2dd60e58a320f44eaac09e9aec40a6dac063cbdc3822795892402b42dbe1ccdcad777066c9a3c0de3c0ca08a8d2a1d927baf06b730ea6a4ee950c1afd7e8d5fe4b63bf69100deda5ff7647f175ef695c74159724086b2511d130035260ff051d6ee0d809fb5f8240b51d1b0a9b9c323d6c28d3248b8a2197ca20f0cc6bce7385586098a616d098c28db26603121fad91c891b1219db714ae6350fe63c977da6b744788cbe892014b0fb179b18d2235a4c29e353f054c1e9251b068488ceca6feba7200ab7b9ac3c1546013bfe43e7e54c88d97e8b95b69fcbc70da9f20b41e98a944f80731497e6d2899ec07250fd0b08bbfe8df6ca9d8fab9e07ed7a27393e6ab0f1ee5dc35915e099baf529f15853a1487794797a1ea5f60d01debcff56f49a8762e3fbb1746846cb04b2047e3b90e9dfdc577024fd50d89303baa1ece572dea74a9dfd47c88c690a374f0d7e277dc0a4d7e8be914be7348308b630bdba8987e2ea13012217ba6c1f3cba432a3fcfcf26a129c6d0a0f289190b4a3e418898307b6e503d97ebd5013734ddefee2b32e91d282b1acb4e954c6f06e484717e9f6d305e0242c1c3b3ee5f6277eec1555e945e0f9773e423d2318c0ec533606b43d2e4c710e22630697b0e90ec6d772bdb5c94718561ab1846e9310d65a112c3bb2dae40a95a29a703beb398a7ac557256be4c735a9a89da5a63390aff29d02e32683419e30dd11d36b367727115a734791be878e493ddb876d1ff0d709539f8fb45dac5974e034bf57f298d7e99e02ded50dd4392b206fb9ea7cd02fb90b568632f9c2f1404a7f46b2db28630be5323e0beba01c9c52be8e7c1d300ad45c732a447a1b46f14d9c264335ae6b3ec8c432d882816219f80cdeeca9c0daab6cf88026425c9a14208b13f0b16ce65de090d286026ce420eae21fe480e063390be3ec8ff28cfa9cbae095b6343aafdc1028050bfff8d32fa979138f6f60681843f3aefb24c23b888cc392437e9da504226bf80f997b6c3cf9fd91973e1081dc77509fc2f170dbf7aca58fad691813f7601963507a3247f8988b88b922e0464294471314a8ccc85a477c96f64c9caf5c9017365044c203f2d3adbd978fc0f04d8dc34c1a98f3bfaa4f46b7f5f220f9fe398efc1e4a8cb01defb29427b86097618197d2d594a6c31e27c36ad9bf4a5d0a352c1ff9186a827d8d384a0433500deba383186d5f6dc07c3204bc4e9c7b0455ec07e39f82ee917ab053cfcbfcb05a39f7066cca47c1e8b2e0cd96397b93495dc53a45b4b9aea45d687ea1e10760b19fe015082e8b88e8811d54b6e533a510e387ce7dbbddb430bb8b538baed3d0aebf558867f43a8e4a038e511f6f735a6691fc782dda15ad001ecf601904dbb01a3aecb9fdbf1bd5a90222965e42179a4ba8a148e474919889a28eb0b91b1f30e9acbb7dbe30f3d7314deaaa76f2dc27a658dd2964afb79b3ce2890b1c866dd03e706449088011091f8e742ffdc6b420f848985b2211748dd6ca34ed53051a20f8178fd299c360ff3b69403298ec39c1c3576b43a29749c15e687e3772b266f0e2567c4e88aa9ff8bd7f4898801c41f2d1b0133de64e827beba8d6433cf33f20e1d7bc0d9e27d05454539fec6b0834b555b5770ae771f470f03005f2b98773e0b5360a993ad9a147620f849057e77531426520beeea808071924925a7b1855209218f0ac86b237e0ec4b131b2b63bdd1c1ef74842e5cfab5fcda673aff1fdb703e2686b57d713490b0b576bf3cc7a86ce9c8ad4ee320ae750a46453f509b3f90056207e950b877f969736a49387ae3ff8ce793d61e5a0591886fadbef4373180c8b221ec8c9e40b37e7473ac16501552679057da6766f210aede37e8ee760610fd5ac0e35ba0404aed3bb6c17de532ebf574d47377b9a90594fde8c96cf61cc09c479f81f0f7f8ef2473c4be207027fa6901508a1898c022cc30986c2dcf2b201e68d2226820fab3251f233c3580644125a356dbdd1c30eec406bca64e904700d689e1a0a38bc9c7e8d91d3d4ea7049352902abd252bd9fb28fffe6bb12c1ed050dccba204f15cb3f4c9ecc85688eb2bbefc6d53a3e81012866311a88752a6303684d8e827b27b4fb855093b560ca82b22be87beeb7905bbdd295c81345e3e7015d11e983c0c12aa5cc20cd48105ce0d1bd332ce9c1a3af9614b08af42d69af0fa8788104043e374554c0cd194b1c94bae9d50e8c5c511e6d93569111d7e12b0b2330e051132470f91460d01da30fe8d5b3442251badcc0f0fcfc5cbd517db2061d0cd35765db01278da067b2d469e9fac3979eaf07bb85bd7ac06700794df3096bba6804df1b442c2dae56bdf2012bbb04f505c06d7639a7ae45bbab7f5039084a26ae692f9c6c342f20cff3fa4c3dcc39d35601073e0cc0021edabce5866e0bfade771bfd0f0ac243c2555f5f4c3e3986fe864ccf47d93c5cf157b892a4480718a309c2c3814289b0e1a20baf061003a9455b67b36ce951f024ff1b8714b707a829afc20d688b08b74aca83c55a33ad614bbc5fa5099500d92caf61fef9150b2563c431d915723730fe5f27d02893c42f70cb6ddaa3d0018c48989e06e0b80598bd8b6c932d0d8866ff48953a7b8a083b1ed51604d9c29a94c04047e87d620419b215283ac0fa38b38ba05f5585463e4f4543c53b081e8fd8e0447a21679f0ae4f6ba1523f7806b7eb3f57b492db5cdbe6bd032d5ccdd4be8fbe352496e6f0bb5f5f1977177977b4bd74ea2ed2b6908a9694415546762578e16fcdb11fc220f13a427693db462639f72d0bc54d49c1b9f14dea9ca53837adcb7e814a3039f0c1881447a31c1fdf02831be24836766120baeac5b81f5ec189ccdd5fd43b98a0f7561ec58e0958e2f42e48f6c23ed0d5d86d79b652b9c04d023fc75f87cffe10f84aad3f8cf3c684f46ce28a19e357cc3676080fb44e72ddba7e17e67246d960dcd5cdbc5e4b91a416463ed02c2eadc1a48bd5aec15bf082ec5e7fec1f4f01a0e3e1bac65b6062751acad645ed00c641be825e88cf8f7cc51ffdf934e4d60020a96e23b5ab46e37d3daa2c9947e8783d08246f32eb7d52884741c16a6b8e23609cce3ff8e8dbdb95e727bbfbae679b81ef17c45beedb1d523400b3018e2c8710564c41d2108f5368cb8c960ab7587f571853c0da68bda82000f94b38631aa3b05c4fe8d45608f23f311dedcd1fdfdf3a6bd9970dc779282d4dc38de8d30c53205cfbf9a9045a1fbcbe5cd0909025420a324678342fc8b39a32de22b7f4604960a96b6ebbbc8c19f63e6ab953f4d88497b8403fb8335a12b4287004de5fbfe83084e5d16f2823d57404d54a0339b01c63471d8b9ebb001ddb2d09e4874eb1bab0a542ecfd8d9ae5fb63f4f557e568532e8be80c76d00c7a29b8229996156d0180b9d3dbfed3d49738abc1d08fae6d9f1bfe97240a595d95912f2328233a76e19020432d31bc2d0dd105d3e18b3b2ad4863b0585548954e9b0fd4b04bd303e7850421873ff2b756a48de0411796cfc9d682104aa78afc4f5bf816f0a8a712277e0d"],
  "untrusted": false
}

/get_alt_blocks_hashes

Get the known blocks hashes which are not on the main chain.

Output

  • blks_hashes array of strings

    list of alternative blocks hashes to main chain

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/get_alt_blocks_hashes \
  -H "Content-Type: application/json"
Response
{
    "blks_hashes":[
        "7de4684a0c1ed90a257865c6a2cebb9ad896545fd4dcd8121088807038f3df42",
        "f94f80f930a2a6844b49eed3e4f3a53ea55e8b02695be6f7360c344c419e821f",
        "19966fe8963fb8e60a33c778ad1a91cceaf2e554286e3bb1ddcf605d7c407e14",
        "798b2b1f8edc4ebb87652c9156de20ca8bd7122baa9c5e2e9b6cfa79461eb67d",
        "365842c65e227972ce400e0ce4ddce3aab136cc179509c90420255b03cbcd354",
        "7be80b37d074996d18715b81eb647a9fee49d52f859092529b189979b4280883",
        "dc0642c7301491566ca0d013ee0e4bd694e71ca5a8d8a2ec5ba81540636c474b",
        "11d4b8fea795fcccc5b913ad547d872b1c431446a1536bd3ff27055b96fabc03",
        "133024be52fdb76f6042ac04b210297cf5bba87193eaed5dc0a1eb1b3b6955f2"
    ],
    "status":"OK",
    "untrusted":false
}

/is_key_image_spent

Check if outputs have been spent using the key image associated with the output.

Input

  • key_images string list

    List of key image hex strings to check.

Output

  • spent_status unsigned int list

    List of statuses for each image checked. Statuses are follows: 0 = unspent, 1 = spent in blockchain, 2 = spent in transaction pool

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/is_key_image_spent \
  -H "Content-Type: application/json" \
  -d '{
    "key_images": [
      "e550b4d67bba7ad0b7adc1e4c19fd287e78b393c23d892e51677e2506880e443"
    ]
  }'
Response
{
  "spent_status": [1],
  "status": "OK",
  "untrusted": false
}

/send_raw_transaction

Aliases: /sendrawtransaction

Broadcast a raw transaction to the network.

Input

  • tx_as_hex string

    Full transaction information as hexidecimal string.

  • do_not_relay boolean

    Stop relaying transaction to other nodes (default is false ).

Output

  • double_spend boolean

    Transaction is a double spend ( true ) or not ( false ).

  • fee_too_low boolean

    Fee is too low ( true ) or OK ( false ).

  • invalid_input boolean

    Input is invalid ( true ) or valid ( false ).

  • invalid_output boolean

    Output is invalid ( true ) or valid ( false ).

  • low_mixin boolean

    Mixin count is too low ( true ) or OK ( false ).

  • not_rct boolean

    Transaction is a standard ring transaction ( true ) or a ring confidential transaction ( false ).

  • not_relayed boolean

    Transaction was not relayed ( true ) or relayed ( false ).

  • overspend boolean

    Transaction uses more money than available ( true ) or not ( false ).

  • reason string

    Additional information. Currently empty or "Not relayed" if transaction was accepted but not relayed.

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

  • too_big boolean

    Transaction size is too big ( true ) or OK ( false ).

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/send_raw_transaction \
  -H "Content-Type: application/json" \
  -d '{
    "tx_as_hex": "01f1634efb..",
    "do_not_relay": false
  }'
Response
{
  "double_spend": false,
  "fee_too_low": false,
  "invalid_input": false,
  "invalid_output": false,
  "low_mixin": false,
  "not_rct": false,
  "not_relayed": false,
  "overspend": false,
  "reason": "",
  "status": "Failed",
  "too_big": false,
  "untrusted": false
}

/start_mining

Start mining on the daemon.

Input

  • do_background_mining boolean

    States if the mining should run in background ( true ) or foreground ( false ).

  • ignore_battery boolean

    States if batery state (on laptop) should be ignored ( true ) or not ( false ).

  • miner_address string

    Account address to mine to.

  • threads_count unsigned int

    Number of mining thread to run.

Output

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/start_mining \
  -H "Content-Type: application/json" \
  -d '{
    "do_background_mining": false,
    "ignore_battery": true,
    "miner_address": "RYoKsrxkNqTKByFzQveBUhMWPwwwddzvPR5S7sqjcLkEhXHqVCc6qJQ",
    "threads_count": 1
  }'
Response
{
    "status":"OK"
}

/stop_mining

Stop mining on the daemon.

Output

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/stop_mining \
  -H "Content-Type: application/json"
Response
{
    "status":"OK"
}

/mining_status

Get the mining status of the daemon.

Output

  • active boolean

    States if mining is enabled ( true ) or disabled ( false ).

  • address string

    Account address daemon is mining to. Empty if not mining.

  • is_background_mining_enabled boolean

    States if the mining is running in background ( true ) or foreground ( false ).

  • speed unsigned int

    Mining power in hashes per seconds.

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

  • threads_count unsigned int

    Number of running mining threads.

Example request
curl -X POST http://127.0.0.1:12211/mining_status \
  -H "Content-Type: application/json"
Response
{
    "active":false,
    "address":"",
    "is_background_mining_enabled":false,
    "speed":0,
    "status":"OK",
    "threads_count":0
}

/save_bc

Save the blockchain. The blockchain does not need saving and is always saved when modified, however it does a sync to flush the filesystem cache onto the disk for safety purposes against Operating System or Harware crashes.

Output

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/save_bc \
  -H "Content-Type: application/json"
Response
{
    "status":"OK"
}

/get_peer_list

Get the known peers list.

Output

  • gray_list

    array of offline peer structure as follows:

    • host unsigned int

      IP address in integer format

    • id string

      Peer id

    • ip unsigned int

      IP address in integer format

    • last_seen unsigned int

      unix time at which the peer has been seen for the last time

    • port unsigned int

      TCP port the peer is using to connect to ryo network.

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

  • white_list

    array of online peer structure, as above.

Example request
curl -X POST http://127.0.0.1:12211/get_peer_list \
  -H "Content-Type: application/json"
Response
{
    "gray_list":[{
        "host":"205114005",
        "id":18227960725881384098,
        "ip":205114005,
        "last_seen":1525540510,
        "port":12210
    }] 
}

/set_log_hash_rate

Set the log hash rate display mode.

Input

  • visible boolean

    States if hash rate logs should be visible ( true ) or hidden ( false )

Output

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/set_log_hash_rate \
  -H "Content-Type: application/json" \
  -d '{
    "visible": true
  }'
Response
{
    "status":"OK"
}

/set_log_level

Set the daemon log level. By default, log level is set to 0 .

Input

  • level integer

    daemon log level to set from 0 (less verbose) to 4 (most verbose)

Output

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/set_log_level \
  -H "Content-Type: application/json" \
  -d '{
    "level": 1
  }'
Response
{
    "status":"OK"
}

/set_log_categories

Set the daemon log categories. Categories are represented as a comma separated list of <Category>:<level> (similarly to syslog standard <Facility>:<Severity-level> ), where:

  • Category is one of the following:
    • * - All facilities
    • default
    • net
    • net.http
    • net.p2p
    • logging
    • net.throttle
    • blockchain.db
    • blockchain.db.lmdb
    • bcutil
    • checkpoints
    • net.dns
    • net.dl
    • i18n
    • perf
    • stacktrace
    • updates
    • account
    • cn
    • difficulty
    • hardfork
    • miner
    • blockchain
    • txpool
    • cn.block_queue
    • net.cn
    • daemon
    • debugtools.deserialize
    • debugtools.objectsizes
    • device.ledger
    • wallet.gen_multisig
    • multisig
    • bulletproofs
    • ringct
    • daemon.rpc
    • wallet.simplewallet
    • WalletAPI
    • wallet.ringdb
    • wallet.wallet2
    • wallet.rpc
    • tests.core
  • Level is one of the following:
    • FATAL - higher level
    • ERROR
    • WARNING
    • INFO
    • DEBUG
    • TRACE - lower level A level automatically includes higher level. By default, categories are set to *:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO . Setting the categories to "" prevent any logs to be outputed.

Input

  • categories string

    Optional, daemon log categories to enable

Output

  • categories string

    daemon log enabled categories

  • status string

    General RPC error code. "OK" means everything looks good. Any other value means that something went wrong.

Example request
curl -X POST http://127.0.0.1:12211/set_log_categories \
  -H "Content-Type: application/json" \
  -d '{
    "categories": "*:INFO"
  }'
Response
{
    "categories":"*:INFO",
    "status":"OK"
}

/get_transaction_pool

Show information about valid transactions seen by the node but not yet mined into a block, as well as spent key image information for the txpool in the node's memory.

Output

  • spent_key_images

    List of spent output key images:

    • id_hash string

      Key image.

    • txs_hashes string list

      tx hashes of the txes (usually one) spending that key image.

  • status string

    General RPC error code. "OK" means everything looks good.

  • transactions

    List of transactions in the mempool are not in a block on the main chain at the moment:

    • blob_size unsigned int

      The size of the full transaction blob.

    • double_spend_seen boolean

      States if this transaction has been seen as double spend.

    • do_not_relay boolean

    • fee unsigned int

      The amount of the mining fee included in the transaction, in atomic units.

    • id_hash string

      The transaction ID hash.

    • kept_by_block boolean

      States if the tx was included in a block at least once ( true ) or not ( false ).

    • last_failed_height unsigned int

      If the transaction validation has previously failed, this tells at what height that occured.

    • last_failed_id_hash string

      Like the previous, this tells the previous transaction ID hash.

    • last_relayed_time unsigned int

      Last unix time at which the transaction has been relayed.

    • max_used_block_height unsigned int

      Tells the height of the most recent block with an output used in this transaction.

    • max_used_block_hash string

      Tells the hash of the most recent block with an output used in this transaction.

    • receive_time unsigned int

      The Unix time that the transaction was first seen on the network by the node.

    • relayed boolean

      States if this transaction has been relayed

    • tx_blob unsigned int

      Hexadecimal blob represnting the transaction.

    • tx_json json string

      JSON structure of all information in the transaction:

      • version

        Transaction version

      • unlock_time

        If not 0, this tells when a transaction output is spendable.

      • vin

        List of inputs into transaction:

        • key

          The public key of the previous output spent in this transaction.

          • amount

            The amount of the input, in atomic units.

          • key_offsets

            A list of integer offets to the input.

          • k_image

            The key image for the given input

      • vout

        List of outputs from transaction:

        • amount

          Amount of transaction output, in atomic units.

        • target

          Output destination information:

          • key

            The stealth public key of the receiver. Whoever owns the private key associated with this key controls this transaction output.

      • extra

        Usually called the "transaction ID" but can be used to include any random 32 bytes.

      • rct_signatures

        Ring signatures:

        • type

        • txnFee

        • ecdhInfo

          array of Diffie Helman Elipctic curves structures as follows:

          • mask string

          • amount string

        • outPk

      • rctsig_prunable

        • rangeSigs

          array of structures as follows:

          • asig

          • Ci

        • MGs

          array of structures as follows:

          • ss

            array of arrays of two strings.

          • cc string

Example request
curl -X POST http://127.0.0.1:12211/get_transaction_pool \
  -H "Content-Type: application/json"
Response
(some info was truncated due to too high display size)
{
    "transactions":[
    {
        "blob_size":65029,
        "do_not_relay":false,
        "double_spend_seen":false,
        "fee":77000000,
        "id_hash":"bbbb24eff14a838b9f9fbdd9d2b9c41f5abe44808f6bf8434e7a4ceb6f71d400",
        "kept_by_block":false,
        "last_failed_height":0,
        "last_failed_id_hash":"0000000000000000000000000000000000000000000000000000000000000000",
        "last_relayed_time":1541270092,
        "max_used_block_height":192329,
        "max_used_block_id_hash":"e01fcf11731db0d3157cf1aae2f205b28de87c7e6f25b88180a81ba9210c10c7",
        "receive_time":1541270092,
        "relayed":true,
        "tx_blob":
}

/get_transaction_pool_hashes.bin

Get hashes from transaction pool. Binary request.

Output

  • status string

    General RPC error code. "OK" means everything looks good.

  • tx_hashes

    binary array of transaction hashes.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/get_transaction_pool_hashes.bin \
  -H "Content-Type: application/json"
Response
{
    "status":"OK",
    "tx_hashes":"▒▒a'▒▒▒ĀU▒ڭ▒▒▒▒l▒i▒▒▒▒P▒;*▒Õ▒1▒▒KJ▒f▒b▒v▒kg▒i▒G▒&▒▒▒▒7J▒▒GP▒o▒▒%▒'ZepUʉ▒ ▒▒9QJ,+▒▒ ▒jeY▒2V)?▒▒I▒7mӀ[*[▒r▒Q`▒s\fQ▒▒▒▒3φ▒ٻ▒Y▒▒▒▒1\r▒K▒H▒▒▒▒4r\/▒▒▒▒Q▒Aԗ&o▒▒b▒QB▒▒▒~-J▒ۇ▒r▒ĸj▒▒s▒▒\/@▒Q▒iE%l▒j▒▒8\r▒su▒N\"<▒@6▒Ɗ▒z▒▒▒",
    "untrusted":false
}

/get_transaction_pool_stats

Get the transaction pool statistics.

Output

  • pool_stats

    Structure as follows:

    • bytes_max unsigned int

      Max transaction size in pool

    • bytes_med unsigned int

      Median transaction size in pool

    • bytes_min unsigned int

      Min transaction size in pool

    • bytes_total unsigned int

      total size of all transactions in pool

    • histo

      structure txpool_histo as follows:

      • txs unsigned int

        number of transactions

      • bytes unsigned int

        size in bytes.

    • histo_98pc

    • num_10m

    • num_double_spends

    • num_failing

    • num_not_relayed

    • oldest

    • txs_total

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/get_transaction_pool_stats \
  -H "Content-Type: application/json"
Response
{
    "pool_stats":{
        "bytes_max":13585,
        "bytes_med":13585,
        "bytes_min":13585,
        "bytes_total":13585,
        "fee_total":13500000,
        "histo_98pc":0,
        "num_10m":0,
        "num_double_spends":0,
        "num_failing":0,
        "num_not_relayed":0,
        "oldest":1541270675,
        "txs_total":1
    },
    "status":"OK",
    "untrusted":false
}

/stop_daemon

Send a command to the daemon to safely disconnect and shut down.

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/stop_daemon \
  -H "Content-Type: application/json"
Response
{
  "status": "OK"
}

/get_info (not JSON)

This method is a convenient backward support and should not be used anymore. See get_info JSON RPC for details.

Example request
curl -X POST http://127.0.0.1:12211/get_limit \
  -H "Content-Type: application/json"
Response
{
    "limit_down":8192,
    "limit_up":2048,
    "status":"OK",
    "untrusted":false
}

/get_limit

Get daemon bandwidth limits.

Output

  • limit_down unsigned int

    Download limit in kBytes per second

  • limit_up unsigned int

    Upload limit in kBytes per second

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

Example request
curl -X POST http://127.0.0.1:12211/get_limit \
  -H "Content-Type: application/json"
Response
{
    "limit_down":8192,
    "limit_up":2048,
    "status":"OK",
    "untrusted":false
}

/set_limit

Set daemon bandwidth limits.

Input

  • limit_down signed int

    Download limit in kBytes per second (-1 reset to default, 0 don't change the current limit)

  • limit_up signed int

    Upload limit in kBytes per second (-1 reset to default, 0 don't change the current limit)

Output

  • limit_down unsigned int

    Download limit in kBytes per second

  • limit_up unsigned int

    Upload limit in kBytes per second

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/set_limit \
  -H "Content-Type: application/json" \
  -d '{
    "limit_down": 1024
  }'
Response
{
  "limit_down": 1024,
  "limit_up": 2048,
  "status": "OK"
}

/out_peers

Limit number of Outgoing peers.

Input

  • out_peers unsigned int

    Max number of outgoing peers

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/out_peers \
  -H "Content-Type: application/json" \
  -d '{
    "out_peers": 3232235535
  }'
Response
{
    "status":"OK"
}

/in_peers

Limit number of Incoming peers.

Input

  • in_peers unsigned int

    Max number of incoming peers

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/out_peers \
  -H "Content-Type: application/json" \
  -d '{
    "in_peers": 3232235535
  }'
Response
{
    "status":"OK"
}

/in_peers

Limit number of Incoming peers.

Input

  • in_peers unsigned int

    Max number of incoming peers

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/out_peers \
  -H "Content-Type: application/json" \
  -d '{
    "in_peers": 3232235535
  }'
Response
{
    "status":"OK"
}

/start_save_graph

Obsolete. Conserved here for reference.

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:18081/start_save_graph \
  -H "Content-Type: application/json"
Response
{
    "status":"OK"
}

/stop_save_graph

Obsolete. Conserved here for reference.

Output

  • status string

    General RPC error code. "OK" means everything looks good.

Example request
curl -X POST http://127.0.0.1:12211/stop_save_graph \
  -H "Content-Type: application/json"
Response
{
    "status":"OK"
}

/get_outs

Get outputs.

Input

  • outputs

    • amount unsigned int

    • index unsigned int

Output

  • outs

    array of structure outkey as follows:

    • height unsigned int

      block height of the output

    • key string

      the public key of the output

    • mask string

    • txid string

      transaction id

    • unlocked boolean

      States if output is locked ( false ) or not ( true )

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

/get_outs

Get outputs.

Input

  • outputs

    • amount unsigned int

    • index unsigned int

Output

  • outs

    array of structure outkey as follows:

    • height unsigned int

      block height of the output

    • key string

      the public key of the output

    • mask string

    • txid string

      transaction id

    • unlocked boolean

      States if output is locked ( false ) or not ( true )

  • status string

    General RPC error code. "OK" means everything looks good.

  • untrusted boolean

    States if the result is obtained using the bootstrap mode, and is therefore not trusted ( true ), or when the daemon is fully synced ( false ).

/update

Update daemon.

Input

  • command string Required

    command to use, either check or download

  • path string

    Optional, path where to download the update.

Output

  • auto_uri string

  • hash string

  • path string

    path to download the update

  • status string

    General RPC error code. "OK" means everything looks good.

  • update boolean

    States if an update is available to download ( true ) or not ( false )

  • user_uri string

  • version string

    Version available for download.

Example request
curl -X POST http://127.0.0.1:12211/update \
  -H "Content-Type: application/json" \
  -d '{
    "command": "check"
  }'
Response
{
    "auto_uri":"",
    "hash":"",
    "path":"",
    "status":"'update' not implemented yet",
    "update":false,
    "user_uri":"",
    "version":""
}