claves en storage trie

Ethereum: leer LevelDB, Smart Contract y Storage Trie

Continuando con los posts anteriores explorando la base de datos levelDB de Ethereum (ver Ethereum: explorando base de datos leveldb, donde se explora el State Trie y Ethereum Blockchain privada, Ethereum y LevelDB: Leer, Modificar y Compilar Geth donde se ve el entorno de una red privada y más) veremos con detalle qué ocurre con la creación de un smart contract del tipo token ERC20 y con una transferencia de esos tokens entre dos cuentas, y estudiaremos de nuevo el State Trie y el Storage Trie, particularmente para el Smart Contract.

Partimos de la blockchain privada Ethereum con dos nodos validadores que hemos creado en los posts anteriores. Para facilitar las cosas, necesitamos más herramientas, que podemos configurar también en un entorno windows portable.

Entorno windows portable

A las herramientas que teníamos en el post anterior (Go, Mingw y Git) añadimos:

  • Remix, para desarrollar y desplegar smart contracts con el lenguaje solidity, podemos usar la versión web https://remix.ethereum.org/ o bien descargarnos la versión de escritorio, si no queremos instalarla bastará con el zip (y descomprimirlo) https://github.com/ethereum/remix-desktop/releases
  • NodeJS, que permite incorporar y ejecutar muchas herramientas, entre ellas un explorador de bloques local para nuestra red privada. Basta descargarse el archivo zip comprimido de https://nodejs.org/en/download/, descomprimirlo y añadir la ruta del ejecutable al path (incluyendo por ejemplo en el archivo bat que usamos en los posts anteriores):
[ ... ]
set nodePATH=%~dp0nodejs\
set path=%PATH%;%gccPATH%;%goPATH%;%gitPATH%;%nodePATH%

Blockchain Ethereum privada

Arracamos la blockchain privada como vimos en el post anterior. No obstante, en este he modificado el bloque génesis para que los fondos de la cuenta en el inicio sea un número razonable, simplemente cambiando los valores para ello (posteriormente efectué una transacción para tener el mismo estado que en el post anterior):

"alloc": {
      "598b65946815ae60c68ec34d747bae6d16690287": {
        "balance": "50000000000000000000"
      }
    },

Repetimos el proceso de arrancar ambos nodos en el mismo pc, con diferentes instancias de geth y cada una con su propia carpeta y puertos. Adicionalmente, para poder usar el explorador de bloques local Expedition, en el primer nodo tenemos que añadir más parámetros a geth para permitir la conexión por rcp/http que el servidor web Expedition y Remix necesitan (permitiremos CORS para cualquier dominio a sabiendas que esto no es seguro ni aconsejable, pero estamos en un entorno de pruebas y solo es para simplificar el comando, tendríamos que usar únicamente el dominio que permitimos que se nos conecte al nodo) y también permitir desbloquear la cuenta validadora con http habilitado añadiendo las opciones: --http --allow-insecure-unlock –http.corsdomain “*”:

Primer nodo (lanzado desde una consola powershell o cmd, he comprobado que con la de git-bash ni Remix ni Expedition pueden conectarse por http/rpc al nodo)

./geth.exe --datadir eth_network --networkid 888 --port 30304 --http  --allow-insecure-unlock --http.corsdomain “*” --nat extip:127.0.0.1 --unlock 0x598b65946815ae60c68ec34d747bae6d16690287 --mine --nodiscover --syncmode full

El segundo nodo:

./geth.exe --datadir eth_network2 --networkid 888 --port 30305  --authrpc.port 8552 --ipcdisable  --unlock 0x347438f5a3d26e224ca448b05e932566923ece0d --mine --bootnodes "enode://e8021593007ca294dc66437fda9743f025610b210e4e0039a04596b7c981cbdc4dae556c900c530c8a032be06ec943309abf66b4585e3c5c72a702c5f3ddc4d8@127.0.0.1:30304?discport=30304" --syncmode full

Conectar el explorador de bloques local Expedition

Basta ejecutar una consola de comandos (o powershell o git-bash), ir al directorio donde lo hemos descargado y ejecutar npm start, que iniciará el servidor web, y por defecto se nos conectará a la testnet de Ethereum, basta con indicarle la dirección correcta de nuestro nodo, poniendo en el navegador la url:

http://localhost:3000/?rpcUrl=http://127.0.0.1:8545

Explorador de bloques Expedition en la red local

El explorador de bloques viene bien para tener a mano más fácilmente valores de transacciones, hashes, etc

Conectar el entorno de desarrollo solidity Remix, desplegar el smart contract ERC20 y efectuar una transacción de tokens

Es sencillo conectar Remix al nodo local (que tiene que estar ejecutándose obviamente). Basta con ir al menú hom/environment y seleccionar External Http Provider, por defecto usará la conexión a nuestro nodo geth (localhost y puerto 8545 por defecto de http en geth, pues no lo hemos modificado al ejecutar el nodo) y además nos avisa de cómo tenemos que lanzar correctamente la ejecución del nodo y CORS

Conectar Remix a nuestro nodo local Ethereum

Con eso tendremos ya conectado remix y nos aparecerá la cuenta que tiene almacenada este nodo en su carpeta keystore (de momento sólo la validadora que creamos en el bloque génesis con su balance en Ether, que en esta prueba hemos modificado por un valor más normal de 50 ether, de los que hicimos una transferencia a otra cuenta de 0.005 ether)

Remix conectado a nuestra Ethereum privada, muestra el Id 888, la cuenta del nodo y su balance

Con el entorno funcionando usamos un contrato ERC20 típico de internet, p.ej. el que muestra Ethereum es su web https://ethereum.org/es/developers/tutorials/understand-the-erc-20-token-smart-contract/ pero modificaremos los valores del nombre y del Token, sus decimales y el cantidad total de tokens

pragma solidity ^0.8.0;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);


    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


contract ERC20Basic is IERC20 {

    string public constant name = "My ERC20Basic";
    string public constant symbol = "myERC";
    uint8 public constant decimals = 3;


    mapping(address => uint256) balances;

    mapping(address => mapping (address => uint256)) allowed;

    uint256 totalSupply_ = 10;


   constructor() {
    balances[msg.sender] = totalSupply_;
    }

    function totalSupply() public override view returns (uint256) {
    return totalSupply_;
    }

    function balanceOf(address tokenOwner) public override view returns (uint256) {
        return balances[tokenOwner];
    }

    function transfer(address receiver, uint256 numTokens) public override returns (bool) {
        require(numTokens <= balances[msg.sender]);
        balances[msg.sender] = balances[msg.sender]-numTokens;
        balances[receiver] = balances[receiver]+numTokens;
        emit Transfer(msg.sender, receiver, numTokens);
        return true;
    }

    function approve(address delegate, uint256 numTokens) public override returns (bool) {
        allowed[msg.sender][delegate] = numTokens;
        emit Approval(msg.sender, delegate, numTokens);
        return true;
    }

    function allowance(address owner, address delegate) public override view returns (uint) {
        return allowed[owner][delegate];
    }

    function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {
        require(numTokens <= balances[owner]);
        require(numTokens <= allowed[owner][msg.sender]);

        balances[owner] = balances[owner]-numTokens;
        allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens;
        balances[buyer] = balances[buyer]+numTokens;
        emit Transfer(owner, buyer, numTokens);
        return true;
    }
}

Para desplegar el contrato copiamos el código en Remix, lo compilamos y lo desplegamos con la cuenta que tenemos en el nodo, puesto que el contrato no tiene ninguna función payable, el valor de la transacción para desplegar el contrato ha de ser nulo (es decir, no enviamos ether al contrato, porque no nos lo está requiriendo)

Desplegar el contrato compilado desde Remix a la Blockchain privada

Remix indica un error en la estimación del gas, pero es indiferente (veremos el resultado de la transacción exitosa en su recuadro de log) y el contrato se despliega en la siguiente dirección: 0x384FdC54BE04bfB947F7Ac1cCC0DA2C231c0CBA1

