{
  "abi": [
    {
      "inputs": [],
      "name": "NULL",
      "outputs": [
        {
          "internalType": "bytes29",
          "name": "",
          "type": "bytes29"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a4610025600b82828239805160001a60731461001857fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b603e6073565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092168252519081900360200190f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008156fea164736f6c6343000706000a",
    "sourceMap": "122:31415:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b603e6073565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092168252519081900360200190f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008156fea164736f6c6343000706000a",
    "sourceMap": "122:31415:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;2669:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "NULL()": "f26be3fc"
  },
  "ast": {
    "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
    "id": 25622,
    "exportedSymbols": {
      "SafeMath": [
        24170
      ],
      "TypedMemView": [
        25621
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:31492:16",
    "nodes": [
      {
        "id": 24172,
        "nodeType": "PragmaDirective",
        "src": "46:32:16",
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 24174,
        "nodeType": "ImportDirective",
        "src": "80:40:16",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/SafeMath.sol",
        "file": "./SafeMath.sol",
        "scope": 25622,
        "sourceUnit": 24171,
        "symbolAliases": [
          {
            "foreign": {
              "id": 24173,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "88:8:16",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25621,
        "nodeType": "ContractDefinition",
        "src": "122:31415:16",
        "nodes": [
          {
            "id": 24177,
            "nodeType": "UsingForDirective",
            "src": "149:27:16",
            "libraryName": {
              "id": 24175,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24170,
              "src": "155:8:16",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$24170",
                "typeString": "library SafeMath"
              }
            },
            "typeName": {
              "id": 24176,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "168:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 24180,
            "nodeType": "VariableDeclaration",
            "src": "2669:94:16",
            "constant": true,
            "functionSelector": "f26be3fc",
            "mutability": "constant",
            "name": "NULL",
            "scope": 25621,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes29",
              "typeString": "bytes29"
            },
            "typeName": {
              "id": 24178,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "2669:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            },
            "value": {
              "hexValue": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
              "id": 24179,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "hexString",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2700:63:16",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7894ac7152936831bdd146bb58cc79cdde7fa746d05d79c2b1dea4074b875c40",
                "typeString": "literal_string hex\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\""
              }
            },
            "visibility": "public"
          },
          {
            "id": 24183,
            "nodeType": "VariableDeclaration",
            "src": "2769:57:16",
            "constant": true,
            "mutability": "constant",
            "name": "LOW_12_MASK",
            "scope": 25621,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 24181,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2769:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3078666666666666666666666666666666666666666666666666",
              "id": 24182,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2800:26:16",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_79228162514264337593543950335_by_1",
                "typeString": "int_const 79228162514264337593543950335"
              },
              "value": "0xffffffffffffffffffffffff"
            },
            "visibility": "internal"
          },
          {
            "id": 24186,
            "nodeType": "VariableDeclaration",
            "src": "2832:32:16",
            "constant": true,
            "mutability": "constant",
            "name": "TWELVE_BYTES",
            "scope": 25621,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 24184,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2832:5:16",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "3936",
              "id": 24185,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2862:2:16",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_96_by_1",
                "typeString": "int_const 96"
              },
              "value": "96"
            },
            "visibility": "internal"
          },
          {
            "id": 24313,
            "nodeType": "FunctionDefinition",
            "src": "3073:1041:16",
            "body": {
              "id": 24312,
              "nodeType": "Block",
              "src": "3137:977:16",
              "statements": [
                {
                  "assignments": [
                    24195
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24195,
                      "mutability": "mutable",
                      "name": "_nibble",
                      "nodeType": "VariableDeclaration",
                      "scope": 24312,
                      "src": "3270:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 24194,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "3270:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24199,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24196,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24189,
                      "src": "3286:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "hexValue": "30786630",
                      "id": 24197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3291:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_240_by_1",
                        "typeString": "int_const 240"
                      },
                      "value": "0xf0"
                    },
                    "src": "3286:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3270:25:16"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24200,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3337:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786630",
                      "id": 24201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3348:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_240_by_1",
                        "typeString": "int_const 240"
                      },
                      "value": "0xf0"
                    },
                    "src": "3337:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24206,
                  "nodeType": "IfStatement",
                  "src": "3333:35:16",
                  "trueBody": {
                    "id": 24205,
                    "nodeType": "Block",
                    "src": "3354:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783330",
                          "id": 24203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3362:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_48_by_1",
                            "typeString": "int_const 48"
                          },
                          "value": "0x30"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24204,
                        "nodeType": "Return",
                        "src": "3355:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24207,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3386:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786631",
                      "id": 24208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3397:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_241_by_1",
                        "typeString": "int_const 241"
                      },
                      "value": "0xf1"
                    },
                    "src": "3386:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24213,
                  "nodeType": "IfStatement",
                  "src": "3382:35:16",
                  "trueBody": {
                    "id": 24212,
                    "nodeType": "Block",
                    "src": "3403:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783331",
                          "id": 24210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3411:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_49_by_1",
                            "typeString": "int_const 49"
                          },
                          "value": "0x31"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24211,
                        "nodeType": "Return",
                        "src": "3404:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24214,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3435:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786632",
                      "id": 24215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3446:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_242_by_1",
                        "typeString": "int_const 242"
                      },
                      "value": "0xf2"
                    },
                    "src": "3435:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24220,
                  "nodeType": "IfStatement",
                  "src": "3431:35:16",
                  "trueBody": {
                    "id": 24219,
                    "nodeType": "Block",
                    "src": "3452:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783332",
                          "id": 24217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3460:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "0x32"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24218,
                        "nodeType": "Return",
                        "src": "3453:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24221,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3484:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786633",
                      "id": 24222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3495:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_243_by_1",
                        "typeString": "int_const 243"
                      },
                      "value": "0xf3"
                    },
                    "src": "3484:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24227,
                  "nodeType": "IfStatement",
                  "src": "3480:35:16",
                  "trueBody": {
                    "id": 24226,
                    "nodeType": "Block",
                    "src": "3501:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783333",
                          "id": 24224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3509:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_51_by_1",
                            "typeString": "int_const 51"
                          },
                          "value": "0x33"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24225,
                        "nodeType": "Return",
                        "src": "3502:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24228,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3533:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786634",
                      "id": 24229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3544:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_244_by_1",
                        "typeString": "int_const 244"
                      },
                      "value": "0xf4"
                    },
                    "src": "3533:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24234,
                  "nodeType": "IfStatement",
                  "src": "3529:35:16",
                  "trueBody": {
                    "id": 24233,
                    "nodeType": "Block",
                    "src": "3550:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783334",
                          "id": 24231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3558:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_52_by_1",
                            "typeString": "int_const 52"
                          },
                          "value": "0x34"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24232,
                        "nodeType": "Return",
                        "src": "3551:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24235,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3582:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786635",
                      "id": 24236,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3593:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_245_by_1",
                        "typeString": "int_const 245"
                      },
                      "value": "0xf5"
                    },
                    "src": "3582:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24241,
                  "nodeType": "IfStatement",
                  "src": "3578:35:16",
                  "trueBody": {
                    "id": 24240,
                    "nodeType": "Block",
                    "src": "3599:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783335",
                          "id": 24238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3607:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_53_by_1",
                            "typeString": "int_const 53"
                          },
                          "value": "0x35"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24239,
                        "nodeType": "Return",
                        "src": "3600:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24242,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3631:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786636",
                      "id": 24243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3642:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_246_by_1",
                        "typeString": "int_const 246"
                      },
                      "value": "0xf6"
                    },
                    "src": "3631:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24248,
                  "nodeType": "IfStatement",
                  "src": "3627:35:16",
                  "trueBody": {
                    "id": 24247,
                    "nodeType": "Block",
                    "src": "3648:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783336",
                          "id": 24245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3656:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_54_by_1",
                            "typeString": "int_const 54"
                          },
                          "value": "0x36"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24246,
                        "nodeType": "Return",
                        "src": "3649:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24249,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3680:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786637",
                      "id": 24250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3691:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_247_by_1",
                        "typeString": "int_const 247"
                      },
                      "value": "0xf7"
                    },
                    "src": "3680:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24255,
                  "nodeType": "IfStatement",
                  "src": "3676:35:16",
                  "trueBody": {
                    "id": 24254,
                    "nodeType": "Block",
                    "src": "3697:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783337",
                          "id": 24252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3705:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_55_by_1",
                            "typeString": "int_const 55"
                          },
                          "value": "0x37"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24253,
                        "nodeType": "Return",
                        "src": "3698:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24256,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3729:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786638",
                      "id": 24257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3740:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "0xf8"
                    },
                    "src": "3729:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24262,
                  "nodeType": "IfStatement",
                  "src": "3725:35:16",
                  "trueBody": {
                    "id": 24261,
                    "nodeType": "Block",
                    "src": "3746:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783338",
                          "id": 24259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3754:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_56_by_1",
                            "typeString": "int_const 56"
                          },
                          "value": "0x38"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24260,
                        "nodeType": "Return",
                        "src": "3747:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24263,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3778:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786639",
                      "id": 24264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3789:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_249_by_1",
                        "typeString": "int_const 249"
                      },
                      "value": "0xf9"
                    },
                    "src": "3778:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24269,
                  "nodeType": "IfStatement",
                  "src": "3774:35:16",
                  "trueBody": {
                    "id": 24268,
                    "nodeType": "Block",
                    "src": "3795:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783339",
                          "id": 24266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3803:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57_by_1",
                            "typeString": "int_const 57"
                          },
                          "value": "0x39"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24267,
                        "nodeType": "Return",
                        "src": "3796:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24270,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3827:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786661",
                      "id": 24271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3838:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_250_by_1",
                        "typeString": "int_const 250"
                      },
                      "value": "0xfa"
                    },
                    "src": "3827:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24276,
                  "nodeType": "IfStatement",
                  "src": "3823:35:16",
                  "trueBody": {
                    "id": 24275,
                    "nodeType": "Block",
                    "src": "3844:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783631",
                          "id": 24273,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3852:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_97_by_1",
                            "typeString": "int_const 97"
                          },
                          "value": "0x61"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24274,
                        "nodeType": "Return",
                        "src": "3845:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24277,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3876:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786662",
                      "id": 24278,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3887:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_251_by_1",
                        "typeString": "int_const 251"
                      },
                      "value": "0xfb"
                    },
                    "src": "3876:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24283,
                  "nodeType": "IfStatement",
                  "src": "3872:35:16",
                  "trueBody": {
                    "id": 24282,
                    "nodeType": "Block",
                    "src": "3893:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783632",
                          "id": 24280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3901:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_98_by_1",
                            "typeString": "int_const 98"
                          },
                          "value": "0x62"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24281,
                        "nodeType": "Return",
                        "src": "3894:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24284,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3925:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786663",
                      "id": 24285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3936:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_252_by_1",
                        "typeString": "int_const 252"
                      },
                      "value": "0xfc"
                    },
                    "src": "3925:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24290,
                  "nodeType": "IfStatement",
                  "src": "3921:35:16",
                  "trueBody": {
                    "id": 24289,
                    "nodeType": "Block",
                    "src": "3942:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783633",
                          "id": 24287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3950:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_99_by_1",
                            "typeString": "int_const 99"
                          },
                          "value": "0x63"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24288,
                        "nodeType": "Return",
                        "src": "3943:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24291,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "3974:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786664",
                      "id": 24292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3985:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_253_by_1",
                        "typeString": "int_const 253"
                      },
                      "value": "0xfd"
                    },
                    "src": "3974:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24297,
                  "nodeType": "IfStatement",
                  "src": "3970:35:16",
                  "trueBody": {
                    "id": 24296,
                    "nodeType": "Block",
                    "src": "3991:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783634",
                          "id": 24294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3999:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_100_by_1",
                            "typeString": "int_const 100"
                          },
                          "value": "0x64"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24295,
                        "nodeType": "Return",
                        "src": "3992:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24298,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "4023:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786665",
                      "id": 24299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4034:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_254_by_1",
                        "typeString": "int_const 254"
                      },
                      "value": "0xfe"
                    },
                    "src": "4023:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24304,
                  "nodeType": "IfStatement",
                  "src": "4019:35:16",
                  "trueBody": {
                    "id": 24303,
                    "nodeType": "Block",
                    "src": "4040:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783635",
                          "id": 24301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4048:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_101_by_1",
                            "typeString": "int_const 101"
                          },
                          "value": "0x65"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24302,
                        "nodeType": "Return",
                        "src": "4041:11:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24305,
                      "name": "_nibble",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24195,
                      "src": "4072:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30786666",
                      "id": 24306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4083:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "0xff"
                    },
                    "src": "4072:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24311,
                  "nodeType": "IfStatement",
                  "src": "4068:35:16",
                  "trueBody": {
                    "id": 24310,
                    "nodeType": "Block",
                    "src": "4089:14:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30783636",
                          "id": 24308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4097:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_102_by_1",
                            "typeString": "int_const 102"
                          },
                          "value": "0x66"
                        },
                        "functionReturnParameters": 24193,
                        "id": 24309,
                        "nodeType": "Return",
                        "src": "4090:11:16"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 24187,
              "nodeType": "StructuredDocumentation",
              "src": "2871:197:16",
              "text": " @notice      Returns the encoded hex character that represents the lower 4 bits of the argument.\n @param _b    The byte\n @return      char - The encoded hex character"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nibbleHex",
            "parameters": {
              "id": 24190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24189,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "3092:8:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24188,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3092:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3091:10:16"
            },
            "returnParameters": {
              "id": 24193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24192,
                  "mutability": "mutable",
                  "name": "char",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "3125:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24191,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3125:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3124:12:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24340,
            "nodeType": "FunctionDefinition",
            "src": "4286:199:16",
            "body": {
              "id": 24339,
              "nodeType": "Block",
              "src": "4352:133:16",
              "statements": [
                {
                  "expression": {
                    "id": 24327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24321,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24319,
                      "src": "4362:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "|=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 24325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 24323,
                            "name": "_b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24316,
                            "src": "4383:2:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "hexValue": "34",
                            "id": 24324,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4389:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "4383:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 24322,
                        "name": "nibbleHex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24313,
                        "src": "4373:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8) pure returns (uint8)"
                        }
                      },
                      "id": 24326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4373:18:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "4362:29:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 24328,
                  "nodeType": "ExpressionStatement",
                  "src": "4362:29:16"
                },
                {
                  "expression": {
                    "id": 24331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24329,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24319,
                      "src": "4415:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "<<=",
                    "rightHandSide": {
                      "hexValue": "38",
                      "id": 24330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4427:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_8_by_1",
                        "typeString": "int_const 8"
                      },
                      "value": "8"
                    },
                    "src": "4415:13:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 24332,
                  "nodeType": "ExpressionStatement",
                  "src": "4415:13:16"
                },
                {
                  "expression": {
                    "id": 24337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24333,
                      "name": "encoded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24319,
                      "src": "4438:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "|=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 24335,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24316,
                          "src": "4459:2:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 24334,
                        "name": "nibbleHex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24313,
                        "src": "4449:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8) pure returns (uint8)"
                        }
                      },
                      "id": 24336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4449:13:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "4438:24:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 24338,
                  "nodeType": "ExpressionStatement",
                  "src": "4438:24:16"
                }
              ]
            },
            "documentation": {
              "id": 24314,
              "nodeType": "StructuredDocumentation",
              "src": "4120:161:16",
              "text": " @notice      Returns a uint16 containing the hex-encoded byte.\n @param _b    The byte\n @return      encoded - The hex-encoded byte"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "byteHex",
            "parameters": {
              "id": 24317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24316,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 24340,
                  "src": "4303:8:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24315,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4303:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4302:10:16"
            },
            "returnParameters": {
              "id": 24320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24319,
                  "mutability": "mutable",
                  "name": "encoded",
                  "nodeType": "VariableDeclaration",
                  "scope": 24340,
                  "src": "4336:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 24318,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4336:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4335:16:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24431,
            "nodeType": "FunctionDefinition",
            "src": "4809:556:16",
            "body": {
              "id": 24430,
              "nodeType": "Block",
              "src": "4894:471:16",
              "statements": [
                {
                  "body": {
                    "id": 24388,
                    "nodeType": "Block",
                    "src": "4939:167:16",
                    "statements": [
                      {
                        "assignments": [
                          24362
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 24362,
                            "mutability": "mutable",
                            "name": "_byte",
                            "nodeType": "VariableDeclaration",
                            "scope": 24388,
                            "src": "4953:11:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 24361,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "4953:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 24372,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 24365,
                                "name": "_b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24343,
                                "src": "4973:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 24368,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 24366,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24351,
                                      "src": "4980:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 24367,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4984:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "4980:5:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 24369,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4979:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "4973:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4967:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 24363,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "4967:5:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4967:20:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4953:34:16"
                      },
                      {
                        "expression": {
                          "id": 24377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 24373,
                            "name": "first",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24346,
                            "src": "5001:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 24375,
                                "name": "_byte",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24362,
                                "src": "5018:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 24374,
                              "name": "byteHex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24340,
                              "src": "5010:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint16_$",
                                "typeString": "function (uint8) pure returns (uint16)"
                              }
                            },
                            "id": 24376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5010:14:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5001:23:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24378,
                        "nodeType": "ExpressionStatement",
                        "src": "5001:23:16"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 24381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 24379,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24351,
                            "src": "5042:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "3136",
                            "id": 24380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5047:2:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "5042:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 24387,
                        "nodeType": "IfStatement",
                        "src": "5038:58:16",
                        "trueBody": {
                          "id": 24386,
                          "nodeType": "Block",
                          "src": "5051:45:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 24384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 24382,
                                  "name": "first",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24346,
                                  "src": "5069:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "<<=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 24383,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5079:2:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "5069:12:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24385,
                              "nodeType": "ExpressionStatement",
                              "src": "5069:12:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24354,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24351,
                      "src": "4923:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "3135",
                      "id": 24355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4927:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_15_by_1",
                        "typeString": "int_const 15"
                      },
                      "value": "15"
                    },
                    "src": "4923:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24389,
                  "initializationExpression": {
                    "assignments": [
                      24351
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 24351,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 24389,
                        "src": "4909:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 24350,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "4909:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 24353,
                    "initialValue": {
                      "hexValue": "3331",
                      "id": 24352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4919:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4909:12:16"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 24359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 24357,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24351,
                        "src": "4931:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 24358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4936:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4931:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 24360,
                    "nodeType": "ExpressionStatement",
                    "src": "4931:6:16"
                  },
                  "nodeType": "ForStatement",
                  "src": "4904:202:16"
                },
                {
                  "body": {
                    "id": 24428,
                    "nodeType": "Block",
                    "src": "5191:168:16",
                    "statements": [
                      {
                        "assignments": [
                          24402
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 24402,
                            "mutability": "mutable",
                            "name": "_byte",
                            "nodeType": "VariableDeclaration",
                            "scope": 24428,
                            "src": "5205:11:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 24401,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5205:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 24412,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 24405,
                                "name": "_b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24343,
                                "src": "5225:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 24408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 24406,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24391,
                                      "src": "5232:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 24407,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5236:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "5232:5:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 24409,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5231:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "5225:13:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5219:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 24403,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5219:5:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5219:20:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5205:34:16"
                      },
                      {
                        "expression": {
                          "id": 24417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 24413,
                            "name": "second",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24348,
                            "src": "5253:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 24415,
                                "name": "_byte",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24402,
                                "src": "5271:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 24414,
                              "name": "byteHex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24340,
                              "src": "5263:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint16_$",
                                "typeString": "function (uint8) pure returns (uint16)"
                              }
                            },
                            "id": 24416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5263:14:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5253:24:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24418,
                        "nodeType": "ExpressionStatement",
                        "src": "5253:24:16"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 24421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 24419,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24391,
                            "src": "5295:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 24420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5300:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5295:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 24427,
                        "nodeType": "IfStatement",
                        "src": "5291:58:16",
                        "trueBody": {
                          "id": 24426,
                          "nodeType": "Block",
                          "src": "5303:46:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 24424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 24422,
                                  "name": "second",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24348,
                                  "src": "5321:6:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "<<=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 24423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5332:2:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "5321:13:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24425,
                              "nodeType": "ExpressionStatement",
                              "src": "5321:13:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 24396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24394,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24391,
                      "src": "5173:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "323535",
                      "id": 24395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5177:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "5173:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24429,
                  "initializationExpression": {
                    "assignments": [
                      24391
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 24391,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 24429,
                        "src": "5159:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 24390,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5159:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 24393,
                    "initialValue": {
                      "hexValue": "3135",
                      "id": 24392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5169:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_15_by_1",
                        "typeString": "int_const 15"
                      },
                      "value": "15"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5159:12:16"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 24399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 24397,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24391,
                        "src": "5183:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 24398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5188:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5183:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 24400,
                    "nodeType": "ExpressionStatement",
                    "src": "5183:6:16"
                  },
                  "nodeType": "ForStatement",
                  "src": "5154:205:16"
                }
              ]
            },
            "documentation": {
              "id": 24341,
              "nodeType": "StructuredDocumentation",
              "src": "4491:313:16",
              "text": " @notice      Encodes the uint256 to hex. `first` contains the encoded top 16 bytes.\n              `second` contains the encoded lower 16 bytes.\n @param _b    The 32 bytes as uint256\n @return      first - The top 16 bytes\n @return      second - The bottom 16 bytes"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encodeHex",
            "parameters": {
              "id": 24344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24343,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 24431,
                  "src": "4828:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4828:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4827:12:16"
            },
            "returnParameters": {
              "id": 24349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24346,
                  "mutability": "mutable",
                  "name": "first",
                  "nodeType": "VariableDeclaration",
                  "scope": 24431,
                  "src": "4863:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24345,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4863:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24348,
                  "mutability": "mutable",
                  "name": "second",
                  "nodeType": "VariableDeclaration",
                  "scope": 24431,
                  "src": "4878:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24347,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4878:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4862:31:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24528,
            "nodeType": "FunctionDefinition",
            "src": "5644:1044:16",
            "body": {
              "id": 24527,
              "nodeType": "Block",
              "src": "5714:974:16",
              "statements": [
                {
                  "expression": {
                    "id": 24441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24439,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "5724:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24440,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24434,
                      "src": "5728:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5724:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24442,
                  "nodeType": "ExpressionStatement",
                  "src": "5724:6:16"
                },
                {
                  "expression": {
                    "id": 24459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24443,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "5763:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24446,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24444,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "5769:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "38",
                                    "id": 24445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5774:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  "src": "5769:6:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24447,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5768:8:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646",
                              "id": 24448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5779:66:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1",
                                "typeString": "int_const 4505...(67 digits omitted)...9455"
                              },
                              "value": "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"
                            },
                            "src": "5768:77:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24450,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5767:79:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24456,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24451,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "5863:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646",
                                    "id": 24452,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5867:66:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1",
                                      "typeString": "int_const 4505...(67 digits omitted)...9455"
                                    },
                                    "value": "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"
                                  },
                                  "src": "5863:70:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24454,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5862:72:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "38",
                              "id": 24455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5938:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "8"
                            },
                            "src": "5862:77:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24457,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5861:79:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5767:173:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5763:177:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24460,
                  "nodeType": "ExpressionStatement",
                  "src": "5763:177:16"
                },
                {
                  "expression": {
                    "id": 24477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24461,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "5984:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24467,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24464,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24462,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "5990:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3136",
                                    "id": 24463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5995:2:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  "src": "5990:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24465,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5989:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646",
                              "id": 24466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6001:66:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1",
                                "typeString": "int_const 1766...(65 digits omitted)...4255"
                              },
                              "value": "0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"
                            },
                            "src": "5989:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24468,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5988:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24471,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24469,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "6085:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646",
                                    "id": 24470,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6089:66:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1",
                                      "typeString": "int_const 1766...(65 digits omitted)...4255"
                                    },
                                    "value": "0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"
                                  },
                                  "src": "6085:70:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24472,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6084:72:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3136",
                              "id": 24473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6160:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "16"
                            },
                            "src": "6084:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24475,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6083:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5988:175:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5984:179:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24478,
                  "nodeType": "ExpressionStatement",
                  "src": "5984:179:16"
                },
                {
                  "expression": {
                    "id": 24495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24479,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "6207:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24482,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24480,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "6213:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3332",
                                    "id": 24481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6218:2:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "6213:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24483,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6212:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646",
                              "id": 24484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6224:66:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1",
                                "typeString": "int_const 2695...(60 digits omitted)...3855"
                              },
                              "value": "0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"
                            },
                            "src": "6212:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24486,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6211:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24489,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24487,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "6308:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646",
                                    "id": 24488,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6312:66:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1",
                                      "typeString": "int_const 2695...(60 digits omitted)...3855"
                                    },
                                    "value": "0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"
                                  },
                                  "src": "6308:70:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24490,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6307:72:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3332",
                              "id": 24491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6383:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "src": "6307:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24493,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6306:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6211:175:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6207:179:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24496,
                  "nodeType": "ExpressionStatement",
                  "src": "6207:179:16"
                },
                {
                  "expression": {
                    "id": 24513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24497,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "6430:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24498,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "6436:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">>",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 24499,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6441:2:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "6436:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24501,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6435:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646",
                              "id": 24502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6447:66:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6277101735386680763495507056286727952657427581105975853055_by_1",
                                "typeString": "int_const 6277...(50 digits omitted)...3055"
                              },
                              "value": "0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"
                            },
                            "src": "6435:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24504,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6434:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24510,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24507,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 24505,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24437,
                                    "src": "6531:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646",
                                    "id": 24506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6535:66:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_6277101735386680763495507056286727952657427581105975853055_by_1",
                                      "typeString": "int_const 6277...(50 digits omitted)...3055"
                                    },
                                    "value": "0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"
                                  },
                                  "src": "6531:70:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 24508,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6530:72:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "3634",
                              "id": 24509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6606:2:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_64_by_1",
                                "typeString": "int_const 64"
                              },
                              "value": "64"
                            },
                            "src": "6530:78:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24511,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6529:80:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6434:175:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6430:179:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24514,
                  "nodeType": "ExpressionStatement",
                  "src": "6430:179:16"
                },
                {
                  "expression": {
                    "id": 24525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24515,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24437,
                      "src": "6654:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 24516,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24437,
                              "src": "6659:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">>",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 24517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6664:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "6659:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24519,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6658:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24522,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 24520,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24437,
                              "src": "6672:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 24521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6677:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "6672:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 24523,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "6671:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6658:23:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6654:27:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24526,
                  "nodeType": "ExpressionStatement",
                  "src": "6654:27:16"
                }
              ]
            },
            "documentation": {
              "id": 24432,
              "nodeType": "StructuredDocumentation",
              "src": "5371:268:16",
              "text": " @notice          Changes the endianness of a uint256.\n @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\n @param _b        The unsigned integer to reverse\n @return          v - The reversed value"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reverseUint256",
            "parameters": {
              "id": 24435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24434,
                  "mutability": "mutable",
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 24528,
                  "src": "5668:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24433,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5668:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5667:12:16"
            },
            "returnParameters": {
              "id": 24438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24437,
                  "mutability": "mutable",
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 24528,
                  "src": "5703:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5703:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5702:11:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24538,
            "nodeType": "FunctionDefinition",
            "src": "6845:366:16",
            "body": {
              "id": 24537,
              "nodeType": "Block",
              "src": "6911:300:16",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6970:235:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7056:139:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "7089:4:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7095:1:16",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nodeType": "YulIdentifier",
                                "src": "7085:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7085:12:16"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7115:66:16",
                              "type": "",
                              "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "sar",
                            "nodeType": "YulIdentifier",
                            "src": "7064:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7064:131:16"
                        },
                        "variableNames": [
                          {
                            "name": "mask",
                            "nodeType": "YulIdentifier",
                            "src": "7056:4:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24531,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7089:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24534,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7056:4:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24536,
                  "nodeType": "InlineAssembly",
                  "src": "6961:244:16"
                }
              ]
            },
            "documentation": {
              "id": 24529,
              "nodeType": "StructuredDocumentation",
              "src": "6694:146:16",
              "text": " @notice      Create a mask with the highest `_len` bits set.\n @param _len  The length\n @return      mask - The mask"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "leftMask",
            "parameters": {
              "id": 24532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24531,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24538,
                  "src": "6863:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 24530,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6863:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6862:12:16"
            },
            "returnParameters": {
              "id": 24535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24534,
                  "mutability": "mutable",
                  "name": "mask",
                  "nodeType": "VariableDeclaration",
                  "scope": 24538,
                  "src": "6897:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6897:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6896:14:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 24547,
            "nodeType": "FunctionDefinition",
            "src": "7319:80:16",
            "body": {
              "id": 24546,
              "nodeType": "Block",
              "src": "7371:28:16",
              "statements": [
                {
                  "expression": {
                    "id": 24544,
                    "name": "NULL",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24180,
                    "src": "7388:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24543,
                  "id": 24545,
                  "nodeType": "Return",
                  "src": "7381:11:16"
                }
              ]
            },
            "documentation": {
              "id": 24539,
              "nodeType": "StructuredDocumentation",
              "src": "7217:97:16",
              "text": " @notice      Return the null view.\n @return      bytes29 - The null view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nullView",
            "parameters": {
              "id": 24540,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7336:2:16"
            },
            "returnParameters": {
              "id": 24543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24542,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24547,
                  "src": "7362:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24541,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7362:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7361:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24560,
            "nodeType": "FunctionDefinition",
            "src": "7520:101:16",
            "body": {
              "id": 24559,
              "nodeType": "Block",
              "src": "7582:39:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    },
                    "id": 24557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24555,
                      "name": "memView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24550,
                      "src": "7599:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 24556,
                      "name": "NULL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24180,
                      "src": "7610:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "7599:15:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24554,
                  "id": 24558,
                  "nodeType": "Return",
                  "src": "7592:22:16"
                }
              ]
            },
            "documentation": {
              "id": 24548,
              "nodeType": "StructuredDocumentation",
              "src": "7405:110:16",
              "text": " @notice      Check if the view is null.\n @return      bool - True if the view is null"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isNull",
            "parameters": {
              "id": 24551,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24550,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24560,
                  "src": "7536:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24549,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7536:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7535:17:16"
            },
            "returnParameters": {
              "id": 24554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24553,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24560,
                  "src": "7576:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24552,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7576:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7575:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24574,
            "nodeType": "FunctionDefinition",
            "src": "7750:103:16",
            "body": {
              "id": 24573,
              "nodeType": "Block",
              "src": "7813:40:16",
              "statements": [
                {
                  "expression": {
                    "id": 24571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7830:16:16",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 24569,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24563,
                          "src": "7838:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24568,
                        "name": "isNull",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24560,
                        "src": "7831:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29) pure returns (bool)"
                        }
                      },
                      "id": 24570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7831:15:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24567,
                  "id": 24572,
                  "nodeType": "Return",
                  "src": "7823:23:16"
                }
              ]
            },
            "documentation": {
              "id": 24561,
              "nodeType": "StructuredDocumentation",
              "src": "7627:118:16",
              "text": " @notice      Check if the view is not null.\n @return      bool - True if the view is not null"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notNull",
            "parameters": {
              "id": 24564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24563,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24574,
                  "src": "7767:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24562,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "7767:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7766:17:16"
            },
            "returnParameters": {
              "id": 24567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24566,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24574,
                  "src": "7807:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24565,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7807:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7806:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24599,
            "nodeType": "FunctionDefinition",
            "src": "8272:319:16",
            "body": {
              "id": 24598,
              "nodeType": "Block",
              "src": "8339:252:16",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 24586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 24583,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24577,
                          "src": "8360:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24582,
                        "name": "typeOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24795,
                        "src": "8353:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                          "typeString": "function (bytes29) pure returns (uint40)"
                        }
                      },
                      "id": 24584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8353:15:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "307866666666666666666666",
                      "id": 24585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8372:12:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1099511627775_by_1",
                        "typeString": "int_const 1099511627775"
                      },
                      "value": "0xffffffffff"
                    },
                    "src": "8353:31:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24590,
                  "nodeType": "IfStatement",
                  "src": "8349:52:16",
                  "trueBody": {
                    "id": 24589,
                    "nodeType": "Block",
                    "src": "8386:15:16",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 24587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8394:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 24581,
                        "id": 24588,
                        "nodeType": "Return",
                        "src": "8387:12:16"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    24592
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24592,
                      "mutability": "mutable",
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 24598,
                      "src": "8410:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24591,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8410:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24596,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24594,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24577,
                        "src": "8429:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 24593,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24899,
                      "src": "8425:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                        "typeString": "function (bytes29) pure returns (uint256)"
                      }
                    },
                    "id": 24595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8425:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8410:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8456:129:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8542:33:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_end",
                                  "nodeType": "YulIdentifier",
                                  "src": "8556:4:16"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8568:4:16",
                                      "type": "",
                                      "value": "0x40"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "8562:5:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8562:11:16"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "8553:2:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8553:21:16"
                            }
                          ],
                          "functionName": {
                            "name": "not",
                            "nodeType": "YulIdentifier",
                            "src": "8549:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8549:26:16"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "8542:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24592,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8556:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24580,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8542:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24597,
                  "nodeType": "InlineAssembly",
                  "src": "8447:138:16"
                }
              ]
            },
            "documentation": {
              "id": 24575,
              "nodeType": "StructuredDocumentation",
              "src": "7859:408:16",
              "text": " @notice          Check if the view is of a valid type and points to a valid location\n                  in memory.\n @dev             We perform this check by examining solidity's unallocated memory\n                  pointer and ensuring that the view's upper bound is less than that.\n @param memView   The view\n @return          ret - True if the view is valid"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValid",
            "parameters": {
              "id": 24578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24577,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "8289:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24576,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8289:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8288:17:16"
            },
            "returnParameters": {
              "id": 24581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24580,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "8329:8:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24579,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8329:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8328:10:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24617,
            "nodeType": "FunctionDefinition",
            "src": "8826:165:16",
            "body": {
              "id": 24616,
              "nodeType": "Block",
              "src": "8896:95:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24609,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24602,
                            "src": "8922:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 24608,
                          "name": "isValid",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24599,
                          "src": "8914:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 24610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8914:16:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c696469747920617373657274696f6e206661696c6564",
                        "id": 24611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8932:27:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3b8ee0f3dda60458ebd28fab07294d43d44795f5dd2ba5ae15b160377e860128",
                          "typeString": "literal_string \"Validity assertion failed\""
                        },
                        "value": "Validity assertion failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3b8ee0f3dda60458ebd28fab07294d43d44795f5dd2ba5ae15b160377e860128",
                          "typeString": "literal_string \"Validity assertion failed\""
                        }
                      ],
                      "id": 24607,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8906:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8906:54:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24613,
                  "nodeType": "ExpressionStatement",
                  "src": "8906:54:16"
                },
                {
                  "expression": {
                    "id": 24614,
                    "name": "memView",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24602,
                    "src": "8977:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24606,
                  "id": 24615,
                  "nodeType": "Return",
                  "src": "8970:14:16"
                }
              ]
            },
            "documentation": {
              "id": 24600,
              "nodeType": "StructuredDocumentation",
              "src": "8597:224:16",
              "text": " @notice          Require that a typed memory view be valid.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @return          bytes29 - The validated view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assertValid",
            "parameters": {
              "id": 24603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24602,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24617,
                  "src": "8847:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24601,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8847:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8846:17:16"
            },
            "returnParameters": {
              "id": 24606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24605,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24617,
                  "src": "8887:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24604,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "8887:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8886:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24634,
            "nodeType": "FunctionDefinition",
            "src": "9256:132:16",
            "body": {
              "id": 24633,
              "nodeType": "Block",
              "src": "9336:52:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 24631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 24628,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24620,
                          "src": "9360:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24627,
                        "name": "typeOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24795,
                        "src": "9353:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                          "typeString": "function (bytes29) pure returns (uint40)"
                        }
                      },
                      "id": 24629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9353:15:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 24630,
                      "name": "_expected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24622,
                      "src": "9372:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "9353:28:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24626,
                  "id": 24632,
                  "nodeType": "Return",
                  "src": "9346:35:16"
                }
              ]
            },
            "documentation": {
              "id": 24618,
              "nodeType": "StructuredDocumentation",
              "src": "8997:254:16",
              "text": " @notice          Return true if the memview is of the expected type. Otherwise false.\n @param memView   The view\n @param _expected The expected type\n @return          bool - True if the memview is of the expected type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isType",
            "parameters": {
              "id": 24623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24620,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24634,
                  "src": "9272:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24619,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9272:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24622,
                  "mutability": "mutable",
                  "name": "_expected",
                  "nodeType": "VariableDeclaration",
                  "scope": 24634,
                  "src": "9289:16:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24621,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9289:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9271:35:16"
            },
            "returnParameters": {
              "id": 24626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24625,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24634,
                  "src": "9330:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24624,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9330:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9329:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24697,
            "nodeType": "FunctionDefinition",
            "src": "9686:578:16",
            "body": {
              "id": 24696,
              "nodeType": "Block",
              "src": "9773:491:16",
              "statements": [
                {
                  "condition": {
                    "id": 24648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "9787:27:16",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 24645,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24637,
                          "src": "9795:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 24646,
                          "name": "_expected",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24639,
                          "src": "9804:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        ],
                        "id": 24644,
                        "name": "isType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24634,
                        "src": "9788:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bool_$",
                          "typeString": "function (bytes29,uint40) pure returns (bool)"
                        }
                      },
                      "id": 24647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9788:26:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24693,
                  "nodeType": "IfStatement",
                  "src": "9783:451:16",
                  "trueBody": {
                    "id": 24692,
                    "nodeType": "Block",
                    "src": "9816:418:16",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          24650
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 24650,
                            "mutability": "mutable",
                            "name": "g",
                            "nodeType": "VariableDeclaration",
                            "scope": 24692,
                            "src": "9833:9:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 24649,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9833:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 24659,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 24655,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24637,
                                      "src": "9871:7:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 24654,
                                    "name": "typeOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24795,
                                    "src": "9864:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                      "typeString": "function (bytes29) pure returns (uint40)"
                                    }
                                  },
                                  "id": 24656,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9864:15:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                ],
                                "id": 24653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9856:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 24652,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9856:7:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 24657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9856:24:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24651,
                            "name": "encodeHex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24431,
                            "src": "9846:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256,uint256)"
                            }
                          },
                          "id": 24658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9846:35:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9830:51:16"
                      },
                      {
                        "assignments": [
                          null,
                          24661
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 24661,
                            "mutability": "mutable",
                            "name": "e",
                            "nodeType": "VariableDeclaration",
                            "scope": 24692,
                            "src": "9898:9:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 24660,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9898:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 24668,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 24665,
                                  "name": "_expected",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24639,
                                  "src": "9929:9:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint40",
                                    "typeString": "uint40"
                                  }
                                ],
                                "id": 24664,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9921:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 24663,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9921:7:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 24666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9921:18:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24662,
                            "name": "encodeHex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24431,
                            "src": "9911:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256,uint256)"
                            }
                          },
                          "id": 24667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9911:29:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9895:45:16"
                      },
                      {
                        "assignments": [
                          24670
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 24670,
                            "mutability": "mutable",
                            "name": "err",
                            "nodeType": "VariableDeclaration",
                            "scope": 24692,
                            "src": "9954:17:16",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 24669,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "9954:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 24687,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "5479706520617373657274696f6e206661696c65642e20476f74203078",
                                  "id": 24675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10036:31:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_2f02b416aa4f77f4220c3b6bf415b34f2494631d10ac20cd509c0fe0e4f80593",
                                    "typeString": "literal_string \"Type assertion failed. Got 0x\""
                                  },
                                  "value": "Type assertion failed. Got 0x"
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 24678,
                                      "name": "g",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24650,
                                      "src": "10096:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 24677,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "10089:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint80_$",
                                      "typeString": "type(uint80)"
                                    },
                                    "typeName": {
                                      "id": 24676,
                                      "name": "uint80",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "10089:6:16",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 24679,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10089:9:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                },
                                {
                                  "hexValue": "2e204578706563746564203078",
                                  "id": 24680,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10120:15:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_c0efbfebb65cadd8bb13aebc0ea085f1329fae1d7376b5e0aa452fe70b6d6b80",
                                    "typeString": "literal_string \". Expected 0x\""
                                  },
                                  "value": ". Expected 0x"
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 24683,
                                      "name": "e",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24661,
                                      "src": "10164:1:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 24682,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "10157:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint80_$",
                                      "typeString": "type(uint80)"
                                    },
                                    "typeName": {
                                      "id": 24681,
                                      "name": "uint80",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "10157:6:16",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 24684,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10157:9:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_2f02b416aa4f77f4220c3b6bf415b34f2494631d10ac20cd509c0fe0e4f80593",
                                    "typeString": "literal_string \"Type assertion failed. Got 0x\""
                                  },
                                  {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_c0efbfebb65cadd8bb13aebc0ea085f1329fae1d7376b5e0aa452fe70b6d6b80",
                                    "typeString": "literal_string \". Expected 0x\""
                                  },
                                  {
                                    "typeIdentifier": "t_uint80",
                                    "typeString": "uint80"
                                  }
                                ],
                                "expression": {
                                  "id": 24673,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "9998:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 24674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "9998:16:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 24685,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9998:186:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 24672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9974:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 24671,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "9974:6:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9974:224:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9954:244:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 24689,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24670,
                              "src": "10219:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 24688,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "10212:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 24690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10212:11:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 24691,
                        "nodeType": "ExpressionStatement",
                        "src": "10212:11:16"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 24694,
                    "name": "memView",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24637,
                    "src": "10250:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24643,
                  "id": 24695,
                  "nodeType": "Return",
                  "src": "10243:14:16"
                }
              ]
            },
            "documentation": {
              "id": 24635,
              "nodeType": "StructuredDocumentation",
              "src": "9394:287:16",
              "text": " @notice          Require that a typed memory view has a specific type.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @param _expected The expected type\n @return          bytes29 - The view with validated type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assertType",
            "parameters": {
              "id": 24640,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24637,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24697,
                  "src": "9706:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24636,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9706:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24639,
                  "mutability": "mutable",
                  "name": "_expected",
                  "nodeType": "VariableDeclaration",
                  "scope": 24697,
                  "src": "9723:16:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24638,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9723:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9705:35:16"
            },
            "returnParameters": {
              "id": 24643,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24642,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24697,
                  "src": "9764:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24641,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9764:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9763:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24709,
            "nodeType": "FunctionDefinition",
            "src": "10499:390:16",
            "body": {
              "id": 24708,
              "nodeType": "Block",
              "src": "10589:300:16",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "10642:241:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "10769:49:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "newView",
                              "nodeType": "YulIdentifier",
                              "src": "10783:7:16"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10796:2:16",
                                  "type": "",
                                  "value": "40"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "10804:2:16",
                                      "type": "",
                                      "value": "40"
                                    },
                                    {
                                      "name": "memView",
                                      "nodeType": "YulIdentifier",
                                      "src": "10808:7:16"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shl",
                                    "nodeType": "YulIdentifier",
                                    "src": "10800:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "10800:16:16"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "10792:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10792:25:16"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "10780:2:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10780:38:16"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "10769:7:16"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "10831:42:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "newView",
                              "nodeType": "YulIdentifier",
                              "src": "10845:7:16"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "10858:3:16",
                                  "type": "",
                                  "value": "216"
                                },
                                {
                                  "name": "_newType",
                                  "nodeType": "YulIdentifier",
                                  "src": "10863:8:16"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "10854:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10854:18:16"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "10842:2:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10842:31:16"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "10831:7:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24702,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10863:8:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24700,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10808:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10769:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10783:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10831:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10845:7:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24707,
                  "nodeType": "InlineAssembly",
                  "src": "10633:250:16"
                }
              ]
            },
            "documentation": {
              "id": 24698,
              "nodeType": "StructuredDocumentation",
              "src": "10270:224:16",
              "text": " @notice          Return an identical view with a different type.\n @param memView   The view\n @param _newType  The new type\n @return          newView - The new view with the specified type"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "castTo",
            "parameters": {
              "id": 24703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24700,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24709,
                  "src": "10515:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24699,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10515:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24702,
                  "mutability": "mutable",
                  "name": "_newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 24709,
                  "src": "10532:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24701,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "10532:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10514:34:16"
            },
            "returnParameters": {
              "id": 24706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24705,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24709,
                  "src": "10572:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24704,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "10572:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10571:17:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24723,
            "nodeType": "FunctionDefinition",
            "src": "11432:426:16",
            "body": {
              "id": 24722,
              "nodeType": "Block",
              "src": "11544:314:16",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "11563:289:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11649:38:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11664:2:16",
                              "type": "",
                              "value": "96"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11671:7:16"
                                },
                                {
                                  "name": "_type",
                                  "nodeType": "YulIdentifier",
                                  "src": "11680:5:16"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11668:2:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11668:18:16"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11660:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11660:27:16"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11649:7:16"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11715:37:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11730:2:16",
                              "type": "",
                              "value": "96"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11737:7:16"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "11746:4:16"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11734:2:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11734:17:16"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11726:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11726:26:16"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11715:7:16"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "11780:37:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11795:2:16",
                              "type": "",
                              "value": "24"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "newView",
                                  "nodeType": "YulIdentifier",
                                  "src": "11802:7:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "11811:4:16"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "11799:2:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11799:17:16"
                            }
                          ],
                          "functionName": {
                            "name": "shl",
                            "nodeType": "YulIdentifier",
                            "src": "11791:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11791:26:16"
                        },
                        "variableNames": [
                          {
                            "name": "newView",
                            "nodeType": "YulIdentifier",
                            "src": "11780:7:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24716,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11811:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24714,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11746:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24712,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11680:5:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11649:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11671:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11715:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11737:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11780:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24719,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11802:7:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24721,
                  "nodeType": "InlineAssembly",
                  "src": "11554:298:16"
                }
              ]
            },
            "documentation": {
              "id": 24710,
              "nodeType": "StructuredDocumentation",
              "src": "10895:532:16",
              "text": " @notice          Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeBuildUnchecked",
            "parameters": {
              "id": 24717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24712,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 24723,
                  "src": "11462:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24711,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11462:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24714,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 24723,
                  "src": "11477:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11477:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24716,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24723,
                  "src": "11491:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24715,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11491:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11461:43:16"
            },
            "returnParameters": {
              "id": 24720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24719,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24723,
                  "src": "11527:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24718,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11527:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11526:17:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 24759,
            "nodeType": "FunctionDefinition",
            "src": "12397:443:16",
            "body": {
              "id": 24758,
              "nodeType": "Block",
              "src": "12495:345:16",
              "statements": [
                {
                  "assignments": [
                    24736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24736,
                      "mutability": "mutable",
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 24758,
                      "src": "12505:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24735,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12505:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24741,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24739,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24730,
                        "src": "12529:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24737,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24728,
                        "src": "12520:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 24738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24169,
                      "src": "12520:8:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 24740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12520:14:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12505:29:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "12553:162:16",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12664:41:16",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12682:9:16",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12690:1:16",
                                "type": "",
                                "value": "0"
                              },
                              "variableNames": [
                                {
                                  "name": "_end",
                                  "nodeType": "YulIdentifier",
                                  "src": "12682:4:16"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "_end",
                              "nodeType": "YulIdentifier",
                              "src": "12645:4:16"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12657:4:16",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "12651:5:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12651:11:16"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "12642:2:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12642:21:16"
                        },
                        "nodeType": "YulIf",
                        "src": "12639:2:16"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24736,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12645:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24736,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12682:4:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24742,
                  "nodeType": "InlineAssembly",
                  "src": "12544:171:16"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 24743,
                      "name": "_end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24736,
                      "src": "12728:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 24744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12736:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12728:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24749,
                  "nodeType": "IfStatement",
                  "src": "12724:51:16",
                  "trueBody": {
                    "id": 24748,
                    "nodeType": "Block",
                    "src": "12739:36:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 24746,
                          "name": "NULL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24180,
                          "src": "12760:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "functionReturnParameters": 24734,
                        "id": 24747,
                        "nodeType": "Return",
                        "src": "12753:11:16"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 24756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24750,
                      "name": "newView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24733,
                      "src": "12784:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 24752,
                          "name": "_type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24726,
                          "src": "12815:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 24753,
                          "name": "_loc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24728,
                          "src": "12822:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 24754,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24730,
                          "src": "12828:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 24751,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24723,
                        "src": "12794:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 24755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12794:39:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "12784:49:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 24757,
                  "nodeType": "ExpressionStatement",
                  "src": "12784:49:16"
                }
              ]
            },
            "documentation": {
              "id": 24724,
              "nodeType": "StructuredDocumentation",
              "src": "11864:528:16",
              "text": " @notice          Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "build",
            "parameters": {
              "id": 24731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24726,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 24759,
                  "src": "12412:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12412:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24728,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 24759,
                  "src": "12427:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12427:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24730,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24759,
                  "src": "12441:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24729,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12441:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12411:43:16"
            },
            "returnParameters": {
              "id": 24734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24733,
                  "mutability": "mutable",
                  "name": "newView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24759,
                  "src": "12478:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24732,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12478:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12477:17:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24785,
            "nodeType": "FunctionDefinition",
            "src": "13237:368:16",
            "body": {
              "id": 24784,
              "nodeType": "Block",
              "src": "13316:289:16",
              "statements": [
                {
                  "assignments": [
                    24770
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24770,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 24784,
                      "src": "13326:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24769,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13326:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24773,
                  "initialValue": {
                    "expression": {
                      "id": 24771,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24762,
                      "src": "13341:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 24772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "13341:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13326:25:16"
                },
                {
                  "assignments": [
                    24775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24775,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 24784,
                      "src": "13362:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24774,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13362:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24776,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13362:12:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "13393:162:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "13479:22:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "arr",
                              "nodeType": "YulIdentifier",
                              "src": "13491:3:16"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13496:4:16",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "13487:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13487:14:16"
                        },
                        "variableNames": [
                          {
                            "name": "_loc",
                            "nodeType": "YulIdentifier",
                            "src": "13479:4:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24775,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13479:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24762,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13491:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24777,
                  "nodeType": "InlineAssembly",
                  "src": "13384:171:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24779,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24764,
                        "src": "13578:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "id": 24780,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24775,
                        "src": "13587:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24781,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24770,
                        "src": "13593:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24778,
                      "name": "build",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24759,
                      "src": "13572:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                      }
                    },
                    "id": 24782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13572:26:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24768,
                  "id": 24783,
                  "nodeType": "Return",
                  "src": "13565:33:16"
                }
              ]
            },
            "documentation": {
              "id": 24760,
              "nodeType": "StructuredDocumentation",
              "src": "12846:386:16",
              "text": " @notice          Instantiate a memory view from a byte array.\n @dev             Note that due to Solidity memory representation, it is not possible to\n                  implement a deref, as the `bytes` type stores its len in memory.\n @param arr       The byte array\n @param newType   The type\n @return          bytes29 - The memory view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ref",
            "parameters": {
              "id": 24765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24762,
                  "mutability": "mutable",
                  "name": "arr",
                  "nodeType": "VariableDeclaration",
                  "scope": 24785,
                  "src": "13250:16:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24761,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13250:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24764,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 24785,
                  "src": "13268:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24763,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "13268:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13249:34:16"
            },
            "returnParameters": {
              "id": 24768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24767,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24785,
                  "src": "13307:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24766,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13307:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13306:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24795,
            "nodeType": "FunctionDefinition",
            "src": "13797:276:16",
            "body": {
              "id": 24794,
              "nodeType": "Block",
              "src": "13867:206:16",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "13886:181:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14003:26:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14016:3:16",
                              "type": "",
                              "value": "216"
                            },
                            {
                              "name": "memView",
                              "nodeType": "YulIdentifier",
                              "src": "14021:7:16"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "14012:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14012:17:16"
                        },
                        "variableNames": [
                          {
                            "name": "_type",
                            "nodeType": "YulIdentifier",
                            "src": "14003:5:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24791,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14003:5:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24788,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14021:7:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24793,
                  "nodeType": "InlineAssembly",
                  "src": "13877:190:16"
                }
              ]
            },
            "documentation": {
              "id": 24786,
              "nodeType": "StructuredDocumentation",
              "src": "13611:181:16",
              "text": " @notice          Return the associated type information.\n @param memView   The memory view\n @return          _type - The type associated with the view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "typeOf",
            "parameters": {
              "id": 24789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24788,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24795,
                  "src": "13813:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24787,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13813:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13812:17:16"
            },
            "returnParameters": {
              "id": 24792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24791,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 24795,
                  "src": "13853:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24790,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "13853:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13852:14:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24818,
            "nodeType": "FunctionDefinition",
            "src": "14337:141:16",
            "body": {
              "id": 24817,
              "nodeType": "Block",
              "src": "14413:65:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    },
                    "id": 24815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "id": 24813,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            },
                            "id": 24807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 24805,
                              "name": "left",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24798,
                              "src": "14431:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "^",
                            "rightExpression": {
                              "id": 24806,
                              "name": "right",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24800,
                              "src": "14438:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "src": "14431:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "id": 24808,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "14430:14:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">>",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 24811,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "32",
                              "id": 24809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14449:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 24810,
                              "name": "TWELVE_BYTES",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24186,
                              "src": "14453:12:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "14449:16:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "id": 24812,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "14448:18:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "14430:36:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 24814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14470:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14430:41:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24804,
                  "id": 24816,
                  "nodeType": "Return",
                  "src": "14423:48:16"
                }
              ]
            },
            "documentation": {
              "id": 24796,
              "nodeType": "StructuredDocumentation",
              "src": "14079:253:16",
              "text": " @notice          Optimized type comparison. Checks that the 5-byte type flag is equal.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the 5-byte type flag is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sameType",
            "parameters": {
              "id": 24801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24798,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 24818,
                  "src": "14355:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24797,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14355:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24800,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 24818,
                  "src": "14369:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24799,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14369:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14354:29:16"
            },
            "returnParameters": {
              "id": 24804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24803,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24818,
                  "src": "14407:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24802,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14407:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14406:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24832,
            "nodeType": "FunctionDefinition",
            "src": "14658:373:16",
            "body": {
              "id": 24831,
              "nodeType": "Block",
              "src": "14724:307:16",
              "statements": [
                {
                  "assignments": [
                    24827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24827,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 24831,
                      "src": "14734:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24826,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14734:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24829,
                  "initialValue": {
                    "id": 24828,
                    "name": "LOW_12_MASK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24183,
                    "src": "14750:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14734:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14811:214:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14978:37:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14994:3:16",
                                  "type": "",
                                  "value": "120"
                                },
                                {
                                  "name": "memView",
                                  "nodeType": "YulIdentifier",
                                  "src": "14999:7:16"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "14990:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14990:17:16"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "15009:5:16"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "14986:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14986:29:16"
                        },
                        "variableNames": [
                          {
                            "name": "_loc",
                            "nodeType": "YulIdentifier",
                            "src": "14978:4:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24824,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14978:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24827,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "15009:5:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24821,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14999:7:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24830,
                  "nodeType": "InlineAssembly",
                  "src": "14802:223:16"
                }
              ]
            },
            "documentation": {
              "id": 24819,
              "nodeType": "StructuredDocumentation",
              "src": "14484:169:16",
              "text": " @notice          Return the memory address of the underlying bytes.\n @param memView   The view\n @return          _loc - The memory address"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "loc",
            "parameters": {
              "id": 24822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24821,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24832,
                  "src": "14671:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24820,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "14671:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14670:17:16"
            },
            "returnParameters": {
              "id": 24825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24824,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 24832,
                  "src": "14711:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 24823,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "14711:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14710:13:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24853,
            "nodeType": "FunctionDefinition",
            "src": "15237:122:16",
            "body": {
              "id": 24852,
              "nodeType": "Block",
              "src": "15301:58:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "hexValue": "3332",
                          "id": 24847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15344:2:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 24843,
                                  "name": "memView",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24835,
                                  "src": "15330:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 24842,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24882,
                                "src": "15326:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 24844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15326:12:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            ],
                            "id": 24841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15318:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 24840,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "15318:7:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15318:21:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24846,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24169,
                        "src": "15318:25:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15318:29:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 24849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15350:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "15318:34:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24839,
                  "id": 24851,
                  "nodeType": "Return",
                  "src": "15311:41:16"
                }
              ]
            },
            "documentation": {
              "id": 24833,
              "nodeType": "StructuredDocumentation",
              "src": "15037:195:16",
              "text": " @notice          The number of memory words this memory view occupies, rounded up.\n @param memView   The view\n @return          uint256 - The number of memory words"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "words",
            "parameters": {
              "id": 24836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24835,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24853,
                  "src": "15252:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24834,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15252:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15251:17:16"
            },
            "returnParameters": {
              "id": 24839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24838,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24853,
                  "src": "15292:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24837,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15292:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15291:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24868,
            "nodeType": "FunctionDefinition",
            "src": "15578:111:16",
            "body": {
              "id": 24867,
              "nodeType": "Block",
              "src": "15646:43:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 24862,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24856,
                          "src": "15669:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24861,
                        "name": "words",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24853,
                        "src": "15663:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                          "typeString": "function (bytes29) pure returns (uint256)"
                        }
                      },
                      "id": 24863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15663:14:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 24864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15680:2:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "15663:19:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24860,
                  "id": 24866,
                  "nodeType": "Return",
                  "src": "15656:26:16"
                }
              ]
            },
            "documentation": {
              "id": 24854,
              "nodeType": "StructuredDocumentation",
              "src": "15365:208:16",
              "text": " @notice          The in-memory footprint of a fresh copy of the view.\n @param memView   The view\n @return          uint256 - The in-memory footprint of a fresh copy of the view."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "footprint",
            "parameters": {
              "id": 24857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24856,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24868,
                  "src": "15597:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24855,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15597:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15596:17:16"
            },
            "returnParameters": {
              "id": 24860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24859,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24868,
                  "src": "15637:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24858,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15637:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15636:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24882,
            "nodeType": "FunctionDefinition",
            "src": "15855:291:16",
            "body": {
              "id": 24881,
              "nodeType": "Block",
              "src": "15921:225:16",
              "statements": [
                {
                  "assignments": [
                    24877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24877,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 24881,
                      "src": "15931:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24876,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15931:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24879,
                  "initialValue": {
                    "id": 24878,
                    "name": "LOW_12_MASK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24183,
                    "src": "15947:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15931:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "16008:132:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "16094:36:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "16110:2:16",
                                  "type": "",
                                  "value": "24"
                                },
                                {
                                  "name": "memView",
                                  "nodeType": "YulIdentifier",
                                  "src": "16114:7:16"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "16106:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16106:16:16"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "16124:5:16"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "16102:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16102:28:16"
                        },
                        "variableNames": [
                          {
                            "name": "_len",
                            "nodeType": "YulIdentifier",
                            "src": "16094:4:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 24874,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16094:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24877,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16124:5:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 24871,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "16114:7:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 24880,
                  "nodeType": "InlineAssembly",
                  "src": "15999:141:16"
                }
              ]
            },
            "documentation": {
              "id": 24869,
              "nodeType": "StructuredDocumentation",
              "src": "15695:155:16",
              "text": " @notice          The number of bytes of the view.\n @param memView   The view\n @return          _len - The length of the view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "parameters": {
              "id": 24872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24871,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24882,
                  "src": "15868:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24870,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15868:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15867:17:16"
            },
            "returnParameters": {
              "id": 24875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24874,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24882,
                  "src": "15908:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 24873,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "15908:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15907:13:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24899,
            "nodeType": "FunctionDefinition",
            "src": "16320:113:16",
            "body": {
              "id": 24898,
              "nodeType": "Block",
              "src": "16382:51:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    },
                    "id": 24896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 24891,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24885,
                          "src": "16403:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24890,
                        "name": "loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24832,
                        "src": "16399:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 24892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16399:12:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 24894,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24885,
                          "src": "16418:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24893,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24882,
                        "src": "16414:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 24895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16414:12:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "16399:27:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "functionReturnParameters": 24889,
                  "id": 24897,
                  "nodeType": "Return",
                  "src": "16392:34:16"
                }
              ]
            },
            "documentation": {
              "id": 24883,
              "nodeType": "StructuredDocumentation",
              "src": "16152:163:16",
              "text": " @notice          Returns the endpoint of `memView`.\n @param memView   The view\n @return          uint256 - The endpoint of `memView`"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "end",
            "parameters": {
              "id": 24886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24885,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24899,
                  "src": "16333:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24884,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16333:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16332:17:16"
            },
            "returnParameters": {
              "id": 24889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24888,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24899,
                  "src": "16373:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16373:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16372:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24948,
            "nodeType": "FunctionDefinition",
            "src": "16713:370:16",
            "body": {
              "id": 24947,
              "nodeType": "Block",
              "src": "16823:260:16",
              "statements": [
                {
                  "assignments": [
                    24914
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24914,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 24947,
                      "src": "16833:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24913,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16833:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24918,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24916,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24902,
                        "src": "16852:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 24915,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "16848:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 24917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16848:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16833:27:16"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 24924,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24906,
                          "src": "16942:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 24921,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24904,
                              "src": "16930:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 24919,
                              "name": "_loc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24914,
                              "src": "16921:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24920,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24169,
                            "src": "16921:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 24922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16921:16:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24169,
                        "src": "16921:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16921:26:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 24927,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24902,
                          "src": "16954:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 24926,
                        "name": "end",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24899,
                        "src": "16950:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                          "typeString": "function (bytes29) pure returns (uint256)"
                        }
                      },
                      "id": 24928,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16950:12:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16921:41:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24933,
                  "nodeType": "IfStatement",
                  "src": "16917:83:16",
                  "trueBody": {
                    "id": 24932,
                    "nodeType": "Block",
                    "src": "16964:36:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 24930,
                          "name": "NULL",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24180,
                          "src": "16985:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "functionReturnParameters": 24912,
                        "id": 24931,
                        "nodeType": "Return",
                        "src": "16978:11:16"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 24939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24934,
                      "name": "_loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24914,
                      "src": "17010:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 24937,
                          "name": "_index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24904,
                          "src": "17026:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 24935,
                          "name": "_loc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24914,
                          "src": "17017:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24169,
                        "src": "17017:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17017:16:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17010:23:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 24940,
                  "nodeType": "ExpressionStatement",
                  "src": "17010:23:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24942,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24908,
                        "src": "17056:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "id": 24943,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24914,
                        "src": "17065:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24944,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24906,
                        "src": "17071:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24941,
                      "name": "build",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24759,
                      "src": "17050:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                      }
                    },
                    "id": 24945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17050:26:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24912,
                  "id": 24946,
                  "nodeType": "Return",
                  "src": "17043:33:16"
                }
              ]
            },
            "documentation": {
              "id": 24900,
              "nodeType": "StructuredDocumentation",
              "src": "16439:269:16",
              "text": " @notice          Safe slicing without memory modification.\n @param memView   The view\n @param _index    The start index\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "slice",
            "parameters": {
              "id": 24909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24902,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24948,
                  "src": "16728:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24901,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16728:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24904,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 24948,
                  "src": "16745:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16745:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24906,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24948,
                  "src": "16761:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16761:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24908,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 24948,
                  "src": "16775:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24907,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "16775:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16727:63:16"
            },
            "returnParameters": {
              "id": 24912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24911,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24948,
                  "src": "16814:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24910,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "16814:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16813:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24968,
            "nodeType": "FunctionDefinition",
            "src": "17351:151:16",
            "body": {
              "id": 24967,
              "nodeType": "Block",
              "src": "17446:56:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24961,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24951,
                        "src": "17469:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 24962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17478:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 24963,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24953,
                        "src": "17481:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24964,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24955,
                        "src": "17487:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 24960,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24948,
                      "src": "17463:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 24965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17463:32:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24959,
                  "id": 24966,
                  "nodeType": "Return",
                  "src": "17456:39:16"
                }
              ]
            },
            "documentation": {
              "id": 24949,
              "nodeType": "StructuredDocumentation",
              "src": "17089:257:16",
              "text": " @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "prefix",
            "parameters": {
              "id": 24956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24951,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24968,
                  "src": "17367:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24950,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17367:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24953,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24968,
                  "src": "17384:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24952,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17384:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24955,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 24968,
                  "src": "17398:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24954,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "17398:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17366:47:16"
            },
            "returnParameters": {
              "id": 24959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24958,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24968,
                  "src": "17437:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24957,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17437:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17436:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 24996,
            "nodeType": "FunctionDefinition",
            "src": "17768:182:16",
            "body": {
              "id": 24995,
              "nodeType": "Block",
              "src": "17864:86:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24981,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24971,
                        "src": "17887:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 24989,
                            "name": "_len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24973,
                            "src": "17922:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 24985,
                                    "name": "memView",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24971,
                                    "src": "17908:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes29",
                                      "typeString": "bytes29"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes29",
                                      "typeString": "bytes29"
                                    }
                                  ],
                                  "id": 24984,
                                  "name": "len",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24882,
                                  "src": "17904:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                    "typeString": "function (bytes29) pure returns (uint96)"
                                  }
                                },
                                "id": 24986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17904:12:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 24983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17896:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 24982,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "17896:7:16",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 24987,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17896:21:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 24988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24143,
                          "src": "17896:25:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 24990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17896:31:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24991,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24973,
                        "src": "17929:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24992,
                        "name": "newType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24975,
                        "src": "17935:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 24980,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24948,
                      "src": "17881:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 24993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17881:62:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "functionReturnParameters": 24979,
                  "id": 24994,
                  "nodeType": "Return",
                  "src": "17874:69:16"
                }
              ]
            },
            "documentation": {
              "id": 24969,
              "nodeType": "StructuredDocumentation",
              "src": "17508:255:16",
              "text": " @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "postfix",
            "parameters": {
              "id": 24976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24971,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 24996,
                  "src": "17785:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24970,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17785:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24973,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 24996,
                  "src": "17802:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24972,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17802:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24975,
                  "mutability": "mutable",
                  "name": "newType",
                  "nodeType": "VariableDeclaration",
                  "scope": 24996,
                  "src": "17816:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 24974,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "17816:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17784:47:16"
            },
            "returnParameters": {
              "id": 24979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24978,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24996,
                  "src": "17855:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 24977,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "17855:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17854:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25065,
            "nodeType": "FunctionDefinition",
            "src": "18259:741:16",
            "body": {
              "id": 25064,
              "nodeType": "Block",
              "src": "18424:576:16",
              "statements": [
                {
                  "assignments": [
                    null,
                    25011
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 25011,
                      "mutability": "mutable",
                      "name": "a",
                      "nodeType": "VariableDeclaration",
                      "scope": 25064,
                      "src": "18437:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25010,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18437:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25015,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25013,
                        "name": "_loc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24999,
                        "src": "18460:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25012,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24431,
                      "src": "18450:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 25014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18450:15:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18434:31:16"
                },
                {
                  "assignments": [
                    null,
                    25017
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 25017,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 25064,
                      "src": "18478:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25016,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18478:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25021,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25019,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25001,
                        "src": "18501:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25018,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24431,
                      "src": "18491:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 25020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18491:15:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18475:31:16"
                },
                {
                  "assignments": [
                    null,
                    25023
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 25023,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "scope": 25064,
                      "src": "18519:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25022,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18519:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25027,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25025,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25003,
                        "src": "18542:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25024,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24431,
                      "src": "18532:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 25026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18532:17:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18516:33:16"
                },
                {
                  "assignments": [
                    null,
                    25029
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 25029,
                      "mutability": "mutable",
                      "name": "d",
                      "nodeType": "VariableDeclaration",
                      "scope": 25064,
                      "src": "18562:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25028,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18562:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25033,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25031,
                        "name": "_slice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25005,
                        "src": "18585:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25030,
                      "name": "encodeHex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24431,
                      "src": "18575:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 25032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18575:17:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18559:33:16"
                },
                {
                  "expression": {
                    "id": 25062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25034,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25008,
                      "src": "18602:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "54797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078",
                              "id": 25039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18662:55:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fb6c6ce939dcb005b895abe7a9570250d9c1c31a5440a6a6e28e0acc2d1c6af1",
                                "typeString": "literal_string \"TypedMemView/index - Overran the view. Slice is at 0x\""
                              },
                              "value": "TypedMemView/index - Overran the view. Slice is at 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 25042,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25011,
                                  "src": "18742:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 25041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18735:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 25040,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18735:6:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 25043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18735:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2077697468206c656e677468203078",
                              "id": 25044,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18762:17:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              "value": " with length 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 25047,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25017,
                                  "src": "18804:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 25046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18797:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 25045,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18797:6:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 25048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18797:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2e20417474656d7074656420746f20696e646578206174206f6666736574203078",
                              "id": 25049,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18824:35:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_76d133faf43042eef7167f01d32e0891632a5651573db9fc8b6aa42fdbcaf509",
                                "typeString": "literal_string \". Attempted to index at offset 0x\""
                              },
                              "value": ". Attempted to index at offset 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 25052,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25023,
                                  "src": "18884:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 25051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18877:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 25050,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18877:6:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 25053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18877:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2077697468206c656e677468203078",
                              "id": 25054,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18904:17:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              "value": " with length 0x"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 25057,
                                  "name": "d",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25029,
                                  "src": "18946:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 25056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18939:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint48_$",
                                  "typeString": "type(uint48)"
                                },
                                "typeName": {
                                  "id": 25055,
                                  "name": "uint48",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18939:6:16",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 25058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18939:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            {
                              "hexValue": "2e",
                              "id": 25059,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18966:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              },
                              "value": "."
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_fb6c6ce939dcb005b895abe7a9570250d9c1c31a5440a6a6e28e0acc2d1c6af1",
                                "typeString": "literal_string \"TypedMemView/index - Overran the view. Slice is at 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_76d133faf43042eef7167f01d32e0891632a5651573db9fc8b6aa42fdbcaf509",
                                "typeString": "literal_string \". Attempted to index at offset 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3e6849d566dba71a1ac686a5bd3af1bed003e25465c91471808028cdad9d144b",
                                "typeString": "literal_string \" with length 0x\""
                              },
                              {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              }
                            ],
                            "expression": {
                              "id": 25037,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "18628:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 25038,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "18628:16:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 25060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18628:355:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 25036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18608:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        },
                        "typeName": {
                          "id": 25035,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "18608:6:16",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 25061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18608:385:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "18602:391:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 25063,
                  "nodeType": "ExpressionStatement",
                  "src": "18602:391:16"
                }
              ]
            },
            "documentation": {
              "id": 24997,
              "nodeType": "StructuredDocumentation",
              "src": "17956:298:16",
              "text": " @notice          Construct an error message for an indexing overrun.\n @param _loc      The memory address\n @param _len      The length\n @param _index    The index\n @param _slice    The slice where the overrun occurred\n @return          err - The err"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexErrOverrun",
            "parameters": {
              "id": 25006,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24999,
                  "mutability": "mutable",
                  "name": "_loc",
                  "nodeType": "VariableDeclaration",
                  "scope": 25065,
                  "src": "18293:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24998,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18293:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25001,
                  "mutability": "mutable",
                  "name": "_len",
                  "nodeType": "VariableDeclaration",
                  "scope": 25065,
                  "src": "18315:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18315:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25003,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 25065,
                  "src": "18337:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25002,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18337:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25005,
                  "mutability": "mutable",
                  "name": "_slice",
                  "nodeType": "VariableDeclaration",
                  "scope": 25065,
                  "src": "18361:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25004,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18361:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18283:98:16"
            },
            "returnParameters": {
              "id": 25009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25008,
                  "mutability": "mutable",
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 25065,
                  "src": "18405:17:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 25007,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18405:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18404:19:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25140,
            "nodeType": "FunctionDefinition",
            "src": "19502:677:16",
            "body": {
              "id": 25139,
              "nodeType": "Block",
              "src": "19603:576:16",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 25079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 25077,
                      "name": "_bytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25072,
                      "src": "19617:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 25078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19627:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19617:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25086,
                  "nodeType": "IfStatement",
                  "src": "19613:37:16",
                  "trueBody": {
                    "id": 25085,
                    "nodeType": "Block",
                    "src": "19630:20:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 25082,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19646:1:16",
                              "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": 25081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "19638:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 25080,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "19638:7:16",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 25083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19638:10:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 25076,
                        "id": 25084,
                        "nodeType": "Return",
                        "src": "19631:17:16"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 25089,
                          "name": "_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25072,
                          "src": "19674:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "expression": {
                          "id": 25087,
                          "name": "_index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25070,
                          "src": "19663:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 25088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24169,
                        "src": "19663:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 25090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19663:18:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 25092,
                          "name": "memView",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25068,
                          "src": "19688:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 25091,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24882,
                        "src": "19684:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                          "typeString": "function (bytes29) pure returns (uint96)"
                        }
                      },
                      "id": 25093,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19684:12:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "19663:33:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25112,
                  "nodeType": "IfStatement",
                  "src": "19659:140:16",
                  "trueBody": {
                    "id": 25111,
                    "nodeType": "Block",
                    "src": "19698:101:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 25098,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25068,
                                      "src": "19739:7:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 25097,
                                    "name": "loc",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24832,
                                    "src": "19735:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                      "typeString": "function (bytes29) pure returns (uint96)"
                                    }
                                  },
                                  "id": 25099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19735:12:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 25101,
                                      "name": "memView",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25068,
                                      "src": "19753:7:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes29",
                                        "typeString": "bytes29"
                                      }
                                    ],
                                    "id": 25100,
                                    "name": "len",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24882,
                                    "src": "19749:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                      "typeString": "function (bytes29) pure returns (uint96)"
                                    }
                                  },
                                  "id": 25102,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19749:12:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  }
                                },
                                {
                                  "id": 25103,
                                  "name": "_index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25070,
                                  "src": "19763:6:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 25106,
                                      "name": "_bytes",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25072,
                                      "src": "19779:6:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "id": 25105,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "19771:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 25104,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "19771:7:16",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 25107,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19771:15:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  },
                                  {
                                    "typeIdentifier": "t_uint96",
                                    "typeString": "uint96"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 25096,
                                "name": "indexErrOverrun",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25065,
                                "src": "19719:15:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 25108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19719:68:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 25095,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -19,
                              -19
                            ],
                            "referencedDeclaration": -19,
                            "src": "19712:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 25109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19712:76:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 25110,
                        "nodeType": "ExpressionStatement",
                        "src": "19712:76:16"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 25116,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 25114,
                          "name": "_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25072,
                          "src": "19816:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "3332",
                          "id": 25115,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19826:2:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        },
                        "src": "19816:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e203332206279746573",
                        "id": 25117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19830:60:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2c061d25dd4dec479f0720f15754fff58a1a4debc7353bd1d3f4b7b23876297",
                          "typeString": "literal_string \"TypedMemView/index - Attempted to index more than 32 bytes\""
                        },
                        "value": "TypedMemView/index - Attempted to index more than 32 bytes"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2c061d25dd4dec479f0720f15754fff58a1a4debc7353bd1d3f4b7b23876297",
                          "typeString": "literal_string \"TypedMemView/index - Attempted to index more than 32 bytes\""
                        }
                      ],
                      "id": 25113,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19808:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19808:83:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25119,
                  "nodeType": "ExpressionStatement",
                  "src": "19808:83:16"
                },
                {
                  "assignments": [
                    25121
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25121,
                      "mutability": "mutable",
                      "name": "bitLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 25139,
                      "src": "19902:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 25120,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "19902:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25125,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 25124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 25122,
                      "name": "_bytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25072,
                      "src": "19920:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "38",
                      "id": 25123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19929:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_8_by_1",
                        "typeString": "int_const 8"
                      },
                      "value": "8"
                    },
                    "src": "19920:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19902:28:16"
                },
                {
                  "assignments": [
                    25127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25127,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25139,
                      "src": "19940:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25126,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19940:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25131,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25129,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25068,
                        "src": "19959:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25128,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "19955:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19955:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19940:27:16"
                },
                {
                  "assignments": [
                    25133
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25133,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 25139,
                      "src": "19977:13:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25132,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19977:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25137,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25135,
                        "name": "bitLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25121,
                        "src": "20002:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 25134,
                      "name": "leftMask",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24538,
                      "src": "19993:8:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint256_$",
                        "typeString": "function (uint8) pure returns (uint256)"
                      }
                    },
                    "id": 25136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19993:19:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19977:35:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "20031:142:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "20117:46:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_loc",
                                      "nodeType": "YulIdentifier",
                                      "src": "20141:4:16"
                                    },
                                    {
                                      "name": "_index",
                                      "nodeType": "YulIdentifier",
                                      "src": "20147:6:16"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "20137:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "20137:17:16"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "20131:5:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20131:24:16"
                            },
                            {
                              "name": "_mask",
                              "nodeType": "YulIdentifier",
                              "src": "20157:5:16"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "20127:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20127:36:16"
                        },
                        "variableNames": [
                          {
                            "name": "result",
                            "nodeType": "YulIdentifier",
                            "src": "20117:6:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25070,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20147:6:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25127,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20141:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25133,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20157:5:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25075,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "20117:6:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25138,
                  "nodeType": "InlineAssembly",
                  "src": "20022:151:16"
                }
              ]
            },
            "documentation": {
              "id": 25066,
              "nodeType": "StructuredDocumentation",
              "src": "19006:491:16",
              "text": " @notice          Load up to 32 bytes from the view onto the stack.\n @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\n                  This can be immediately cast to a smaller fixed-length byte array.\n                  To automatically cast to an integer, use `indexUint`.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The 32 byte result"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "index",
            "parameters": {
              "id": 25073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25068,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25140,
                  "src": "19517:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25067,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "19517:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25070,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 25140,
                  "src": "19534:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19534:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25072,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 25140,
                  "src": "19550:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 25071,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "19550:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19516:47:16"
            },
            "returnParameters": {
              "id": 25076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25075,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 25140,
                  "src": "19587:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25074,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19587:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19586:16:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25170,
            "nodeType": "FunctionDefinition",
            "src": "20525:191:16",
            "body": {
              "id": 25169,
              "nodeType": "Block",
              "src": "20630:86:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 25155,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25143,
                              "src": "20661:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            {
                              "id": 25156,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25145,
                              "src": "20670:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 25157,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25147,
                              "src": "20678:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 25154,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25140,
                            "src": "20655:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$",
                              "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                            }
                          },
                          "id": 25158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20655:30:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 25153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20647:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 25152,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20647:7:16",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 25159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20647:39:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">>",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 25165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 25162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3332",
                                  "id": 25160,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20692:2:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 25161,
                                  "name": "_bytes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25147,
                                  "src": "20697:6:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "20692:11:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "id": 25163,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "20691:13:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "38",
                            "id": 25164,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20707:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "20691:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "id": 25166,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "20690:19:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "20647:62:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 25151,
                  "id": 25168,
                  "nodeType": "Return",
                  "src": "20640:69:16"
                }
              ]
            },
            "documentation": {
              "id": 25141,
              "nodeType": "StructuredDocumentation",
              "src": "20185:335:16",
              "text": " @notice          Parse an unsigned integer from the view at `_index`.\n @dev             Requires that the view have >= `_bytes` bytes following that index.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexUint",
            "parameters": {
              "id": 25148,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25143,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25170,
                  "src": "20544:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25142,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "20544:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25145,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 25170,
                  "src": "20561:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25144,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20561:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25147,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 25170,
                  "src": "20577:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 25146,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "20577:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20543:47:16"
            },
            "returnParameters": {
              "id": 25151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25150,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 25170,
                  "src": "20614:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20614:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20613:16:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25194,
            "nodeType": "FunctionDefinition",
            "src": "20958:186:16",
            "body": {
              "id": 25193,
              "nodeType": "Block",
              "src": "21065:79:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 25186,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25173,
                                "src": "21111:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              {
                                "id": 25187,
                                "name": "_index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25175,
                                "src": "21120:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 25188,
                                "name": "_bytes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25177,
                                "src": "21128:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 25185,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25140,
                              "src": "21105:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$",
                                "typeString": "function (bytes29,uint256,uint8) pure returns (bytes32)"
                              }
                            },
                            "id": 25189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21105:30:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 25184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21097:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 25183,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "21097:7:16",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 25190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21097:39:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25182,
                      "name": "reverseUint256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24528,
                      "src": "21082:14:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 25191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21082:55:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 25181,
                  "id": 25192,
                  "nodeType": "Return",
                  "src": "21075:62:16"
                }
              ]
            },
            "documentation": {
              "id": 25171,
              "nodeType": "StructuredDocumentation",
              "src": "20722:231:16",
              "text": " @notice          Parse an unsigned integer from LE bytes.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexLEUint",
            "parameters": {
              "id": 25178,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25173,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25194,
                  "src": "20979:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25172,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "20979:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25175,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 25194,
                  "src": "20996:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20996:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25177,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 25194,
                  "src": "21012:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 25176,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "21012:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20978:47:16"
            },
            "returnParameters": {
              "id": 25181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25180,
                  "mutability": "mutable",
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 25194,
                  "src": "21049:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21049:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21048:16:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25217,
            "nodeType": "FunctionDefinition",
            "src": "21433:159:16",
            "body": {
              "id": 25216,
              "nodeType": "Block",
              "src": "21520:72:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 25209,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25197,
                                "src": "21563:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              {
                                "id": 25210,
                                "name": "_index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25199,
                                "src": "21572:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "hexValue": "3230",
                                "id": 25211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21580:2:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                },
                                "value": "20"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                }
                              ],
                              "id": 25208,
                              "name": "indexUint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25170,
                              "src": "21553:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$",
                                "typeString": "function (bytes29,uint256,uint8) pure returns (uint256)"
                              }
                            },
                            "id": 25212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21553:30:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 25207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21545:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 25206,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "21545:7:16",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 25213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21545:39:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 25205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "21537:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 25204,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "21537:7:16",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 25214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21537:48:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 25203,
                  "id": 25215,
                  "nodeType": "Return",
                  "src": "21530:55:16"
                }
              ]
            },
            "documentation": {
              "id": 25195,
              "nodeType": "StructuredDocumentation",
              "src": "21150:278:16",
              "text": " @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\n                  following that index.\n @param memView   The view\n @param _index    The index\n @return          address - The address"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "indexAddress",
            "parameters": {
              "id": 25200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25197,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25217,
                  "src": "21455:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25196,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "21455:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25199,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 25217,
                  "src": "21472:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21472:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21454:33:16"
            },
            "returnParameters": {
              "id": 25203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25202,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25217,
                  "src": "21511:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25201,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21511:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21510:9:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25239,
            "nodeType": "FunctionDefinition",
            "src": "21799:298:16",
            "body": {
              "id": 25238,
              "nodeType": "Block",
              "src": "21871:226:16",
              "statements": [
                {
                  "assignments": [
                    25226
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25226,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25238,
                      "src": "21881:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25225,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21881:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25230,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25228,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25220,
                        "src": "21900:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25227,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "21896:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21896:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21881:27:16"
                },
                {
                  "assignments": [
                    25232
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25232,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25238,
                      "src": "21918:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25231,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21918:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25236,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25234,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25220,
                        "src": "21937:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25233,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "21933:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21933:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21918:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "21964:127:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "22050:31:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "_loc",
                              "nodeType": "YulIdentifier",
                              "src": "22070:4:16"
                            },
                            {
                              "name": "_len",
                              "nodeType": "YulIdentifier",
                              "src": "22076:4:16"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "22060:9:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22060:21:16"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "22050:6:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25232,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22076:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25226,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22070:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25223,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22050:6:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25237,
                  "nodeType": "InlineAssembly",
                  "src": "21955:136:16"
                }
              ]
            },
            "documentation": {
              "id": 25218,
              "nodeType": "StructuredDocumentation",
              "src": "21598:196:16",
              "text": " @notice          Return the keccak256 hash of the underlying memory\n @param memView   The view\n @return          digest - The keccak256 hash of the underlying memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "parameters": {
              "id": 25221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25220,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25239,
                  "src": "21815:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25219,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "21815:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21814:17:16"
            },
            "returnParameters": {
              "id": 25224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25223,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 25239,
                  "src": "21855:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25222,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "21855:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21854:16:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25261,
            "nodeType": "FunctionDefinition",
            "src": "22365:392:16",
            "body": {
              "id": 25260,
              "nodeType": "Block",
              "src": "22435:322:16",
              "statements": [
                {
                  "assignments": [
                    25248
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25248,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25260,
                      "src": "22445:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25247,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22445:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25252,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25250,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25242,
                        "src": "22464:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25249,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "22460:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22460:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22445:27:16"
                },
                {
                  "assignments": [
                    25254
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25254,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25260,
                      "src": "22482:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25253,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22482:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25258,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25256,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25242,
                        "src": "22501:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25255,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "22497:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22497:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22482:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "22528:223:16",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "22614:22:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "22631:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "22625:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22625:11:16"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "22618:3:16",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "22664:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "22664:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "22671:1:16",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "22674:4:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "22680:4:16"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "22686:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "22691:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "22653:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22653:43:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "22649:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22649:48:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "22649:48:16"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "22721:20:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "22737:3:16"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "22731:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "22731:10:16"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "22721:6:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25254,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22680:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25248,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22674:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25245,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "22721:6:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25259,
                  "nodeType": "InlineAssembly",
                  "src": "22519:232:16"
                }
              ]
            },
            "documentation": {
              "id": 25240,
              "nodeType": "StructuredDocumentation",
              "src": "22103:257:16",
              "text": " @notice          Return the sha2 digest of the underlying memory.\n @dev             We explicitly deallocate memory afterwards.\n @param memView   The view\n @return          digest - The sha2 hash of the underlying memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha2",
            "parameters": {
              "id": 25243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25242,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25261,
                  "src": "22379:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25241,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "22379:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22378:17:16"
            },
            "returnParameters": {
              "id": 25246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25245,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 25261,
                  "src": "22419:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25244,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22419:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22418:16:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25283,
            "nodeType": "FunctionDefinition",
            "src": "22931:503:16",
            "body": {
              "id": 25282,
              "nodeType": "Block",
              "src": "23004:430:16",
              "statements": [
                {
                  "assignments": [
                    25270
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25270,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25282,
                      "src": "23014:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25269,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23014:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25274,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25272,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25264,
                        "src": "23033:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25271,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "23029:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23029:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23014:27:16"
                },
                {
                  "assignments": [
                    25276
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25276,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25282,
                      "src": "23051:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25275,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23051:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25280,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25278,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25264,
                        "src": "23070:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25277,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "23066:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23066:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23051:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "23097:331:16",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "23183:22:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "23200:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23194:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23194:11:16"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "23187:3:16",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23233:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23233:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23240:1:16",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "23243:4:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "23249:4:16"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23255:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23260:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23222:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23222:43:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23218:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23218:48:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23218:48:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23302:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23302:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23309:1:16",
                                  "type": "",
                                  "value": "3"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23312:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23317:4:16",
                                  "type": "",
                                  "value": "0x20"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23323:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23328:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23291:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23291:42:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23287:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23287:47:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23287:47:16"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "23357:30:16",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23377:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23382:3:16",
                                  "type": "",
                                  "value": "0xc"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "23373:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23373:13:16"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23367:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23367:20:16"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "23357:6:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25276,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23249:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25270,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23243:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25267,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23357:6:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25281,
                  "nodeType": "InlineAssembly",
                  "src": "23088:340:16"
                }
              ]
            },
            "documentation": {
              "id": 25262,
              "nodeType": "StructuredDocumentation",
              "src": "22763:163:16",
              "text": " @notice          Implements bitcoin's hash160 (rmd160(sha2()))\n @param memView   The pre-image\n @return          digest - the Digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash160",
            "parameters": {
              "id": 25265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25264,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25283,
                  "src": "22948:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25263,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "22948:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22947:17:16"
            },
            "returnParameters": {
              "id": 25268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25267,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 25283,
                  "src": "22988:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 25266,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "22988:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22987:16:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25305,
            "nodeType": "FunctionDefinition",
            "src": "23614:466:16",
            "body": {
              "id": 25304,
              "nodeType": "Block",
              "src": "23687:393:16",
              "statements": [
                {
                  "assignments": [
                    25292
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25292,
                      "mutability": "mutable",
                      "name": "_loc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25304,
                      "src": "23697:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25291,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23697:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25296,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25294,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25286,
                        "src": "23716:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25293,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "23712:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23712:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23697:27:16"
                },
                {
                  "assignments": [
                    25298
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25298,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25304,
                      "src": "23734:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25297,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23734:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25302,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25300,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25286,
                        "src": "23753:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25299,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "23749:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23749:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23734:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "23780:294:16",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "23866:22:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "23883:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "23877:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23877:11:16"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "23870:3:16",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23916:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23916:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23923:1:16",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "_loc",
                                  "nodeType": "YulIdentifier",
                                  "src": "23926:4:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "23932:4:16"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23938:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23943:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23905:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23905:43:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23901:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23901:48:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23901:48:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "23988:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "23988:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "23995:1:16",
                                  "type": "",
                                  "value": "2"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "23998:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "24003:4:16",
                                  "type": "",
                                  "value": "0x20"
                                },
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "24009:3:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "24014:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "23977:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "23977:42:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "23973:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "23973:47:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "23973:47:16"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "24044:20:16",
                        "value": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "24060:3:16"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "24054:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "24054:10:16"
                        },
                        "variableNames": [
                          {
                            "name": "digest",
                            "nodeType": "YulIdentifier",
                            "src": "24044:6:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25298,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23932:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25292,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "23926:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25289,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24044:6:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25303,
                  "nodeType": "InlineAssembly",
                  "src": "23771:303:16"
                }
              ]
            },
            "documentation": {
              "id": 25284,
              "nodeType": "StructuredDocumentation",
              "src": "23440:169:16",
              "text": " @notice          Implements bitcoin's hash256 (double sha2)\n @param memView   A view of the preimage\n @return          digest - the Digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash256",
            "parameters": {
              "id": 25287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25286,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25305,
                  "src": "23631:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25285,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "23631:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23630:17:16"
            },
            "returnParameters": {
              "id": 25290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25289,
                  "mutability": "mutable",
                  "name": "digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 25305,
                  "src": "23671:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25288,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "23671:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23670:16:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25341,
            "nodeType": "FunctionDefinition",
            "src": "24334:189:16",
            "body": {
              "id": 25340,
              "nodeType": "Block",
              "src": "24414:109:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 25338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 25329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "id": 25321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 25316,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25308,
                                  "src": "24436:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25315,
                                "name": "loc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24832,
                                "src": "24432:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 25317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24432:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 25319,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25310,
                                  "src": "24449:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25318,
                                "name": "loc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24832,
                                "src": "24445:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 25320,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24445:10:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "src": "24432:23:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            },
                            "id": 25328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 25323,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25308,
                                  "src": "24463:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25322,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24882,
                                "src": "24459:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 25324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24459:9:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 25326,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25310,
                                  "src": "24476:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25325,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24882,
                                "src": "24472:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                  "typeString": "function (bytes29) pure returns (uint96)"
                                }
                              },
                              "id": 25327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24472:10:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint96",
                                "typeString": "uint96"
                              }
                            },
                            "src": "24459:23:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "24432:50:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 25330,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24431:52:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 25337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 25332,
                            "name": "left",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25308,
                            "src": "24494:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 25331,
                          "name": "keccak",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25239,
                          "src": "24487:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 25333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24487:12:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 25335,
                            "name": "right",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25310,
                            "src": "24510:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 25334,
                          "name": "keccak",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25239,
                          "src": "24503:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 25336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24503:13:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "24487:29:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "24431:85:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 25314,
                  "id": 25339,
                  "nodeType": "Return",
                  "src": "24424:92:16"
                }
              ]
            },
            "documentation": {
              "id": 25306,
              "nodeType": "StructuredDocumentation",
              "src": "24086:243:16",
              "text": " @notice          Return true if the underlying memory is equal. Else false.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the underlying memory is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "untypedEqual",
            "parameters": {
              "id": 25311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25308,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 25341,
                  "src": "24356:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25307,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24356:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25310,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 25341,
                  "src": "24370:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25309,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24370:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24355:29:16"
            },
            "returnParameters": {
              "id": 25314,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25313,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25341,
                  "src": "24408:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25312,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24408:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24407:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25358,
            "nodeType": "FunctionDefinition",
            "src": "24778:133:16",
            "body": {
              "id": 25357,
              "nodeType": "Block",
              "src": "24861:50:16",
              "statements": [
                {
                  "expression": {
                    "id": 25355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "24878:26:16",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 25352,
                          "name": "left",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25344,
                          "src": "24892:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 25353,
                          "name": "right",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25346,
                          "src": "24898:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 25351,
                        "name": "untypedEqual",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25341,
                        "src": "24879:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29,bytes29) pure returns (bool)"
                        }
                      },
                      "id": 25354,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24879:25:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 25350,
                  "id": 25356,
                  "nodeType": "Return",
                  "src": "24871:33:16"
                }
              ]
            },
            "documentation": {
              "id": 25342,
              "nodeType": "StructuredDocumentation",
              "src": "24529:244:16",
              "text": " @notice          Return false if the underlying memory is equal. Else true.\n @param left      The first view\n @param right     The second view\n @return          bool - False if the underlying memory is equal"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "untypedNotEqual",
            "parameters": {
              "id": 25347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25344,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 25358,
                  "src": "24803:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25343,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24803:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25346,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 25358,
                  "src": "24817:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25345,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "24817:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24802:29:16"
            },
            "returnParameters": {
              "id": 25350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25349,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25358,
                  "src": "24855:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25348,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24855:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24854:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25390,
            "nodeType": "FunctionDefinition",
            "src": "25223:178:16",
            "body": {
              "id": 25389,
              "nodeType": "Block",
              "src": "25296:105:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 25387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "id": 25370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 25368,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25361,
                        "src": "25313:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 25369,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25363,
                        "src": "25321:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "src": "25313:13:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 25385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            },
                            "id": 25377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 25372,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25361,
                                  "src": "25338:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25371,
                                "name": "typeOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24795,
                                "src": "25331:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                  "typeString": "function (bytes29) pure returns (uint40)"
                                }
                              },
                              "id": 25373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25331:12:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 25375,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25363,
                                  "src": "25354:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25374,
                                "name": "typeOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24795,
                                "src": "25347:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                                  "typeString": "function (bytes29) pure returns (uint40)"
                                }
                              },
                              "id": 25376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25347:13:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "src": "25331:29:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 25384,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 25379,
                                  "name": "left",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25361,
                                  "src": "25371:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25378,
                                "name": "keccak",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25239,
                                "src": "25364:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes29) pure returns (bytes32)"
                                }
                              },
                              "id": 25380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25364:12:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 25382,
                                  "name": "right",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25363,
                                  "src": "25387:5:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                ],
                                "id": 25381,
                                "name": "keccak",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25239,
                                "src": "25380:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes29) pure returns (bytes32)"
                                }
                              },
                              "id": 25383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25380:13:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "25364:29:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "25331:62:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 25386,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "25330:64:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25313:81:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 25367,
                  "id": 25388,
                  "nodeType": "Return",
                  "src": "25306:88:16"
                }
              ]
            },
            "documentation": {
              "id": 25359,
              "nodeType": "StructuredDocumentation",
              "src": "24917:301:16",
              "text": " @notice          Compares type equality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are the same"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equal",
            "parameters": {
              "id": 25364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25361,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 25390,
                  "src": "25238:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25360,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25238:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25363,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 25390,
                  "src": "25252:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25362,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25252:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25237:29:16"
            },
            "returnParameters": {
              "id": 25367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25366,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25390,
                  "src": "25290:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25365,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25290:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25289:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25407,
            "nodeType": "FunctionDefinition",
            "src": "25719:119:16",
            "body": {
              "id": 25406,
              "nodeType": "Block",
              "src": "25795:43:16",
              "statements": [
                {
                  "expression": {
                    "id": 25404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "25812:19:16",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 25401,
                          "name": "left",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25393,
                          "src": "25819:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        {
                          "id": 25402,
                          "name": "right",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25395,
                          "src": "25825:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          },
                          {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        ],
                        "id": 25400,
                        "name": "equal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25390,
                        "src": "25813:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$",
                          "typeString": "function (bytes29,bytes29) pure returns (bool)"
                        }
                      },
                      "id": 25403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25813:18:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 25399,
                  "id": 25405,
                  "nodeType": "Return",
                  "src": "25805:26:16"
                }
              ]
            },
            "documentation": {
              "id": 25391,
              "nodeType": "StructuredDocumentation",
              "src": "25407:307:16",
              "text": " @notice          Compares type inequality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are not the same"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notEqual",
            "parameters": {
              "id": 25396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25393,
                  "mutability": "mutable",
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 25407,
                  "src": "25737:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25392,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25737:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25395,
                  "mutability": "mutable",
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 25407,
                  "src": "25751:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25394,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "25751:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25736:29:16"
            },
            "returnParameters": {
              "id": 25399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25398,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25407,
                  "src": "25789:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25397,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25789:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25788:6:16"
            },
            "scope": 25621,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25458,
            "nodeType": "FunctionDefinition",
            "src": "26400:910:16",
            "body": {
              "id": 25457,
              "nodeType": "Block",
              "src": "26495:815:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25419,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25410,
                            "src": "26521:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 25418,
                          "name": "notNull",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24574,
                          "src": "26513:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 25420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26513:16:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e746572206465726566",
                        "id": 25421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26531:42:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_efcd06dabd47a0a59b27bbaba0b6773eb50755e41c6b64a127af091bad45512c",
                          "typeString": "literal_string \"TypedMemView/copyTo - Null pointer deref\""
                        },
                        "value": "TypedMemView/copyTo - Null pointer deref"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_efcd06dabd47a0a59b27bbaba0b6773eb50755e41c6b64a127af091bad45512c",
                          "typeString": "literal_string \"TypedMemView/copyTo - Null pointer deref\""
                        }
                      ],
                      "id": 25417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26505:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26505:69:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25423,
                  "nodeType": "ExpressionStatement",
                  "src": "26505:69:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25426,
                            "name": "memView",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25410,
                            "src": "26600:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "id": 25425,
                          "name": "isValid",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24599,
                          "src": "26592:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$",
                            "typeString": "function (bytes29) pure returns (bool)"
                          }
                        },
                        "id": 25427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26592:16:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e746572206465726566",
                        "id": 25428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26610:45:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f41d5ca586b1d56a0f8933b774181f43461390a9a40414a5d943c157df755196",
                          "typeString": "literal_string \"TypedMemView/copyTo - Invalid pointer deref\""
                        },
                        "value": "TypedMemView/copyTo - Invalid pointer deref"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f41d5ca586b1d56a0f8933b774181f43461390a9a40414a5d943c157df755196",
                          "typeString": "literal_string \"TypedMemView/copyTo - Invalid pointer deref\""
                        }
                      ],
                      "id": 25424,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26584:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26584:72:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25430,
                  "nodeType": "ExpressionStatement",
                  "src": "26584:72:16"
                },
                {
                  "assignments": [
                    25432
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25432,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25457,
                      "src": "26666:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25431,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26666:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25436,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25434,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25410,
                        "src": "26685:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25433,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "26681:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26681:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26666:27:16"
                },
                {
                  "assignments": [
                    25438
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25438,
                      "mutability": "mutable",
                      "name": "_oldLoc",
                      "nodeType": "VariableDeclaration",
                      "scope": 25457,
                      "src": "26703:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25437,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26703:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25442,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25440,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25410,
                        "src": "26725:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25439,
                      "name": "loc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24832,
                      "src": "26721:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26721:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26703:30:16"
                },
                {
                  "assignments": [
                    25444
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25444,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 25457,
                      "src": "26744:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25443,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26744:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25445,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26744:11:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "26774:457:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "26860:18:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "26873:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "26867:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "26867:11:16"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "26860:3:16"
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "26969:74:16",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26994:4:16",
                                    "type": "",
                                    "value": "0x60"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "27000:4:16",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "26987:6:16"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26987:18:16"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "26987:18:16"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "26955:3:16"
                            },
                            {
                              "name": "_newLoc",
                              "nodeType": "YulIdentifier",
                              "src": "26960:7:16"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "26952:2:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "26952:16:16"
                        },
                        "nodeType": "YulIf",
                        "src": "26949:2:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "functionName": {
                                    "name": "gas",
                                    "nodeType": "YulIdentifier",
                                    "src": "27181:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "27181:5:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "27188:1:16",
                                  "type": "",
                                  "value": "4"
                                },
                                {
                                  "name": "_oldLoc",
                                  "nodeType": "YulIdentifier",
                                  "src": "27191:7:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "27200:4:16"
                                },
                                {
                                  "name": "_newLoc",
                                  "nodeType": "YulIdentifier",
                                  "src": "27206:7:16"
                                },
                                {
                                  "name": "_len",
                                  "nodeType": "YulIdentifier",
                                  "src": "27215:4:16"
                                }
                              ],
                              "functionName": {
                                "name": "staticcall",
                                "nodeType": "YulIdentifier",
                                "src": "27170:10:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "27170:50:16"
                            }
                          ],
                          "functionName": {
                            "name": "pop",
                            "nodeType": "YulIdentifier",
                            "src": "27166:3:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "27166:55:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "27166:55:16"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25432,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27200:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25432,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27215:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25412,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26960:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25412,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27206:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25438,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27191:7:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25444,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26860:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25444,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26955:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25446,
                  "nodeType": "InlineAssembly",
                  "src": "26765:466:16"
                },
                {
                  "expression": {
                    "id": 25455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25447,
                      "name": "written",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25415,
                      "src": "27241:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 25450,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25410,
                              "src": "27279:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            ],
                            "id": 25449,
                            "name": "typeOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24795,
                            "src": "27272:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$",
                              "typeString": "function (bytes29) pure returns (uint40)"
                            }
                          },
                          "id": 25451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27272:15:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        {
                          "id": 25452,
                          "name": "_newLoc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25412,
                          "src": "27289:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 25453,
                          "name": "_len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25432,
                          "src": "27298:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 25448,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24723,
                        "src": "27251:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 25454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27251:52:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "27241:62:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 25456,
                  "nodeType": "ExpressionStatement",
                  "src": "27241:62:16"
                }
              ]
            },
            "documentation": {
              "id": 25408,
              "nodeType": "StructuredDocumentation",
              "src": "25844:551:16",
              "text": " @notice          Copy the view to a location, return an unsafe memory reference\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memView   The view\n @param _newLoc   The new location\n @return          written - the unsafe memory reference"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeCopyTo",
            "parameters": {
              "id": 25413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25410,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25458,
                  "src": "26422:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25409,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "26422:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25412,
                  "mutability": "mutable",
                  "name": "_newLoc",
                  "nodeType": "VariableDeclaration",
                  "scope": 25458,
                  "src": "26439:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26439:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26421:34:16"
            },
            "returnParameters": {
              "id": 25416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25415,
                  "mutability": "mutable",
                  "name": "written",
                  "nodeType": "VariableDeclaration",
                  "scope": 25458,
                  "src": "26478:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25414,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "26478:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26477:17:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 25485,
            "nodeType": "FunctionDefinition",
            "src": "27680:614:16",
            "body": {
              "id": 25484,
              "nodeType": "Block",
              "src": "27753:541:16",
              "statements": [
                {
                  "assignments": [
                    25467
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25467,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 25484,
                      "src": "27763:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25466,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27763:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25468,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27763:11:16"
                },
                {
                  "assignments": [
                    25470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25470,
                      "mutability": "mutable",
                      "name": "_len",
                      "nodeType": "VariableDeclaration",
                      "scope": 25484,
                      "src": "27784:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25469,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27784:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25474,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25472,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25461,
                        "src": "27803:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25471,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "27799:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27799:12:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27784:27:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "27830:167:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "27916:18:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "27929:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "27923:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "27923:11:16"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "27916:3:16"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "27977:10:16",
                        "value": {
                          "name": "ptr",
                          "nodeType": "YulIdentifier",
                          "src": "27984:3:16"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "27977:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25467,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27916:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25467,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27984:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25464,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "27977:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25475,
                  "nodeType": "InlineAssembly",
                  "src": "27821:176:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25477,
                        "name": "memView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25461,
                        "src": "28019:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25480,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 25478,
                          "name": "ptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25467,
                          "src": "28028:3:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "30783230",
                          "id": 25479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "28034:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "0x20"
                        },
                        "src": "28028:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25476,
                      "name": "unsafeCopyTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25458,
                      "src": "28006:12:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29,uint256) view returns (bytes29)"
                      }
                    },
                    "id": 25481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28006:33:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 25482,
                  "nodeType": "ExpressionStatement",
                  "src": "28006:33:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "28058:230:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "28151:4:16",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "28165:3:16"
                                    },
                                    {
                                      "name": "_len",
                                      "nodeType": "YulIdentifier",
                                      "src": "28170:4:16"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "28161:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "28161:14:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "28177:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "28157:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "28157:25:16"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "28144:6:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "28144:39:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "28144:39:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "28231:3:16"
                            },
                            {
                              "name": "_len",
                              "nodeType": "YulIdentifier",
                              "src": "28236:4:16"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "28224:6:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "28224:17:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "28224:17:16"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25470,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28170:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25470,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28236:4:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25467,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28165:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25467,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "28231:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25483,
                  "nodeType": "InlineAssembly",
                  "src": "28049:239:16"
                }
              ]
            },
            "documentation": {
              "id": 25459,
              "nodeType": "StructuredDocumentation",
              "src": "27316:359:16",
              "text": " @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\n                  the new memory\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param memView   The view\n @return          ret - The view pointing to the new memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "clone",
            "parameters": {
              "id": 25462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25461,
                  "mutability": "mutable",
                  "name": "memView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25485,
                  "src": "27695:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25460,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "27695:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27694:17:16"
            },
            "returnParameters": {
              "id": 25465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25464,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 25485,
                  "src": "27735:16:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25463,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "27735:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27734:18:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25542,
            "nodeType": "FunctionDefinition",
            "src": "28842:717:16",
            "body": {
              "id": 25541,
              "nodeType": "Block",
              "src": "28950:609:16",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "28969:285:16",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "29055:22:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "29072:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "29066:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29066:11:16"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "29059:3:16",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "29170:74:16",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29195:4:16",
                                    "type": "",
                                    "value": "0x60"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "29201:4:16",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "29188:6:16"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "29188:18:16"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "29188:18:16"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "29154:3:16"
                            },
                            {
                              "name": "_location",
                              "nodeType": "YulIdentifier",
                              "src": "29159:9:16"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "29151:2:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29151:18:16"
                        },
                        "nodeType": "YulIf",
                        "src": "29148:2:16"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25491,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "29159:9:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25496,
                  "nodeType": "InlineAssembly",
                  "src": "28960:294:16"
                },
                {
                  "assignments": [
                    25498
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25498,
                      "mutability": "mutable",
                      "name": "_offset",
                      "nodeType": "VariableDeclaration",
                      "scope": 25541,
                      "src": "29264:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25497,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29264:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25500,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 25499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29282:1:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29264:19:16"
                },
                {
                  "body": {
                    "id": 25531,
                    "nodeType": "Block",
                    "src": "29340:147:16",
                    "statements": [
                      {
                        "assignments": [
                          25513
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 25513,
                            "mutability": "mutable",
                            "name": "memView",
                            "nodeType": "VariableDeclaration",
                            "scope": 25531,
                            "src": "29354:15:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            },
                            "typeName": {
                              "id": 25512,
                              "name": "bytes29",
                              "nodeType": "ElementaryTypeName",
                              "src": "29354:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 25517,
                        "initialValue": {
                          "baseExpression": {
                            "id": 25514,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25489,
                            "src": "29372:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          "id": 25516,
                          "indexExpression": {
                            "id": 25515,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25502,
                            "src": "29381:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29372:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29354:29:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 25519,
                              "name": "memView",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25513,
                              "src": "29410:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 25520,
                                "name": "_location",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25491,
                                "src": "29419:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 25521,
                                "name": "_offset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25498,
                                "src": "29431:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "29419:19:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 25518,
                            "name": "unsafeCopyTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25458,
                            "src": "29397:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$",
                              "typeString": "function (bytes29,uint256) view returns (bytes29)"
                            }
                          },
                          "id": 25523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29397:42:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 25524,
                        "nodeType": "ExpressionStatement",
                        "src": "29397:42:16"
                      },
                      {
                        "expression": {
                          "id": 25529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 25525,
                            "name": "_offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25498,
                            "src": "29453:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 25527,
                                "name": "memView",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25513,
                                "src": "29468:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              ],
                              "id": 25526,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24882,
                              "src": "29464:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                                "typeString": "function (bytes29) pure returns (uint96)"
                              }
                            },
                            "id": 25528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29464:12:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "29453:23:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 25530,
                        "nodeType": "ExpressionStatement",
                        "src": "29453:23:16"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 25505,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25502,
                      "src": "29313:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 25506,
                        "name": "memViews",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25489,
                        "src": "29317:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      "id": 25507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "29317:15:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29313:19:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25532,
                  "initializationExpression": {
                    "assignments": [
                      25502
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 25502,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 25532,
                        "src": "29298:9:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 25501,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29298:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 25504,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 25503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29310:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "29298:13:16"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 25510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29334:4:16",
                      "subExpression": {
                        "id": 25509,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25502,
                        "src": "29334:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 25511,
                    "nodeType": "ExpressionStatement",
                    "src": "29334:4:16"
                  },
                  "nodeType": "ForStatement",
                  "src": "29293:194:16"
                },
                {
                  "expression": {
                    "id": 25539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25533,
                      "name": "unsafeView",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25494,
                      "src": "29496:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 25535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29530:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "id": 25536,
                          "name": "_location",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25491,
                          "src": "29533:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 25537,
                          "name": "_offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25498,
                          "src": "29544:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 25534,
                        "name": "unsafeBuildUnchecked",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24723,
                        "src": "29509:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bytes29)"
                        }
                      },
                      "id": 25538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29509:43:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "29496:56:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 25540,
                  "nodeType": "ExpressionStatement",
                  "src": "29496:56:16"
                }
              ]
            },
            "documentation": {
              "id": 25486,
              "nodeType": "StructuredDocumentation",
              "src": "28300:537:16",
              "text": " @notice          Join the views in memory, return an unsafe reference to the memory.\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memViews  The views\n @return          unsafeView - The conjoined view pointing to the new memory"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsafeJoin",
            "parameters": {
              "id": 25492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25489,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 25542,
                  "src": "28862:25:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25487,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "28862:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 25488,
                    "nodeType": "ArrayTypeName",
                    "src": "28862:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25491,
                  "mutability": "mutable",
                  "name": "_location",
                  "nodeType": "VariableDeclaration",
                  "scope": 25542,
                  "src": "28889:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25490,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28889:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28861:46:16"
            },
            "returnParameters": {
              "id": 25495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25494,
                  "mutability": "mutable",
                  "name": "unsafeView",
                  "nodeType": "VariableDeclaration",
                  "scope": 25542,
                  "src": "28930:18:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 25493,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "28930:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28929:20:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 25563,
            "nodeType": "FunctionDefinition",
            "src": "29771:319:16",
            "body": {
              "id": 25562,
              "nodeType": "Block",
              "src": "29850:240:16",
              "statements": [
                {
                  "assignments": [
                    25552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25552,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 25562,
                      "src": "29860:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25551,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29860:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25553,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29860:11:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "29890:144:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "29976:18:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "29989:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "29983:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "29983:11:16"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "29976:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25552,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "29976:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25554,
                  "nodeType": "InlineAssembly",
                  "src": "29881:153:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25557,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25546,
                            "src": "30068:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          {
                            "id": 25558,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25552,
                            "src": "30078:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 25556,
                          "name": "unsafeJoin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25542,
                          "src": "30057:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                            "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                          }
                        },
                        "id": 25559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30057:25:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25555,
                      "name": "keccak",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25239,
                      "src": "30050:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 25560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30050:33:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 25550,
                  "id": 25561,
                  "nodeType": "Return",
                  "src": "30043:40:16"
                }
              ]
            },
            "documentation": {
              "id": 25543,
              "nodeType": "StructuredDocumentation",
              "src": "29565:201:16",
              "text": " @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\n @param memViews  The views\n @return          bytes32 - The keccak256 digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "joinKeccak",
            "parameters": {
              "id": 25547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25546,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 25563,
                  "src": "29791:25:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25544,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "29791:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 25545,
                    "nodeType": "ArrayTypeName",
                    "src": "29791:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29790:27:16"
            },
            "returnParameters": {
              "id": 25550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25549,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25563,
                  "src": "29841:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25548,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "29841:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29840:9:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25584,
            "nodeType": "FunctionDefinition",
            "src": "30296:315:16",
            "body": {
              "id": 25583,
              "nodeType": "Block",
              "src": "30373:238:16",
              "statements": [
                {
                  "assignments": [
                    25573
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25573,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 25583,
                      "src": "30383:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25572,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30383:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25574,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30383:11:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "30413:144:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "30499:18:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "30512:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "30506:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "30506:11:16"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "30499:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25573,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "30499:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25575,
                  "nodeType": "InlineAssembly",
                  "src": "30404:153:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25578,
                            "name": "memViews",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25567,
                            "src": "30589:8:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            }
                          },
                          {
                            "id": 25579,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25573,
                            "src": "30599:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                              "typeString": "bytes29[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 25577,
                          "name": "unsafeJoin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25542,
                          "src": "30578:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                            "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                          }
                        },
                        "id": 25580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30578:25:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25576,
                      "name": "sha2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25261,
                      "src": "30573:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes32_$",
                        "typeString": "function (bytes29) view returns (bytes32)"
                      }
                    },
                    "id": 25581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30573:31:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 25571,
                  "id": 25582,
                  "nodeType": "Return",
                  "src": "30566:38:16"
                }
              ]
            },
            "documentation": {
              "id": 25564,
              "nodeType": "StructuredDocumentation",
              "src": "30096:195:16",
              "text": " @notice          Produce the sha256 digest of the concatenated contents of multiple views.\n @param memViews  The views\n @return          bytes32 - The sha256 digest"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "joinSha2",
            "parameters": {
              "id": 25568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25567,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 25584,
                  "src": "30314:25:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25565,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "30314:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 25566,
                    "nodeType": "ArrayTypeName",
                    "src": "30314:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30313:27:16"
            },
            "returnParameters": {
              "id": 25571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25570,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 25584,
                  "src": "30364:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25569,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30364:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30363:9:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25620,
            "nodeType": "FunctionDefinition",
            "src": "30791:744:16",
            "body": {
              "id": 25619,
              "nodeType": "Block",
              "src": "30873:662:16",
              "statements": [
                {
                  "assignments": [
                    25594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25594,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 25619,
                      "src": "30883:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25593,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30883:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25595,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30883:11:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "30913:144:16",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "30999:18:16",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "31012:4:16",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "31006:5:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31006:11:16"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "30999:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25594,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "30999:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25596,
                  "nodeType": "InlineAssembly",
                  "src": "30904:153:16"
                },
                {
                  "assignments": [
                    25598
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25598,
                      "mutability": "mutable",
                      "name": "_newView",
                      "nodeType": "VariableDeclaration",
                      "scope": 25619,
                      "src": "31067:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 25597,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "31067:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25605,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25600,
                        "name": "memViews",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25588,
                        "src": "31097:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 25601,
                          "name": "ptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25594,
                          "src": "31107:3:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "30783230",
                          "id": 25602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31113:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "0x20"
                        },
                        "src": "31107:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                          "typeString": "bytes29[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 25599,
                      "name": "unsafeJoin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25542,
                      "src": "31086:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$",
                        "typeString": "function (bytes29[] memory,uint256) view returns (bytes29)"
                      }
                    },
                    "id": 25604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31086:32:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31067:51:16"
                },
                {
                  "assignments": [
                    25607
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25607,
                      "mutability": "mutable",
                      "name": "_written",
                      "nodeType": "VariableDeclaration",
                      "scope": 25619,
                      "src": "31128:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25606,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31128:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25611,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25609,
                        "name": "_newView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25598,
                        "src": "31151:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25608,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24882,
                      "src": "31147:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$",
                        "typeString": "function (bytes29) pure returns (uint96)"
                      }
                    },
                    "id": 25610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31147:13:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31128:32:16"
                },
                {
                  "assignments": [
                    25613
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25613,
                      "mutability": "mutable",
                      "name": "_footprint",
                      "nodeType": "VariableDeclaration",
                      "scope": 25619,
                      "src": "31170:18:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25612,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31170:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25617,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25615,
                        "name": "_newView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25598,
                        "src": "31201:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 25614,
                      "name": "footprint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24868,
                      "src": "31191:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$",
                        "typeString": "function (bytes29) pure returns (uint256)"
                      }
                    },
                    "id": 25616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31191:19:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31170:40:16"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "31230:299:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "31355:3:16"
                            },
                            {
                              "name": "_written",
                              "nodeType": "YulIdentifier",
                              "src": "31360:8:16"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "31348:6:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31348:21:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "31348:21:16"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "31458:4:16",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "31472:3:16"
                                    },
                                    {
                                      "name": "_footprint",
                                      "nodeType": "YulIdentifier",
                                      "src": "31477:10:16"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "31468:3:16"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "31468:20:16"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "31490:4:16",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "31464:3:16"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "31464:31:16"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "31451:6:16"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "31451:45:16"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "31451:45:16"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "31509:10:16",
                        "value": {
                          "name": "ptr",
                          "nodeType": "YulIdentifier",
                          "src": "31516:3:16"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "31509:3:16"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 25613,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31477:10:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25607,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31360:8:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25594,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31355:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25594,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31472:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25594,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31516:3:16",
                      "valueSize": 1
                    },
                    {
                      "declaration": 25591,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "31509:3:16",
                      "valueSize": 1
                    }
                  ],
                  "id": 25618,
                  "nodeType": "InlineAssembly",
                  "src": "31221:308:16"
                }
              ]
            },
            "documentation": {
              "id": 25585,
              "nodeType": "StructuredDocumentation",
              "src": "30617:169:16",
              "text": " @notice          copies all views, joins them into a new bytearray.\n @param memViews  The views\n @return          ret - The new byte array"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "parameters": {
              "id": 25589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25588,
                  "mutability": "mutable",
                  "name": "memViews",
                  "nodeType": "VariableDeclaration",
                  "scope": 25620,
                  "src": "30805:25:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes29_$dyn_memory_ptr",
                    "typeString": "bytes29[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25586,
                      "name": "bytes29",
                      "nodeType": "ElementaryTypeName",
                      "src": "30805:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "id": 25587,
                    "nodeType": "ArrayTypeName",
                    "src": "30805:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes29_$dyn_storage_ptr",
                      "typeString": "bytes29[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30804:27:16"
            },
            "returnParameters": {
              "id": 25592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25591,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 25620,
                  "src": "30855:16:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25590,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "30855:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30854:18:16"
            },
            "scope": 25621,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          25621
        ],
        "name": "TypedMemView",
        "scope": 25622
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 16
}