Overview ERC721
Total Supply:
0 MARGV1-POS

Holders:
2,547
Profile Summary
Blockchain:
Berachain bArtio (80084)

Contract Source Code Verified (Exact Match)
Contract Name:
NonfungiblePositionManager

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 16 Jul 2024 13:41:09 GMT
NonfungiblePositionManager.sol
contracts
NonfungiblePositionManager.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_factory",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_WETH9",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_tokenDescriptor_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      }
    ],
    "name": "AmountInGreaterThanMax",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      }
    ],
    "name": "AmountOutLessThanMin",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "debt",
        "type": "uint256"
      }
    ],
    "name": "DebtGreaterThanMax",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidPoolKey",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OracleNotSender",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PoolInactive",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PoolNotSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "rewardsMinimum",
        "type": "uint256"
      }
    ],
    "name": "RewardsLessThanMin",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "reserve",
        "type": "uint256"
      }
    ],
    "name": "SizeGreaterThanReserve",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "size",
        "type": "uint256"
      }
    ],
    "name": "SizeLessThanMin",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "T",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "name": "Burn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "marginAfter",
        "type": "uint256"
      }
    ],
    "name": "Free",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "name": "Ignite",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "marginAfter",
        "type": "uint256"
      }
    ],
    "name": "Lock",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "positionId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "size",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "debt",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "margin",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fees",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "name": "Mint",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "WETH9",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "token0",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "token1",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "maintenance",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          }
        ],
        "internalType": "struct INonfungiblePositionManager.BurnParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "name": "burn",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "token0",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "token1",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "maintenance",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint128",
            "name": "marginOut",
            "type": "uint128"
          },
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          }
        ],
        "internalType": "struct INonfungiblePositionManager.FreeParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "name": "free",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "margin",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "token0",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "token1",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "maintenance",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "amountOutMinimum",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          }
        ],
        "internalType": "struct INonfungiblePositionManager.IgniteParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "name": "ignite",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "token0",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "token1",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "maintenance",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint128",
            "name": "marginIn",
            "type": "uint128"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          }
        ],
        "internalType": "struct INonfungiblePositionManager.LockParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "name": "lock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "margin",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount0Owed",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount1Owed",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "marginalV1AdjustCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount0Owed",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount1Owed",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "marginalV1OpenCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "int256",
        "name": "amount0Delta",
        "type": "int256"
      },
      {
        "internalType": "int256",
        "name": "amount1Delta",
        "type": "int256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "marginalV1SettleCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "token0",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "token1",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "maintenance",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "oracle",
            "type": "address"
          },
          {
            "internalType": "bool",
            "name": "zeroForOne",
            "type": "bool"
          },
          {
            "internalType": "uint128",
            "name": "sizeDesired",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "sizeMinimum",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "debtMaximum",
            "type": "uint128"
          },
          {
            "internalType": "uint256",
            "name": "amountInMaximum",
            "type": "uint256"
          },
          {
            "internalType": "uint160",
            "name": "sqrtPriceLimitX96",
            "type": "uint160"
          },
          {
            "internalType": "uint128",
            "name": "margin",
            "type": "uint128"
          },
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "deadline",
            "type": "uint256"
          }
        ],
        "internalType": "struct INonfungiblePositionManager.MintParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "size",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "debt",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "margin",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "fees",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "positions",
    "outputs": [
      {
        "internalType": "address",
        "name": "pool",
        "type": "address"
      },
      {
        "internalType": "uint96",
        "name": "positionId",
        "type": "uint96"
      },
      {
        "internalType": "bool",
        "name": "zeroForOne",
        "type": "bool"
      },
      {
        "internalType": "uint128",
        "name": "size",
        "type": "uint128"
      },
      {
        "internalType": "uint128",
        "name": "debt",
        "type": "uint128"
      },
      {
        "internalType": "uint128",
        "name": "margin",
        "type": "uint128"
      },
      {
        "internalType": "uint128",
        "name": "safeMarginMinimum",
        "type": "uint128"
      },
      {
        "internalType": "bool",
        "name": "liquidated",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "safe",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "rewards",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "refundETH",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountMinimum",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "sweepETH",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountMinimum",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "sweepToken",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "uniswapV3Factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "int256",
        "name": "amount0Delta",
        "type": "int256"
      },
      {
        "internalType": "int256",
        "name": "amount1Delta",
        "type": "int256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "uniswapV3SwapCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountMinimum",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "unwrapWETH9",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
61010060409080825234620004ae5760608162005b188038038091620000268285620004cf565b833981010312620004ae576200003c81620004f3565b602091620000598462000051858401620004f3565b9201620004f3565b928451926200006884620004b3565b601a84527f4d617267696e616c20563120506f736974696f6e20546f6b656e0000000000008285015285516200009e81620004b3565b600a8152694d41524756312d504f5360b01b8382015284516001600160401b03929083811162000498576000928354916001988984811c941680156200048d575b8885101462000479578190601f9485811162000426575b508890858311600114620003c2578792620003b6575b5050600019600383901b1c191690891b1784555b8051948511620003a25787548881811c9116801562000397575b87821014620003835790818388959493116200032c575b5083918611600114620002c45760049591859183620002b8575b5050600019600383901b1c191690881b1787555b60808190528851632daa48c160e11b815293849182906001600160a01b03165afa928315620002ac57819362000268575b50505060a05260c05260075560e0525161560f90816200050982396080518181816106ba0152818161092401528181610bf101528181610e1a0152818161180f01528181611dc7015281816123210152818161265c01528181612a6901528181612db1015281816132b6015281816135060152613664015260a05181610ba8015260c051818181610a5601528181610b62015281816129dd01528181612b4a015281816130d3015261380e015260e05181611e4f0152f35b9091809350813d8311620002a4575b620002838183620004cf565b81010312620002a157506200029890620004f3565b388080620001b0565b80fd5b503d62000277565b508651903d90823e3d90fd5b0151905038806200016b565b948891601f1982169083875285872091875b818110620003135750978360049910620002f9575b505050811b0187556200017f565b015160001960f88460031b161c19169055388080620002eb565b828a015184558a978d96909401939283019201620002d6565b90919293508885528685208380880160051c82019289891062000379575b918b918a97969594930160051c01915b8281106200036a57505062000151565b8781558996508b91016200035a565b925081926200034a565b634e487b7160e01b85526022600452602485fd5b90607f16906200013a565b634e487b7160e01b84526041600452602484fd5b0151905038806200010c565b8780528988208c94509190601f198416895b8c8282106200040f5750508411620003f5575b505050811b01845562000120565b015160001960f88460031b161c19169055388080620003e7565b8385015186558f97909501949384019301620003d4565b9091508680528887208580850160051c8201928b86106200046f575b918d91869594930160051c01915b82811062000460575050620000f6565b8981558594508d910162000450565b9250819262000442565b634e487b7160e01b86526022600452602486fd5b93607f1693620000df565b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200049857604052565b601f909101601f19168101906001600160401b038211908210176200049857604052565b51906001600160a01b0382168203620004ae5756fe60806040526004361015610023575b361561001957600080fd5b6100216129d3565b005b60003560e01c806301ffc9a71461028f57806306fdde0314610286578063081812fc1461027d578063095ea7b31461027457806312210e8a1461026b578063156e1ef4146102625780631e121fe81461025957806321e818e01461025057806323b872dd1461024757806342842e0e1461023e57806349404b7c146102355780634aa4a4fc1461022c5780635b549182146102235780635f1c4fdc1461021a5780636352211e146102115780636bf392631461020857806370a08231146101ff57806389051db6146101f657806395d89b41146101ed57806399fbab88146101e4578063a22cb465146101db578063a24e4f7a146101d2578063ac9650d8146101c9578063b88d4fde146101c0578063c45a0155146101b7578063c87b56dd146101ae578063d3e17b03146101a5578063d44959461461019c578063df2ab5bb14610193578063e985e9c51461018a5763fa461e330361000e5761018561261a565b61000e565b506101856125b1565b5061018561250a565b50610185612251565b50610185611ec4565b50610185611df6565b50610185611db0565b50610185611d1f565b50610185611a8d565b506101856117d6565b506101856116e5565b50610185611329565b50610185611267565b50610185611063565b50610185610fac565b50610185610d2a565b50610185610d0b565b50610185610bd7565b50610185610b91565b50610185610b4b565b50610185610a20565b506101856109f7565b506101856109cd565b506101856108fe565b50610185610842565b506101856105e4565b506101856105bd565b506101856104e4565b506101856104a2565b50610185610397565b506101856102af565b6001600160e01b03198116036102aa57565b600080fd5b50346102aa5760203660031901126102aa5760206004356102cf81610298565b63ffffffff60e01b166380ac58cd60e01b811490811561030d575b81156102fc575b506040519015158152f35b6301ffc9a760e01b149050386102f1565b635b5e139f60e01b811491506102ea565b60009103126102aa57565b918091926000905b828210610349575011610342575050565b6000910152565b91508060209183015181860152018291610331565b9060209161037781518092818552858086019101610329565b601f01601f1916010190565b90602061039492818152019061035e565b90565b50346102aa5760008060031936011261049f57604051908080549060019180831c92808216928315610495575b60209283861085146104815785885260208801949081156104605750600114610408575b610404876103f881890382611c18565b60405191829182610383565b0390f35b6000805294509192917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b83861061044f57505050910190506103f88261040438806103e8565b805485870152948201948101610433565b60ff191685525050505090151560051b0190506103f88261040438806103e8565b634e487b7160e01b82526022600452602482fd5b93607f16936103c4565b80fd5b50346102aa5760203660031901126102aa5760206104c1600435614211565b6040516001600160a01b039091168152f35b6001600160a01b038116036102aa57565b50346102aa5760403660031901126102aa57600435610502816104d3565b60243561050e8161417c565b916001600160a01b03808416908216811461056e576100219361053b913314908115610540575b5061419f565b614746565b6001600160a01b0316600090815260056020908152604080832033845290915290205460ff16905038610535565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b5060003660031901126102aa57610021612c2d565b6101009060031901126102aa57600490565b50346102aa576101003660031901126102aa57610600366105d2565b608081013561060f813361433c565b156108315761062460e0830135421115612793565b610638816000526006602052604060002090565b61064190612750565b61064a83612806565b92602081019061065982612806565b946040938483019161066a83612829565b9760608501986106798a612806565b91610682611c39565b6001600160a01b0390941684526001600160a01b0316602084015262ffffff16828801526001600160a01b031660608201526106de907f0000000000000000000000000000000000000000000000000000000000000000613e2f565b81516001600160a01b0390811691160361082057610706866000526006602052604060002090565b600090556107138661451e565b61071c83612806565b9361072690612806565b9161073090612829565b9661073a90612806565b60c084019761074889612806565b6020909301516001600160601b031693610760611c58565b6001600160a01b0390971687526001600160a01b0316602087015262ffffff16858701526001600160a01b031660608501526001600160a01b031660808401526001600160601b031660a083015260a0013560c08201526107c0906135f5565b926107cb8295612806565b83516001600160a01b0391909116815260208101929092526040820184905233917f34270365a3c76bc9895ec91ac488337da0e12eee459cd8eec127882f8dd29a5990606090a3519182526020820152604090f35b845163c256622b60e01b8152600490fd5b6040516282b42960e81b8152600490fd5b5060403660031901126102aa5760243561085b816104d3565b476004358110610875578061086c57005b61002191615582565b60405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b6044820152606490fd5b9060606003198301126102aa5760043591602435916044356001600160401b03928382116102aa57806023830112156102aa5781600401359384116102aa57602484830101116102aa576024019190565b50346102aa5761091c610910366108ad565b8194929394019061307c565b9161094883517f0000000000000000000000000000000000000000000000000000000000000000613dcb565b508061097a575b508061095757005b81516020908101519201516100219233916001600160a01b0390811691166130c9565b825151602084015161099b929133916001600160a01b0390811691166130c9565b3861094f565b60609060031901126102aa576004356109b9816104d3565b906024356109c6816104d3565b9060443590565b50346102aa576100216109df366109a1565b916109f26109ed843361433c565b61424f565b614606565b50346102aa57610021610a09366109a1565b9060405192610a1784611be2565b600084526142b1565b5060403660031901126102aa57602435610a39816104d3565b6040516370a0823160e01b81523060048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691602082602481865afa918215610b3e575b600092610b0e575b50610a9f600435831015612aec565b81610aa657005b823b156102aa57604051632e1a7d4d60e01b815260048101839052610021936000908290818381602481015b03925af18015610b01575b610ae8575b50615582565b80610af5610afb92611bcf565b8061031e565b38610ae2565b610b09612743565b610add565b610b3091925060203d8111610b37575b610b288183611c18565b810190612add565b9038610a90565b503d610b1e565b610b46612743565b610a88565b50346102aa5760003660031901126102aa576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102aa5760003660031901126102aa576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102aa57610be9610910366108ad565b91610c1583517f0000000000000000000000000000000000000000000000000000000000000000613dcb565b5080610ca1575b5080610c2457005b815160209081015161002193610c5f9291610c47906001600160a01b03166133ee565b808511610c68575b505101516001600160a01b031690565b339030906130c9565b8151830151610c9b91906001600160a01b031683850151610c93906001600160a01b03169288612d01565b9130916130c9565b38610c4f565b825151610cd59190610cbb906001600160a01b03166133ee565b808211610cdb575b508351516001600160a01b0316610c5f565b38610c1c565b845151610d0591906001600160a01b03166020870151610c93906001600160a01b03169285612d01565b38610cc3565b50346102aa5760203660031901126102aa5760206104c160043561417c565b50346102aa576101003660031901126102aa57610d46366105d2565b608081013590610d56823361433c565b156108315780610d6f60e0610dd2930135421115612793565b610d8b610d86846000526006602052604060002090565b612750565b90610d9581612806565b916020820191610da483612806565b91610e4a610e3e610e3e604097610e1889870197610e08610dc48a612829565b610dfd60608b019e8f612806565b93610ded610dde611c39565b6001600160a01b039098168852565b6001600160a01b03166020870152565b62ffffff16848d0152565b6001600160a01b03166060830152565b7f0000000000000000000000000000000000000000000000000000000000000000613e2f565b6001600160a01b031690565b8151610e5e906001600160a01b0316610e3e565b6001600160a01b039091160361082057610e7782612806565b93610e8190612806565b92610e8b90612829565b95610e9590612806565b60c0830196610ea388612806565b6020909301516001600160601b03169360a001610ebf90612949565b6001600160801b0316600f0b610ed490612993565b94610edd611c58565b6001600160a01b0390971687526001600160a01b0316602087015262ffffff16858701526001600160a01b031660608501526001600160a01b031660808401526001600160601b031660a0830152600f0b60c0820152610f3c90613246565b6104049491610f52918115610fa4575093612806565b82516001600160a01b039091168152602081018490523391907f352b6077a9209bc984c0f5dd020d42bf741232cd6401c9bbac47115f7a741d8d9080604081015b0390a3519081529081906020820190565b905093612806565b50346102aa5760203660031901126102aa57600435610fca816104d3565b6001600160a01b03168015610ffb576000526003602052610404604060002054604051918291829190602083019252565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b60e09060031901126102aa57600490565b5060e03660031901126102aa5761107936611052565b6080810135611088813361433c565b1561083157816110a160c0610e3e940135421115612793565b6110b8610d86836000526006602052604060002090565b906110c281612806565b9060208101926110d184612806565b92611138610e3e6040988993610e1885880198610e086110f08b612829565b60608b019861112c6111018b612806565b9461111c61110d611c39565b6001600160a01b039099168952565b6001600160a01b03166020880152565b85019062ffffff169052565b825161114c906001600160a01b0316610e3e565b6001600160a01b03909116036112565761116583612806565b9461116f90612806565b9361117990612829565b9061118390612806565b6020909201516001600160601b03169260a00161119f90612949565b6001600160801b0316600f0b936111b4611c58565b6001600160a01b0390961686526001600160a01b0316602086015262ffffff16848701526001600160a01b031660608401523360808401526001600160601b031660a0830152600f0b60c082015261120b90613246565b610404939190811561124e5750915b81518381523391907f8738fac4c3f6ded3649d1d6c64679bd1a81c89414e861f2ca28b5fc585c0e33d908060208101610f93565b90509161121a565b865163c256622b60e01b8152600490fd5b50346102aa5760008060031936011261049f576040519080600190815480831c9280821692831561131f575b602092838610851461048157858852602088019490811561046057506001146112c657610404876103f881890382611c18565b600160005294509192917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b83861061130e57505050910190506103f88261040438806103e8565b8054858701529482019481016112f2565b93607f1693611293565b50346102aa576020806003193601126102aa576000600435815260068252816113f060408320926040519361135d85611ba7565b546001600160a01b03811680865260a09190911c959094018590528080611382613879565b506040513060601b6bffffffffffffffffffffffff191686820190815260a089901b6001600160a01b03191660148201526101a0916113ce81602084015b03601f198101835282611c18565b5190206040518096819263514ea4bf60e01b8352600483019190602083019252565b0381895afa9384156116ce575b82839084918592868a818283918499859e61167e575b5061141c611c77565b6001600160801b03891681529384019661143f9088906001600160801b03169052565b60408401956114579087906001600160801b03169052565b606084018590526080840185905288151560a08501528b151560c085015260020b60e084015263ffffffff1661010083015260060b6101208201526001600160801b038716610140820152816101608201528a6101808201528c604051636c376cc560e01b81528d8183815a91600492fa9081159e6104049f611671575b8592611644575b50506114e88184614da1565b6115086114fc85516001600160801b031690565b6001600160801b031690565b6115af575b50505050508360001461159d5750516001600160801b0316915b604080516001600160a01b03909b168b526001600160601b03909b1660208b01521515998901999099526001600160801b03988916606089015288166080880152871660a08701529590951660c085015293151560e0840152921515610100830152610120820192909252908190610140820190565b516001600160801b0316905091611527565b9091929b5061163a9399506116158c6115d96115ca86613a25565b50509594509992505050613c83565b9561160f6115ef6116096115f66115ef8b6139dc565b5160060b90565b6116026115ef8c6139f2565b0360060b90565b986139f2565b92614b6b565b50611634828d61162e61a8c08760060b0560020b615002565b90614f08565b9b613d84565b95388c818061150d565b6116639250803d1061166a575b61165b8183611c18565b8101906139b0565b38806114dc565b503d611651565b611679612743565b6114d5565b9850505050975098505050506116ae91506101a03d6101a0116116c7575b6116a68183611c18565b8101906138f9565b9f959d919b969a96999698509596509394509138611413565b503d61169c565b6116d6612743565b6113fd565b801515036102aa57565b50346102aa5760403660031901126102aa57600435611703816104d3565b60243561170f816116db565b6001600160a01b03821691338314611791578161174e61175f9233600052600560205260406000209060018060a01b0316600052602052604060002090565b9060ff801983541691151516179055565b604051901515815233907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190602090a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b50346102aa576117e5366108ad565b92909160009384831393841580611a21575b611a04576118079181019061307c565b9261183384517f0000000000000000000000000000000000000000000000000000000000000000613dcb565b506020840180519091906001600160a01b0316906001600160a01b03821630036119a257505050916040916118f69361186a613804565b82516060015186821391879161188a90610e3e906001600160a01b031681565b938315611992575061189b906129c2565b915b8015611974576119046401000276a4955b5187519889916020830181516001600160a01b03908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b03601f198101895288611c18565b611924865197889687958694630251596160e31b865233600487016137cb565b03925af18015611967575b61193a575b50604051f35b61195a9060403d8111611960575b6119528183611c18565b8101906131f9565b50611934565b503d611948565b61196f612743565b61192f565b61190473fffd8963efd1fc6a506488495d951d5263988d25956118ae565b61199c91506129c2565b9161189d565b93909192936119e6575b50508382136119be575b505050604051f35b91516020015191516119de926001600160a01b03908116911633916130c9565b3880806119b6565b8451516119fd9233916001600160a01b03166130c9565b38806119ac565b604051636d24d5ef60e01b815260006004820152602490fd5b0390fd5b50858313156117f7565b602080820190808352835180925260408301928160408460051b8301019501936000915b848310611a5f5750505050505090565b9091929394958480611a7d600193603f198682030187528a5161035e565b9801930193019194939290611a4f565b5060203660031901126102aa57600480356001600160401b03918282116102aa57366023830112156102aa57818101359283116102aa57602490818301928236918660051b0101116102aa57611ae284615372565b9360005b818110611afb57604051806104048882611a2b565b600080611b098385896153bc565b60409391611b1b85518093819361540b565b0390305af490611b296147f2565b91829015611b5857505090611b5391611b428289613a03565b52611b4d8188613a03565b50612977565b611ae6565b8683879260448251106102aa5782611a1d9385611b7b94015183010191016126e5565b925162461bcd60e51b81529283928301610383565b50634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117611bc257604052565b611bca611b90565b604052565b6001600160401b038111611bc257604052565b602081019081106001600160401b03821117611bc257604052565b60a081019081106001600160401b03821117611bc257604052565b90601f801991011681019081106001600160401b03821117611bc257604052565b60405190608082018281106001600160401b03821117611bc257604052565b6040519060e082018281106001600160401b03821117611bc257604052565b604051906101a082018281106001600160401b03821117611bc257604052565b6040519061018082018281106001600160401b03821117611bc257604052565b60405190604082018281106001600160401b03821117611bc257604052565b6040519060c082018281106001600160401b03821117611bc257604052565b6020906001600160401b038111611d12575b601f01601f19160190565b611d1a611b90565b611d07565b50346102aa5760803660031901126102aa57600435611d3d816104d3565b602435611d49816104d3565b606435916001600160401b0383116102aa57366023840112156102aa57826004013591611d7583611cf5565b92611d836040519485611c18565b80845236602482870101116102aa57602081600092602461002198018388013785010152604435916142b1565b50346102aa5760003660031901126102aa576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102aa5760203660031901126102aa576004356000818152600260205260409020546001600160a01b0316156102aa5760405163e9dc637560e01b81523060048201526024810191909152610404906000816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611eb7575b600091611e96575b5060405191829182610383565b611eb1913d8091833e611ea98183611c18565b8101906126e5565b38611e89565b611ebf612743565b611e81565b506101a03660031901126102aa57611ee161018435421115612793565b611f1f610e3e610e3e611ef26127d5565b610e18611efd6127e1565b610e08611f0861281d565b611f13610dd26127ed565b62ffffff166040850152565b60405163c19d93fb60e01b81526101009190611f6f908381600481865afa908115612244575b600090819261220d575b50611f5861281d565b611f6061290c565b91611f69612918565b9361403b565b91611f786127d5565b90611f816127e1565b90611f8a61281d565b90611f936127ed565b90611f9c61290c565b6001600160a01b039790919088611fb1612953565b166121ff57611fbe61290c565b156121e5576401000276a45b905b611fd4612924565b93611fdd612931565b956001600160801b0380611fef61293d565b166121d657975b61010435806121d05750600019995b61200d611c97565b6001600160a01b03909c168c526001600160a01b031660208c015262ffffff1660408b01526001600160a01b031660608a01523060808a0152151560a08901526001600160801b031660c08801526001600160a01b031660e08701526001600160801b03909116908501526001600160801b03166101208401526001600160801b03166101408301526101608201526120a590612d18565b9395949092966120b36127f9565b90600754968792836120c481612977565b6007556120d091614400565b6120d8611cb7565b6001600160a01b0390911681526001600160601b0384166020820152612108836000526006602052604060002090565b9061213591815160209092015160a01b6001600160a01b0319166001600160a01b03909216919091179055565b61213d612c2d565b6121456127f9565b6040805133815260208101959095528401899052606084018a90526080840185905260a0840186905260c0840187905216917f2285d52eb6c0af06e33f4610840cc004ae11e19814110bf092b80f3f04e4012e9060e090a360405195869561040495879260a094919796959260c0850198855260208501526040840152606083015260808201520152565b99612005565b506121df61293d565b97611ff6565b73fffd8963efd1fc6a506488495d951d5263988d25611fca565b612207612953565b90611fcc565b905061222f9150843d861161223d575b6122278183611c18565b810190612889565b505050505091905038611f4f565b503d61221d565b61224c612743565b611f45565b5060e03660031901126102aa5761226736611052565b6080810135612276813361433c565b156108315761228b60c0830135421115612793565b61229f816000526006602052604060002090565b6122a890612750565b916122b281612806565b92602082016122c081612806565b94604092838501916122d183612829565b9760608701986122e08a612806565b916122e9611c39565b6001600160a01b0390941684526001600160a01b0316602084015262ffffff16828701526001600160a01b03166060820152612345907f0000000000000000000000000000000000000000000000000000000000000000613e2f565b81516001600160a01b039081169116036124f95760009485612371886000526006602052604060002090565b5561237b8761451e565b61238481612806565b9361238e90612806565b9261239890612829565b976123a290612806565b9060a001976123b089612806565b6020909301516001600160601b0316936123c8611cd6565b6001600160a01b0390961686526001600160a01b0316602086015262ffffff16848601526001600160a01b031660608401526001600160a01b031660808301526001600160601b031660a082015261241f90613497565b918495919550848113600014612478610404967f39f70f0fcd9366a4cc0388b64242d1bba1933d1d50cdd337b894d88c4258a680936124a9936124e35780995b828212156124c9575061247291506129c2565b98612806565b85516001600160a01b0390911681526020810188905260408101899052606081019490945233939081906080820190565b0390a3519283928360409060009294936060820195825260208201520152565b9050818112156124dd5761247291506129c2565b50612472565b818a13156124f357895b9961245f565b816124ed565b835163c256622b60e01b8152600490fd5b5060603660031901126102aa57600435612523816104d3565b60443561252f816104d3565b6040516370a0823160e01b8152306004820152906020826024816001600160a01b0387165afa9182156125a4575b600092612584575b50612574602435831015612bec565b8161257b57005b610021926154d0565b61259d91925060203d8111610b3757610b288183611c18565b9038612565565b6125ac612743565b61255d565b50346102aa5760403660031901126102aa57602060ff61260e6004356125d6816104d3565b602435906125e3826104d3565b60018060a01b03166000526005845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b50346102aa57612629366108ad565b919092600093848213938480156126d5575b156126d15781016080828203126126d15761265591612ffe565b92612680847f0000000000000000000000000000000000000000000000000000000000000000613dfa565b506126b6575b50828113612695575b82604051f35b602091909101516126af91906001600160a01b0316610c5f565b388061268f565b82516126cb91906001600160a01b0316610c5f565b38612686565b8580fd5b5085841361263b565b156102aa57565b6020818303126102aa578051906001600160401b0382116102aa570181601f820112156102aa57805161271781611cf5565b926127256040519485611c18565b818452602082840101116102aa576103949160208085019101610329565b506040513d6000823e3d90fd5b90604051604081018181106001600160401b03821117612786575b60405291546001600160a01b038116835260a01c6020830152565b61278e611b90565b61276b565b1561279a57565b60405162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b6044820152606490fd5b600435610394816104d3565b602435610394816104d3565b606435610394816104d3565b61016435610394816104d3565b35610394816104d3565b62ffffff8116036102aa57565b60443561039481612810565b3561039481612810565b6001600160801b038116036102aa57565b519061284f82612833565b565b51908160020b82036102aa57565b519063ffffffff821682036102aa57565b51908160060b82036102aa57565b519061284f826116db565b9190826101009103126102aa5781516128a1816104d3565b9160208101516001600160601b03811681036102aa579160408201516128c681612833565b916128d360608201612851565b916128e06080830161285f565b916128ed60a08201612870565b9160c082015160ff811681036102aa5760e090920151610394816116db565b608435610394816116db565b60a43561039481612833565b6101443561039481612833565b60c43561039481612833565b60e43561039481612833565b3561039481612833565b61012435610394816104d3565b50634e487b7160e01b600052601160045260246000fd5b6001906000198114612987570190565b61298f612960565b0190565b600f0b6f7fffffffffffffffffffffffffffffff1981146129b5575b60000390565b6129bd612960565b6129af565b600160ff1b81146129b55760000390565b60018060a01b03807f0000000000000000000000000000000000000000000000000000000000000000163314908115612a48575b5015612a0f57565b60405162461bcd60e51b8152602060048201526011602482015270139bdd0815d155120e481bdc881c1bdbdb607a1b6044820152606490fd5b604051635b16ebb760e01b81523360048201529150602090829060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ad0575b600091612aa2575b5038612a07565b612ac3915060203d8111612ac9575b612abb8183611c18565b8101906130b4565b38612a9b565b503d612ab1565b612ad8612743565b612a93565b908160209103126102aa575190565b15612af357565b60405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b6044820152606490fd5b6040516370a0823160e01b81523060048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691602082602481865afa918215612bdf575b600092612bbf575b5081612b8f57505050565b823b156102aa57604051632e1a7d4d60e01b81526004810183905261284f93600090829081838160248101610ad2565b612bd891925060203d8111610b3757610b288183611c18565b9038612b84565b612be7612743565b612b7c565b15612bf357565b60405162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b6044820152606490fd5b47612c3457565b61284f4733615582565b815180516001600160a01b03908116835260208083015182169084015260408083015162ffffff1690840152606091820151169082015260a081019291608090602001516001600160a01b0316910152565b908160a09103126102aa578051916020820151916040810151916080606083015192015190565b6001600160a01b03918216815291151560208301526001600160801b0392831660408301529092166060830152909116608082015260c060a082018190526103949291019061035e565b818110612d0c570390565b612d14612960565b0390565b80519091906001600160a01b031660208301519091906001600160a01b031692612da8604094612d98612d508785015162ffffff1690565b6060850151612d8d906001600160a01b031693612d7d612d6e611c39565b6001600160a01b03909a168a52565b6001600160a01b03166020890152565b62ffffff1686880152565b6001600160a01b03166060850152565b612dd5610e3e847f0000000000000000000000000000000000000000000000000000000000000000613e2f565b91612ddf48614d1d565b804710612fe5576080830151869060a0906001600160a01b031681860196612e078851151590565b85612e1c60c08a01516001600160801b031690565b60e08a0151909490612e9990612e70906001600160a01b03169d6101008d0199612e7e612e508c516001600160801b031690565b92612e59611cb7565b908152336020820152825194859160208301612c3e565b03601f198101855284611c18565b5163f6b9a60160e01b81529e8f988997889660048801612cb7565b0392600180871b03165af1968715612fd8575b6000968798889789928a92612f98575b50888b9a9b612ed96114fc6101208c01516001600160801b031690565b8110612f7f5750612ef86114fc6101408b01516001600160801b031690565b8111612f66575090612f15612f11610160949351151590565b1590565b15612f5e5750955b01518511612f475750612f3d6114fc612f4492516001600160801b031690565b8094612d01565b91565b51639c56bf3160e01b815260048101859052602490fd5b905095612f1d565b84516315481e3160e01b81526004810191909152602490fd5b8551636d24d5ef60e01b81526004810191909152602490fd5b93995097505050612fc191975060a03d8111612fd1575b612fb98183611c18565b810190612c90565b9299939891979192909138612ebc565b503d612faf565b612fe0612743565b612eac565b8551630b46947360e11b81526004810191909152602490fd5b91908260809103126102aa57604051608081018181106001600160401b0382111761306f575b60405260608082948035613037816104d3565b84526020810135613047816104d3565b6020850152604081013561305a81612810565b604085015201359161306b836104d3565b0152565b613077611b90565b613024565b60a0818303126102aa5760809061309f6040519361309985611ba7565b82612ffe565b835201356130ac816104d3565b602082015290565b908160209103126102aa5751610394816116db565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169492908281168614806131ef575b156131cd57505050823b156102aa5761317492602092604051630d0e30db60e41b815260008160048187875af180156131c0575b6131ad575b5060405163a9059cbb60e01b81526001600160a01b03909116600482015260248101929092529092839190829060009082906044820190565b03925af180156131a0575b6131865750565b61319d9060203d8111612ac957612abb8183611c18565b50565b6131a8612743565b61317f565b80610af56131ba92611bcf565b3861313b565b6131c8612743565b613136565b91945091929190811630036131e6575061284f926154d0565b61284f93615419565b5083471015613102565b91908260409103126102aa576020825192015190565b90926001600160601b03608093610394969560018060a01b03168452166020830152600f0b6040820152816060820152019061035e565b80516132aa92906001600160a01b031660208301805190939161334d91613322906001600160a01b0316916040978893610e086132888689015162ffffff1690565b606089015161329f906001600160a01b0316610dd2565b62ffffff1684870152565b6132da610e3e610e3e837f0000000000000000000000000000000000000000000000000000000000000000613e2f565b9060006132f160a08801516001600160601b031690565b61333061330260c08a0151600f0b90565b9361330b611cb7565b908152336020820152875196879160208301612c3e565b03601f198101875286611c18565b855163462278df60e01b815296879586948593306004860161320f565b03925af19081156133e1575b60009586926133bc575b509093905084156133ad575080516001600160a01b03165b613384816133ee565b908161338f57505050565b6080929092015161284f92906001600160a01b03165b9030906130c9565b516001600160a01b031661337b565b6133d793965080919250903d10611960576119528183611c18565b9390933880613363565b6133e9612743565b613359565b6040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115613442575b60009161342a575090565b610394915060203d8111610b3757610b288183611c18565b61344a612743565b61341f565b908160609103126102aa578051916040602083015192015190565b6001600160601b03610394949360609360018060a01b03168352166020820152816040820152019061035e565b80516135939160609161332291906001600160a01b031660208201516134f8906001600160a01b03166134e96134d3604086015162ffffff1690565b85880151611f13906001600160a01b0316610dd2565b6001600160a01b031682860152565b600061352a610e3e610e3e847f0000000000000000000000000000000000000000000000000000000000000000613e2f565b9261357661355560a0613546608085015160018060a01b031690565b9301516001600160601b031690565b9361355e611cb7565b90815233602082015260405196879160208301612c3e565b60405163bf25901d60e01b8152968795869485936004850161346a565b03925af19081156135e8575b600091829183916135b7575b5090919261284f612c2d565b9150506135db915060603d81116135e1575b6135d38183611c18565b81019061344f565b386135ab565b503d6135c9565b6135f0612743565b61359f565b805190916136e0916001600160a01b03166060612e70602086019261365b613623855160018060a01b031690565b61364c61363660408b015162ffffff1690565b8a870151611f13906001600160a01b0316610dd2565b6001600160a01b031682850152565b613688610e3e827f0000000000000000000000000000000000000000000000000000000000000000613e2f565b906136c16136a060a08a01516001600160601b031690565b916136a9611cb7565b90815230602082015260405194859160208301612c3e565b600060405180988195829463bf25901d60e01b8452306004850161346a565b03926001600160a01b03165af180156137be575b6000938491613798575b509260001315613788575082516001600160a01b0316925b61371f846133ee565b9360c0820151851061376f57608061284f9261374c928780613751575b505001516001600160a01b031690565b612b2d565b8284015161376892906001600160a01b03166133a5565b388761373c565b604051636b19f1cf60e11b815260048101869052602490fd5b516001600160a01b031692613716565b90506137b391935060603d81116135e1576135d38183611c18565b9391905092386136fe565b6137c6612743565b6136f4565b6001600160a01b039182168152911515602083015260408201929092529116606082015260a0608082018190526103949291019061035e565b4761380b57565b477f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156102aa57600090600460405180948193630d0e30db60e41b83525af1801561386c575b6138635750565b61284f90611bcf565b613874612743565b61385c565b604051906101a082018281106001600160401b038211176138ec575b604052816101806000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201520152565b6138f4611b90565b613895565b90816101a09103126102aa57805161391081612833565b91602082015161391f81612833565b91604081015161392e81612833565b9161393b60608301612844565b9161394860808201612844565b9161395560a0830161287e565b9161396260c0820161287e565b9161396f60e08301612851565b9161397d610100820161285f565b9161398b6101208301612870565b916139996101408201612844565b916101806139aa6101608401612844565b92015190565b908160209103126102aa575161039481612810565b50634e487b7160e01b600052603260045260246000fd5b6020908051156139ea570190565b61298f6139c5565b6040908051600110156139ea570190565b6020918151811015613a18575b60051b010190565b613a206139c5565b613a10565b60405163c19d93fb60e01b815261010092918390829060049082906001600160a01b03165afa908115613abb575b6000928392849285968692879288928992613a91575b50509091889596979863ffffffff8042169586031660060b9060020b0260060b0160060b9293565b96509650505050509350613ab19250803d1061223d576122278183611c18565b9397933880613a69565b613ac3612743565b613a53565b908160209103126102aa5751610394816104d3565b6020906001600160401b038111613af6575b60051b0190565b613afe611b90565b613aef565b60405190606082018281106001600160401b03821117613b30575b60405260028252604082602036910137565b613b38611b90565b613b1e565b81601f820112156102aa57805191613b5483613add565b92613b626040519485611c18565b808452602092838086019260051b8201019283116102aa578301905b828210613b8c575050505090565b8380918351613b9a816104d3565b815201910190613b7e565b9190916040818403126102aa578051926001600160401b03938481116102aa5782019381601f860112156102aa578451613bde81613add565b90613bec6040519283611c18565b808252602096878084019260051b820101918583116102aa5788809201905b838210613c2b5750505050948301519081116102aa576103949201613b3d565b828091613c3784612870565b815201910190613c0b565b6020908160408183019282815285518094520193019160005b828110613c69575050505090565b835163ffffffff1685529381019392810192600101613c5b565b6000613cee6040516307dc0d1d60e41b815260208160048160018060a01b038098165afa908115613d60575b8391613d32575b50613cbf613b03565b613cd2613ccb826139dc565b61a8c09052565b60405194858094819363883bdbfd60e01b835260048301613c42565b0392165afa908115613d25575b600091613d06575090565b613d21913d8091833e613d198183611c18565b810190613ba5565b5090565b613d2d612743565b613cfb565b613d53915060203d8111613d59575b613d4b8183611c18565b810190613ac8565b38613cb6565b503d613d41565b613d68612743565b613caf565b50634e487b7160e01b600052601260045260246000fd5b91613da6909493919460e084019361a8c085519460060b0560020b8552614da1565b936001600160801b0380861690821611613dc3575b5060020b9052565b935038613dbb565b6001600160a01b0391613ddd91613e2f565b1690813303613de857565b604051635cf3778960e01b8152600490fd5b81613e0491613e2f565b50606001516001600160a01b03169033829003613e1d57565b6040516383b1c28760e01b8152600490fd5b81519192916020906001600160a01b0316848201516001600160a01b031690613eb9613e756060613e6660408a015162ffffff1690565b9801516001600160a01b031690565b604051635d0aec4160e01b81526001600160a01b039384166004820152938316602485015262ffffff90971660448401529516606482015293849081906084820190565b038160018060a01b038095165afa928315613f13575b600093613ef3575b50821615613ee157565b604051630f509b1160e01b8152600490fd5b613f0c91935060203d8111613d5957613d4b8183611c18565b9138613ed7565b613f1b612743565b613ecf565b8015613fc0578080600114613fb957600214613fb3576001908161013382101682600b83101617613fab57906002815b808211613f7457505081600019048111613f68570290565b613f70612960565b0290565b909280600019048111613f9e575b818416613f95575b800292811c90613f50565b80920291613f8a565b613fa6612960565b613f82565b600291500a90565b50600490565b5050600190565b50600090565b8015613fd4575b6000190490565b613fdc613d6d565b613fcd565b8115613feb570490565b613ff3613d6d565b0490565b620f4240908060001904821181151516613f68570290565b8060001904821181151516613f68570290565b62ffffff8091169081620f424091038111612987570190565b6001600160801b0380821695939490926001600160a01b031691908215614123575b6140678388614995565b9061411a575060601b6fffffffffffffffffffffffffffffffff60601b1604915b16918183101561410157826140e9836140e36140c5946140ef976103949997106140f4575b6140dd6140d56140cf6140ca866140c58a8203613f20565b613fe1565b613ff7565b92614022565b62ffffff1690565b90613fe1565b90612d01565b9261400f565b61492c565b6140fc612960565b6140ad565b60405163c74656a760e01b815260048101839052602490fd5b91505091614088565b61412b613d6d565b61405d565b1561413757565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600260205260409020546001600160a01b0316610394811515614130565b156141a657565b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b600081815260026020526040902054614234906001600160a01b03161515614130565b6000908152600460205260409020546001600160a01b031690565b1561425657565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b906142d59392916142c56109ed843361433c565b6142d0838383614606565b614822565b156142dc57565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608490fd5b6001600160a01b038061434e8461417c565b169281831692848414948515614384575b5050831561436e575b50505090565b61437a91929350614211565b1614388080614368565b60009081526005602090815260408083206001600160a01b03949094168352929052205460ff169350388061435f565b156143bb57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b6001600160a01b0381169081156144da576000838152600260205260409020546144b0919061443b906001600160a01b031615155b156143b4565b60008481526002602052604090205461445e906001600160a01b03161515614435565b6001600160a01b038116600090815260036020526040902060018154019055614491846000526002602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef81604051a4565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b6145278161417c565b506145318161417c565b600082815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0390941680845260038352818420805460001901905585845260029092528220919290919081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef82604051a4565b156145b357565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b61462a906146138461417c565b6001600160a01b03828116939091821684146145ac565b83169283156146f5576146916146cc926146508561464a610e3e8a61417c565b146145ac565b614677614667886000526004602052604060002090565b80546001600160a01b0319169055565b6001600160a01b0316600090815260036020526040902090565b80546000190190556001600160a01b038116600090815260036020526040902060018154019055614491856000526002602052604060002090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051a4565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b600082815260046020526040902080546001600160a01b0319166001600160a01b0383161790556001600160a01b038061477f8461417c565b169116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256000604051a4565b908160209103126102aa575161039481610298565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526103949291019061035e565b3d1561481d573d9061480382611cf5565b916148116040519384611c18565b82523d6000602084013e565b606090565b92909190823b1561492357614855926020926000604051809681958294630a85bd0160e11b9a8b855233600486016147c1565b03926001600160a01b03165af1600091816148f3575b506148e5576148786147f2565b805190816148e05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608490fd5b602001fd5b6001600160e01b0319161490565b61491591925060203d811161491c575b61490d8183611c18565b8101906147ac565b903861486b565b503d614903565b50505050600190565b6001600160801b0390818111614940571690565b60405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608490fd5b60001982820990828102928380841093039280840393146149d157600160601b91838311156102aa570990828211900360a01b910360601c1790565b50505060601c90565b6000198282099082810292838084109303928084039314614a1b576801000000000000000091838311156102aa570990828211900360c01b910360401c1790565b50505060401c90565b6000198282099082810292838084109303928084039314614a6057600160801b91838311156102aa570990828211900360801b910360801c1790565b50505060801c90565b6000198282099082810292838084109303928084039314614aa557600160c01b91838311156102aa570990828211900360401b910360c01c1790565b50505060c01c90565b600160801b91600019838309928260801b92838086109503948086039514614b2e57908291614ade8684116126de565b096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b5050906103949250613fe1565b600160c01b91600019838309928260c01b92838086109503948086039514614b2e57908291614ade8684116126de565b929190614b76613879565b5061010084019063ffffffff918281511693868585851614614d135761039496614c7595614c6a9360069203820b97860316810b61039802810b9087614bc2612f1160a0860151151590565b15614cb057614c0662049d40614c5a94614c4894614bec6140ef956116026101208b015160060b90565b9182820b81811315614c80575091505b0b0560020b615002565b6001600160801b03614c366040614c2760208901516001600160801b031690565b9701516001600160801b031690565b6001600160a01b039092169116614995565b915b6001600160801b031660208a0152565b6001600160801b03166040880152565b9063ffffffff169052565b60060b610120830152565b614c92614c8c83614ef0565b60060b90565b13614c9e575b50614bfc565b614ca9919250614ef0565b9038614c98565b6140ef92614cda92614bec62049d4093614cd2610120614cf699015160060b90565b900360060b90565b6001600160801b03614c3660208c01516001600160801b031690565b614c5a614d0d60408a01516001600160801b031690565b91614c4a565b5050505050505090565b6445d964b800620f42409163ee6b2800808211600014614d7e57505b600019620249f0821515838304821116614d71575b82028015159104621e84801116614d6457020490565b614d6c612960565b020490565b614d79612960565b614d4e565b9050614d39565b620f424081198111612987570190565b81198111612987570190565b90614db8614db360e084015160020b90565b615002565b90614dc9612f1160a0850151151590565b15614e8457614e4c91614e10614e076114fc93614e0162ffffff614dfa6114fc60408b01516001600160801b031690565b9216614d85565b9061400f565b620f4240900490565b6001600160a01b03909116906001600160801b038211614e6b57614e3782614e3d9361400f565b90614b3b565b925b516001600160801b031690565b90600082821115614e655750610394916140ef91612d01565b91505090565b614e7882614e7e936149da565b90614aae565b92614e3f565b614e4c91614eb0614e076114fc93614e0162ffffff614dfa6114fc60208b01516001600160801b031690565b6001600160a01b03909116906001600160801b038211614edd57614ed782614e3d9361400f565b90614a69565b614eea82614e7e936149da565b90614a24565b60060b667fffffffffffff1981146129b55760000390565b9190614f1a612f1160a0850151151590565b15614f9357614f85614f72614f4d614e07614f8e95614e0162ffffff614dfa6114fc60408c01516001600160801b031690565b94614f6c6114fc614e3d6114fc6101408501516001600160801b031690565b90614d95565b6001600160a01b03909216918290614995565b9260601b613fe1565b111590565b614ffc614fe9614fe3614fc4614e07614f8e96614e0162ffffff614dfa6114fc60208d01516001600160801b031690565b95614f6c6114fc614e3d6114fc6101408501516001600160801b031690565b60601b90565b6001600160a01b03909216918290613fe1565b92614995565b60020b600081121561536c5780600003905b620d89e8821161535a576001821615615348576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b16916002811661532c575b60048116615310575b600881166152f4575b601081166152d8575b602081166152bc575b604081166152a0575b608090818116615285575b610100811661526a575b610200811661524f575b6104008116615234575b6108008116615219575b61100081166151fe575b61200081166151e3575b61400081166151c8575b61800081166151ad575b620100008116615192575b620200008116615178575b62040000811661515e575b6208000016615143575b50600012615135575b63ffffffff811661512d576000905b60201c60ff91909116016001600160a01b031690565b600190615117565b61513e90613fc6565b615108565b6b048a170391f7dc42444e8fa26000929302901c91906150ff565b6d2216e584f5fa1ea926041bedfe98909302811c926150f5565b926e5d6af8dedb81196699c329225ee60402811c926150ea565b926f09aa508b5b7a84e1c677de54f3e99bc902811c926150df565b926f31be135f97d08fd981231505542fcfa602811c926150d4565b926f70d869a156d2a1b890bb3df62baf32f702811c926150ca565b926fa9f746462d870fdf8a65dc1f90e061e502811c926150c0565b926fd097f3bdfd2022b8845ad8f792aa582502811c926150b6565b926fe7159475a2c29b7443b29c7fa6e889d902811c926150ac565b926ff3392b0822b70005940c7a398e4b70f302811c926150a2565b926ff987a7253ac413176f2b074cf7815e5402811c92615098565b926ffcbe86c7900a88aedcffc83b479aa3a402811c9261508e565b926ffe5dee046a99a2a811c461f1969c305302811c92615084565b916fff2ea16466c96a3843ec78b326b528610260801c91615079565b916fff973b41fa98c081472e6896dfb254c00260801c91615070565b916fffcb9843d60f6159c9db58835c9266440260801c91615067565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c9161505e565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91615055565b916ffff97272373d413259a46990580e213a0260801c9161504c565b6001600160881b03600160801b615041565b6040516315e4079d60e11b8152600490fd5b80615014565b9061537c82613add565b6153896040519182611c18565b828152809261539a601f1991613add565b019060005b8281106153ab57505050565b80606060208093850101520161539f565b91908110156153fe575b60051b81013590601e19813603018212156102aa5701908135916001600160401b0383116102aa5760200182360381136102aa579190565b6154066139c5565b6153c6565b908092918237016000815290565b9091600080949381946040519160208301946323b872dd60e01b865260018060a01b03809216602485015216604483015260648201526064815261545c81611bfd565b51925af16154686147f2565b816154a1575b501561547657565b60405162461bcd60e51b815260206004820152600360248201526229aa2360e91b6044820152606490fd5b80518015925082156154b6575b50503861546e565b6154c992506020809183010191016130b4565b38806154ae565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044810193909352600092839290839061550f81606481016113c0565b51925af161551b6147f2565b81615553575b501561552957565b60405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606490fd5b8051801592508215615568575b505038615521565b61557b92506020809183010191016130b4565b3880615560565b60008092918192602060405161559781611be2565b84815201915af16155a66147f2565b50156155ae57565b60405162461bcd60e51b815260206004820152600360248201526253544560e81b6044820152606490fdfea2646970667358221220a59719045897173a0bbd440aa567e32a4b873e24d37f675bb4d21a2cdf95ddad64736f6c634300080f00330000000000000000000000008a3b8cd1cf9b3e4e552a1f8d6c4bc4d3a97c5a6a0000000000000000000000007507c1dc16935b82698e4c63f2746a2fcf994df80000000000000000000000007814defd3794a8b63614c22a2b8ceb0ff25c710f