El nodo emite la transacción de creación del contrato, que se validará/minará

Ahora la cuenta que ha creado el contrato tiene todos los tokens (10) y efectuamos una transacción de 3 tokens a otra cuenta, d00411828e14f75b0bada0d5173974e945158615 (la misma a la que transferimos los 0.005 ether), todo desde Remix, algo muy sencillo (de nuevo sin enviar ehter en la transacción, campo Value=0):

Balance de nuestra cuenta con 10 tokens y transferencia de 3 tokens a otra cuenta
Log de Remix mostrando la transacción exitosa con la trasferencia de tokens

Ahora paramos los nodos de nuestra blockchain y exploramos los resultados y la base de datos leveldb.

Para analizar los datos de una transacción a un Smart Contract es necesario conocer su interface ABI, y también nos interesa saber el código bytecode del contrato, que es lo que ejecutara la máquina virtual Ehtereum (EVM) y se almacena tal cual en la leveldb como veremos. Remix proporciona ambos desde su pantalla:

Obtener ABI y Bytecode del Smart Contract desde Remix

El explorador de bloque local nos permite ver y analizar ambas transacciones de creación del Smart Contract y de transferencia de tokens

Transacciones en el explorador de bloques

Por ejemplo podemos comprobar que el input de la transacción de creacción del smart contract es precisamente el bytecode (obtenido desde Remix)

Input de la transacción es el código bytecode del Smart Contract

Por último podemos analizar los detalles de la transacción de transferencia de tokens, que para decodificar hace falta el ABI del smart contract:

Transacción de transferencia de tokens en el explorador local, junto con los eventos que se producen (receipt logs)

Para decodificar el input, podemos usar p.ej la sigueinte web https://lab.miguelmota.com/ethereum-input-data-decoder/example/, introduciendo el ABI de nuestro contrato y el input de la transacción, copiado p.ej. del explorador de bloques local, que nos decodifica la cuenta receptora y la cantidad de 3 tokens.

Decodificar el input de la transacción, conodido el ABI del Smart Contract

State Trie

El análisis es idéntico al del post anterior Ethereum: explorando base de datos leveldb. Volcamos la base de datos leveldb completa con el script de ese post, cuyo resultado es el siguiente:

Key: 03b1feb6171ae67a69649d8e798fc17814462426c4a8a08fb372449d93222f02 
Value: f872a02064245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8cb84ff84d048902b5d1eb9d79a78000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470


Key: 0f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c 
Value: f870a0201147d14a9d46c37d277394cc51442ea6f10bfe350b8f0a4f7a8049172432a2b84df84b808711c37937e08000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470


Key: 21dc63cbdd41e1f68b7f355d7a4588defcefaf4fb9e32b6f35c1306f5e9a398b 
Value: f872a02064245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8cb84ff84d018902b5d1eb9d79a78000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470


Key: 23a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af 
Value: f869a036dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4b846f8440180a02e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cda03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802


Key: 2e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cd 
Value: f87180808080a0638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0a057eeaffc3c39066751e494ddd3a2b4bab6a4350a04398dac1e57cf3e279a089b8080a087225f605d9d6d9d122cfc389f77268c144f21a11ef2b0763a1702e80cbf53948080808080808080


Key: 446174616261736556657273696f6e 
Value: 08


Key: 482547a8e05b6173ddc33a1c376390d433ffe090591ecdef79904029e20d9e9c2a 
Value: 0000000000000001


Key: 484613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2 
Value: 0000000000000015


Key: 484a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e 
Value: 000000000000000a


Key: 484c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5 
Value: 000000000000000e


Key: 48538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2 
Value: 0000000000000010


Key: 4855848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619 
Value: 0000000000000002


Key: 4862cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48 
Value: 000000000000000c


Key: 486b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e 
Value: 000000000000000f


Key: 486ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32 
Value: 000000000000000b


Key: 487210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c 
Value: 0000000000000013


Key: 4883ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: 0000000000000000


Key: 4886c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86 
Value: 0000000000000012


Key: 488725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4 
Value: 0000000000000001


Key: 4890db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80 
Value: 0000000000000005


Key: 4890f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df 
Value: 0000000000000008


Key: 48958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1 
Value: 0000000000000007


Key: 489eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181 
Value: 0000000000000011


Key: 48a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9 
Value: 0000000000000014


Key: 48a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0 
Value: 0000000000000004


Key: 48ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5 
Value: 0000000000000003


Key: 48b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c 
Value: 0000000000000006


Key: 48c492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1 
Value: 000000000000000d


Key: 48d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578 
Value: 0000000000000009


Key: 4a138167e7404c69d755c6cf77847ca12d0a0ef69f1af5750dfd515375bf4fa2 
Value: f869a036dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4b846f8440180a07ed0c64dc405876b5da2a2f60bf0afb614b690282e8407eaf3039eeb0de588d6a03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802


Key: 4c617374426c6f636b 
Value: 4613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2


Key: 4c61737446617374 
Value: 4613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2


Key: 4c617374486561646572 
Value: 4613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2


Key: 52739b5a84cb6c567714850671716a8a3057d70cdc84a52f2e58d2ba21881de5 
Value: f8518080a08f96128efe45d3af66806fff83ec3777e12666c7473aa4716d27f1b4627f7f5d8080808080a00f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c8080808080808080


Key: 536e617073686f7447656e657261746f72 
Value: c6800180808080


Key: 536e617073686f744a6f75726e616c 
Value: 80a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea0da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319c0f860eea0c81147d14a9d46c37d277394cc51442ea6f10bfe350b8f0a4f7a8049172432a28ccb808711c37937e080008080f0a0c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c8ecd018902b5d1eb9d79a780008080c0a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39ac0f1f0a0c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c8ecd028902b5d1eb9d79a780008080c0a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564c0f89cf0a0c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c8ecd038902b5d1eb9d79a780008080f869a006dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4b846f8440180a07ed0c64dc405876b5da2a2f60bf0afb614b690282e8407eaf3039eeb0de588d6a03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802f86af868a006dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4f842a0841c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219ea0405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acec20a0aa0b2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471c0f89cf0a0c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c8ecd048902b5d1eb9d79a780008080f869a006dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4b846f8440180a02e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cda03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802f86af868a006dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4f842a0526fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c7a0841c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219ec20307


Key: 536e617073686f74526f6f74 
Value: fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788e


Key: 5472616e73616374696f6e496e6465785461696c 
Value: 0000000000000000


Key: 57eeaffc3c39066751e494ddd3a2b4bab6a4350a04398dac1e57cf3e279a089b 
Value: e2a0326fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c703


Key: 61c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c 
Value: cd808902b5e3af16b18800008080


Key: 62000000000000000083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: c2c0c0


Key: 6200000000000000012547a8e05b6173ddc33a1c376390d433ffe090591ecdef79904029e20d9e9c2a 
Value: c2c0c0


Key: 6200000000000000018725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4 
Value: c2c0c0


Key: 62000000000000000255848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619 
Value: c2c0c0


Key: 620000000000000003ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5 
Value: c2c0c0


Key: 620000000000000004a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0 
Value: c2c0c0


Key: 62000000000000000590db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80 
Value: f871f86ef86c80843b9aca0082520894d00411828e14f75b0bada0d5173974e9451586158711c37937e0800080820635a0f0c60af579d7b04f8185918e094d9b20ec8941742b8e9945de3961cee6180b71a0014f70b7f8c7f58cf5b5b0cf718f4be7a883dddab1f23ea34aa864e64df4151fc0


Key: 620000000000000006b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c 
Value: c2c0c0


Key: 620000000000000007958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1 
Value: c2c0c0


Key: 62000000000000000890f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df 
Value: c2c0c0


