{
  "abi": [],
  "bytecode": {
    "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3d44550c43ff7fceb906699b4da7332701b5e303f9329423298b9e310111a9164736f6c63430008160033",
    "sourceMap": "167:1661:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;167:1661:46;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3d44550c43ff7fceb906699b4da7332701b5e303f9329423298b9e310111a9164736f6c63430008160033",
    "sourceMap": "167:1661:46:-:0;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {},
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Provides functions for deriving a pool address from the factory, tokens, and the fee\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol\":\"PoolAddress\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48\",\"dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.22+commit.4fc1097e"
    },
    "language": "Solidity",
    "output": {
      "abi": [],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@uniswap/v3-core/=lib_uniswap/v3-core/",
        "@uniswap/v3-periphery/=lib_uniswap/v3-periphery/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "v3-core/=lib_uniswap/v3-core/",
        "v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/"
      ],
      "optimizer": {
        "runs": 999999999,
        "details": {
          "peephole": true,
          "inliner": true,
          "jumpdestRemover": true,
          "orderLiterals": true,
          "deduplicate": true,
          "cse": true,
          "constantOptimizer": true,
          "yul": true,
          "yulDetails": {
            "stackAllocation": true,
            "optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu"
          }
        }
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol": "PoolAddress"
      },
      "libraries": {}
    },
    "sources": {
      "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol": {
        "keccak256": "0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4",
        "urls": [
          "bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48",
          "dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr"
        ],
        "license": "GPL-2.0-or-later"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol",
    "id": 45893,
    "exportedSymbols": {
      "PoolAddress": [
        45892
      ]
    },
    "nodeType": "SourceUnit",
    "src": "45:1784:46",
    "nodes": [
      {
        "id": 45796,
        "nodeType": "PragmaDirective",
        "src": "45:24:46",
        "nodes": [],
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ]
      },
      {
        "id": 45892,
        "nodeType": "ContractDefinition",
        "src": "167:1661:46",
        "nodes": [
          {
            "id": 45800,
            "nodeType": "VariableDeclaration",
            "src": "193:114:46",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "POOL_INIT_CODE_HASH",
            "nameLocation": "219:19:46",
            "scope": 45892,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 45798,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "193:7:46",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307865333466313939623139623262346634376636383434323631396435353535323764323434663738613332393765613839333235663834336638376238623534",
              "id": 45799,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "241:66:46",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_102814774271675688723325049954498779091328469440286648861889194717372678376276_by_1",
                "typeString": "int_const 1028...(70 digits omitted)...6276"
              },
              "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54"
            },
            "visibility": "internal"
          },
          {
            "id": 45808,
            "nodeType": "StructDefinition",
            "src": "362:90:46",
            "nodes": [],
            "canonicalName": "PoolAddress.PoolKey",
            "documentation": {
              "id": 45801,
              "nodeType": "StructuredDocumentation",
              "src": "314:43:46",
              "text": "@notice The identifying key of the pool"
            },
            "members": [
              {
                "constant": false,
                "id": 45803,
                "mutability": "mutable",
                "name": "token0",
                "nameLocation": "395:6:46",
                "nodeType": "VariableDeclaration",
                "scope": 45808,
                "src": "387:14:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45802,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "387:7:46",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45805,
                "mutability": "mutable",
                "name": "token1",
                "nameLocation": "419:6:46",
                "nodeType": "VariableDeclaration",
                "scope": 45808,
                "src": "411:14:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45804,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "411:7:46",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 45807,
                "mutability": "mutable",
                "name": "fee",
                "nameLocation": "442:3:46",
                "nodeType": "VariableDeclaration",
                "scope": 45808,
                "src": "435:10:46",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint24",
                  "typeString": "uint24"
                },
                "typeName": {
                  "id": 45806,
                  "name": "uint24",
                  "nodeType": "ElementaryTypeName",
                  "src": "435:6:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PoolKey",
            "nameLocation": "369:7:46",
            "scope": 45892,
            "visibility": "public"
          },
          {
            "id": 45840,
            "nodeType": "FunctionDefinition",
            "src": "784:274:46",
            "nodes": [],
            "body": {
              "id": 45839,
              "nodeType": "Block",
              "src": "917:141:46",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 45823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 45821,
                      "name": "tokenA",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45811,
                      "src": "931:6:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 45822,
                      "name": "tokenB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45813,
                      "src": "940:6:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "931:15:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 45832,
                  "nodeType": "IfStatement",
                  "src": "927:56:46",
                  "trueBody": {
                    "expression": {
                      "id": 45830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "components": [
                          {
                            "id": 45824,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45811,
                            "src": "949:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 45825,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45813,
                            "src": "957:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "id": 45826,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "TupleExpression",
                        "src": "948:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                          "typeString": "tuple(address,address)"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "components": [
                          {
                            "id": 45827,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45813,
                            "src": "968:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 45828,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45811,
                            "src": "976:6:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "id": 45829,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "967:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                          "typeString": "tuple(address,address)"
                        }
                      },
                      "src": "948:35:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 45831,
                    "nodeType": "ExpressionStatement",
                    "src": "948:35:46"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 45834,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45811,
                        "src": "1017:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45835,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45813,
                        "src": "1033:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45836,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45815,
                        "src": "1046:3:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      ],
                      "id": 45833,
                      "name": "PoolKey",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45808,
                      "src": "1000:7:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_PoolKey_$45808_storage_ptr_$",
                        "typeString": "type(struct PoolAddress.PoolKey storage pointer)"
                      }
                    },
                    "id": 45837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "1009:6:46",
                      "1025:6:46",
                      "1041:3:46"
                    ],
                    "names": [
                      "token0",
                      "token1",
                      "fee"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "1000:51:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                      "typeString": "struct PoolAddress.PoolKey memory"
                    }
                  },
                  "functionReturnParameters": 45820,
                  "id": 45838,
                  "nodeType": "Return",
                  "src": "993:58:46"
                }
              ]
            },
            "documentation": {
              "id": 45809,
              "nodeType": "StructuredDocumentation",
              "src": "458:321:46",
              "text": "@notice Returns PoolKey: the ordered tokens with the matched fee levels\n @param tokenA The first token of a pool, unsorted\n @param tokenB The second token of a pool, unsorted\n @param fee The fee level of the pool\n @return Poolkey The pool details with ordered token0 and token1 assignments"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolKey",
            "nameLocation": "793:10:46",
            "parameters": {
              "id": 45816,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45811,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nameLocation": "821:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45840,
                  "src": "813:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "813:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45813,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nameLocation": "845:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45840,
                  "src": "837:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45812,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "837:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45815,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "868:3:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45840,
                  "src": "861:10:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 45814,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "861:6:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "803:74:46"
            },
            "returnParameters": {
              "id": 45820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45819,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45840,
                  "src": "901:14:46",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                    "typeString": "struct PoolAddress.PoolKey"
                  },
                  "typeName": {
                    "id": 45818,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45817,
                      "name": "PoolKey",
                      "nameLocations": [
                        "901:7:46"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45808,
                      "src": "901:7:46"
                    },
                    "referencedDeclaration": 45808,
                    "src": "901:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PoolKey_$45808_storage_ptr",
                      "typeString": "struct PoolAddress.PoolKey"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "900:16:46"
            },
            "scope": 45892,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 45891,
            "nodeType": "FunctionDefinition",
            "src": "1305:521:46",
            "nodes": [],
            "body": {
              "id": 45890,
              "nodeType": "Block",
              "src": "1403:423:46",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45856,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 45852,
                            "name": "key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45846,
                            "src": "1421:3:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                              "typeString": "struct PoolAddress.PoolKey memory"
                            }
                          },
                          "id": 45853,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1425:6:46",
                          "memberName": "token0",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45803,
                          "src": "1421:10:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 45854,
                            "name": "key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45846,
                            "src": "1434:3:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                              "typeString": "struct PoolAddress.PoolKey memory"
                            }
                          },
                          "id": 45855,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1438:6:46",
                          "memberName": "token1",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45805,
                          "src": "1434:10:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1421:23:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 45851,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1413:7:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 45857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1413:32:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45858,
                  "nodeType": "ExpressionStatement",
                  "src": "1413:32:46"
                },
                {
                  "expression": {
                    "id": 45888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 45859,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45849,
                      "src": "1455:4:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "ff",
                                          "id": 45869,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "hexString",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1589:7:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                            "typeString": "literal_string hex\"ff\""
                                          }
                                        },
                                        {
                                          "id": 45870,
                                          "name": "factory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 45843,
                                          "src": "1622:7:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "expression": {
                                                    "id": 45874,
                                                    "name": "key",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 45846,
                                                    "src": "1676:3:46",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                                                      "typeString": "struct PoolAddress.PoolKey memory"
                                                    }
                                                  },
                                                  "id": 45875,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1680:6:46",
                                                  "memberName": "token0",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 45803,
                                                  "src": "1676:10:46",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "expression": {
                                                    "id": 45876,
                                                    "name": "key",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 45846,
                                                    "src": "1688:3:46",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                                                      "typeString": "struct PoolAddress.PoolKey memory"
                                                    }
                                                  },
                                                  "id": 45877,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1692:6:46",
                                                  "memberName": "token1",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 45805,
                                                  "src": "1688:10:46",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "expression": {
                                                    "id": 45878,
                                                    "name": "key",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 45846,
                                                    "src": "1700:3:46",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                                                      "typeString": "struct PoolAddress.PoolKey memory"
                                                    }
                                                  },
                                                  "id": 45879,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1704:3:46",
                                                  "memberName": "fee",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 45807,
                                                  "src": "1700:7:46",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint24",
                                                    "typeString": "uint24"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_uint24",
                                                    "typeString": "uint24"
                                                  }
                                                ],
                                                "expression": {
                                                  "id": 45872,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -1,
                                                  "src": "1665:3:46",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 45873,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberLocation": "1669:6:46",
                                                "memberName": "encode",
                                                "nodeType": "MemberAccess",
                                                "src": "1665:10:46",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 45880,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "1665:43:46",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            ],
                                            "id": 45871,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -8,
                                            "src": "1655:9:46",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                              "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                          },
                                          "id": 45881,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1655:54:46",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "id": 45882,
                                          "name": "POOL_INIT_CODE_HASH",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 45800,
                                          "src": "1735:19:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                            "typeString": "literal_string hex\"ff\""
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "expression": {
                                          "id": 45867,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "1547:3:46",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 45868,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "1551:12:46",
                                        "memberName": "encodePacked",
                                        "nodeType": "MemberAccess",
                                        "src": "1547:16:46",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 45883,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1547:229:46",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 45866,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "1516:9:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 45884,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1516:278:46",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 45865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1491:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 45864,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1491:7:46",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 45885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1491:317:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 45863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1470:7:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 45862,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "1470:7:46",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1470:348:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        ],
                        "id": 45861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1462:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 45860,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1462:7:46",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 45887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1462:357:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1455:364:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 45889,
                  "nodeType": "ExpressionStatement",
                  "src": "1455:364:46"
                }
              ]
            },
            "documentation": {
              "id": 45841,
              "nodeType": "StructuredDocumentation",
              "src": "1064:236:46",
              "text": "@notice Deterministically computes the pool address given the factory and PoolKey\n @param factory The Uniswap V3 factory contract address\n @param key The PoolKey\n @return pool The contract address of the V3 pool"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeAddress",
            "nameLocation": "1314:14:46",
            "parameters": {
              "id": 45847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45843,
                  "mutability": "mutable",
                  "name": "factory",
                  "nameLocation": "1337:7:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45891,
                  "src": "1329:15:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1329:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45846,
                  "mutability": "mutable",
                  "name": "key",
                  "nameLocation": "1361:3:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45891,
                  "src": "1346:18:46",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr",
                    "typeString": "struct PoolAddress.PoolKey"
                  },
                  "typeName": {
                    "id": 45845,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45844,
                      "name": "PoolKey",
                      "nameLocations": [
                        "1346:7:46"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45808,
                      "src": "1346:7:46"
                    },
                    "referencedDeclaration": 45808,
                    "src": "1346:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PoolKey_$45808_storage_ptr",
                      "typeString": "struct PoolAddress.PoolKey"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1328:37:46"
            },
            "returnParameters": {
              "id": 45850,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45849,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "1397:4:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 45891,
                  "src": "1389:12:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45848,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1389:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1388:14:46"
            },
            "scope": 45892,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "PoolAddress",
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 45797,
          "nodeType": "StructuredDocumentation",
          "src": "71:96:46",
          "text": "@title Provides functions for deriving a pool address from the factory, tokens, and the fee"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          45892
        ],
        "name": "PoolAddress",
        "nameLocation": "175:11:46",
        "scope": 45893,
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "license": "GPL-2.0-or-later"
  },
  "id": 46
}