{
  "contractName": "SMT256",
  "abi": [
    {
      "inputs": [],
      "name": "EXIST",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NON_EXIST",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.0+commit.26b70077\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EXIST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NON_EXIST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Wilson Beam <wilsonbeam@protonmail.com>\",\"details\":\"Append only purpose Sparse Merkle Tree solidity library for optimistic roll up\",\"methods\":{},\"title\":\"Sparse Merkle Tree for optimistic roll up\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/wanseob/Projects/wilsonbeam/smt-rollup/contracts/SMT.sol\":\"SMT256\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/wanseob/Projects/wilsonbeam/smt-rollup/contracts/SMT.sol\":{\"keccak256\":\"0x6da0de244d820286121a3dc7149968c8c6e449ac529e28c2c720247b5e4635c5\",\"urls\":[\"bzz-raw://4e3adc3a46b1974a95a58dc7a7b7ef09eb33a4b07e23091c73dd98fef92b8e63\",\"dweb:/ipfs/QmZ21CJPA6utrtUMoL4esHmFa2hAEQFE5eFjqjN4e9ikBh\"]}},\"version\":1}",
  "bytecode": "0x60fe610025600b82828239805160001a60731461001857fe5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80633fc4c054146042578063705b79c914605e575b600080fd5b6048607a565b6040518082815260200191505060405180910390f35b606460a1565b6040518082815260200191505060405180910390f35b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360001b81565b7fb0b4e07bb5592f3d3821b2c1331b436763d7be555cf452d6c6836f74d5201e8560001b8156fea264697066735822122054f7d12abd9dde09cccd5bd47d08d8fffaca0dcac8ff2efa9d24d4a0c117c4fe64736f6c63430006000033",
  "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80633fc4c054146042578063705b79c914605e575b600080fd5b6048607a565b6040518082815260200191505060405180910390f35b606460a1565b6040518082815260200191505060405180910390f35b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360001b81565b7fb0b4e07bb5592f3d3821b2c1331b436763d7be555cf452d6c6836f74d5201e8560001b8156fea264697066735822122054f7d12abd9dde09cccd5bd47d08d8fffaca0dcac8ff2efa9d24d4a0c117c4fe64736f6c63430006000033",
  "sourceMap": "229:4709:1:-:0;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "229:4709:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;527:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;329:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;527:102;563:66;527:102;;;:::o;329:98::-;361:66;329:98;;;:::o",
  "source": "pragma solidity >= 0.6.0;\n\n\n/**\n * @author Wilson Beam <wilsonbeam@protonmail.com>\n * @title Sparse Merkle Tree for optimistic roll up\n *\n * @dev Append only purpose Sparse Merkle Tree solidity library for optimistic roll up\n */\nlibrary SMT256 {\n    // in Solidity: keccak256('exist')\n    // in Web3JS: soliditySha3('exist')\n    bytes32 constant public EXIST = 0xb0b4e07bb5592f3d3821b2c1331b436763d7be555cf452d6c6836f74d5201e85;\n    // in Solidity: keccak256(abi.encodePacked(bytes32(0)))\n    // in Web3JS: soliditySha3(0)\n    bytes32 constant public NON_EXIST = 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563;\n\n    struct RollUp {\n        bytes32 root;\n        bytes32[] leaves;\n        bytes32[256][] siblings;\n    }\n\n    struct OPRU {\n        bytes32 prev;\n        bytes32 next;\n        bytes32 mergedLeaves;\n    }\n\n    function inclusionProof(\n        bytes32 root,\n        bytes32 leaf,\n        bytes32[256] memory siblings\n    ) internal pure returns(bool) {\n        return merkleProof(root, leaf, EXIST, siblings);\n    }\n\n    function nonInclusionProof(\n        bytes32 root,\n        bytes32 leaf,\n        bytes32[256] memory siblings\n    ) internal pure returns(bool) {\n        return merkleProof(root, leaf, NON_EXIST, siblings);\n    }\n\n    function merkleProof(\n        bytes32 root,\n        bytes32 leaf,\n        bytes32 value,\n        bytes32[256] memory siblings\n    ) internal pure returns(bool) {\n        require(calculateRoot(leaf, value, siblings) == root, \"Invalid merkle proof\");\n        return true;\n    }\n\n    function calculateRoot(\n        bytes32 leaf,\n        bytes32 value,\n        bytes32[256] memory siblings\n    ) internal pure returns (bytes32) {\n        bytes32 cursor = value;\n        uint path = uint(leaf);\n        for (uint16 i = 0; i < siblings.length; i++) {\n            if (path % 2 == 0) {\n                // Right sibling\n                cursor = keccak256(abi.encodePacked(cursor, siblings[i]));\n            } else {\n                // Left sibling\n                cursor = keccak256(abi.encodePacked(siblings[i], cursor));\n            }\n            path = path >> 1;\n        }\n        return cursor;\n    }\n\n    function append(\n        bytes32 root,\n        bytes32 leaf,\n        bytes32[256] memory siblings\n    ) internal pure returns (bytes32 nextRoot) {\n        // Prove that the array of sibling is valid and also the leaf does not exist in the tree\n        require(nonInclusionProof(root, leaf, siblings), \"Failed to build the previous root using jthe leaf and its sibling\");\n        // Calculate the new root when the leaf exists using its proven siblings\n        nextRoot = calculateRoot(leaf, EXIST, siblings);\n        // Make sure it has been updated\n        require(root != nextRoot, \"Already exisiting leaf\");\n    }\n\n    function rollUp(RollUp memory proof) internal pure returns (bytes32) {\n        // Inspect the RollUp structure\n        require(proof.leaves.length == proof.siblings.length, \"Both array should have same length\");\n        // Start from the root\n        bytes32 root = proof.root;\n        // Update the root using append function\n        for (uint i = 0; i < proof.leaves.length; i ++) {\n            root = append(root, proof.leaves[i], proof.siblings[i]);\n        }\n        return root;\n    }\n\n    function rollUp(\n        bytes32 root,\n        bytes32[] memory leaves,\n        bytes32[256][] memory siblings\n    ) internal pure returns (bytes32 nextRoot) {\n        nextRoot = rollUp(RollUp(root, leaves, siblings));\n    }\n\n    function rollUpProof(\n        bytes32 root,\n        bytes32 nextRoot,\n        bytes32[] memory leaves,\n        bytes32[256][] memory siblings\n    ) internal pure returns (bool) {\n        require(nextRoot == rollUp(RollUp(root, leaves, siblings)), \"Failed to drive the next root from the proof\");\n    }\n\n    function newOPRU(bytes32 startingRoot) internal pure returns (OPRU memory opru) {\n        opru.prev = startingRoot;\n        opru.next = startingRoot;\n        opru.mergedLeaves = bytes32(0);\n    }\n\n    function update(\n        OPRU storage opru,\n        bytes32[] memory leaves,\n        bytes32[256][] memory siblings\n    ) internal {\n        opru.next = rollUp(opru.next, leaves, siblings);\n        opru.mergedLeaves = merge(opru.mergedLeaves, leaves);\n    }\n\n    function verify(\n        OPRU memory opru,\n        bytes32 prev,\n        bytes32 next,\n        bytes32 mergedLeaves\n    ) internal pure returns (bool) {\n        require(opru.prev == prev, \"Started with different root\");\n        require(opru.mergedLeaves == mergedLeaves, \"Appended different leaves\");\n        return opru.next == next;\n    }\n\n    function merge(\n        bytes32 base,\n        bytes32[] memory leaves\n    ) internal pure returns (bytes32 mergedLeaves) {\n        mergedLeaves = base;\n        for(uint i = 0; i < leaves.length; i++) {\n            mergedLeaves = keccak256(abi.encodePacked(mergedLeaves, leaves[i]));\n        }\n    }\n}\n",
  "sourcePath": "/home/wanseob/Projects/wilsonbeam/smt-rollup/contracts/SMT.sol",
  "ast": {
    "absolutePath": "/home/wanseob/Projects/wilsonbeam/smt-rollup/contracts/SMT.sol",
    "exportedSymbols": {
      "SMT256": [
        522
      ]
    },
    "id": 523,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 60,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:1"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@author Wilson Beam <wilsonbeam@protonmail.com>\n@title Sparse Merkle Tree for optimistic roll up\n * @dev Append only purpose Sparse Merkle Tree solidity library for optimistic roll up",
        "fullyImplemented": true,
        "id": 522,
        "linearizedBaseContracts": [
          522
        ],
        "name": "SMT256",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "functionSelector": "705b79c9",
            "id": 63,
            "name": "EXIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 522,
            "src": "329:98:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 61,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "329:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307862306234653037626235353932663364333832316232633133333162343336373633643762653535356366343532643663363833366637346435323031653835",
              "id": 62,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "361:66:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_79926643148668327857624003187591320613790941698683858885579621165613256285829_by_1",
                "typeString": "int_const 7992...(69 digits omitted)...5829"
              },
              "value": "0xb0b4e07bb5592f3d3821b2c1331b436763d7be555cf452d6c6836f74d5201e85"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "3fc4c054",
            "id": 66,
            "name": "NON_EXIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 522,
            "src": "527:102:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 64,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "527:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 65,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "563:66:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "SMT256.RollUp",
            "id": 77,
            "members": [
              {
                "constant": false,
                "id": 68,
                "name": "root",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "660:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 67,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "660:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 71,
                "name": "leaves",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "682:16:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                  "typeString": "bytes32[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 69,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "682:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 70,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "682:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                    "typeString": "bytes32[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 76,
                "name": "siblings",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "708:23:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                  "typeString": "bytes32[256][]"
                },
                "typeName": {
                  "baseType": {
                    "baseType": {
                      "id": 72,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "708:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 74,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 73,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "716:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "708:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "id": 75,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "708:14:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                    "typeString": "bytes32[256][]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RollUp",
            "nodeType": "StructDefinition",
            "scope": 522,
            "src": "636:102:1",
            "visibility": "public"
          },
          {
            "canonicalName": "SMT256.OPRU",
            "id": 84,
            "members": [
              {
                "constant": false,
                "id": 79,
                "name": "prev",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "766:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 78,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "766:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 81,
                "name": "next",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "788:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 80,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "788:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 83,
                "name": "mergedLeaves",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "810:20:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 82,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "810:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "OPRU",
            "nodeType": "StructDefinition",
            "scope": 522,
            "src": "744:93:1",
            "visibility": "public"
          },
          {
            "body": {
              "id": 104,
              "nodeType": "Block",
              "src": "983:64:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 98,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 86,
                        "src": "1012:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 99,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 88,
                        "src": "1018:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 100,
                        "name": "EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63,
                        "src": "1024:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 101,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 92,
                        "src": "1031:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      ],
                      "id": 97,
                      "name": "merkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 155,
                      "src": "1000:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                      }
                    },
                    "id": 102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1000:40:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 96,
                  "id": 103,
                  "nodeType": "Return",
                  "src": "993:47:1"
                }
              ]
            },
            "documentation": null,
            "id": 105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "inclusionProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 93,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 86,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "876:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 85,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 88,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "898:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 87,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "898:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 92,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "920:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 89,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "920:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 91,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 90,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "928:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "920:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "866:88:1"
            },
            "returnParameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 95,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "977:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 94,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "977:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "976:6:1"
            },
            "scope": 522,
            "src": "843:204:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 125,
              "nodeType": "Block",
              "src": "1196:68:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 119,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 107,
                        "src": "1225:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 120,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "1231:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 121,
                        "name": "NON_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "1237:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 122,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 113,
                        "src": "1248:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      ],
                      "id": 118,
                      "name": "merkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 155,
                      "src": "1213:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                      }
                    },
                    "id": 123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1213:44:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 117,
                  "id": 124,
                  "nodeType": "Return",
                  "src": "1206:51:1"
                }
              ]
            },
            "documentation": null,
            "id": 126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nonInclusionProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 107,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1089:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 106,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1089:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 109,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1111:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1111:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 113,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1133:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 110,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1133:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 112,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1141:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1133:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1079:88:1"
            },
            "returnParameters": {
              "id": 117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 116,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1190:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 115,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1190:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1189:6:1"
            },
            "scope": 522,
            "src": "1053:211:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 154,
              "nodeType": "Block",
              "src": "1430:115:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 143,
                              "name": "leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 130,
                              "src": "1462:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 144,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 132,
                              "src": "1468:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 145,
                              "name": "siblings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 136,
                              "src": "1475:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                "typeString": "bytes32[256] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                "typeString": "bytes32[256] memory"
                              }
                            ],
                            "id": 142,
                            "name": "calculateRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 233,
                            "src": "1448:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                            }
                          },
                          "id": 146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1448:36:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 147,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 128,
                          "src": "1488:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1448:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206d65726b6c652070726f6f66",
                        "id": 149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1494:22:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e0b6a3c3c2892dcc46975fd4747d409a6200f0f6763c4000ee1783c7e6b5410",
                          "typeString": "literal_string \"Invalid merkle proof\""
                        },
                        "value": "Invalid merkle proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e0b6a3c3c2892dcc46975fd4747d409a6200f0f6763c4000ee1783c7e6b5410",
                          "typeString": "literal_string \"Invalid merkle proof\""
                        }
                      ],
                      "id": 141,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "1440:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1440:77:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 151,
                  "nodeType": "ExpressionStatement",
                  "src": "1440:77:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1534:4:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 140,
                  "id": 153,
                  "nodeType": "Return",
                  "src": "1527:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 155,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "merkleProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 128,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1300:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1300:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 130,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1322:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 129,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1322:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 132,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1344:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 131,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1344:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 136,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1367:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 133,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1367:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 135,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 134,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1375:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1367:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:111:1"
            },
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1424:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1424:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1423:6:1"
            },
            "scope": 522,
            "src": "1270:275:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 232,
              "nodeType": "Block",
              "src": "1695:472:1",
              "statements": [
                {
                  "assignments": [
                    169
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 169,
                      "name": "cursor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 232,
                      "src": "1705:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 168,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1705:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 171,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 170,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 159,
                    "src": "1722:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1705:22:1"
                },
                {
                  "assignments": [
                    173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 173,
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 232,
                      "src": "1737:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 172,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1737:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 178,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 176,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 157,
                        "src": "1754:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1749:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 174,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1749:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1749:10:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1737:22:1"
                },
                {
                  "body": {
                    "id": 228,
                    "nodeType": "Block",
                    "src": "1814:324:1",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 192,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 190,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 173,
                              "src": "1832:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1839:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "1832:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1844:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1832:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 220,
                          "nodeType": "Block",
                          "src": "1976:122:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 208,
                                  "name": "cursor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 169,
                                  "src": "2026:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 212,
                                            "name": "siblings",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 163,
                                            "src": "2062:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                              "typeString": "bytes32[256] memory"
                                            }
                                          },
                                          "id": 214,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 213,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 180,
                                            "src": "2071:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "2062:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 215,
                                          "name": "cursor",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 169,
                                          "src": "2075:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 210,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 734,
                                          "src": "2045:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2045:16:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 216,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2045:37:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 209,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "2035:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 217,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2035:48:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2026:57:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 219,
                              "nodeType": "ExpressionStatement",
                              "src": "2026:57:1"
                            }
                          ]
                        },
                        "id": 221,
                        "nodeType": "IfStatement",
                        "src": "1828:270:1",
                        "trueBody": {
                          "id": 207,
                          "nodeType": "Block",
                          "src": "1847:123:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 205,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 195,
                                  "name": "cursor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 169,
                                  "src": "1898:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 199,
                                          "name": "cursor",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 169,
                                          "src": "1934:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 200,
                                            "name": "siblings",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 163,
                                            "src": "1942:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                              "typeString": "bytes32[256] memory"
                                            }
                                          },
                                          "id": 202,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 201,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 180,
                                            "src": "1951:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1942:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 197,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 734,
                                          "src": "1917:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 198,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "1917:16:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1917:37:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 196,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "1907:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1907:48:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "1898:57:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 206,
                              "nodeType": "ExpressionStatement",
                              "src": "1898:57:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 222,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 173,
                            "src": "2111:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 223,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 173,
                              "src": "2118:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">>",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2126:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2118:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2111:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 227,
                        "nodeType": "ExpressionStatement",
                        "src": "2111:16:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 183,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 180,
                      "src": "1788:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 184,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "1792:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      },
                      "id": 185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1792:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1788:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 229,
                  "initializationExpression": {
                    "assignments": [
                      180
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 180,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "1774:8:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 179,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 182,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1785:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1774:12:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1809:3:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 187,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 180,
                        "src": "1809:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 189,
                    "nodeType": "ExpressionStatement",
                    "src": "1809:3:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "1769:369:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 230,
                    "name": "cursor",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 169,
                    "src": "2154:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 167,
                  "id": 231,
                  "nodeType": "Return",
                  "src": "2147:13:1"
                }
              ]
            },
            "documentation": null,
            "id": 233,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateRoot",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 157,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1583:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1583:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1605:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1605:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1628:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 160,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1628:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 162,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1636:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1628:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1573:89:1"
            },
            "returnParameters": {
              "id": 167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 166,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1686:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 165,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1686:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1685:9:1"
            },
            "scope": 522,
            "src": "1551:616:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 270,
              "nodeType": "Block",
              "src": "2318:471:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 248,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 235,
                            "src": "2451:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 249,
                            "name": "leaf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 237,
                            "src": "2457:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 250,
                            "name": "siblings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "2463:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                              "typeString": "bytes32[256] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                              "typeString": "bytes32[256] memory"
                            }
                          ],
                          "id": 247,
                          "name": "nonInclusionProof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 126,
                          "src": "2433:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                          }
                        },
                        "id": 251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2433:39:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4661696c656420746f206275696c64207468652070726576696f757320726f6f74207573696e67206a746865206c65616620616e6420697473207369626c696e67",
                        "id": 252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2474:67:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_15fd2aa981552d346ae397fd6c4cdfd6999802f8fa7bfa93618288289c6229d9",
                          "typeString": "literal_string \"Failed to build the previous root using jthe leaf and its sibling\""
                        },
                        "value": "Failed to build the previous root using jthe leaf and its sibling"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_15fd2aa981552d346ae397fd6c4cdfd6999802f8fa7bfa93618288289c6229d9",
                          "typeString": "literal_string \"Failed to build the previous root using jthe leaf and its sibling\""
                        }
                      ],
                      "id": 246,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2425:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2425:117:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 254,
                  "nodeType": "ExpressionStatement",
                  "src": "2425:117:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 255,
                      "name": "nextRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 244,
                      "src": "2633:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 257,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 237,
                          "src": "2658:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 258,
                          "name": "EXIST",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63,
                          "src": "2664:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 259,
                          "name": "siblings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 241,
                          "src": "2671:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                            "typeString": "bytes32[256] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                            "typeString": "bytes32[256] memory"
                          }
                        ],
                        "id": 256,
                        "name": "calculateRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "2644:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2644:36:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2633:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 262,
                  "nodeType": "ExpressionStatement",
                  "src": "2633:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 264,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 235,
                          "src": "2739:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 265,
                          "name": "nextRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 244,
                          "src": "2747:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2739:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416c726561647920657869736974696e67206c656166",
                        "id": 267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2757:24:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_012649bc8d785a7bf7a6e685a54d873c7d4c869af1bb6a77c81858fb376e393b",
                          "typeString": "literal_string \"Already exisiting leaf\""
                        },
                        "value": "Already exisiting leaf"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_012649bc8d785a7bf7a6e685a54d873c7d4c869af1bb6a77c81858fb376e393b",
                          "typeString": "literal_string \"Already exisiting leaf\""
                        }
                      ],
                      "id": 263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2731:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2731:51:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 269,
                  "nodeType": "ExpressionStatement",
                  "src": "2731:51:1"
                }
              ]
            },
            "documentation": null,
            "id": 271,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 235,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2198:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 234,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 237,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2220:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 236,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2220:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2242:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 238,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2242:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 240,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2250:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2242:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2188:88:1"
            },
            "returnParameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 244,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2300:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 243,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2300:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2299:18:1"
            },
            "scope": 522,
            "src": "2173:616:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 324,
              "nodeType": "Block",
              "src": "2864:421:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 279,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "2922:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            },
                            "id": 280,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "leaves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 71,
                            "src": "2922:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2922:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 282,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "2945:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            },
                            "id": 283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "siblings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 76,
                            "src": "2945:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory",
                              "typeString": "bytes32[256] memory[] memory"
                            }
                          },
                          "id": 284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2945:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2922:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "426f74682061727261792073686f756c6420686176652073616d65206c656e677468",
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2968:36:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9df00b5fd4253dbe972ff0fdfd34b7cef7c00f2eff647ab928fe75a1841031a6",
                          "typeString": "literal_string \"Both array should have same length\""
                        },
                        "value": "Both array should have same length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9df00b5fd4253dbe972ff0fdfd34b7cef7c00f2eff647ab928fe75a1841031a6",
                          "typeString": "literal_string \"Both array should have same length\""
                        }
                      ],
                      "id": 278,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2914:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2914:91:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 288,
                  "nodeType": "ExpressionStatement",
                  "src": "2914:91:1"
                },
                {
                  "assignments": [
                    290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 290,
                      "name": "root",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 324,
                      "src": "3046:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 289,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3046:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 293,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 291,
                      "name": "proof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 273,
                      "src": "3061:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                        "typeString": "struct SMT256.RollUp memory"
                      }
                    },
                    "id": 292,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "root",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 68,
                    "src": "3061:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3046:25:1"
                },
                {
                  "body": {
                    "id": 320,
                    "nodeType": "Block",
                    "src": "3178:80:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 306,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 290,
                            "src": "3192:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 308,
                                "name": "root",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 290,
                                "src": "3206:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 309,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 273,
                                    "src": "3212:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                      "typeString": "struct SMT256.RollUp memory"
                                    }
                                  },
                                  "id": 310,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "leaves",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 71,
                                  "src": "3212:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                                    "typeString": "bytes32[] memory"
                                  }
                                },
                                "id": 312,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 311,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 295,
                                  "src": "3225:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3212:15:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 313,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 273,
                                    "src": "3229:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                      "typeString": "struct SMT256.RollUp memory"
                                    }
                                  },
                                  "id": 314,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "siblings",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 76,
                                  "src": "3229:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                },
                                "id": 316,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 315,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 295,
                                  "src": "3244:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3229:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$256_memory",
                                  "typeString": "bytes32[256] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$256_memory",
                                  "typeString": "bytes32[256] memory"
                                }
                              ],
                              "id": 307,
                              "name": "append",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 271,
                              "src": "3199:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                              }
                            },
                            "id": 317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3199:48:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3192:55:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 319,
                        "nodeType": "ExpressionStatement",
                        "src": "3192:55:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 298,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 295,
                      "src": "3147:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 299,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 273,
                          "src": "3151:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        },
                        "id": 300,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "leaves",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 71,
                        "src": "3151:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3151:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3147:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 321,
                  "initializationExpression": {
                    "assignments": [
                      295
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 295,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 321,
                        "src": "3135:6:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 294,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3135:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 297,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3144:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3135:10:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 304,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3172:4:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 303,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 295,
                        "src": "3172:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 305,
                    "nodeType": "ExpressionStatement",
                    "src": "3172:4:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "3130:128:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 322,
                    "name": "root",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 290,
                    "src": "3274:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 277,
                  "id": 323,
                  "nodeType": "Return",
                  "src": "3267:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 325,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 273,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 325,
                  "src": "2811:19:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                    "typeString": "struct SMT256.RollUp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 272,
                    "name": "RollUp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "2811:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RollUp_$77_storage_ptr",
                      "typeString": "struct SMT256.RollUp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2810:21:1"
            },
            "returnParameters": {
              "id": 277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 325,
                  "src": "2855:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 275,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2855:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2854:9:1"
            },
            "scope": 522,
            "src": "2795:490:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 350,
              "nodeType": "Block",
              "src": "3449:66:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 340,
                      "name": "nextRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 338,
                      "src": "3459:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 343,
                              "name": "root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 327,
                              "src": "3484:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 344,
                              "name": "leaves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3490:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 345,
                              "name": "siblings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 335,
                              "src": "3498:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                "typeString": "bytes32[256] memory[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                "typeString": "bytes32[256] memory[] memory"
                              }
                            ],
                            "id": 342,
                            "name": "RollUp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 77,
                            "src": "3477:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_RollUp_$77_storage_ptr_$",
                              "typeString": "type(struct SMT256.RollUp storage pointer)"
                            }
                          },
                          "id": 346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3477:30:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        ],
                        "id": 341,
                        "name": "rollUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          325,
                          351
                        ],
                        "referencedDeclaration": 325,
                        "src": "3470:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RollUp_$77_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (struct SMT256.RollUp memory) pure returns (bytes32)"
                        }
                      },
                      "id": 347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3470:38:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3459:49:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 349,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:49:1"
                }
              ]
            },
            "documentation": null,
            "id": 351,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 327,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3316:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 326,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3316:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 330,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3338:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 328,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3338:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 329,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3338:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 335,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3371:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 331,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3371:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 333,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3379:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "3371:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 334,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3371:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3306:101:1"
            },
            "returnParameters": {
              "id": 339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 338,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3431:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 337,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3430:18:1"
            },
            "scope": 522,
            "src": "3291:224:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 381,
              "nodeType": "Block",
              "src": "3698:124:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 369,
                          "name": "nextRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 355,
                          "src": "3716:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 372,
                                  "name": "root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 353,
                                  "src": "3742:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 373,
                                  "name": "leaves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 358,
                                  "src": "3748:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 374,
                                  "name": "siblings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 363,
                                  "src": "3756:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                ],
                                "id": 371,
                                "name": "RollUp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "3735:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_RollUp_$77_storage_ptr_$",
                                  "typeString": "type(struct SMT256.RollUp storage pointer)"
                                }
                              },
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3735:30:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            ],
                            "id": 370,
                            "name": "rollUp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              325,
                              351
                            ],
                            "referencedDeclaration": 325,
                            "src": "3728:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RollUp_$77_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct SMT256.RollUp memory) pure returns (bytes32)"
                            }
                          },
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3728:38:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3716:50:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4661696c656420746f20647269766520746865206e65787420726f6f742066726f6d207468652070726f6f66",
                        "id": 378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3768:46:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a15cfbf6288d2ac763c8dfe1bb74c23a58cafd0504cb1e789e94af6db2d9ed0",
                          "typeString": "literal_string \"Failed to drive the next root from the proof\""
                        },
                        "value": "Failed to drive the next root from the proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a15cfbf6288d2ac763c8dfe1bb74c23a58cafd0504cb1e789e94af6db2d9ed0",
                          "typeString": "literal_string \"Failed to drive the next root from the proof\""
                        }
                      ],
                      "id": 368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "3708:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3708:107:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 380,
                  "nodeType": "ExpressionStatement",
                  "src": "3708:107:1"
                }
              ]
            },
            "documentation": null,
            "id": 382,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUpProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3551:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3551:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 355,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3573:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 354,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3573:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 358,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3599:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 356,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3599:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 357,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3599:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 363,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3632:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 359,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3632:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 361,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3640:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "3632:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 362,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3632:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3541:127:1"
            },
            "returnParameters": {
              "id": 367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 366,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3692:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 365,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3692:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3691:6:1"
            },
            "scope": 522,
            "src": "3521:301:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 410,
              "nodeType": "Block",
              "src": "3908:115:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3918:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 391,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "prev",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 79,
                      "src": "3918:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "startingRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 384,
                      "src": "3930:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3918:24:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 394,
                  "nodeType": "ExpressionStatement",
                  "src": "3918:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 395,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3952:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 397,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "3952:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "startingRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 384,
                      "src": "3964:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3952:24:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "3952:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 401,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3986:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "mergedLeaves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 83,
                      "src": "3986:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4014:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4006:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 404,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4006:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4006:10:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3986:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 409,
                  "nodeType": "ExpressionStatement",
                  "src": "3986:30:1"
                }
              ]
            },
            "documentation": null,
            "id": 411,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "newOPRU",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "startingRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 411,
                  "src": "3845:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 383,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3845:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3844:22:1"
            },
            "returnParameters": {
              "id": 388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 387,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 411,
                  "src": "3890:16:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 386,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "3890:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3889:18:1"
            },
            "scope": 522,
            "src": "3828:195:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 445,
              "nodeType": "Block",
              "src": "4160:126:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 424,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "4170:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                          "typeString": "struct SMT256.OPRU storage pointer"
                        }
                      },
                      "id": 426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "4170:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 428,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "4189:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                              "typeString": "struct SMT256.OPRU storage pointer"
                            }
                          },
                          "id": 429,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "next",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 81,
                          "src": "4189:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 430,
                          "name": "leaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 416,
                          "src": "4200:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 431,
                          "name": "siblings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 421,
                          "src": "4208:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                            "typeString": "bytes32[256] memory[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          },
                          {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                            "typeString": "bytes32[256] memory[] memory"
                          }
                        ],
                        "id": 427,
                        "name": "rollUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          325,
                          351
                        ],
                        "referencedDeclaration": 351,
                        "src": "4182:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32[] memory,bytes32[256] memory[] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 432,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4182:35:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4170:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 434,
                  "nodeType": "ExpressionStatement",
                  "src": "4170:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 435,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "4227:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                          "typeString": "struct SMT256.OPRU storage pointer"
                        }
                      },
                      "id": 437,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "mergedLeaves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 83,
                      "src": "4227:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 439,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "4253:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                              "typeString": "struct SMT256.OPRU storage pointer"
                            }
                          },
                          "id": 440,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mergedLeaves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 83,
                          "src": "4253:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 441,
                          "name": "leaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 416,
                          "src": "4272:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        ],
                        "id": 438,
                        "name": "merge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "4247:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32[] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4247:32:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4227:52:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 444,
                  "nodeType": "ExpressionStatement",
                  "src": "4227:52:1"
                }
              ]
            },
            "documentation": null,
            "id": 446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "update",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 413,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4054:17:1",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 412,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "4054:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 416,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4081:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 414,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4081:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 415,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4081:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 421,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4114:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 417,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4114:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 419,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4122:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "4114:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 420,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4114:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4044:106:1"
            },
            "returnParameters": {
              "id": 423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4160:0:1"
            },
            "scope": 522,
            "src": "4029:257:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 480,
              "nodeType": "Block",
              "src": "4443:189:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 460,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 448,
                            "src": "4461:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                              "typeString": "struct SMT256.OPRU memory"
                            }
                          },
                          "id": 461,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "prev",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 79,
                          "src": "4461:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 462,
                          "name": "prev",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 450,
                          "src": "4474:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4461:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746172746564207769746820646966666572656e7420726f6f74",
                        "id": 464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4480:29:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fca6b3022baf43e688490d910b4878501aaca66dc57694c8c2931df2c0c1e333",
                          "typeString": "literal_string \"Started with different root\""
                        },
                        "value": "Started with different root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fca6b3022baf43e688490d910b4878501aaca66dc57694c8c2931df2c0c1e333",
                          "typeString": "literal_string \"Started with different root\""
                        }
                      ],
                      "id": 459,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "4453:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4453:57:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 466,
                  "nodeType": "ExpressionStatement",
                  "src": "4453:57:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 468,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 448,
                            "src": "4528:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                              "typeString": "struct SMT256.OPRU memory"
                            }
                          },
                          "id": 469,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mergedLeaves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 83,
                          "src": "4528:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 470,
                          "name": "mergedLeaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 454,
                          "src": "4549:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4528:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "417070656e64656420646966666572656e74206c6561766573",
                        "id": 472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4563:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d15ff5c4d33dae1406ae4e297673155fd2e073e43be151d739970347b93cab88",
                          "typeString": "literal_string \"Appended different leaves\""
                        },
                        "value": "Appended different leaves"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d15ff5c4d33dae1406ae4e297673155fd2e073e43be151d739970347b93cab88",
                          "typeString": "literal_string \"Appended different leaves\""
                        }
                      ],
                      "id": 467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "4520:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4520:71:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 474,
                  "nodeType": "ExpressionStatement",
                  "src": "4520:71:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 475,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "4608:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "4608:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 477,
                      "name": "next",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 452,
                      "src": "4621:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4608:17:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 458,
                  "id": 479,
                  "nodeType": "Return",
                  "src": "4601:24:1"
                }
              ]
            },
            "documentation": null,
            "id": 481,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 448,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4317:16:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 447,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "4317:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 450,
                  "name": "prev",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4343:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 449,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4343:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 452,
                  "name": "next",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4365:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 451,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4365:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 454,
                  "name": "mergedLeaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4387:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4387:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4307:106:1"
            },
            "returnParameters": {
              "id": 458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 457,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4437:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 456,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4437:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4436:6:1"
            },
            "scope": 522,
            "src": "4292:340:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 520,
              "nodeType": "Block",
              "src": "4759:177:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "mergedLeaves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 489,
                      "src": "4769:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 483,
                      "src": "4784:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4769:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "4769:19:1"
                },
                {
                  "body": {
                    "id": 518,
                    "nodeType": "Block",
                    "src": "4838:92:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 506,
                            "name": "mergedLeaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 489,
                            "src": "4852:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 510,
                                    "name": "mergedLeaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 489,
                                    "src": "4894:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 511,
                                      "name": "leaves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 486,
                                      "src": "4908:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 513,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 512,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 496,
                                      "src": "4915:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4908:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 508,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 734,
                                    "src": "4877:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4877:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4877:41:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 507,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "4867:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4867:52:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4852:67:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 517,
                        "nodeType": "ExpressionStatement",
                        "src": "4852:67:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 499,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "4814:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 500,
                        "name": "leaves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "4818:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4818:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4814:17:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 519,
                  "initializationExpression": {
                    "assignments": [
                      496
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 496,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "4802:6:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 495,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4802:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 498,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4811:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4802:10:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4833:3:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 503,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "4833:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 505,
                    "nodeType": "ExpressionStatement",
                    "src": "4833:3:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "4798:132:1"
                }
              ]
            },
            "documentation": null,
            "id": 521,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "merge",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 483,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4662:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 482,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4662:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 486,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4684:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 484,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4684:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 485,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4684:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4652:61:1"
            },
            "returnParameters": {
              "id": 490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 489,
                  "name": "mergedLeaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4737:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 488,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4736:22:1"
            },
            "scope": 522,
            "src": "4638:298:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 523,
        "src": "229:4709:1"
      }
    ],
    "src": "0:4939:1"
  },
  "legacyAST": {
    "absolutePath": "/home/wanseob/Projects/wilsonbeam/smt-rollup/contracts/SMT.sol",
    "exportedSymbols": {
      "SMT256": [
        522
      ]
    },
    "id": 523,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 60,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:1"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@author Wilson Beam <wilsonbeam@protonmail.com>\n@title Sparse Merkle Tree for optimistic roll up\n * @dev Append only purpose Sparse Merkle Tree solidity library for optimistic roll up",
        "fullyImplemented": true,
        "id": 522,
        "linearizedBaseContracts": [
          522
        ],
        "name": "SMT256",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "functionSelector": "705b79c9",
            "id": 63,
            "name": "EXIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 522,
            "src": "329:98:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 61,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "329:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307862306234653037626235353932663364333832316232633133333162343336373633643762653535356366343532643663363833366637346435323031653835",
              "id": 62,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "361:66:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_79926643148668327857624003187591320613790941698683858885579621165613256285829_by_1",
                "typeString": "int_const 7992...(69 digits omitted)...5829"
              },
              "value": "0xb0b4e07bb5592f3d3821b2c1331b436763d7be555cf452d6c6836f74d5201e85"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "3fc4c054",
            "id": 66,
            "name": "NON_EXIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 522,
            "src": "527:102:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 64,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "527:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307832393064656364393534386236326138643630333435613938383338366663383462613662633935343834303038663633363266393331363065663365353633",
              "id": 65,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "563:66:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18569430475105882587588266137607568536673111973893317399460219858819262702947_by_1",
                "typeString": "int_const 1856...(69 digits omitted)...2947"
              },
              "value": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "SMT256.RollUp",
            "id": 77,
            "members": [
              {
                "constant": false,
                "id": 68,
                "name": "root",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "660:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 67,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "660:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 71,
                "name": "leaves",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "682:16:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                  "typeString": "bytes32[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 69,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "682:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 70,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "682:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                    "typeString": "bytes32[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 76,
                "name": "siblings",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 77,
                "src": "708:23:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                  "typeString": "bytes32[256][]"
                },
                "typeName": {
                  "baseType": {
                    "baseType": {
                      "id": 72,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "708:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 74,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 73,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "716:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "708:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "id": 75,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "708:14:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                    "typeString": "bytes32[256][]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RollUp",
            "nodeType": "StructDefinition",
            "scope": 522,
            "src": "636:102:1",
            "visibility": "public"
          },
          {
            "canonicalName": "SMT256.OPRU",
            "id": 84,
            "members": [
              {
                "constant": false,
                "id": 79,
                "name": "prev",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "766:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 78,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "766:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 81,
                "name": "next",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "788:12:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 80,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "788:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 83,
                "name": "mergedLeaves",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 84,
                "src": "810:20:1",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 82,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "810:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "OPRU",
            "nodeType": "StructDefinition",
            "scope": 522,
            "src": "744:93:1",
            "visibility": "public"
          },
          {
            "body": {
              "id": 104,
              "nodeType": "Block",
              "src": "983:64:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 98,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 86,
                        "src": "1012:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 99,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 88,
                        "src": "1018:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 100,
                        "name": "EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63,
                        "src": "1024:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 101,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 92,
                        "src": "1031:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      ],
                      "id": 97,
                      "name": "merkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 155,
                      "src": "1000:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                      }
                    },
                    "id": 102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1000:40:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 96,
                  "id": 103,
                  "nodeType": "Return",
                  "src": "993:47:1"
                }
              ]
            },
            "documentation": null,
            "id": 105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "inclusionProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 93,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 86,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "876:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 85,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 88,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "898:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 87,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "898:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 92,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "920:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 89,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "920:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 91,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 90,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "928:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "920:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "866:88:1"
            },
            "returnParameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 95,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 105,
                  "src": "977:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 94,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "977:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "976:6:1"
            },
            "scope": 522,
            "src": "843:204:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 125,
              "nodeType": "Block",
              "src": "1196:68:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 119,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 107,
                        "src": "1225:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 120,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "1231:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 121,
                        "name": "NON_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66,
                        "src": "1237:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 122,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 113,
                        "src": "1248:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      ],
                      "id": 118,
                      "name": "merkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 155,
                      "src": "1213:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                      }
                    },
                    "id": 123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1213:44:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 117,
                  "id": 124,
                  "nodeType": "Return",
                  "src": "1206:51:1"
                }
              ]
            },
            "documentation": null,
            "id": 126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nonInclusionProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 107,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1089:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 106,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1089:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 109,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1111:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1111:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 113,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1133:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 110,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1133:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 112,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1141:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1133:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1079:88:1"
            },
            "returnParameters": {
              "id": 117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 116,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 126,
                  "src": "1190:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 115,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1190:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1189:6:1"
            },
            "scope": 522,
            "src": "1053:211:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 154,
              "nodeType": "Block",
              "src": "1430:115:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 143,
                              "name": "leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 130,
                              "src": "1462:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 144,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 132,
                              "src": "1468:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 145,
                              "name": "siblings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 136,
                              "src": "1475:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                "typeString": "bytes32[256] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                "typeString": "bytes32[256] memory"
                              }
                            ],
                            "id": 142,
                            "name": "calculateRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 233,
                            "src": "1448:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                            }
                          },
                          "id": 146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1448:36:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 147,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 128,
                          "src": "1488:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1448:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206d65726b6c652070726f6f66",
                        "id": 149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1494:22:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e0b6a3c3c2892dcc46975fd4747d409a6200f0f6763c4000ee1783c7e6b5410",
                          "typeString": "literal_string \"Invalid merkle proof\""
                        },
                        "value": "Invalid merkle proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e0b6a3c3c2892dcc46975fd4747d409a6200f0f6763c4000ee1783c7e6b5410",
                          "typeString": "literal_string \"Invalid merkle proof\""
                        }
                      ],
                      "id": 141,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "1440:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1440:77:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 151,
                  "nodeType": "ExpressionStatement",
                  "src": "1440:77:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1534:4:1",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 140,
                  "id": 153,
                  "nodeType": "Return",
                  "src": "1527:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 155,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "merkleProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 137,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 128,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1300:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 127,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1300:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 130,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1322:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 129,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1322:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 132,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1344:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 131,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1344:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 136,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1367:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 133,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1367:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 135,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 134,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1375:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1367:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1290:111:1"
            },
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 155,
                  "src": "1424:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1424:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1423:6:1"
            },
            "scope": 522,
            "src": "1270:275:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 232,
              "nodeType": "Block",
              "src": "1695:472:1",
              "statements": [
                {
                  "assignments": [
                    169
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 169,
                      "name": "cursor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 232,
                      "src": "1705:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 168,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1705:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 171,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 170,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 159,
                    "src": "1722:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1705:22:1"
                },
                {
                  "assignments": [
                    173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 173,
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 232,
                      "src": "1737:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 172,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1737:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 178,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 176,
                        "name": "leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 157,
                        "src": "1754:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1749:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 174,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1749:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1749:10:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1737:22:1"
                },
                {
                  "body": {
                    "id": 228,
                    "nodeType": "Block",
                    "src": "1814:324:1",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 192,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 190,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 173,
                              "src": "1832:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1839:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "1832:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1844:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1832:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 220,
                          "nodeType": "Block",
                          "src": "1976:122:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 208,
                                  "name": "cursor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 169,
                                  "src": "2026:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 212,
                                            "name": "siblings",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 163,
                                            "src": "2062:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                              "typeString": "bytes32[256] memory"
                                            }
                                          },
                                          "id": 214,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 213,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 180,
                                            "src": "2071:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "2062:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 215,
                                          "name": "cursor",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 169,
                                          "src": "2075:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 210,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 734,
                                          "src": "2045:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2045:16:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 216,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2045:37:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 209,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "2035:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 217,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2035:48:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2026:57:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 219,
                              "nodeType": "ExpressionStatement",
                              "src": "2026:57:1"
                            }
                          ]
                        },
                        "id": 221,
                        "nodeType": "IfStatement",
                        "src": "1828:270:1",
                        "trueBody": {
                          "id": 207,
                          "nodeType": "Block",
                          "src": "1847:123:1",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 205,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 195,
                                  "name": "cursor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 169,
                                  "src": "1898:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 199,
                                          "name": "cursor",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 169,
                                          "src": "1934:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 200,
                                            "name": "siblings",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 163,
                                            "src": "1942:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                                              "typeString": "bytes32[256] memory"
                                            }
                                          },
                                          "id": 202,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 201,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 180,
                                            "src": "1951:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1942:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 197,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 734,
                                          "src": "1917:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 198,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "1917:16:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1917:37:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 196,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "1907:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1907:48:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "1898:57:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 206,
                              "nodeType": "ExpressionStatement",
                              "src": "1898:57:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 222,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 173,
                            "src": "2111:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 223,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 173,
                              "src": "2118:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">>",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2126:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2118:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2111:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 227,
                        "nodeType": "ExpressionStatement",
                        "src": "2111:16:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 183,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 180,
                      "src": "1788:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 184,
                        "name": "siblings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 163,
                        "src": "1792:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                          "typeString": "bytes32[256] memory"
                        }
                      },
                      "id": 185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1792:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1788:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 229,
                  "initializationExpression": {
                    "assignments": [
                      180
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 180,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "1774:8:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 179,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1774:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 182,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1785:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1774:12:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1809:3:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 187,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 180,
                        "src": "1809:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 189,
                    "nodeType": "ExpressionStatement",
                    "src": "1809:3:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "1769:369:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 230,
                    "name": "cursor",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 169,
                    "src": "2154:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 167,
                  "id": 231,
                  "nodeType": "Return",
                  "src": "2147:13:1"
                }
              ]
            },
            "documentation": null,
            "id": 233,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateRoot",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 157,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1583:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1583:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1605:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1605:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 163,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1628:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 160,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1628:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 162,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1636:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "1628:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1573:89:1"
            },
            "returnParameters": {
              "id": 167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 166,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 233,
                  "src": "1686:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 165,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1686:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1685:9:1"
            },
            "scope": 522,
            "src": "1551:616:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 270,
              "nodeType": "Block",
              "src": "2318:471:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 248,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 235,
                            "src": "2451:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 249,
                            "name": "leaf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 237,
                            "src": "2457:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 250,
                            "name": "siblings",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "2463:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                              "typeString": "bytes32[256] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                              "typeString": "bytes32[256] memory"
                            }
                          ],
                          "id": 247,
                          "name": "nonInclusionProof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 126,
                          "src": "2433:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bool)"
                          }
                        },
                        "id": 251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2433:39:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4661696c656420746f206275696c64207468652070726576696f757320726f6f74207573696e67206a746865206c65616620616e6420697473207369626c696e67",
                        "id": 252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2474:67:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_15fd2aa981552d346ae397fd6c4cdfd6999802f8fa7bfa93618288289c6229d9",
                          "typeString": "literal_string \"Failed to build the previous root using jthe leaf and its sibling\""
                        },
                        "value": "Failed to build the previous root using jthe leaf and its sibling"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_15fd2aa981552d346ae397fd6c4cdfd6999802f8fa7bfa93618288289c6229d9",
                          "typeString": "literal_string \"Failed to build the previous root using jthe leaf and its sibling\""
                        }
                      ],
                      "id": 246,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2425:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2425:117:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 254,
                  "nodeType": "ExpressionStatement",
                  "src": "2425:117:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 255,
                      "name": "nextRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 244,
                      "src": "2633:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 257,
                          "name": "leaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 237,
                          "src": "2658:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 258,
                          "name": "EXIST",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63,
                          "src": "2664:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 259,
                          "name": "siblings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 241,
                          "src": "2671:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                            "typeString": "bytes32[256] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                            "typeString": "bytes32[256] memory"
                          }
                        ],
                        "id": 256,
                        "name": "calculateRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 233,
                        "src": "2644:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2644:36:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2633:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 262,
                  "nodeType": "ExpressionStatement",
                  "src": "2633:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 264,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 235,
                          "src": "2739:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 265,
                          "name": "nextRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 244,
                          "src": "2747:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2739:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416c726561647920657869736974696e67206c656166",
                        "id": 267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2757:24:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_012649bc8d785a7bf7a6e685a54d873c7d4c869af1bb6a77c81858fb376e393b",
                          "typeString": "literal_string \"Already exisiting leaf\""
                        },
                        "value": "Already exisiting leaf"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_012649bc8d785a7bf7a6e685a54d873c7d4c869af1bb6a77c81858fb376e393b",
                          "typeString": "literal_string \"Already exisiting leaf\""
                        }
                      ],
                      "id": 263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2731:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2731:51:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 269,
                  "nodeType": "ExpressionStatement",
                  "src": "2731:51:1"
                }
              ]
            },
            "documentation": null,
            "id": 271,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "append",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 235,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2198:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 234,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 237,
                  "name": "leaf",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2220:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 236,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2220:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2242:28:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$256_memory_ptr",
                    "typeString": "bytes32[256]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 238,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2242:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 240,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "323536",
                      "id": 239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2250:3:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2242:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                      "typeString": "bytes32[256]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2188:88:1"
            },
            "returnParameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 244,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 271,
                  "src": "2300:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 243,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2300:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2299:18:1"
            },
            "scope": 522,
            "src": "2173:616:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 324,
              "nodeType": "Block",
              "src": "2864:421:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 279,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "2922:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            },
                            "id": 280,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "leaves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 71,
                            "src": "2922:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2922:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 282,
                              "name": "proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "2945:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            },
                            "id": 283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "siblings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 76,
                            "src": "2945:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory",
                              "typeString": "bytes32[256] memory[] memory"
                            }
                          },
                          "id": 284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2945:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2922:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "426f74682061727261792073686f756c6420686176652073616d65206c656e677468",
                        "id": 286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2968:36:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9df00b5fd4253dbe972ff0fdfd34b7cef7c00f2eff647ab928fe75a1841031a6",
                          "typeString": "literal_string \"Both array should have same length\""
                        },
                        "value": "Both array should have same length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9df00b5fd4253dbe972ff0fdfd34b7cef7c00f2eff647ab928fe75a1841031a6",
                          "typeString": "literal_string \"Both array should have same length\""
                        }
                      ],
                      "id": 278,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "2914:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2914:91:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 288,
                  "nodeType": "ExpressionStatement",
                  "src": "2914:91:1"
                },
                {
                  "assignments": [
                    290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 290,
                      "name": "root",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 324,
                      "src": "3046:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 289,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3046:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 293,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 291,
                      "name": "proof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 273,
                      "src": "3061:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                        "typeString": "struct SMT256.RollUp memory"
                      }
                    },
                    "id": 292,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "root",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 68,
                    "src": "3061:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3046:25:1"
                },
                {
                  "body": {
                    "id": 320,
                    "nodeType": "Block",
                    "src": "3178:80:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 306,
                            "name": "root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 290,
                            "src": "3192:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 308,
                                "name": "root",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 290,
                                "src": "3206:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 309,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 273,
                                    "src": "3212:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                      "typeString": "struct SMT256.RollUp memory"
                                    }
                                  },
                                  "id": 310,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "leaves",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 71,
                                  "src": "3212:12:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                                    "typeString": "bytes32[] memory"
                                  }
                                },
                                "id": 312,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 311,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 295,
                                  "src": "3225:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3212:15:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 313,
                                    "name": "proof",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 273,
                                    "src": "3229:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                                      "typeString": "struct SMT256.RollUp memory"
                                    }
                                  },
                                  "id": 314,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "siblings",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 76,
                                  "src": "3229:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                },
                                "id": 316,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 315,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 295,
                                  "src": "3244:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3229:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$256_memory",
                                  "typeString": "bytes32[256] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$256_memory",
                                  "typeString": "bytes32[256] memory"
                                }
                              ],
                              "id": 307,
                              "name": "append",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 271,
                              "src": "3199:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$256_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes32,bytes32,bytes32[256] memory) pure returns (bytes32)"
                              }
                            },
                            "id": 317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3199:48:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3192:55:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 319,
                        "nodeType": "ExpressionStatement",
                        "src": "3192:55:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 298,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 295,
                      "src": "3147:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 299,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 273,
                          "src": "3151:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        },
                        "id": 300,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "leaves",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 71,
                        "src": "3151:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3151:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3147:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 321,
                  "initializationExpression": {
                    "assignments": [
                      295
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 295,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 321,
                        "src": "3135:6:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 294,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3135:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 297,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3144:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3135:10:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 304,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3172:4:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 303,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 295,
                        "src": "3172:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 305,
                    "nodeType": "ExpressionStatement",
                    "src": "3172:4:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "3130:128:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 322,
                    "name": "root",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 290,
                    "src": "3274:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 277,
                  "id": 323,
                  "nodeType": "Return",
                  "src": "3267:11:1"
                }
              ]
            },
            "documentation": null,
            "id": 325,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 273,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 325,
                  "src": "2811:19:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RollUp_$77_memory_ptr",
                    "typeString": "struct SMT256.RollUp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 272,
                    "name": "RollUp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "2811:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RollUp_$77_storage_ptr",
                      "typeString": "struct SMT256.RollUp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2810:21:1"
            },
            "returnParameters": {
              "id": 277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 325,
                  "src": "2855:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 275,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2855:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2854:9:1"
            },
            "scope": 522,
            "src": "2795:490:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 350,
              "nodeType": "Block",
              "src": "3449:66:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 340,
                      "name": "nextRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 338,
                      "src": "3459:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 343,
                              "name": "root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 327,
                              "src": "3484:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 344,
                              "name": "leaves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3490:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 345,
                              "name": "siblings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 335,
                              "src": "3498:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                "typeString": "bytes32[256] memory[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                "typeString": "bytes32[256] memory[] memory"
                              }
                            ],
                            "id": 342,
                            "name": "RollUp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 77,
                            "src": "3477:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_RollUp_$77_storage_ptr_$",
                              "typeString": "type(struct SMT256.RollUp storage pointer)"
                            }
                          },
                          "id": 346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3477:30:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_RollUp_$77_memory",
                            "typeString": "struct SMT256.RollUp memory"
                          }
                        ],
                        "id": 341,
                        "name": "rollUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          325,
                          351
                        ],
                        "referencedDeclaration": 325,
                        "src": "3470:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_RollUp_$77_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (struct SMT256.RollUp memory) pure returns (bytes32)"
                        }
                      },
                      "id": 347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3470:38:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3459:49:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 349,
                  "nodeType": "ExpressionStatement",
                  "src": "3459:49:1"
                }
              ]
            },
            "documentation": null,
            "id": 351,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 327,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3316:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 326,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3316:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 330,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3338:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 328,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3338:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 329,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3338:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 335,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3371:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 331,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3371:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 333,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3379:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "3371:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 334,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3371:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3306:101:1"
            },
            "returnParameters": {
              "id": 339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 338,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 351,
                  "src": "3431:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 337,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3430:18:1"
            },
            "scope": 522,
            "src": "3291:224:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 381,
              "nodeType": "Block",
              "src": "3698:124:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 369,
                          "name": "nextRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 355,
                          "src": "3716:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 372,
                                  "name": "root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 353,
                                  "src": "3742:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 373,
                                  "name": "leaves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 358,
                                  "src": "3748:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 374,
                                  "name": "siblings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 363,
                                  "src": "3756:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                                    "typeString": "bytes32[256] memory[] memory"
                                  }
                                ],
                                "id": 371,
                                "name": "RollUp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "3735:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_RollUp_$77_storage_ptr_$",
                                  "typeString": "type(struct SMT256.RollUp storage pointer)"
                                }
                              },
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3735:30:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RollUp_$77_memory",
                                "typeString": "struct SMT256.RollUp memory"
                              }
                            ],
                            "id": 370,
                            "name": "rollUp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              325,
                              351
                            ],
                            "referencedDeclaration": 325,
                            "src": "3728:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_RollUp_$77_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (struct SMT256.RollUp memory) pure returns (bytes32)"
                            }
                          },
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3728:38:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3716:50:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4661696c656420746f20647269766520746865206e65787420726f6f742066726f6d207468652070726f6f66",
                        "id": 378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3768:46:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a15cfbf6288d2ac763c8dfe1bb74c23a58cafd0504cb1e789e94af6db2d9ed0",
                          "typeString": "literal_string \"Failed to drive the next root from the proof\""
                        },
                        "value": "Failed to drive the next root from the proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a15cfbf6288d2ac763c8dfe1bb74c23a58cafd0504cb1e789e94af6db2d9ed0",
                          "typeString": "literal_string \"Failed to drive the next root from the proof\""
                        }
                      ],
                      "id": 368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "3708:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3708:107:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 380,
                  "nodeType": "ExpressionStatement",
                  "src": "3708:107:1"
                }
              ]
            },
            "documentation": null,
            "id": 382,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rollUpProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3551:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3551:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 355,
                  "name": "nextRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3573:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 354,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3573:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 358,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3599:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 356,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3599:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 357,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3599:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 363,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3632:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 359,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3632:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 361,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 360,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3640:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "3632:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 362,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3632:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3541:127:1"
            },
            "returnParameters": {
              "id": 367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 366,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 382,
                  "src": "3692:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 365,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3692:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3691:6:1"
            },
            "scope": 522,
            "src": "3521:301:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 410,
              "nodeType": "Block",
              "src": "3908:115:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3918:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 391,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "prev",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 79,
                      "src": "3918:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "startingRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 384,
                      "src": "3930:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3918:24:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 394,
                  "nodeType": "ExpressionStatement",
                  "src": "3918:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 395,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3952:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 397,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "3952:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "startingRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 384,
                      "src": "3964:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3952:24:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "3952:24:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 401,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 387,
                        "src": "3986:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "mergedLeaves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 83,
                      "src": "3986:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4014:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4006:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 404,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4006:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4006:10:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3986:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 409,
                  "nodeType": "ExpressionStatement",
                  "src": "3986:30:1"
                }
              ]
            },
            "documentation": null,
            "id": 411,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "newOPRU",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "startingRoot",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 411,
                  "src": "3845:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 383,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3845:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3844:22:1"
            },
            "returnParameters": {
              "id": 388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 387,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 411,
                  "src": "3890:16:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 386,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "3890:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3889:18:1"
            },
            "scope": 522,
            "src": "3828:195:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 445,
              "nodeType": "Block",
              "src": "4160:126:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 424,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "4170:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                          "typeString": "struct SMT256.OPRU storage pointer"
                        }
                      },
                      "id": 426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "4170:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 428,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "4189:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                              "typeString": "struct SMT256.OPRU storage pointer"
                            }
                          },
                          "id": 429,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "next",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 81,
                          "src": "4189:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 430,
                          "name": "leaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 416,
                          "src": "4200:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 431,
                          "name": "siblings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 421,
                          "src": "4208:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                            "typeString": "bytes32[256] memory[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          },
                          {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                            "typeString": "bytes32[256] memory[] memory"
                          }
                        ],
                        "id": 427,
                        "name": "rollUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          325,
                          351
                        ],
                        "referencedDeclaration": 351,
                        "src": "4182:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32[] memory,bytes32[256] memory[] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 432,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4182:35:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4170:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 434,
                  "nodeType": "ExpressionStatement",
                  "src": "4170:47:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 435,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 413,
                        "src": "4227:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                          "typeString": "struct SMT256.OPRU storage pointer"
                        }
                      },
                      "id": 437,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "mergedLeaves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 83,
                      "src": "4227:17:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 439,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "4253:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                              "typeString": "struct SMT256.OPRU storage pointer"
                            }
                          },
                          "id": 440,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mergedLeaves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 83,
                          "src": "4253:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 441,
                          "name": "leaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 416,
                          "src": "4272:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        ],
                        "id": 438,
                        "name": "merge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 521,
                        "src": "4247:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32,bytes32[] memory) pure returns (bytes32)"
                        }
                      },
                      "id": 442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4247:32:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4227:52:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 444,
                  "nodeType": "ExpressionStatement",
                  "src": "4227:52:1"
                }
              ]
            },
            "documentation": null,
            "id": 446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "update",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 413,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4054:17:1",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 412,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "4054:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 416,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4081:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 414,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4081:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 415,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4081:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 421,
                  "name": "siblings",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 446,
                  "src": "4114:30:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_memory_$dyn_memory_ptr",
                    "typeString": "bytes32[256][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 417,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4114:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 419,
                      "length": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4122:3:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "ArrayTypeName",
                      "src": "4114:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$256_storage_ptr",
                        "typeString": "bytes32[256]"
                      }
                    },
                    "id": 420,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4114:14:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$256_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[256][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4044:106:1"
            },
            "returnParameters": {
              "id": 423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4160:0:1"
            },
            "scope": 522,
            "src": "4029:257:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 480,
              "nodeType": "Block",
              "src": "4443:189:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 460,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 448,
                            "src": "4461:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                              "typeString": "struct SMT256.OPRU memory"
                            }
                          },
                          "id": 461,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "prev",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 79,
                          "src": "4461:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 462,
                          "name": "prev",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 450,
                          "src": "4474:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4461:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746172746564207769746820646966666572656e7420726f6f74",
                        "id": 464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4480:29:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fca6b3022baf43e688490d910b4878501aaca66dc57694c8c2931df2c0c1e333",
                          "typeString": "literal_string \"Started with different root\""
                        },
                        "value": "Started with different root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fca6b3022baf43e688490d910b4878501aaca66dc57694c8c2931df2c0c1e333",
                          "typeString": "literal_string \"Started with different root\""
                        }
                      ],
                      "id": 459,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "4453:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4453:57:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 466,
                  "nodeType": "ExpressionStatement",
                  "src": "4453:57:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 468,
                            "name": "opru",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 448,
                            "src": "4528:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                              "typeString": "struct SMT256.OPRU memory"
                            }
                          },
                          "id": 469,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mergedLeaves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 83,
                          "src": "4528:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 470,
                          "name": "mergedLeaves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 454,
                          "src": "4549:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4528:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "417070656e64656420646966666572656e74206c6561766573",
                        "id": 472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4563:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d15ff5c4d33dae1406ae4e297673155fd2e073e43be151d739970347b93cab88",
                          "typeString": "literal_string \"Appended different leaves\""
                        },
                        "value": "Appended different leaves"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d15ff5c4d33dae1406ae4e297673155fd2e073e43be151d739970347b93cab88",
                          "typeString": "literal_string \"Appended different leaves\""
                        }
                      ],
                      "id": 467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        750,
                        751
                      ],
                      "referencedDeclaration": 751,
                      "src": "4520:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4520:71:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 474,
                  "nodeType": "ExpressionStatement",
                  "src": "4520:71:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 475,
                        "name": "opru",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 448,
                        "src": "4608:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                          "typeString": "struct SMT256.OPRU memory"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "next",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 81,
                      "src": "4608:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 477,
                      "name": "next",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 452,
                      "src": "4621:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4608:17:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 458,
                  "id": 479,
                  "nodeType": "Return",
                  "src": "4601:24:1"
                }
              ]
            },
            "documentation": null,
            "id": 481,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 448,
                  "name": "opru",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4317:16:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OPRU_$84_memory_ptr",
                    "typeString": "struct SMT256.OPRU"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 447,
                    "name": "OPRU",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 84,
                    "src": "4317:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OPRU_$84_storage_ptr",
                      "typeString": "struct SMT256.OPRU"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 450,
                  "name": "prev",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4343:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 449,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4343:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 452,
                  "name": "next",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4365:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 451,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4365:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 454,
                  "name": "mergedLeaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4387:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4387:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4307:106:1"
            },
            "returnParameters": {
              "id": 458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 457,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 481,
                  "src": "4437:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 456,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4437:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4436:6:1"
            },
            "scope": 522,
            "src": "4292:340:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 520,
              "nodeType": "Block",
              "src": "4759:177:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "mergedLeaves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 489,
                      "src": "4769:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 483,
                      "src": "4784:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4769:19:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "4769:19:1"
                },
                {
                  "body": {
                    "id": 518,
                    "nodeType": "Block",
                    "src": "4838:92:1",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 506,
                            "name": "mergedLeaves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 489,
                            "src": "4852:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 510,
                                    "name": "mergedLeaves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 489,
                                    "src": "4894:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 511,
                                      "name": "leaves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 486,
                                      "src": "4908:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                        "typeString": "bytes32[] memory"
                                      }
                                    },
                                    "id": 513,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 512,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 496,
                                      "src": "4915:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4908:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 508,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 734,
                                    "src": "4877:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4877:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4877:41:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 507,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "4867:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4867:52:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4852:67:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 517,
                        "nodeType": "ExpressionStatement",
                        "src": "4852:67:1"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 499,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "4814:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 500,
                        "name": "leaves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 486,
                        "src": "4818:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4818:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4814:17:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 519,
                  "initializationExpression": {
                    "assignments": [
                      496
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 496,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "4802:6:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 495,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4802:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 498,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4811:1:1",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4802:10:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4833:3:1",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 503,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "4833:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 505,
                    "nodeType": "ExpressionStatement",
                    "src": "4833:3:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "4798:132:1"
                }
              ]
            },
            "documentation": null,
            "id": 521,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "merge",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 483,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4662:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 482,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4662:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 486,
                  "name": "leaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4684:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 484,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4684:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 485,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4684:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4652:61:1"
            },
            "returnParameters": {
              "id": 490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 489,
                  "name": "mergedLeaves",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 521,
                  "src": "4737:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 488,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4737:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4736:22:1"
            },
            "scope": 522,
            "src": "4638:298:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 523,
        "src": "229:4709:1"
      }
    ],
    "src": "0:4939:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.0+commit.26b70077.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.20",
  "updatedAt": "2020-01-30T16:58:37.957Z",
  "devdoc": {
    "author": "Wilson Beam <wilsonbeam@protonmail.com>",
    "details": "Append only purpose Sparse Merkle Tree solidity library for optimistic roll up",
    "methods": {},
    "title": "Sparse Merkle Tree for optimistic roll up"
  },
  "userdoc": {
    "methods": {}
  }
}