Key: 620000000000000009d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578 
Value: f90e1ef90e1af90e1701843b9aca00832dc6c080832dc6c0b90dc06080604052600a60025534801561001557600080fd5b506002546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d568061006a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce5671461013457806370a082311461015257806395d89b4114610182578063a9059cbb146101a0578063dd62ed3e146101d057610093565b806306fdde0314610098578063095ea7b3146100b657806318160ddd146100e657806323b872dd14610104575b600080fd5b6100a0610200565b6040516100ad9190610b27565b60405180910390f35b6100d060048036038101906100cb9190610a66565b610239565b6040516100dd9190610b0c565b60405180910390f35b6100ee61032b565b6040516100fb9190610b49565b60405180910390f35b61011e60048036038101906101199190610a13565b610335565b60405161012b9190610b0c565b60405180910390f35b61013c61069b565b6040516101499190610b64565b60405180910390f35b61016c600480360381019061016791906109a6565b6106a0565b6040516101799190610b49565b60405180910390f35b61018a6106e8565b6040516101979190610b27565b60405180910390f35b6101ba60048036038101906101b59190610a66565b610721565b6040516101c79190610b0c565b60405180910390f35b6101ea60048036038101906101e591906109d3565b6108f5565b6040516101f79190610b49565b60405180910390f35b6040518060400160405280600d81526020017f4d7920455243323042617369630000000000000000000000000000000000000081525081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103199190610b49565b60405180910390a36001905092915050565b6000600254905090565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561038257600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561040b57600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104559190610bf1565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461051f9190610bf1565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105e99190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106889190610b49565b60405180910390a3600190509392505050565b600381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060400160405280600581526020017f6d7945524300000000000000000000000000000000000000000000000000000081525081565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561076e57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b89190610bf1565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108449190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108e39190610b49565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008135905061098b81610cf2565b92915050565b6000813590506109a081610d09565b92915050565b6000602082840312156109bc576109bb610cdc565b5b60006109ca8482850161097c565b91505092915050565b600080604083850312156109ea576109e9610cdc565b5b60006109f88582860161097c565b9250506020610a098582860161097c565b9150509250929050565b600080600060608486031215610a2c57610a2b610cdc565b5b6000610a3a8682870161097c565b9350506020610a4b8682870161097c565b9250506040610a5c86828701610991565b9150509250925092565b60008060408385031215610a7d57610a7c610cdc565b5b6000610a8b8582860161097c565b9250506020610a9c85828601610991565b9150509250929050565b610aaf81610c37565b82525050565b6000610ac082610b7f565b610aca8185610b8a565b9350610ada818560208601610c7a565b610ae381610ce1565b840191505092915050565b610af781610c63565b82525050565b610b0681610c6d565b82525050565b6000602082019050610b216000830184610aa6565b92915050565b60006020820190508181036000830152610b418184610ab5565b905092915050565b6000602082019050610b5e6000830184610aee565b92915050565b6000602082019050610b796000830184610afd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610ba682610c63565b9150610bb183610c63565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610be657610be5610cad565b5b828201905092915050565b6000610bfc82610c63565b9150610c0783610c63565b925082821015610c1a57610c19610cad565b5b828203905092915050565b6000610c3082610c43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610c98578082015181840152602081019050610c7d565b83811115610ca7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b610cfb81610c25565b8114610d0657600080fd5b50565b610d1281610c63565b8114610d1d57600080fd5b5056fea264697066735822122023376cc8dcc48a764f6e3793ebb2000453518d497d450e575633005f4e5bb6af64736f6c63430008070033820636a0b235d2ceddba2713ff366352b3377650b70693964a2e6f188a59e82ebb44fbb8a04e690f4a6d0883600e5ce3ed00d49858735314dbf2088808a66bfcce7ef9ff37c0


Key: 62000000000000000a4a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e 
Value: c2c0c0


Key: 62000000000000000b6ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32 
Value: c2c0c0


Key: 62000000000000000c62cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48 
Value: c2c0c0


Key: 62000000000000000dc492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1 
Value: c2c0c0


Key: 62000000000000000e4c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5 
Value: c2c0c0


Key: 62000000000000000f6b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e 
Value: f90e1bf90e17f90e1402843b9aca00830cafdc8080b90dc06080604052600a60025534801561001557600080fd5b506002546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d568061006a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce5671461013457806370a082311461015257806395d89b4114610182578063a9059cbb146101a0578063dd62ed3e146101d057610093565b806306fdde0314610098578063095ea7b3146100b657806318160ddd146100e657806323b872dd14610104575b600080fd5b6100a0610200565b6040516100ad9190610b27565b60405180910390f35b6100d060048036038101906100cb9190610a66565b610239565b6040516100dd9190610b0c565b60405180910390f35b6100ee61032b565b6040516100fb9190610b49565b60405180910390f35b61011e60048036038101906101199190610a13565b610335565b60405161012b9190610b0c565b60405180910390f35b61013c61069b565b6040516101499190610b64565b60405180910390f35b61016c600480360381019061016791906109a6565b6106a0565b6040516101799190610b49565b60405180910390f35b61018a6106e8565b6040516101979190610b27565b60405180910390f35b6101ba60048036038101906101b59190610a66565b610721565b6040516101c79190610b0c565b60405180910390f35b6101ea60048036038101906101e591906109d3565b6108f5565b6040516101f79190610b49565b60405180910390f35b6040518060400160405280600d81526020017f4d7920455243323042617369630000000000000000000000000000000000000081525081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103199190610b49565b60405180910390a36001905092915050565b6000600254905090565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561038257600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561040b57600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104559190610bf1565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461051f9190610bf1565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105e99190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106889190610b49565b60405180910390a3600190509392505050565b600381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060400160405280600581526020017f6d7945524300000000000000000000000000000000000000000000000000000081525081565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561076e57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b89190610bf1565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108449190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108e39190610b49565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008135905061098b81610cf2565b92915050565b6000813590506109a081610d09565b92915050565b6000602082840312156109bc576109bb610cdc565b5b60006109ca8482850161097c565b91505092915050565b600080604083850312156109ea576109e9610cdc565b5b60006109f88582860161097c565b9250506020610a098582860161097c565b9150509250929050565b600080600060608486031215610a2c57610a2b610cdc565b5b6000610a3a8682870161097c565b9350506020610a4b8682870161097c565b9250506040610a5c86828701610991565b9150509250925092565b60008060408385031215610a7d57610a7c610cdc565b5b6000610a8b8582860161097c565b9250506020610a9c85828601610991565b9150509250929050565b610aaf81610c37565b82525050565b6000610ac082610b7f565b610aca8185610b8a565b9350610ada818560208601610c7a565b610ae381610ce1565b840191505092915050565b610af781610c63565b82525050565b610b0681610c6d565b82525050565b6000602082019050610b216000830184610aa6565b92915050565b60006020820190508181036000830152610b418184610ab5565b905092915050565b6000602082019050610b5e6000830184610aee565b92915050565b6000602082019050610b796000830184610afd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610ba682610c63565b9150610bb183610c63565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610be657610be5610cad565b5b828201905092915050565b6000610bfc82610c63565b9150610c0783610c63565b925082821015610c1a57610c19610cad565b5b828203905092915050565b6000610c3082610c43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610c98578082015181840152602081019050610c7d565b83811115610ca7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b610cfb81610c25565b8114610d0657600080fd5b50565b610d1281610c63565b8114610d1d57600080fd5b5056fea264697066735822122023376cc8dcc48a764f6e3793ebb2000453518d497d450e575633005f4e5bb6af64736f6c63430008070033820636a020ae798a6d4d63ab28f58483d1c55534930b118896413835d0649c134fb7329da03c31d33d07db53c342246a7592b18ad60e7b200706b01bc65a4638fc757b7c51c0


Key: 620000000000000010538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2 
Value: c2c0c0


Key: 6200000000000000119eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181 
Value: c2c0c0


Key: 62000000000000001286c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86 
Value: c2c0c0


Key: 6200000000000000137210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c 
Value: c2c0c0


Key: 620000000000000014a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9 
Value: c2c0c0


Key: 6200000000000000154613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2 
Value: f8aff8acf8aa03843b9aca0082cddf94384fdc54be04bfb947f7ac1ccc0da2c231c0cba180b844a9059cbb000000000000000000000000d00411828e14f75b0bada0d5173974e9451586150000000000000000000000000000000000000000000000000000000000000003820636a08e72dfd86f58b979183c2e66dc938f62aa66ea85502d7ac372164ea33305eac0a01bbe6f002374f183ae4253d3c4b4ed2458e8b3897224342b5b3cafc6a61b3566c0


Key: 633f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802 
Value: 608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce5671461013457806370a082311461015257806395d89b4114610182578063a9059cbb146101a0578063dd62ed3e146101d057610093565b806306fdde0314610098578063095ea7b3146100b657806318160ddd146100e657806323b872dd14610104575b600080fd5b6100a0610200565b6040516100ad9190610b27565b60405180910390f35b6100d060048036038101906100cb9190610a66565b610239565b6040516100dd9190610b0c565b60405180910390f35b6100ee61032b565b6040516100fb9190610b49565b60405180910390f35b61011e60048036038101906101199190610a13565b610335565b60405161012b9190610b0c565b60405180910390f35b61013c61069b565b6040516101499190610b64565b60405180910390f35b61016c600480360381019061016791906109a6565b6106a0565b6040516101799190610b49565b60405180910390f35b61018a6106e8565b6040516101979190610b27565b60405180910390f35b6101ba60048036038101906101b59190610a66565b610721565b6040516101c79190610b0c565b60405180910390f35b6101ea60048036038101906101e591906109d3565b6108f5565b6040516101f79190610b49565b60405180910390f35b6040518060400160405280600d81526020017f4d7920455243323042617369630000000000000000000000000000000000000081525081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103199190610b49565b60405180910390a36001905092915050565b6000600254905090565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561038257600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561040b57600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104559190610bf1565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461051f9190610bf1565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105e99190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106889190610b49565b60405180910390a3600190509392505050565b600381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060400160405280600581526020017f6d7945524300000000000000000000000000000000000000000000000000000081525081565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561076e57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b89190610bf1565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108449190610b9b565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108e39190610b49565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008135905061098b81610cf2565b92915050565b6000813590506109a081610d09565b92915050565b6000602082840312156109bc576109bb610cdc565b5b60006109ca8482850161097c565b91505092915050565b600080604083850312156109ea576109e9610cdc565b5b60006109f88582860161097c565b9250506020610a098582860161097c565b9150509250929050565b600080600060608486031215610a2c57610a2b610cdc565b5b6000610a3a8682870161097c565b9350506020610a4b8682870161097c565b9250506040610a5c86828701610991565b9150509250925092565b60008060408385031215610a7d57610a7c610cdc565b5b6000610a8b8582860161097c565b9250506020610a9c85828601610991565b9150509250929050565b610aaf81610c37565b82525050565b6000610ac082610b7f565b610aca8185610b8a565b9350610ada818560208601610c7a565b610ae381610ce1565b840191505092915050565b610af781610c63565b82525050565b610b0681610c6d565b82525050565b6000602082019050610b216000830184610aa6565b92915050565b60006020820190508181036000830152610b418184610ab5565b905092915050565b6000602082019050610b5e6000830184610aee565b92915050565b6000602082019050610b796000830184610afd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610ba682610c63565b9150610bb183610c63565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610be657610be5610cad565b5b828201905092915050565b6000610bfc82610c63565b9150610c0783610c63565b925082821015610c1a57610c19610cad565b5b828203905092915050565b6000610c3082610c43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610c98578082015181840152602081019050610c7d565b83811115610ca7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b610cfb81610c25565b8114610d0657600080fd5b50565b610d1281610c63565b8114610d1d57600080fd5b5056fea264697066735822122023376cc8dcc48a764f6e3793ebb2000453518d497d450e575633005f4e5bb6af64736f6c63430008070033


Key: 636c697175652d83ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: 7b226e756d626572223a302c2268617368223a22307838336162343536396138393036323462376161336566366362623164303932653031353331643834376234363162373036366364356439323363346561666431222c227369676e657273223a7b22307833343734333866356133643236653232346361343438623035653933323536363932336563653064223a7b7d2c22307835393862363539343638313561653630633638656333346437343762616536643136363930323837223a7b7d7d2c22726563656e7473223a7b7d2c22766f746573223a6e756c6c2c2274616c6c79223a7b7d7d


Key: 638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0 
Value: e2a0305787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0a


Key: 657468657265756d2d636f6e6669672d83ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: 7b22636861696e4964223a3737372c22686f6d657374656164426c6f636b223a302c22656970313530426c6f636b223a302c2265697031353048617368223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c22656970313535426c6f636b223a302c22656970313538426c6f636b223a302c2262797a616e7469756d426c6f636b223a302c22636f6e7374616e74696e6f706c65426c6f636b223a302c2270657465727362757267426c6f636b223a302c22697374616e62756c426c6f636b223a302c22636c69717565223a7b22706572696f64223a36302c2265706f6368223a33303030307d7d


Key: 657468657265756d2d67656e657369732dfba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788e 
Value: 7b22307835393862363539343638313561653630633638656333346437343762616536643136363930323837223a7b2262616c616e6365223a2230783262356533616631366231383830303030227d7d


Key: 6800000000000000006e 
Value: 83ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1


Key: 68000000000000000083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: f9027ea00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001808347b760808463ad7b9cb8890000000000000000000000000000000000000000000000000000000000000000347438f5a3d26e224ca448b05e932566923ece0d598b65946815ae60c68ec34d747bae6d166902870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd174 
Value: 01


Key: 6800000000000000012547a8e05b6173ddc33a1c376390d433ffe090591ecdef79904029e20d9e9c2a 
Value: f90256a083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001018347c94c808463c534e3b861da83010b00846765746888676f312e31392e358777696e646f77730000000000bc796b239b0b48b1f4568534f9e03337ef4a3e1b12ba5293cf63757eedda9cd94582ae2b80da35f53689532fbe2c1eceb5cafa3d2b4e331ca71561bcca23e0ce01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 6800000000000000012547a8e05b6173ddc33a1c376390d433ffe090591ecdef79904029e20d9e9c2a74 
Value: 02


Key: 6800000000000000016e 
Value: 8725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4


Key: 6800000000000000018725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4 
Value: f90256a083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002018347c94c808463c5336db861da83010b00846765746888676f312e31392e358777696e646f7773000000000020f90551b5837114f87c5f38ede03fba584bbf0a67f0d463ddd079907dbda2d373b198a440070401200efd184856fe60541c2f8a3b4150b2b67cc42bb9a06bcc00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 6800000000000000018725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e474 
Value: 03


Key: 68000000000000000255848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619 
Value: f90256a08725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028347db3d808463c534e9b861da83010b00846765746888676f312e31392e358777696e646f77730000000000cafc8d72ae946f6744044d784742b2257cf24b31aa7c12da48d8c55b9fac56fd0520708fe22f4616fe190724b28ee0f712b69684e2c232ddc1f99370f9fa67c001a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000255848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d061974 
Value: 05


Key: 6800000000000000026e 
Value: 55848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619


Key: 6800000000000000036e 
Value: ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5


Key: 680000000000000003ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5 
Value: f90256a055848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002038347ed32808463c53525b861da83010b00846765746888676f312e31392e358777696e646f77730000000000431d3a96acbd941b86c7683d3453c0bc71072a1f322d26fb61490098bcf50890672424f7ed6b4ded3a68fbd94523534c02159b9cad3f81a6d9d8fbc1546e5dc801a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000003ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f574 
Value: 07


Key: 6800000000000000046e 
Value: a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0


Key: 680000000000000004a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0 
Value: f90256a0ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002048347ff2c808463c53561b861da83010b00846765746888676f312e31392e358777696e646f777300000000003727c4ebba67e1c2058a5e3516ac34d4672afcfeccf7131d640c3a57da4b97bc6819d0e82744138199aa64a8e96c6e940fe134a46251af72e27b30be20d5e3ab01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000004a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b074 
Value: 09


Key: 6800000000000000056e 
Value: 90db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80


Key: 68000000000000000590db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80 
Value: f90258a0a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319a0bfe61eef3bf0ddc808d3a1495ca247e3c6321b0021db69b42d6cd322abe47852a0056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002058348112a8252088463c5359db861da83010b00846765746888676f312e31392e358777696e646f77730000000000c770d470468cc1de6ec6afd8f08c61bdde02e9a251558049f4e673d2f68f3d9562eeb8573bb24f691babb0d6885e40854c9142dd8be52b8d3aee0ae3c936c72e00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000590db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be8074 
Value: 0b


Key: 6800000000000000066e 
Value: b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c


Key: 680000000000000006b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c 
Value: f90256a090db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068348232d808463c57064b861da83010b00846765746888676f312e31392e358777696e646f77730000000000b6ca543fe28f813defd1323f22ff431298ef37d4278d2931b0b1d1162bfb18b025ae38db641f2a17974f647db0dcf59e9daf96ed875badb7e54de8a4dfb32d2a00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000006b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c74 
Value: 0d


Key: 6800000000000000076e 
Value: 958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1


Key: 680000000000000007958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1 
Value: f90256a0b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020783483534808463c570a0b861da83010b00846765746888676f312e31392e358777696e646f77730000000000d57ac934b4c1d2afba96ba26f74dc89267ab82abd013aeda47348123bc31e1a911c9f6e3dfc01eeca8f44c0ec13faa23fd4cfc8df284dc2ec423ce72d4e8d08800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000007958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae174 
Value: 0f


Key: 6800000000000000086e 
Value: 90f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df


Key: 68000000000000000890f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df 
Value: f90256a0958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020883484740808463c66368b861da83010b00846765746888676f312e31392e358777696e646f777300000000002e46ccc3c3191be24f8e6830305c17242f4fd3eb277df7c8cc66bb9b22d6ee2134cd6f08721256ea5e5e3944794c836f840cbafcc42ca50bf91eef51ea17828a01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000890f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df74 
Value: 11


Key: 6800000000000000096e 
Value: d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578


Key: 680000000000000009d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578 
Value: f90259a090f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049dfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa08b5994595c8d75d05671d80e4364a498a44c2f3ed57b85a8afb89178b0c17ed4a0b769fd25cdff8e1059fcdde93c8ae51f1afd036af67019d02e20362092d269dbb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209834859508301f0678463c663a4b861da83010b00846765746888676f312e31392e358777696e646f777300000000008252c6c5c272ea7a33e924ecd83b7973a095d5375e561596c52c131f392d9fea3c8d6fea474b346f36cc3afe309d3389ad8ab16b1cd978b0912bd28f180fdd9d00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000009d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb44357874 
Value: 13


Key: 68000000000000000a4a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e 
Value: f90256a0d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a83486b65808463c663e0b861da83010b00846765746888676f312e31392e358777696e646f77730000000000669a87d404f990200e4094e484497b18661d72d7b45f9d915444c3ef3c249e5475813fe92bb381d611b161d3f1b544c02828aa9961716556a4abf437f1851caa00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000a4a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e74 
Value: 15


Key: 68000000000000000a6e 
Value: 4a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e


Key: 68000000000000000b6ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32 
Value: f90256a04a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b83487d7e808463c6641cb861da83010b00846765746888676f312e31392e358777696e646f77730000000000396f1e3b897383a91bcfec1c805a3ef51785e138ef6b02ce83864245a71303584940ccd8351839c70f7f2d31d29ad4390bb3af21f2786337872b3ef10713158000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000b6ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f3274 
Value: 17


Key: 68000000000000000b6e 
Value: 6ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32


Key: 68000000000000000c62cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48 
Value: f90256a06ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c83488f9c808463c66458b861da83010b00846765746888676f312e31392e358777696e646f7773000000000006a972a92b6d4ba46639e4cc99edeb7278f8c287c2a9ad0471db0dbccf971f1055eeab3d1d06b3924f9ec9aed05228056f9772f256f8e2294eb5ac8d08479f6400a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000c62cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f4874 
Value: 19


Key: 68000000000000000c6e 
Value: 62cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48


Key: 68000000000000000d6e 
Value: c492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1


Key: 68000000000000000dc492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1 
Value: f90256a062cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d8348a1be808463c66494b861da83010b00846765746888676f312e31392e358777696e646f777300000000001d77ed320d45d01c768cca457ffabe6b11487a87a79c5540f78c4a4d74987b2b51ae7c4000df28952758c441cf0ebe167867a73357ce0f3f7785e889dc52182001a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000dc492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac174 
Value: 1b


Key: 68000000000000000e4c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5 
Value: f90256a0c492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ccbcec25a3a76ca2d4175bec3063bc00698afe75a78a01ffb74c18d30f1c39aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e8348b3e5808463c6686eb861da83010b00846765746888676f312e31392e358777696e646f77730000000000158e908569ba486e55a5eb4b2466ba2c716e7ef9ea27e3e3f692a3fe8b6e154108e49a8469ff598f200f12496f7183fa0a6754313bcea5a925f78cbdac750af601a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000e4c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d574 
Value: 1d


Key: 68000000000000000e6e 
Value: 4c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5


Key: 68000000000000000f6b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e 
Value: f90259a04c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a01eeac921ff3aa474a2ad39e3001efc0ee37ac977f68ce506a754997a2dfc27b4a08d91efbbb0d70e091c580f6ea555a3a2c42f2264f2af82c1350d84836ba8ea5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f8348c610830cafdc8463c668aab861da83010b00846765746888676f312e31392e358777696e646f77730000000000e8c55935e5fa5340d85b056a81cec8c5262e419c73f9800a5f1442c3b4a5bb8e03ba6d4dfef3577fb7f7ab214d60b36c538c6cd84afc1457cd8ed4f7a05ab73801a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000000f6b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e74 
Value: 1f


Key: 68000000000000000f6e 
Value: 6b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e


Key: 680000000000000010538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2 
Value: f90256a06b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002108348d840808463c668e6b861da83010b00846765746888676f312e31392e358777696e646f7773000000000057fb30994f8f89051f64839d307b374b9ac82e7249f3434287d8737612e0394446a71473195b64bf48525a11cfd5d213bdfc29e533dc911886121f41574dbe0a01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000010538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce274 
Value: 21


Key: 6800000000000000106e 
Value: 538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2


Key: 6800000000000000116e 
Value: 9eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181


Key: 6800000000000000119eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181 
Value: f90256a0538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002118348ea75808463c66922b861da83010b00846765746888676f312e31392e358777696e646f777300000000002e883de7181187562b6361b76b7c5dd7710c6b2a1feca878d2705b332b26ee181e14367efaa6d17c31011893ea32603205d44a0869d4e7c52864b60022fa04f900a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 6800000000000000119eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb18174 
Value: 23


Key: 6800000000000000126e 
Value: 86c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86


Key: 68000000000000001286c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86 
Value: f90256a09eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002128348fcae808463c6695eb861da83010b00846765746888676f312e31392e358777696e646f777300000000000ed7e3405016e77780ffb70fbdc7841a106b03442f29156c168cf2542f30162e2704ed13aa93526b8dee93abdd8134e764464f197e775493bcf18d9a2b12726e00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 68000000000000001286c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c8674 
Value: 25


Key: 6800000000000000136e 
Value: 7210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c


Key: 6800000000000000137210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c 
Value: f90256a086c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021383490eec808463c6699ab861da83010b00846765746888676f312e31392e358777696e646f77730000000000767b97621a6dc27becc8518ff9c8db1b133a3323472dacab2f58f92b5bea16bc2d7eb30915254f995fe2b8927cc2c9ffe076127eafad107793890cd4ac55d86701a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 6800000000000000137210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c74 
Value: 27


Key: 6800000000000000146e 
Value: a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9


Key: 680000000000000014a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9 
Value: f90256a07210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002148349212e808463c669d6b861da83010b00846765746888676f312e31392e358777696e646f77730000000000a0c557ecbe938d91f052ee1af4134ff174fc1ea2126f9acb87241198a9f5d67a1f0fe02e63de144176537fe34dbf899471190b810f98320faaef53829bb7580a00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 680000000000000014a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b974 
Value: 29


Key: 6800000000000000154613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2 
Value: f90258a0a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471a01f044ef5b3b03dc78905028854b329903140a06efbb2d6bd389fc7e5bb57bedaa026e5628387018f80bb40da23fa6d8509ae1815377bcab83ea815c3c590d2f318b901000000000000000000000000000000000000000000000002000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000002000000000000000000000000000000010000000002001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000001004000000000000000000000000000000000000000000000000000000000000000000000000000001000000002158349337582cddf8463c66a12b861da83010b00846765746888676f312e31392e358777696e646f77730000000000517f68b82f355268cc0311551273d5d32e621d39d25d744b2d9c4eb7de1523af151d5f2e6103cb65f1a0d1c15d5c4aeacd9b2366324e3abdea94272e45b99d9600a00000000000000000000000000000000000000000000000000000000000000000880000000000000000


Key: 6800000000000000154613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf274 
Value: 2b


Key: 6800000000000000156e 
Value: 4613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2


Key: 6c0c419b83027470789746f3695e82dd94cb2b34317249bbcd9a91d9fee9155c78 
Value: 15


Key: 6c24bf9610b05a13b7016509bdf05b071f34396255dd54a3a20cb7974431b08940 
Value: 05


Key: 6cc3321a0a23690c55cbce1cacc0c0feddf84b014d9349e5687c83fe8ee59e4288 
Value: 09


Key: 6cec9a63eb2e662e61e9885d513734933d1487cf4e8da30e4452fb424d2d8f8caf 
Value: 0f


Key: 72000000000000000083ab4569a890624b7aa3ef6cbb1d092e01531d847b461b7066cd5d923c4eafd1 
Value: c0


Key: 7200000000000000012547a8e05b6173ddc33a1c376390d433ffe090591ecdef79904029e20d9e9c2a 
Value: c0


Key: 7200000000000000018725bc6e82bcd8e29a8b929c72fc2f780c9be085aba63be922b0651373e2c3e4 
Value: c0


Key: 72000000000000000255848acb5eda62f93dabfe16cc6c38cc1352486167fef9c7acb8b6e6c08d0619 
Value: c0


Key: 720000000000000003ab8281425d78bec313de13ff4bb9056faa854791409e3cab1ca785cb6cb1e6f5 
Value: c0


Key: 720000000000000004a9fa7c89a41e4a062cecbf2e8a9184648334dedbded6dc79cb20a7dee75376b0 
Value: c0


Key: 72000000000000000590db87c55ab26dbd559c85441dc60711f6e5771baa46ae56e4ae71ddf394be80 
Value: c6c501825208c0


Key: 720000000000000006b8b44fe5c69b730eddc8207b366cce4cfc6403184f3a71599ef254b01d0b487c 
Value: c0


Key: 720000000000000007958b1070970be8fadad971814847aa5b56d41d4da34172c3b30819c2948c3ae1 
Value: c0


Key: 72000000000000000890f074df011ae3b8cb04e18d5522cf68ff94270fdec76c8e04737096411049df 
Value: c0


Key: 720000000000000009d8f17ef5723beb00851d5525a0b047c722f5605c4868f1b4b5b9ab8ebb443578 
Value: c7c6808301f067c0


Key: 72000000000000000a4a72b38748d3a578a68a03bb0b7c4132251cc5bd7370f9258b8514c97160eb0e 
Value: c0


Key: 72000000000000000b6ccfdcd9eb27ecee527834d6162753207fdc99e41fc1c34e1ca4e740a4b50f32 
Value: c0


Key: 72000000000000000c62cd6d4f7ef404a97690277455544f688b664da36bde0fc276d996e426d52f48 
Value: c0


Key: 72000000000000000dc492e6763d0a0236f48aee20797a5d9e49b5629d11d48c65297bda03d7842ac1 
Value: c0


Key: 72000000000000000e4c0ac884fa549fdd5a260b60607c6de1c6ccd31c85a3115f046288db3f4853d5 
Value: c0


Key: 72000000000000000f6b4cb11ec46771fb9d4b35cfa2f5437a269675a04013ec91ae27d6285a693d1e 
Value: c7c601830cafdcc0


Key: 720000000000000010538f556db255a3afbe506723989a4b46120e26896f0e67963b6f5d0261ce7ce2 
Value: c0


Key: 7200000000000000119eed632c88ebaca8e55a700103d4dc43a622926a2a8992ca46ad6248372fb181 
Value: c0


Key: 72000000000000001286c64c392d67a1b52fc3590ea9ffa65efc659f764ab656c101ee7eee88690c86 
Value: c0


Key: 7200000000000000137210ab2e720edfb83f0c5ec7b89126563945ddcf567df4d06ef8f357cba4245c 
Value: c0


Key: 720000000000000014a8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9 
Value: c0


Key: 7200000000000000154613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2 
Value: f8a5f8a30182cddff89df89b94384fdc54be04bfb947f7ac1ccc0da2c231c0cba1f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000598b65946815ae60c68ec34d747bae6d16690287a0000000000000000000000000d00411828e14f75b0bada0d5173974e945158615a00000000000000000000000000000000000000000000000000000000000000003


Key: 756e636c65616e2d73687574646f776e 
Value: d180cf8463c542b88463c5525d8463c5527c


Key: 7ed0c64dc405876b5da2a2f60bf0afb614b690282e8407eaf3039eeb0de588d6 
Value: f85180808080a0638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0808080a0a8ccc84cc209cb819712eb1f1152c82f77f0114c3d1bd66b446f1573561930448080808080808080


Key: 87225f605d9d6d9d122cfc389f77268c144f21a11ef2b0763a1702e80cbf5394 
Value: e2a0341c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e07


Key: 8f96128efe45d3af66806fff83ec3777e12666c7473aa4716d27f1b4627f7f5d 
Value: f872a02064245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8cb84ff84d038902b5d1eb9d79a78000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470


Key: a635ca34f999df2deb14d6e7e10eee696e334880d6483d5338319efafd7cc44e 
Value: f8518080a021dc63cbdd41e1f68b7f355d7a4588defcefaf4fb9e32b6f35c1306f5e9a398b8080808080a00f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c8080808080808080


Key: a8ccc84cc209cb819712eb1f1152c82f77f0114c3d1bd66b446f157356193044 
Value: e2a0341c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e0a


Key: b2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471 
Value: f851a023a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af8080808080808080808080a0ffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f99299580808080


Key: bab13a31d132623bfee3549eaff29dcb998cda7206d44af729cdbe22b5aa1564 
Value: f851a04a138167e7404c69d755c6cf77847ca12d0a0ef69f1af5750dfd515375bf4fa28080808080808080808080a052739b5a84cb6c567714850671716a8a3057d70cdc84a52f2e58d2ba21881de580808080


Key: da73a3004622ded0dd20bb0b1b729fa96a65f76b9f9f04877b9356045c724319 
Value: e21ca0a635ca34f999df2deb14d6e7e10eee696e334880d6483d5338319efafd7cc44e


Key: fba52fedda0de0c44f7f2745739f5e98e10f1124bc04f92a1bc8355fbe58788e 
Value: f873a120c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8cb84ff84d808902b5e3af16b1880000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470


Key: ffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f992995 
Value: f8518080a003b1feb6171ae67a69649d8e798fc17814462426c4a8a08fb372449d93222f028080808080a00f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c8080808080808080


Error: <nil>

El último bloque está en la levelDB (y también lo conocemos con el explorador de bloques local)

La cadena 4c617374426c6f636b hexadecimal es LastBlock al convertirla a ASCII

Con el hash del último bloque podemos buscar la clave (key) en levelDB para obtener el header del bloque:

key = 68 + número de bloque con fomrato 16 bytes(21 en hexadecimal es 0x15) + hash del bloque

Key: 6800000000000000154613e5bedd3511e54b88a57aa1fe7811c50112235b12aa369ccd2584358fccf2 
Value: f90258a0a8f15a485f9f17  .... 000000000000000000000000880000000000000000

El valor está codificado en RLP, y decodificado resulta:

["0xa8f15a485f9f17b6e3f1a246e33a05a9800354178cb0c613a774de58161115b9","0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","0x0000000000000000000000000000000000000000","0xb2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471","0x1f044ef5b3b03dc78905028854b329903140a06efbb2d6bd389fc7e5bb57beda","0x26e5628387018f80bb40da23fa6d8509ae1815377bcab83ea815c3c590d2f318","0x00000000000000000000000000000000000000000000020000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000020010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000010040000000000000000000000000000000000000000000000000000000000000000000000000000010000000","0x02","0x15","0x493375","0xcddf","0x63c66a12","0xda83010b00846765746888676f312e31392e358777696e646f77730000000000517f68b82f355268cc0311551273d5d32e621d39d25d744b2d9c4eb7de1523af151d5f2e6103cb65f1a0d1c15d5c4aeacd9b2366324e3abdea94272e45b99d9600","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000"]

Nos interesa el valor del StateRoot (los valores son Parent Hash, Ommers Hash, Beneficiary, State Root, …), el cuarto valor: 0xb2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471, buscando en leveldb:

Key: b2b06573c7057e49de5bd65474aca454aa50cc0f9b6713256f24bcd24629c471
Value: f851a023a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af8080808080808080808080a0ffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f99299580808080

Decodificado el valor RLP tenemos un Nodo Rama (17 campos)

["0x23a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af","0x","0x","0x","0x","0x","0x","0x","0x","0x","0x","0x","0xffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f992995","0x","0x","0x","0x"]

Ruta (posición) ‘0’ : 0x23a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af

Ruta ‘c’ : 0xffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f992995

Ruta «0»

Key: 23a72d53272ad8d7966d816a35a7d7addced061b8bdf656df9e77200f62052af 
Value: f869a036dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4b846f8440180a02e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cda03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802

decodificado el valor RLP:

["0x36dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4","0xf8440180a02e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cda03f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802"]

El primer campo representa un Nodo Hoja con un número impar de nibbles (prefijo 0x3), el resto contiene lo que falta del hash, y que tenemos que completar al inicio con la ruta que hemos seguido, en este caso únicamente «0»

  hash completo: 06dbe9564960cd334c7eac42b1f7e0bdf8ee21b24968ea84ade32e6102baf8a4

Y es el valor del hash keccak256 de la dirección del contrato, que hemos visto antes que se desplegó en la dirección 0x384FdC54BE04bfB947F7Ac1cCC0DA2C231c0CBA1.

hash Keccak256 del contrato

El segundo campo de nuevo está codificado en RLP y decodificado nos proporciona el estado de la cuenta del contrato:

["0x01","0x","0x2e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cd","0x3f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802"]

Cuyos campos son: Nonce=1, Balance=0, Storage Root, Code Hash.

El análisis del Storage Trie lo dejamos para un siguiente apartado, pues no es sencillo. El Code Hash sí es sencillo analizarlo en la levelDB pues su contenido es justamente el Bytecode del Smart Contract:

Realmente en levelDB no hay una clave (key) con el Code Hash tal cual, sino con el prefijo el 63, que convertido en ASCII es ‘c’ (código, según schema.go)

Key: 633f7040d0572ea8ef7884dbf6c2810ba9fc341eb7b284e33f4ea9b3469dff2802Value: 608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce56714610….. -> bytecode

Ruta «c»

Key: ffde5ed0c3d5c43585691cfa8a26c01d82bc88e76514542e0d6c2d848f992995 
Value: f8518080a003b1feb6171ae67a69649d8e798fc17814462426c4a8a08fb372449d93222f028080808080a00f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c8080808080808080

El valor está codificado en RLP, y decodificándolo obtenemos un Nodo Rama, Branch Node, y es ya casi idéntico al caso del post anterior, salvo que al haber modificado los balances, los hashes no son los mismos, pero el análisis sí:

["0x","0x","0x03b1feb6171ae67a69649d8e798fc17814462426c4a8a08fb372449d93222f02","0x","0x","0x","0x","0x","0x0f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c","0x","0x","0x","0x","0x","0x","0x","0x"]
  • Ruta «2» -> 0x03b1feb6171ae67a69649d8e798fc17814462426c4a8a08fb372449d93222f02, valor decodificado:
["0x2064245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c","0xf84d048902b5d1eb9d79a78000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"]

Prefijo 0x20 nodo Hoja con número de nibbles par (hash restante, nuestra ruta ahora es ‘c2‘)

primera cuenta: Keccak256(598b65946815ae60c68ec34d747bae6d16690287) = c264245df25118b8c2b07f8d67fab2bcdc6ea50a250f89e4aacf5cab94b3bc8c

y el valor codificado en RLP, que deodificado proporciona el estado de esta cuenta:

["0x04","0x02b5d1eb9d79a78000","0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"]

Nonce 4, balance= 49995000000000000000 Wei , Storage Trie y Code Hash que representan los valores nulos.

  • Ruta «8» -> 0x0f39018e386a5a8733e5bb4dfaebce90aa692c6835322ea24ad1c340cc863e6c, valor decodificado:
["0x201147d14a9d46c37d277394cc51442ea6f10bfe350b8f0a4f7a8049172432a2","0xf84b808711c37937e08000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"]

Prefijo 0x20 nodo Hoja con número de nibbles par (hash restante, nuestra ruta ahora es ‘c8′)

segunda cuenta: Keccak256(d00411828e14f75b0bada0d5173974e945158615) = c81147d14a9d46c37d277394cc51442ea6f10bfe350b8f0a4f7a8049172432a2

y el valor codificado en RLP, que deodificado proporciona el estado de esta cuenta

["0x","0x11c37937e08000","0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"]

Nonce 0, balance= 5000000000000000 wei y Storage Trie y Code Hash que representan los valores nulos.

Storage Trie

El análisis del Storage Trie no es inmediato, pues las variables se almacenan en pares clave,valor de una manera peculiar. EL storage Trie de cada contrato puede almacenar claves de 32 bytes, y la manera de gestionar el espacio y acceder a los valores, depende del tipo de variable, de la posición según el orden de aparición de esa variable en el código fuente (solidity) del contrato y si se trata de arrays, mappings o estructuras de datos, del índice correspondiente. Algunas referencias con explicaciones más elaboradas:

Acceder a las variables en la blockchain

Todas estas referencias aclaran cómo acceder a las variables almacenadas del Smart Contract en la blockchain, en cada Storage Trie, y es necesario entenderlo para luego ver cómo se implementa en LevelDB. Las variables del localizan mediante su posición según orden de aparición en el código fuente (empezando desde ‘0’), aunque las variables de tipo Array se localizan en la posición que viene dada por el hash keccak256(P), siendo P el lugar por orden de aparición en el código fuente, por otra parte, los valores de las variables tipo mapping, pares (clave,valor) se localizan en la posición que viene dada por el hash keccak256( K concatenado con P) donde K el la clave (key) y P igual que antes el lugar de aparaición en el código fuente del mapping.

Hay que tener en cuenta que se trabaja con 32 bytes, como las direcciones de cuenta tienen 20 bytes (40 caracteres en hexadecimal), hay que poner 24 ceros a la izquierda (12 bytes). Para acceder a los valores, la consola geth proporciona la siguiente función:

https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat

En nuestro caso particular, el orden de las variables en el código fuente es el siguiente (las constantes no se almacenan en el Storage Trie, forman parte del código Bytecode)

Orden de las variables en el Smart Contract

Según lo anterior, lo más sencillo e inmediato es acceder a la variable de tipo sencillo entero totalSupply_ (uint256), que en la consola accederíamos simplemente con la dirección del Smart Contract y la posición de esta variabe, posición 2:

Valor del almacenamiento para la variable que ocupa el orden de aparaición 2

El valor devuelto ocupa 32 bytes (64 caracteres en hexadecimal sin contar «0x»), y «a» en hexadecimal corresponde a «10» en decimal, que es justo el valor asignado a totalSupply_.

Ahora procedemos a obtener los valores de la variable balances, que en este Smart Contract están definidos mediante un mapping, cuya clave es la dirección de la cuenta que tiene tokens, y el valor es el número de tokens que posee (el otro mapping de la variable allowed es anidado y se haría recursivamente)

Tenemos dos cuentas con tokens, que puestas con 32 bytes:

0x000000000000000000000000d00411828e14f75b0bada0d5173974e945158615
0x000000000000000000000000598b65946815ae60c68ec34d747bae6d16690287

Puesto que la variable mapping balances aparece en primer lugar en el código fuente (las constantes no cuentan), entonces la posición es ‘0’ , y convertido a 32 bytes, es el valor que tenemos que concatenar a cada uno de los anteriores, y hallar el hash Keccak256 de ese número de 64 bytes para tener la posición en el almacenamiento del smart contract:

Keccac(000000000000000000000000598b65946815ae60c68ec34d747bae6d166902870000000000000000000000000000000000000000000000000000000000000000) = a9dedd507e87a821138aa740d510fe117109cbb8c2dc9fff9aacab345f088d57
Keccac(000000000000000000000000d00411828e14f75b0bada0d5173974e9451586150000000000000000000000000000000000000000000000000000000000000000) = 5fba0787be7d32d14e99723cb546a85de7a554629b2517c4d3bd908a8c953069

Ahora podemos usar en la consola la función getStorageAt y comprobamos que obtenemos los correspondientes valores de los balances del token del Smart Contract para cada cuenta

Valores almacenados por el contrato para los el mapping (dirección cuenta, balance de tokens)

Storage Trie en LevelDB

Analizamos ahora el Storage Trie, partiendo del valor del Storage Root en el Estado de la cuenta del contrato, obtenido en el State Trie, StorageRoot =0x2e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cd.

Buscando los valores en la leveldb:

Key: 2e8d7ed11d4a78b32716c9538d25c98ec13842db4fa39c82eac6cfca12bfb0cd 
Value: f87180808080a0638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0a057eeaffc3c39066751e494ddd3a2b4bab6a4350a04398dac1e57cf3e279a089b8080a087225f605d9d6d9d122cfc389f77268c144f21a11ef2b0763a1702e80cbf53948080808080808080

Antes de analizar cada uno de los nodos que aparecen, teniendo en cuenta el apartado anterior sobre las posiciones de las variables en el almacenamiento, pues resulta que la clave (key) en LevelDB de una variable del Smart Contract viene dada por el hash Keccak256 de su Posición en el almacenamiento (calculada según el tipo de variable que sea y según el orden de aparición en el código fuente)

Siendo para una variable del Smart Contract, y usando siempre 32 bytes:
L = Lugar de aparición en el código fuente (empezando en 0 y sin contar las constantes)
P= Posición en el Almacenamiento del Smart Contract (32 bytes disponibles para las posiciones)
K = Clave en LevelDB

Posicion en almacenamiento
Variable sencilla uint256 -> P = L
Mapping (address => uint256) -> P = Keccak256( address concatenado con L)

Key/Clave en LevelDB = Keccak256(P)
  Variable sencilla uint256 -> K = Keccak256(P) -> K = Keccak256(L)
  Mapping (address => uint256) -> K = Keccak256(P) -> 
         K = Keccak256(Keccak256( address concatenado con L))

Con las posiciones calculadas en el apartado anterior, tenemos entonces los siguientes cálculos, marcados en colores lasl claves que han de existir en levelDB


Claves en Storage Trie de las variables del Smart Contract almacenadas en la blockchain
Uint256 totalSupply_
Orden de aparición en código fuente: 2
Posición: 0000000000000000000000000000000000000000000000000000000000000002
Clave levelDB: Keccak256(0000000000000000000000000000000000000000000000000000000000000002) =
405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace
Mapping (address => uint256) balances
Orden de aparición en código fuente: 0
Cuenta 598b65946815ae60c68ec34d747bae6d16690287
Posición:
Keccak256(000000000000000000000000598b65946815ae60c68ec34d747bae6d166902870000000000000000000000000000000000000000000000000000000000000000) = a9dedd507e87a821138aa740d510fe117109cbb8c2dc9fff9aacab345f088d57
Clave LevelDB:
Keccac256(a9dedd507e87a821138aa740d510fe117109cbb8c2dc9fff9aacab345f088d57) =
841c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e
Mapping (address => uint256) balances
Orden de aparición en código fuente: 0
Cuenta d00411828e14f75b0bada0d5173974e945158615
Posición:
Keccak256(000000000000000000000000d00411828e14f75b0bada0d5173974e9451586150000000000000000000000000000000000000000000000000000000000000000) = 5fba0787be7d32d14e99723cb546a85de7a554629b2517c4d3bd908a8c953069
Clave LevelDB:
Keccac256(5fba0787be7d32d14e99723cb546a85de7a554629b2517c4d3bd908a8c953069)=
526fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c7

El campo Value al decodificarlo (RLP) nos proporciona un Nodo Rama, Branch Node, con las índices 4, 5 y 8 ocupados por otras claves, y el resto nulos. Son los tres valores de las variables almacenadas, el initialSupply y el balance de las dos cuentas con tokens:

["0x","0x","0x","0x","0x638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0","0x57eeaffc3c39066751e494ddd3a2b4bab6a4350a04398dac1e57cf3e279a089b","0x","0x","0x87225f605d9d6d9d122cfc389f77268c144f21a11ef2b0763a1702e80cbf5394","0x","0x","0x","0x","0x","0x","0x","0x"]
  • Ruta 4 -> key 0x638710aa86ab306a883e718bb5fe52128a4a90abf9679d3e0a97c1f3592cb0c0

      Value: e2a0305787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0a, que decodificado proporciona:

[«0x305787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace»,»0x0a»]

El prefijo 0x3 indica que es un nodo Hoja, con un hash restante de un número de nibbls (bytes) impar, siendo el hash entonces 405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace y el valor 0x0a, que es 10 en decimal, variable initialSupply_, y comprobamos el valo correcto de la clave en el cálculo de la tabla anterior.

  • Ruta 5-> key 0x57eeaffc3c39066751e494ddd3a2b4bab6a4350a04398dac1e57cf3e279a089b

      Value: e2a0326fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c703, que decodificado proporciona:

[«0x326fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c7″,»0x03»]

De nuevo prefijo 0x3, Nodo Hoja, siendo el hash 526fab3158aeeb350abedb294d68cbe170d310a0e6dbed58e14861d2f3e131c7, valor calculado en la tabla anterior, y el valor 0x03, 3 en decimal, balance en tokens de la cuenta destino

  • Ruta 8 -> key 0x87225f605d9d6d9d122cfc389f77268c144f21a11ef2b0763a1702e80cbf5394

      Value: e2a0341c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e07, decodificado

[«0x341c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e»,»0x07″]

Prefijo 0x3, Nodo hoja con hash: 841c846524bae4fd3aa9bce27d996677d4651df966ba3296d5788c40bec8219e, valor calculado en la tabla anterior, y valor 0x07, 7 en decimal, balance en tokens de la cuenta origen

Por tanto, ya conocemos cómo se almancenan en la base de datos LevelDB las claves y valores almacenados por un Smart Contract en su Storage Trie.

1 Comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.