{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_epochClock",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_supplyManager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CallerNotSupplyManager",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransfersAlreadyEnabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransfersDisabled",
      "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": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "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": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "enableTransfers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "epochClock",
      "outputs": [
        {
          "internalType": "contract PWNEpochClock",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "epoch",
          "type": "uint16"
        }
      ],
      "name": "ownedTokenIdsAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ownedTokensInEpochs",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "epoch",
              "type": "uint16"
            },
            {
              "internalType": "uint48[]",
              "name": "ids",
              "type": "uint48[]"
            }
          ],
          "internalType": "struct StakedPWN.OwnedTokensInEpoch[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "supplyManager",
      "outputs": [
        {
          "internalType": "contract IStakedPWNSupplyManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "transfersEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60c06040523480156200001157600080fd5b50604051620023b5380380620023b5833981016040819052620000349162000171565b6040518060400160405280600a81526020016929ba30b5b2b210282ba760b11b8152506040518060400160405280600581526020016439ba282ba760d91b8152506200008f62000089620000d660201b60201c565b620000da565b60026200009d838262000260565b506003620000ac828262000260565b5050506001600160a01b0380831660a0528116608052620000cd83620000da565b5050506200032c565b3390565b600180546001600160a01b0319169055620001018162000104602090811b62000d0a17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016c57600080fd5b919050565b6000806000606084860312156200018757600080fd5b620001928462000154565b9250620001a26020850162000154565b9150620001b26040850162000154565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e657607f821691505b6020821081036200020757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025b57600081815260208120601f850160051c81016020861015620002365750805b601f850160051c820191505b81811015620002575782815560010162000242565b5050505b505050565b81516001600160401b038111156200027c576200027c620001bb565b62000294816200028d8454620001d1565b846200020d565b602080601f831160018114620002cc5760008415620002b35750858301515b600019600386901b1c1916600185901b17855562000257565b600085815260208120601f198616915b82811015620002fd57888601518255948401946001909101908401620002dc565b50858210156200031c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516120476200036e600039600081816102fe01526114180152600081816103c00152818161084c015281816108be0152610c2201526120476000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806379ba5097116100de578063b88d4fde11610097578063e30c397811610071578063e30c39781461036e578063e985e9c51461037f578063f147389f146103bb578063f2fde38b146103e257600080fd5b8063b88d4fde1461033b578063bef97c871461034e578063c87b56dd1461035b57600080fd5b806379ba5097146102d85780638da5cb5b146102e057806395d89b41146102f15780639cf9a327146102f9578063a22cb46514610320578063af35c6c71461033357600080fd5b806340c10f191161014b578063602fdb0311610125578063602fdb031461027c5780636352211e1461029c57806370a08231146102af578063715018a6146102d057600080fd5b806340c10f191461024357806342842e0e1461025657806342966c681461026957600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806323b872dd1461021057806329e4eae314610223575b600080fd5b6101a66101a1366004611985565b6103f5565b60405190151581526020015b60405180910390f35b6101c3610447565b6040516101b291906119f9565b6101e36101de366004611a0c565b6104d9565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611a41565b610500565b005b61020e61021e366004611a6b565b61061a565b610236610231366004611ab7565b61064b565b6040516101b29190611aee565b61020e610251366004611a41565b610841565b61020e610264366004611a6b565b610898565b61020e610277366004611a0c565b6108b3565b61028f61028a366004611b32565b610908565b6040516101b29190611b4d565b6101e36102aa366004611a0c565b610a0b565b6102c26102bd366004611b32565b610a6b565b6040519081526020016101b2565b61020e610af1565b61020e610b05565b6000546001600160a01b03166101e3565b6101c3610b7c565b6101e37f000000000000000000000000000000000000000000000000000000000000000081565b61020e61032e366004611bf9565b610b8b565b61020e610b96565b61020e610349366004611c99565b610bd1565b6008546101a69060ff1681565b6101c3610369366004611a0c565b610c09565b6001546001600160a01b03166101e3565b6101a661038d366004611d44565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6101e37f000000000000000000000000000000000000000000000000000000000000000081565b61020e6103f0366004611b32565b610c99565b60006001600160e01b031982166380ac58cd60e01b148061042657506001600160e01b03198216635b5e139f60e01b145b8061044157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461045690611d77565b80601f016020809104026020016040519081016040528092919081815260200182805461048290611d77565b80156104cf5780601f106104a4576101008083540402835291602001916104cf565b820191906000526020600020905b8154815290600101906020018083116104b257829003601f168201915b5050505050905090565b60006104e482610d5a565b506000908152600660205260409020546001600160a01b031690565b600061050b82610a0b565b9050806001600160a01b0316836001600160a01b03160361057d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105995750610599813361038d565b61060b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610574565b6106158383610db9565b505050565b6106243382610e27565b6106405760405162461bcd60e51b815260040161057490611db1565b610615838383610ea6565b6001600160a01b03821660009081526009602052604081208054606092036106a25760005b604051908082528060200260200182016040528015610699578160200160208202803683370190505b50915050610441565b806000815481106106b5576106b5611dfe565b600091825260209091206002909102015461ffff90811690841610156106dc576000610670565b80546000906106ed90600190611e2a565b90505b8361ffff1682828154811061070757610707611dfe565b600091825260209091206002909102015461ffff161115610734578061072c81611e3d565b9150506106f0565b600082828154811061074857610748611dfe565b6000918252602082206001600290920201015491508167ffffffffffffffff81111561077657610776611c2a565b60405190808252806020026020018201604052801561079f578160200160208202803683370190505b50905060005b82811015610836578484815481106107bf576107bf611dfe565b906000526020600020906002020160010181815481106107e1576107e1611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1682828151811061082357610823611dfe565b60209081029190910101526001016107a5565b509695505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088a576040516313c68ddf60e11b815260040160405180910390fd5b6108948282611017565b5050565b61061583838360405180602001604052806000815250610bd1565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108fc576040516313c68ddf60e11b815260040160405180910390fd5b610905816111b0565b50565b6001600160a01b0381166000908152600960209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a0057600084815260209081902060408051808201825260028602909201805461ffff1683526001810180548351818702810187019094528084529394919385830193928301828280156109e857602002820191906000526020600020906000905b82829054906101000a900465ffffffffffff1665ffffffffffff16815260200190600601906020826005010492830192600103820291508084116109a75790505b50505050508152505081526020019060010190610940565b505050509050919050565b6000818152600460205260408120546001600160a01b0316806104415760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610574565b60006001600160a01b038216610ad55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610574565b506001600160a01b031660009081526005602052604090205490565b610af9611253565b610b0360006112ad565b565b60015433906001600160a01b03168114610b735760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610574565b610905816112ad565b60606003805461045690611d77565b6108943383836112c6565b610b9e611253565b60085460ff1615610bc2576040516385e1a58160e01b815260040160405180910390fd5b6008805460ff19166001179055565b610bdb3383610e27565b610bf75760405162461bcd60e51b815260040161057490611db1565b610c0384848484611394565b50505050565b60405163e959319f60e01b8152600481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e959319f90602401600060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104419190810190611e54565b610ca1611253565b600180546001600160a01b0383166001600160a01b03199091168117909155610cd26000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600460205260409020546001600160a01b03166109055760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610574565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dee82610a0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e3383610a0b565b9050806001600160a01b0316846001600160a01b03161480610e7a57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b80610e9e5750836001600160a01b0316610e93846104d9565b6001600160a01b0316145b949350505050565b826001600160a01b0316610eb982610a0b565b6001600160a01b031614610edf5760405162461bcd60e51b815260040161057490611ecb565b6001600160a01b038216610f415760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610574565b610f4e83838360016113c7565b826001600160a01b0316610f6182610a0b565b6001600160a01b031614610f875760405162461bcd60e51b815260040161057490611ecb565b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260058552838620805460001901905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821661106d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610574565b6000818152600460205260409020546001600160a01b0316156110d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610574565b6110e06000838360016113c7565b6000818152600460205260409020546001600160a01b0316156111455760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610574565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006111bb82610a0b565b90506111cb8160008460016113c7565b6111d482610a0b565b600083815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526005845282852080546000190190558785526004909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000546001600160a01b03163314610b035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610574565b600180546001600160a01b031916905561090581610d0a565b816001600160a01b0316836001600160a01b0316036113275760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610574565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61139f848484610ea6565b6113ab848484846114e0565b610c035760405162461bcd60e51b815260040161057490611f10565b60085460ff161580156113e257506001600160a01b03841615155b80156113f657506001600160a01b03831615155b1561141457604051638574adcf60e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190611f62565b6114a3906001611f7f565b90506001600160a01b038516156114bf576114bf8584836115e1565b6001600160a01b038416156114d9576114d98484836116a4565b5050505050565b60006001600160a01b0384163b156115d657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611524903390899088908890600401611fa1565b6020604051808303816000875af192505050801561155f575060408051601f3d908101601f1916820190925261155c91810190611fde565b60015b6115bc573d80801561158d576040519150601f19603f3d011682016040523d82523d6000602084013e611592565b606091505b5080516000036115b45760405162461bcd60e51b815260040161057490611f10565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e9e565b506001949350505050565b6001600160a01b03831660009081526009602052604081208054909190829061160c90600190611e2a565b8154811061161c5761161c611dfe565b60009182526020909120600290910201805490915061ffff8085169116036116505761164b81600101856117ca565b6114d9565b8154600180820184556000848152602090206002909202909101805461ffff191661ffff86161781558282018054919261168e9290840191906118fc565b5061169c81600101866117ca565b505050505050565b6001600160a01b0383166000908152600960205260408120805490919081036116f357508054600181018255600082815260209020600290910201805461ffff191661ffff8416178155611781565b8154600090839061170690600190611e2a565b8154811061171657611716611dfe565b60009182526020909120600290910201805490915061ffff8086169116036117405780915061177f565b8254600180820185556000858152602090206002909202909101805461ffff191661ffff8716178155828201805491945061177d928501916118fc565b505b505b60019081018054918201815560009081526020902060058083049091018054919092066006026101000a65ffffffffffff81810219909216959091160293909317909255505050565b815460005b81811015610c0357828482815481106117ea576117ea611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff16036118f4578361182b600184611e2a565b8154811061183b5761183b611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1684828154811061187557611875611dfe565b90600052602060002090600591828204019190066006026101000a81548165ffffffffffff021916908365ffffffffffff160217905550838054806118bc576118bc611ffb565b60019003818190600052602060002090600591828204019190066006026101000a81549065ffffffffffff0219169055905550505050565b6001016117cf565b8280548282559060005260206000209060040160059004810192821561194a576000526020600020916004016005900482015b8281111561194a57825482559160010191906001019061192f565b5061195692915061195a565b5090565b5b80821115611956576000815560010161195b565b6001600160e01b03198116811461090557600080fd5b60006020828403121561199757600080fd5b81356119a28161196f565b9392505050565b60005b838110156119c45781810151838201526020016119ac565b50506000910152565b600081518084526119e58160208601602086016119a9565b601f01601f19169290920160200192915050565b6020815260006119a260208301846119cd565b600060208284031215611a1e57600080fd5b5035919050565b80356001600160a01b0381168114611a3c57600080fd5b919050565b60008060408385031215611a5457600080fd5b611a5d83611a25565b946020939093013593505050565b600080600060608486031215611a8057600080fd5b611a8984611a25565b9250611a9760208501611a25565b9150604084013590509250925092565b61ffff8116811461090557600080fd5b60008060408385031215611aca57600080fd5b611ad383611a25565b91506020830135611ae381611aa7565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611b2657835183529284019291840191600101611b0a565b50909695505050505050565b600060208284031215611b4457600080fd5b6119a282611a25565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611bea57898403603f190186528251805161ffff168552880151888501889052805188860181905290890190839060608701905b80831015611bd557835165ffffffffffff168252928b019260019290920191908b0190611bad565b50978a01979550505091870191600101611b75565b50919998505050505050505050565b60008060408385031215611c0c57600080fd5b611c1583611a25565b915060208301358015158114611ae357600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c6957611c69611c2a565b604052919050565b600067ffffffffffffffff821115611c8b57611c8b611c2a565b50601f01601f191660200190565b60008060008060808587031215611caf57600080fd5b611cb885611a25565b9350611cc660208601611a25565b925060408501359150606085013567ffffffffffffffff811115611ce957600080fd5b8501601f81018713611cfa57600080fd5b8035611d0d611d0882611c71565b611c40565b818152886020838501011115611d2257600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611d5757600080fd5b611d6083611a25565b9150611d6e60208401611a25565b90509250929050565b600181811c90821680611d8b57607f821691505b602082108103611dab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561044157610441611e14565b600081611e4c57611e4c611e14565b506000190190565b600060208284031215611e6657600080fd5b815167ffffffffffffffff811115611e7d57600080fd5b8201601f81018413611e8e57600080fd5b8051611e9c611d0882611c71565b818152856020838501011115611eb157600080fd5b611ec28260208301602086016119a9565b95945050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600060208284031215611f7457600080fd5b81516119a281611aa7565b61ffff818116838216019080821115611f9a57611f9a611e14565b5092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fd4908301846119cd565b9695505050505050565b600060208284031215611ff057600080fd5b81516119a28161196f565b634e487b7160e01b600052603160045260246000fdfea264697066735822122091e1c3bfffada7199b951774d2136663e400eb22f6d02552e6811b169c69a72c64736f6c63430008120033",
    "sourceMap": "714:8319:54:-:0;;;2542:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1390:113:37;;;;;;;;;;;;;-1:-1:-1;;;1390:113:37;;;;;;;;;;;;;;;;-1:-1:-1;;;1390:113:37;;;936:32:21;955:12;:10;;;:12;;:::i;:::-;936:18;:32::i;:::-;1456:5:37;:13;1464:5;1456;:13;:::i;:::-;-1:-1:-1;1479:7:37;:17;1489:7;1479;:17;:::i;:::-;-1:-1:-1;;;;;;;;2655:39:54;;::::1;;::::0;2704:55;::::1;;::::0;2769:26:::1;2788:6:::0;2769:18:::1;:26::i;:::-;2542:260:::0;;;714:8319;;640:96:43;719:10;;640:96::o;1501:153:22:-;1590:13;1583:20;;-1:-1:-1;;;;;;1583:20:22;;;1613:34;1638:8;1613:24;;;;;;;:34;;:::i;:::-;1501:153;:::o;2426:187:21:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:21;;;-1:-1:-1;;;;;;2534:17:21;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:177:82:-;93:13;;-1:-1:-1;;;;;135:31:82;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:378::-;284:6;292;300;353:2;341:9;332:7;328:23;324:32;321:52;;;369:1;366;359:12;321:52;392:40;422:9;392:40;:::i;:::-;382:50;;451:49;496:2;485:9;481:18;451:49;:::i;:::-;441:59;;519:49;564:2;553:9;549:18;519:49;:::i;:::-;509:59;;196:378;;;;;:::o;579:127::-;640:10;635:3;631:20;628:1;621:31;671:4;668:1;661:15;695:4;692:1;685:15;711:380;790:1;786:12;;;;833;;;854:61;;908:4;900:6;896:17;886:27;;854:61;961:2;953:6;950:14;930:18;927:38;924:161;;1007:10;1002:3;998:20;995:1;988:31;1042:4;1039:1;1032:15;1070:4;1067:1;1060:15;924:161;;711:380;;;:::o;1222:545::-;1324:2;1319:3;1316:11;1313:448;;;1360:1;1385:5;1381:2;1374:17;1430:4;1426:2;1416:19;1500:2;1488:10;1484:19;1481:1;1477:27;1471:4;1467:38;1536:4;1524:10;1521:20;1518:47;;;-1:-1:-1;1559:4:82;1518:47;1614:2;1609:3;1605:12;1602:1;1598:20;1592:4;1588:31;1578:41;;1669:82;1687:2;1680:5;1677:13;1669:82;;;1732:17;;;1713:1;1702:13;1669:82;;;1673:3;;;1313:448;1222:545;;;:::o;1943:1352::-;2063:10;;-1:-1:-1;;;;;2085:30:82;;2082:56;;;2118:18;;:::i;:::-;2147:97;2237:6;2197:38;2229:4;2223:11;2197:38;:::i;:::-;2191:4;2147:97;:::i;:::-;2299:4;;2363:2;2352:14;;2380:1;2375:663;;;;3082:1;3099:6;3096:89;;;-1:-1:-1;3151:19:82;;;3145:26;3096:89;-1:-1:-1;;1900:1:82;1896:11;;;1892:24;1888:29;1878:40;1924:1;1920:11;;;1875:57;3198:81;;2345:944;;2375:663;1169:1;1162:14;;;1206:4;1193:18;;-1:-1:-1;;2411:20:82;;;2529:236;2543:7;2540:1;2537:14;2529:236;;;2632:19;;;2626:26;2611:42;;2724:27;;;;2692:1;2680:14;;;;2559:19;;2529:236;;;2533:3;2793:6;2784:7;2781:19;2778:201;;;2854:19;;;2848:26;-1:-1:-1;;2937:1:82;2933:14;;;2949:3;2929:24;2925:37;2921:42;2906:58;2891:74;;2778:201;-1:-1:-1;;;;;3025:1:82;3009:14;;;3005:22;2992:36;;-1:-1:-1;1943:1352:82:o;:::-;714:8319:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806379ba5097116100de578063b88d4fde11610097578063e30c397811610071578063e30c39781461036e578063e985e9c51461037f578063f147389f146103bb578063f2fde38b146103e257600080fd5b8063b88d4fde1461033b578063bef97c871461034e578063c87b56dd1461035b57600080fd5b806379ba5097146102d85780638da5cb5b146102e057806395d89b41146102f15780639cf9a327146102f9578063a22cb46514610320578063af35c6c71461033357600080fd5b806340c10f191161014b578063602fdb0311610125578063602fdb031461027c5780636352211e1461029c57806370a08231146102af578063715018a6146102d057600080fd5b806340c10f191461024357806342842e0e1461025657806342966c681461026957600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806323b872dd1461021057806329e4eae314610223575b600080fd5b6101a66101a1366004611985565b6103f5565b60405190151581526020015b60405180910390f35b6101c3610447565b6040516101b291906119f9565b6101e36101de366004611a0c565b6104d9565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611a41565b610500565b005b61020e61021e366004611a6b565b61061a565b610236610231366004611ab7565b61064b565b6040516101b29190611aee565b61020e610251366004611a41565b610841565b61020e610264366004611a6b565b610898565b61020e610277366004611a0c565b6108b3565b61028f61028a366004611b32565b610908565b6040516101b29190611b4d565b6101e36102aa366004611a0c565b610a0b565b6102c26102bd366004611b32565b610a6b565b6040519081526020016101b2565b61020e610af1565b61020e610b05565b6000546001600160a01b03166101e3565b6101c3610b7c565b6101e37f000000000000000000000000000000000000000000000000000000000000000081565b61020e61032e366004611bf9565b610b8b565b61020e610b96565b61020e610349366004611c99565b610bd1565b6008546101a69060ff1681565b6101c3610369366004611a0c565b610c09565b6001546001600160a01b03166101e3565b6101a661038d366004611d44565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6101e37f000000000000000000000000000000000000000000000000000000000000000081565b61020e6103f0366004611b32565b610c99565b60006001600160e01b031982166380ac58cd60e01b148061042657506001600160e01b03198216635b5e139f60e01b145b8061044157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461045690611d77565b80601f016020809104026020016040519081016040528092919081815260200182805461048290611d77565b80156104cf5780601f106104a4576101008083540402835291602001916104cf565b820191906000526020600020905b8154815290600101906020018083116104b257829003601f168201915b5050505050905090565b60006104e482610d5a565b506000908152600660205260409020546001600160a01b031690565b600061050b82610a0b565b9050806001600160a01b0316836001600160a01b03160361057d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105995750610599813361038d565b61060b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610574565b6106158383610db9565b505050565b6106243382610e27565b6106405760405162461bcd60e51b815260040161057490611db1565b610615838383610ea6565b6001600160a01b03821660009081526009602052604081208054606092036106a25760005b604051908082528060200260200182016040528015610699578160200160208202803683370190505b50915050610441565b806000815481106106b5576106b5611dfe565b600091825260209091206002909102015461ffff90811690841610156106dc576000610670565b80546000906106ed90600190611e2a565b90505b8361ffff1682828154811061070757610707611dfe565b600091825260209091206002909102015461ffff161115610734578061072c81611e3d565b9150506106f0565b600082828154811061074857610748611dfe565b6000918252602082206001600290920201015491508167ffffffffffffffff81111561077657610776611c2a565b60405190808252806020026020018201604052801561079f578160200160208202803683370190505b50905060005b82811015610836578484815481106107bf576107bf611dfe565b906000526020600020906002020160010181815481106107e1576107e1611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff1682828151811061082357610823611dfe565b60209081029190910101526001016107a5565b509695505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088a576040516313c68ddf60e11b815260040160405180910390fd5b6108948282611017565b5050565b61061583838360405180602001604052806000815250610bd1565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108fc576040516313c68ddf60e11b815260040160405180910390fd5b610905816111b0565b50565b6001600160a01b0381166000908152600960209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a0057600084815260209081902060408051808201825260028602909201805461ffff1683526001810180548351818702810187019094528084529394919385830193928301828280156109e857602002820191906000526020600020906000905b82829054906101000a900465ffffffffffff1665ffffffffffff16815260200190600601906020826005010492830192600103820291508084116109a75790505b50505050508152505081526020019060010190610940565b505050509050919050565b6000818152600460205260408120546001600160a01b0316806104415760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610574565b60006001600160a01b038216610ad55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610574565b506001600160a01b031660009081526005602052604090205490565b610af9611253565b610b0360006112ad565b565b60015433906001600160a01b03168114610b735760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610574565b610905816112ad565b60606003805461045690611d77565b6108943383836112c6565b610b9e611253565b60085460ff1615610bc2576040516385e1a58160e01b815260040160405180910390fd5b6008805460ff19166001179055565b610bdb3383610e27565b610bf75760405162461bcd60e51b815260040161057490611db1565b610c0384848484611394565b50505050565b60405163e959319f60e01b8152600481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e959319f90602401600060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104419190810190611e54565b610ca1611253565b600180546001600160a01b0383166001600160a01b03199091168117909155610cd26000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600460205260409020546001600160a01b03166109055760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610574565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dee82610a0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e3383610a0b565b9050806001600160a01b0316846001600160a01b03161480610e7a57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b80610e9e5750836001600160a01b0316610e93846104d9565b6001600160a01b0316145b949350505050565b826001600160a01b0316610eb982610a0b565b6001600160a01b031614610edf5760405162461bcd60e51b815260040161057490611ecb565b6001600160a01b038216610f415760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610574565b610f4e83838360016113c7565b826001600160a01b0316610f6182610a0b565b6001600160a01b031614610f875760405162461bcd60e51b815260040161057490611ecb565b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260058552838620805460001901905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821661106d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610574565b6000818152600460205260409020546001600160a01b0316156110d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610574565b6110e06000838360016113c7565b6000818152600460205260409020546001600160a01b0316156111455760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610574565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006111bb82610a0b565b90506111cb8160008460016113c7565b6111d482610a0b565b600083815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526005845282852080546000190190558785526004909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000546001600160a01b03163314610b035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610574565b600180546001600160a01b031916905561090581610d0a565b816001600160a01b0316836001600160a01b0316036113275760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610574565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61139f848484610ea6565b6113ab848484846114e0565b610c035760405162461bcd60e51b815260040161057490611f10565b60085460ff161580156113e257506001600160a01b03841615155b80156113f657506001600160a01b03831615155b1561141457604051638574adcf60e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190611f62565b6114a3906001611f7f565b90506001600160a01b038516156114bf576114bf8584836115e1565b6001600160a01b038416156114d9576114d98484836116a4565b5050505050565b60006001600160a01b0384163b156115d657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611524903390899088908890600401611fa1565b6020604051808303816000875af192505050801561155f575060408051601f3d908101601f1916820190925261155c91810190611fde565b60015b6115bc573d80801561158d576040519150601f19603f3d011682016040523d82523d6000602084013e611592565b606091505b5080516000036115b45760405162461bcd60e51b815260040161057490611f10565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e9e565b506001949350505050565b6001600160a01b03831660009081526009602052604081208054909190829061160c90600190611e2a565b8154811061161c5761161c611dfe565b60009182526020909120600290910201805490915061ffff8085169116036116505761164b81600101856117ca565b6114d9565b8154600180820184556000848152602090206002909202909101805461ffff191661ffff86161781558282018054919261168e9290840191906118fc565b5061169c81600101866117ca565b505050505050565b6001600160a01b0383166000908152600960205260408120805490919081036116f357508054600181018255600082815260209020600290910201805461ffff191661ffff8416178155611781565b8154600090839061170690600190611e2a565b8154811061171657611716611dfe565b60009182526020909120600290910201805490915061ffff8086169116036117405780915061177f565b8254600180820185556000858152602090206002909202909101805461ffff191661ffff8716178155828201805491945061177d928501916118fc565b505b505b60019081018054918201815560009081526020902060058083049091018054919092066006026101000a65ffffffffffff81810219909216959091160293909317909255505050565b815460005b81811015610c0357828482815481106117ea576117ea611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1665ffffffffffff16036118f4578361182b600184611e2a565b8154811061183b5761183b611dfe565b90600052602060002090600591828204019190066006029054906101000a900465ffffffffffff1684828154811061187557611875611dfe565b90600052602060002090600591828204019190066006026101000a81548165ffffffffffff021916908365ffffffffffff160217905550838054806118bc576118bc611ffb565b60019003818190600052602060002090600591828204019190066006026101000a81549065ffffffffffff0219169055905550505050565b6001016117cf565b8280548282559060005260206000209060040160059004810192821561194a576000526020600020916004016005900482015b8281111561194a57825482559160010191906001019061192f565b5061195692915061195a565b5090565b5b80821115611956576000815560010161195b565b6001600160e01b03198116811461090557600080fd5b60006020828403121561199757600080fd5b81356119a28161196f565b9392505050565b60005b838110156119c45781810151838201526020016119ac565b50506000910152565b600081518084526119e58160208601602086016119a9565b601f01601f19169290920160200192915050565b6020815260006119a260208301846119cd565b600060208284031215611a1e57600080fd5b5035919050565b80356001600160a01b0381168114611a3c57600080fd5b919050565b60008060408385031215611a5457600080fd5b611a5d83611a25565b946020939093013593505050565b600080600060608486031215611a8057600080fd5b611a8984611a25565b9250611a9760208501611a25565b9150604084013590509250925092565b61ffff8116811461090557600080fd5b60008060408385031215611aca57600080fd5b611ad383611a25565b91506020830135611ae381611aa7565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611b2657835183529284019291840191600101611b0a565b50909695505050505050565b600060208284031215611b4457600080fd5b6119a282611a25565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611bea57898403603f190186528251805161ffff168552880151888501889052805188860181905290890190839060608701905b80831015611bd557835165ffffffffffff168252928b019260019290920191908b0190611bad565b50978a01979550505091870191600101611b75565b50919998505050505050505050565b60008060408385031215611c0c57600080fd5b611c1583611a25565b915060208301358015158114611ae357600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c6957611c69611c2a565b604052919050565b600067ffffffffffffffff821115611c8b57611c8b611c2a565b50601f01601f191660200190565b60008060008060808587031215611caf57600080fd5b611cb885611a25565b9350611cc660208601611a25565b925060408501359150606085013567ffffffffffffffff811115611ce957600080fd5b8501601f81018713611cfa57600080fd5b8035611d0d611d0882611c71565b611c40565b818152886020838501011115611d2257600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611d5757600080fd5b611d6083611a25565b9150611d6e60208401611a25565b90509250929050565b600181811c90821680611d8b57607f821691505b602082108103611dab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561044157610441611e14565b600081611e4c57611e4c611e14565b506000190190565b600060208284031215611e6657600080fd5b815167ffffffffffffffff811115611e7d57600080fd5b8201601f81018413611e8e57600080fd5b8051611e9c611d0882611c71565b818152856020838501011115611eb157600080fd5b611ec28260208301602086016119a9565b95945050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600060208284031215611f7457600080fd5b81516119a281611aa7565b61ffff818116838216019080821115611f9a57611f9a611e14565b5092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fd4908301846119cd565b9695505050505050565b600060208284031215611ff057600080fd5b81516119a28161196f565b634e487b7160e01b600052603160045260246000fdfea264697066735822122091e1c3bfffada7199b951774d2136663e400eb22f6d02552e6811b169c69a72c64736f6c63430008120033",
    "sourceMap": "714:8319:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:300:37;;;;;;:::i;:::-;;:::i;:::-;;;565:14:82;;558:22;540:41;;528:2;513:18;1570:300:37;;;;;;;;2471:98;;;:::i;:::-;;;;;;;:::i;3935:167::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:82;;;1679:51;;1667:2;1652:18;3935:167:37;1533:203:82;3468:406:37;;;;;;:::i;:::-;;:::i;:::-;;4612:296;;;;;;:::i;:::-;;:::i;4631:942:54:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3183:105::-;;;;;;:::i;:::-;;:::i;4974:149:37:-;;;;;;:::i;:::-;;:::i;3416:89:54:-;;;;;;:::i;:::-;;:::i;4314:147::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2190:219:37:-;;;;;;:::i;:::-;;:::i;1929:204::-;;;;;;:::i;:::-;;:::i;:::-;;;5498:25:82;;;5486:2;5471:18;1929:204:37;5352:177:82;1824:101:21;;;:::i;1734:212:22:-;;;:::i;1201:85:21:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:21;1201:85;;2633:102:37;;;:::i;1143:41:54:-;;;;;4169:153:37;;;;;;:::i;:::-;;:::i;3805:180:54:-;;;:::i;5189:276:37:-;;;;;;:::i;:::-;;:::i;1246:28:54:-;;;;;;;;;5921:148;;;;;;:::i;:::-;;:::i;847:99:22:-;926:13;;-1:-1:-1;;;;;926:13:22;847:99;;4388:162:37;;;;;;:::i;:::-;-1:-1:-1;;;;;4508:25:37;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4388:162;1026:54:54;;;;;1139:178:22;;;;;;:::i;:::-;;:::i;1570:300:37:-;1672:4;-1:-1:-1;;;;;;1707:40:37;;-1:-1:-1;;;1707:40:37;;:104;;-1:-1:-1;;;;;;;1763:48:37;;-1:-1:-1;;;1763:48:37;1707:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:46;;;1827:36:37;1688:175;1570:300;-1:-1:-1;;1570:300:37:o;2471:98::-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;-1:-1:-1;4071:24:37;;;;:15;:24;;;;;;-1:-1:-1;;;;;4071:24:37;;3935:167::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;-1:-1:-1;;;;;3605:11:37;:2;-1:-1:-1;;;;;3605:11:37;;3597:57;;;;-1:-1:-1;;;3597:57:37;;8706:2:82;3597:57:37;;;8688:21:82;8745:2;8725:18;;;8718:30;8784:34;8764:18;;;8757:62;-1:-1:-1;;;8835:18:82;;;8828:31;8876:19;;3597:57:37;;;;;;;;;719:10:43;-1:-1:-1;;;;;3686:21:37;;;;:62;;-1:-1:-1;3711:37:37;3728:5;719:10:43;4388:162:37;:::i;3711:37::-;3665:170;;;;-1:-1:-1;;;3665:170:37;;9108:2:82;3665:170:37;;;9090:21:82;9147:2;9127:18;;;9120:30;9186:34;9166:18;;;9159:62;9257:31;9237:18;;;9230:59;9306:19;;3665:170:37;8906:425:82;3665:170:37;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3538:336;3468:406;;:::o;4612:296::-;4771:41;719:10:43;4804:7:37;4771:18;:41::i;:::-;4763:99;;;;-1:-1:-1;;;4763:99:37;;;;;;;:::i;:::-;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;4631:942:54:-;-1:-1:-1;;;;;4781:27:54;;4736:42;4781:27;;;:20;:27;;;;;4849:20;;4708:16;;4849:25;4845:79;;4911:1;4897:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4897:16:54;;4890:23;;;;;4845:79;4993:13;5007:1;4993:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;;;;;4985:30;;;;4981:84;;;5052:1;5038:16;;4981:84;5136:20;;5114:19;;5136:24;;5159:1;;5136:24;:::i;:::-;5114:46;;5170:87;5212:5;5177:40;;:13;5191:11;5177:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:32;;;:40;5170:87;;;5233:13;;;;:::i;:::-;;;;5170:87;;;5301:14;5318:13;5332:11;5318:26;;;;;;;;:::i;:::-;;;;;;;;:30;:26;;;;;:30;:37;;-1:-1:-1;5318:37:54;5388:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5388:21:54;;5365:44;;5424:9;5419:127;5439:6;5435:1;:10;5419:127;;;5471:13;5485:11;5471:26;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;5502:1;5471:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5462:42;;:3;5466:1;5462:6;;;;;;;;:::i;:::-;;;;;;;;;;:42;5530:3;;5419:127;;;-1:-1:-1;5563:3:54;4631:942;-1:-1:-1;;;;;;4631:942:54:o;3183:105::-;1878:10;-1:-1:-1;;;;;1900:13:54;1878:36;;1874:104;;1937:30;;-1:-1:-1;;;1937:30:54;;;;;;;;;;;1874:104;3263:18:::1;3269:2;3273:7;3263:5;:18::i;:::-;3183:105:::0;;:::o;4974:149:37:-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;3416:89:54:-;1878:10;-1:-1:-1;;;;;1900:13:54;1878:36;;1874:104;;1937:30;;-1:-1:-1;;;1937:30:54;;;;;;;;;;;1874:104;3484:14:::1;3490:7;3484:5;:14::i;:::-;3416:89:::0;:::o;4314:147::-;-1:-1:-1;;;;;4427:27:54;;;;;;:20;:27;;;;;;;;4420:34;;;;;;;;;;;;;;;;;4381:27;;4420:34;;4427:27;;4420:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4314:147;;;:::o;2190:219:37:-;2262:7;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:37;;2324:56;;;;-1:-1:-1;;;2324:56:37;;10490:2:82;2324:56:37;;;10472:21:82;10529:2;10509:18;;;10502:30;-1:-1:-1;;;10548:18:82;;;10541:54;10612:18;;2324:56:37;10288:348:82;1929:204:37;2001:7;-1:-1:-1;;;;;2028:19:37;;2020:73;;;;-1:-1:-1;;;2020:73:37;;10843:2:82;2020:73:37;;;10825:21:82;10882:2;10862:18;;;10855:30;10921:34;10901:18;;;10894:62;-1:-1:-1;;;10972:18:82;;;10965:39;11021:19;;2020:73:37;10641:405:82;2020:73:37;-1:-1:-1;;;;;;2110:16:37;;;;;:9;:16;;;;;;;1929:204::o;1824:101:21:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1734:212:22:-;926:13;;719:10:43;;-1:-1:-1;;;;;926:13:22;1833:24;;1825:78;;;;-1:-1:-1;;;1825:78:22;;11253:2:82;1825:78:22;;;11235:21:82;11292:2;11272:18;;;11265:30;11331:34;11311:18;;;11304:62;-1:-1:-1;;;11382:18:82;;;11375:39;11431:19;;1825:78:22;11051:405:82;1825:78:22;1913:26;1932:6;1913:18;:26::i;2633:102:37:-;2689:13;2721:7;2714:14;;;;;:::i;4169:153::-;4263:52;719:10:43;4296:8:37;4306;4263:18;:52::i;3805:180:54:-;1094:13:21;:11;:13::i;:::-;3865:16:54::1;::::0;::::1;;3861:85;;;3904:31;;-1:-1:-1::0;;;3904:31:54::1;;;;;;;;;;;3861:85;3955:16;:23:::0;;-1:-1:-1;;3955:23:54::1;3974:4;3955:23;::::0;;3805:180::o;5189:276:37:-;5319:41;719:10:43;5352:7:37;5319:18;:41::i;:::-;5311:99;;;;-1:-1:-1;;;5311:99:37;;;;;;;:::i;:::-;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;5921:148:54:-;6026:36;;-1:-1:-1;;;6026:36:54;;;;;5498:25:82;;;5994:13:54;;6026;-1:-1:-1;;;;;6026:27:54;;;;5471:18:82;;6026:36:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6026:36:54;;;;;;;;;;;;:::i;1139:178:22:-;1094:13:21;:11;:13::i;:::-;1228::22::1;:24:::0;;-1:-1:-1;;;;;1228:24:22;::::1;-1:-1:-1::0;;;;;;1228:24:22;;::::1;::::0;::::1;::::0;;;1292:7:::1;1247::21::0;1273:6;-1:-1:-1;;;;;1273:6:21;;1201:85;1292:7:22::1;-1:-1:-1::0;;;;;1267:43:22::1;;;;;;;;;;;1139:178:::0;:::o;2426:187:21:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:21;;;-1:-1:-1;;;;;;2534:17:21;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;13240:133:37:-;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:37;13313:53;;;;-1:-1:-1;;;13313:53:37;;10490:2:82;13313:53:37;;;10472:21:82;10529:2;10509:18;;;10502:30;-1:-1:-1;;;10548:18:82;;;10541:54;10612:18;;13313:53:37;10288:348:82;12572:171:37;12646:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12646:29:37;-1:-1:-1;;;;;12646:29:37;;;;;;;;:24;;12699:23;12646:24;12699:14;:23::i;:::-;-1:-1:-1;;;;;12690:46:37;;;;;;;;;;;12572:171;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;-1:-1:-1;;;;;7570:16:37;:7;-1:-1:-1;;;;;7570:16:37;;:52;;;-1:-1:-1;;;;;;4508:25:37;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7590:32;7570:87;;;;7650:7;-1:-1:-1;;;;;7626:31:37;:20;7638:7;7626:11;:20::i;:::-;-1:-1:-1;;;;;7626:31:37;;7570:87;7562:96;7404:261;-1:-1:-1;;;;7404:261:37:o;11257:1203::-;11381:4;-1:-1:-1;;;;;11354:31:37;:23;11369:7;11354:14;:23::i;:::-;-1:-1:-1;;;;;11354:31:37;;11346:81;;;;-1:-1:-1;;;11346:81:37;;;;;;;:::i;:::-;-1:-1:-1;;;;;11445:16:37;;11437:65;;;;-1:-1:-1;;;11437:65:37;;12722:2:82;11437:65:37;;;12704:21:82;12761:2;12741:18;;;12734:30;12800:34;12780:18;;;12773:62;-1:-1:-1;;;12851:18:82;;;12844:34;12895:19;;11437:65:37;12520:400:82;11437:65:37;11513:42;11534:4;11540:2;11544:7;11553:1;11513:20;:42::i;:::-;11682:4;-1:-1:-1;;;;;11655:31:37;:23;11670:7;11655:14;:23::i;:::-;-1:-1:-1;;;;;11655:31:37;;11647:81;;;;-1:-1:-1;;;11647:81:37;;;;;;;:::i;:::-;11797:24;;;;:15;:24;;;;;;;;11790:31;;-1:-1:-1;;;;;;11790:31:37;;;;;;-1:-1:-1;;;;;12265:15:37;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;12265:20:37;;;12299:13;;;;;;;;;:18;;11790:31;12299:18;;;12337:16;;;:7;:16;;;;;;:21;;;;;;;;;;12374:27;;11813:7;;12374:27;;;3538:336;3468:406;;:::o;8925:920::-;-1:-1:-1;;;;;9004:16:37;;8996:61;;;;-1:-1:-1;;;8996:61:37;;13127:2:82;8996:61:37;;;13109:21:82;;;13146:18;;;13139:30;13205:34;13185:18;;;13178:62;13257:18;;8996:61:37;12925:356:82;8996:61:37;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:37;7208:31;9067:58;;;;-1:-1:-1;;;9067:58:37;;13488:2:82;9067:58:37;;;13470:21:82;13527:2;13507:18;;;13500:30;13566;13546:18;;;13539:58;13614:18;;9067:58:37;13286:352:82;9067:58:37;9136:48;9165:1;9169:2;9173:7;9182:1;9136:20;:48::i;:::-;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:37;7208:31;9271:58;;;;-1:-1:-1;;;9271:58:37;;13488:2:82;9271:58:37;;;13470:21:82;13527:2;13507:18;;;13500:30;13566;13546:18;;;13539:58;13614:18;;9271:58:37;13286:352:82;9271:58:37;-1:-1:-1;;;;;9671:13:37;;;;;;:9;:13;;;;;;;;:18;;9688:1;9671:18;;;9710:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9710:21:37;;;;;9747:33;9718:7;;9671:13;;9747:33;;9671:13;;9747:33;3183:105:54;;:::o;10171:762:37:-;10230:13;10246:23;10261:7;10246:14;:23::i;:::-;10230:39;;10280:51;10301:5;10316:1;10320:7;10329:1;10280:20;:51::i;:::-;10441:23;10456:7;10441:14;:23::i;:::-;10509:24;;;;:15;:24;;;;;;;;10502:31;;-1:-1:-1;;;;;;10502:31:37;;;;;;-1:-1:-1;;;;;10749:16:37;;;;;:9;:16;;;;;:21;;-1:-1:-1;;10749:21:37;;;10797:16;;;:7;:16;;;;;;10790:23;;;;;;;10829:36;10433:31;;-1:-1:-1;10525:7:37;;10829:36;;10509:24;;10829:36;3183:105:54;;:::o;1359:130:21:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:21;719:10:43;1422:23:21;1414:68;;;;-1:-1:-1;;;1414:68:21;;13845:2:82;1414:68:21;;;13827:21:82;;;13864:18;;;13857:30;13923:34;13903:18;;;13896:62;13975:18;;1414:68:21;13643:356:82;1501:153:22;1590:13;1583:20;;-1:-1:-1;;;;;;1583:20:22;;;1613:34;1638:8;1613:24;:34::i;12879:277:37:-;12999:8;-1:-1:-1;;;;;12990:17:37;:5;-1:-1:-1;;;;;12990:17:37;;12982:55;;;;-1:-1:-1;;;12982:55:37;;14206:2:82;12982:55:37;;;14188:21:82;14245:2;14225:18;;;14218:30;14284:27;14264:18;;;14257:55;14329:18;;12982:55:37;14004:349:82;12982:55:37;-1:-1:-1;;;;;13047:25:37;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13047:46:37;;;;;;;;;;13108:41;;540::82;;;13108::37;;513:18:82;13108:41:37;;;;;;;12879:277;;;:::o;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;-1:-1:-1;;;6476:110:37;;;;;;;:::i;6497:672:54:-;6704:16;;;;6703:17;:39;;;;-1:-1:-1;;;;;;6724:18:54;;;;6703:39;:59;;;;-1:-1:-1;;;;;;6746:16:54;;;;6703:59;6699:122;;;6785:25;;-1:-1:-1;;;6785:25:54;;;;;;;;;;;6699:122;6831:12;6846:10;-1:-1:-1;;;;;6846:23:54;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;6874:1;6846:29;:::i;:::-;6831:44;-1:-1:-1;;;;;;6979:18:54;;;6975:94;;7013:45;7032:4;7038:12;7052:5;7013:18;:45::i;:::-;-1:-1:-1;;;;;7082:16:54;;;7078:85;;7114:38;7128:2;7132:12;7146:5;7114:13;:38::i;:::-;6632:537;6497:672;;;;:::o;13925:831:37:-;14074:4;-1:-1:-1;;;;;14094:13:37;;1702:19:41;:23;14090:660:37;;14129:71;;-1:-1:-1;;;14129:71:37;;-1:-1:-1;;;;;14129:36:37;;;;;:71;;719:10:43;;14180:4:37;;14186:7;;14195:4;;14129:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14129:71:37;;;;;;;;-1:-1:-1;;14129:71:37;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14367:6;:13;14384:1;14367:18;14363:321;;14409:60;;-1:-1:-1;;;14409:60:37;;;;;;;:::i;14363:321::-;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;-1:-1:-1;;;;;;14250:51:37;-1:-1:-1;;;14250:51:37;;-1:-1:-1;14243:58:37;;14090:660;-1:-1:-1;14735:4:37;13925:831;;;;;;:::o;8027:655:54:-;-1:-1:-1;;;;;8169:27:54;;8120:46;8169:27;;;:20;:27;;;;;8271:24;;8169:27;;8120:46;8169:27;;8271:28;;8298:1;;8271:28;:::i;:::-;8253:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;8315:23;;8253:47;;-1:-1:-1;8315:32:54;;;;:23;;:32;8311:365;;8363:49;8381:17;:21;;8404:7;8363:17;:49::i;:::-;8311:365;;;8486:24;;;;;;;;-1:-1:-1;8486:24:54;;;;;;;;;;;;;8524:27;;-1:-1:-1;;8524:27:54;;;;;;;8585:21;;;8565:41;;8486:24;;8565:41;;:17;;;;8585:21;8565:41;:::i;:::-;;8620:45;8638:13;:17;;8657:7;8620:17;:45::i;:::-;8429:247;8110:572;;8027:655;;;:::o;7175:846::-;-1:-1:-1;;;;;7312:27:54;;7263:46;7312:27;;;:20;:27;;;;;7404:24;;7312:27;;7263:46;7404:29;;7400:566;;-1:-1:-1;7465:24:54;;;;;;;-1:-1:-1;7465:24:54;;;;;;;;;;;7503:27;;-1:-1:-1;;7503:27:54;;;;;;;7400:566;;;7626:24;;7561:44;;7608:17;;7626:28;;7653:1;;7626:28;:::i;:::-;7608:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;7673:23;;7608:47;;-1:-1:-1;7673:32:54;;;;:23;;:32;7669:287;;7741:17;7725:33;;7669:287;;;7813:24;;;;;;;;-1:-1:-1;7813:24:54;;;;;;;;;;;;;7855:27;;-1:-1:-1;;7855:27:54;;;;;;;7920:21;;;7900:41;;7813:24;;-1:-1:-1;7900:41:54;;:17;;;:41;:::i;:::-;;7669:287;7547:419;7400:566;7975:17;;;;:39;;;;;;;-1:-1:-1;7975:39:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7175:846:54:o;8688:342::-;8789:10;;8772:14;8809:215;8829:6;8825:1;:10;8809:215;;;8866:7;8856:3;8860:1;8856:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;;8852:131;;8902:3;8906:10;8915:1;8906:6;:10;:::i;:::-;8902:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8893:3;8897:1;8893:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;8935:3;:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8962:7;;8688:342;;:::o;8852:131::-;9008:3;;8809:215;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:82;-1:-1:-1;;;;;;88:32:82;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:82:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:82;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:82;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:82:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:82;;1348:180;-1:-1:-1;1348:180:82:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:82;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:82:o;2178:328::-;2255:6;2263;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2363:29;2382:9;2363:29;:::i;:::-;2353:39;;2411:38;2445:2;2434:9;2430:18;2411:38;:::i;:::-;2401:48;;2496:2;2485:9;2481:18;2468:32;2458:42;;2178:328;;;;;:::o;2511:117::-;2596:6;2589:5;2585:18;2578:5;2575:29;2565:57;;2618:1;2615;2608:12;2633:319;2700:6;2708;2761:2;2749:9;2740:7;2736:23;2732:32;2729:52;;;2777:1;2774;2767:12;2729:52;2800:29;2819:9;2800:29;:::i;:::-;2790:39;;2879:2;2868:9;2864:18;2851:32;2892:30;2916:5;2892:30;:::i;:::-;2941:5;2931:15;;;2633:319;;;;;:::o;2957:632::-;3128:2;3180:21;;;3250:13;;3153:18;;;3272:22;;;3099:4;;3128:2;3351:15;;;;3325:2;3310:18;;;3099:4;3394:169;3408:6;3405:1;3402:13;3394:169;;;3469:13;;3457:26;;3538:15;;;;3503:12;;;;3430:1;3423:9;3394:169;;;-1:-1:-1;3580:3:82;;2957:632;-1:-1:-1;;;;;;2957:632:82:o;3594:186::-;3653:6;3706:2;3694:9;3685:7;3681:23;3677:32;3674:52;;;3722:1;3719;3712:12;3674:52;3745:29;3764:9;3745:29;:::i;3785:1562::-;4001:4;4030:2;4070;4059:9;4055:18;4100:2;4089:9;4082:21;4123:6;4158;4152:13;4189:6;4181;4174:22;4215:2;4205:12;;4248:2;4237:9;4233:18;4226:25;;4310:2;4300:6;4297:1;4293:14;4282:9;4278:30;4274:39;4348:2;4340:6;4336:15;4369:1;4390;4400:918;4416:6;4411:3;4408:15;4400:918;;;4485:22;;;-1:-1:-1;;4481:36:82;4469:49;;4541:13;;4628:9;;4639:6;4624:22;4609:38;;4686:11;;4680:18;4718:15;;;4711:27;;;4799:19;;4581:15;;;4831:24;;;4921:21;;;;4966:1;;4889:2;4877:15;;;4980:230;4996:8;4991:3;4988:17;4980:230;;;5077:15;;5094:14;5073:36;5059:51;;5179:17;;;;5024:1;5015:11;;;;;5136:14;;;;4980:230;;;-1:-1:-1;5296:12:82;;;;5233:5;-1:-1:-1;;;5261:15:82;;;;4442:1;4433:11;4400:918;;;-1:-1:-1;5335:6:82;;3785:1562;-1:-1:-1;;;;;;;;;3785:1562:82:o;5765:347::-;5830:6;5838;5891:2;5879:9;5870:7;5866:23;5862:32;5859:52;;;5907:1;5904;5897:12;5859:52;5930:29;5949:9;5930:29;:::i;:::-;5920:39;;6009:2;5998:9;5994:18;5981:32;6056:5;6049:13;6042:21;6035:5;6032:32;6022:60;;6078:1;6075;6068:12;6117:127;6178:10;6173:3;6169:20;6166:1;6159:31;6209:4;6206:1;6199:15;6233:4;6230:1;6223:15;6249:275;6320:2;6314:9;6385:2;6366:13;;-1:-1:-1;;6362:27:82;6350:40;;6420:18;6405:34;;6441:22;;;6402:62;6399:88;;;6467:18;;:::i;:::-;6503:2;6496:22;6249:275;;-1:-1:-1;6249:275:82:o;6529:186::-;6577:4;6610:18;6602:6;6599:30;6596:56;;;6632:18;;:::i;:::-;-1:-1:-1;6698:2:82;6677:15;-1:-1:-1;;6673:29:82;6704:4;6669:40;;6529:186::o;6720:888::-;6815:6;6823;6831;6839;6892:3;6880:9;6871:7;6867:23;6863:33;6860:53;;;6909:1;6906;6899:12;6860:53;6932:29;6951:9;6932:29;:::i;:::-;6922:39;;6980:38;7014:2;7003:9;6999:18;6980:38;:::i;:::-;6970:48;;7065:2;7054:9;7050:18;7037:32;7027:42;;7120:2;7109:9;7105:18;7092:32;7147:18;7139:6;7136:30;7133:50;;;7179:1;7176;7169:12;7133:50;7202:22;;7255:4;7247:13;;7243:27;-1:-1:-1;7233:55:82;;7284:1;7281;7274:12;7233:55;7320:2;7307:16;7345:48;7361:31;7389:2;7361:31;:::i;:::-;7345:48;:::i;:::-;7416:2;7409:5;7402:17;7456:7;7451:2;7446;7442;7438:11;7434:20;7431:33;7428:53;;;7477:1;7474;7467:12;7428:53;7532:2;7527;7523;7519:11;7514:2;7507:5;7503:14;7490:45;7576:1;7571:2;7566;7559:5;7555:14;7551:23;7544:34;7597:5;7587:15;;;;;6720:888;;;;;;;:::o;7613:260::-;7681:6;7689;7742:2;7730:9;7721:7;7717:23;7713:32;7710:52;;;7758:1;7755;7748:12;7710:52;7781:29;7800:9;7781:29;:::i;:::-;7771:39;;7829:38;7863:2;7852:9;7848:18;7829:38;:::i;:::-;7819:48;;7613:260;;;;;:::o;8119:380::-;8198:1;8194:12;;;;8241;;;8262:61;;8316:4;8308:6;8304:17;8294:27;;8262:61;8369:2;8361:6;8358:14;8338:18;8335:38;8332:161;;8415:10;8410:3;8406:20;8403:1;8396:31;8450:4;8447:1;8440:15;8478:4;8475:1;8468:15;8332:161;;8119:380;;;:::o;9336:409::-;9538:2;9520:21;;;9577:2;9557:18;;;9550:30;9616:34;9611:2;9596:18;;9589:62;-1:-1:-1;;;9682:2:82;9667:18;;9660:43;9735:3;9720:19;;9336:409::o;9750:127::-;9811:10;9806:3;9802:20;9799:1;9792:31;9842:4;9839:1;9832:15;9866:4;9863:1;9856:15;9882:127;9943:10;9938:3;9934:20;9931:1;9924:31;9974:4;9971:1;9964:15;9998:4;9995:1;9988:15;10014:128;10081:9;;;10102:11;;;10099:37;;;10116:18;;:::i;10147:136::-;10186:3;10214:5;10204:39;;10223:18;;:::i;:::-;-1:-1:-1;;;10259:18:82;;10147:136::o;11461:648::-;11541:6;11594:2;11582:9;11573:7;11569:23;11565:32;11562:52;;;11610:1;11607;11600:12;11562:52;11643:9;11637:16;11676:18;11668:6;11665:30;11662:50;;;11708:1;11705;11698:12;11662:50;11731:22;;11784:4;11776:13;;11772:27;-1:-1:-1;11762:55:82;;11813:1;11810;11803:12;11762:55;11842:2;11836:9;11867:48;11883:31;11911:2;11883:31;:::i;11867:48::-;11938:2;11931:5;11924:17;11978:7;11973:2;11968;11964;11960:11;11956:20;11953:33;11950:53;;;11999:1;11996;11989:12;11950:53;12012:67;12076:2;12071;12064:5;12060:14;12055:2;12051;12047:11;12012:67;:::i;:::-;12098:5;11461:648;-1:-1:-1;;;;;11461:648:82:o;12114:401::-;12316:2;12298:21;;;12355:2;12335:18;;;12328:30;12394:34;12389:2;12374:18;;12367:62;-1:-1:-1;;;12460:2:82;12445:18;;12438:35;12505:3;12490:19;;12114:401::o;14358:414::-;14560:2;14542:21;;;14599:2;14579:18;;;14572:30;14638:34;14633:2;14618:18;;14611:62;-1:-1:-1;;;14704:2:82;14689:18;;14682:48;14762:3;14747:19;;14358:414::o;14777:249::-;14846:6;14899:2;14887:9;14878:7;14874:23;14870:32;14867:52;;;14915:1;14912;14905:12;14867:52;14947:9;14941:16;14966:30;14990:5;14966:30;:::i;15031:168::-;15098:6;15124:10;;;15136;;;15120:27;;15159:11;;;15156:37;;;15173:18;;:::i;:::-;15156:37;15031:168;;;;:::o;15204:489::-;-1:-1:-1;;;;;15473:15:82;;;15455:34;;15525:15;;15520:2;15505:18;;15498:43;15572:2;15557:18;;15550:34;;;15620:3;15615:2;15600:18;;15593:31;;;15398:4;;15641:46;;15667:19;;15659:6;15641:46;:::i;:::-;15633:54;15204:489;-1:-1:-1;;;;;;15204:489:82:o;15698:249::-;15767:6;15820:2;15808:9;15799:7;15795:23;15791:32;15788:52;;;15836:1;15833;15826:12;15788:52;15868:9;15862:16;15887:30;15911:5;15887:30;:::i;15952:127::-;16013:10;16008:3;16004:20;16001:1;15994:31;16044:4;16041:1;16034:15;16068:4;16065:1;16058:15",
    "linkReferences": {},
    "immutableReferences": {
      "51543": [
        {
          "start": 960,
          "length": 32
        },
        {
          "start": 2124,
          "length": 32
        },
        {
          "start": 2238,
          "length": 32
        },
        {
          "start": 3106,
          "length": 32
        }
      ],
      "51547": [
        {
          "start": 766,
          "length": 32
        },
        {
          "start": 5144,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "acceptOwnership()": "79ba5097",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "burn(uint256)": "42966c68",
    "enableTransfers()": "af35c6c7",
    "epochClock()": "9cf9a327",
    "getApproved(uint256)": "081812fc",
    "isApprovedForAll(address,address)": "e985e9c5",
    "mint(address,uint256)": "40c10f19",
    "name()": "06fdde03",
    "ownedTokenIdsAt(address,uint16)": "29e4eae3",
    "ownedTokensInEpochs(address)": "602fdb03",
    "owner()": "8da5cb5b",
    "ownerOf(uint256)": "6352211e",
    "pendingOwner()": "e30c3978",
    "renounceOwnership()": "715018a6",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supplyManager()": "f147389f",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenURI(uint256)": "c87b56dd",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b",
    "transfersEnabled()": "bef97c87"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_epochClock\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_supplyManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotSupplyManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransfersAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransfersDisabled\",\"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\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableTransfers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochClock\",\"outputs\":[{\"internalType\":\"contract PWNEpochClock\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"epoch\",\"type\":\"uint16\"}],\"name\":\"ownedTokenIdsAt\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ownedTokensInEpochs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"epoch\",\"type\":\"uint16\"},{\"internalType\":\"uint48[]\",\"name\":\"ids\",\"type\":\"uint48[]\"}],\"internalType\":\"struct StakedPWN.OwnedTokensInEpoch[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[],\"name\":\"supplyManager\",\"outputs\":[{\"internalType\":\"contract IStakedPWNSupplyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transfersEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is Ownable2Step, which means that the ownership transfer must be accepted by the new owner. The token is mintable and burnable by the VoteEscrowedPWN contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Only the supply manager can burn tokens.\",\"params\":{\"tokenId\":\"The token id.\"}},\"constructor\":{\"details\":\"The owner must be the PWN DAO. The supply manager must be the VoteEscrowedPWN contract.\",\"params\":{\"_epochClock\":\"The address of the epoch clock contract.\",\"_owner\":\"The address of the owner.\",\"_supplyManager\":\"The address of the supply manager contract.\"}},\"enableTransfers()\":{\"details\":\"Only the owner can enable transfers.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"mint(address,uint256)\":{\"details\":\"Only the supply manager can mint tokens.\",\"params\":{\"to\":\"The address of the token owner.\",\"tokenId\":\"The token id.\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownedTokenIdsAt(address,uint16)\":{\"params\":{\"epoch\":\"The epoch.\",\"owner\":\"The address of the token owner.\"}},\"ownedTokensInEpochs(address)\":{\"params\":{\"owner\":\"The address of the token owner.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"params\":{\"tokenId\":\"The token id.\"},\"returns\":{\"_0\":\"The URI of the token metadata.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"title\":\"Staked PWN token contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(uint256)\":{\"notice\":\"Burns a token.\"},\"constructor\":{\"notice\":\"StakedPWN constructor.\"},\"enableTransfers()\":{\"notice\":\"Enables token transfers.\"},\"epochClock()\":{\"notice\":\"The address of the epoch clock contract.\"},\"mint(address,uint256)\":{\"notice\":\"Mints a token.\"},\"ownedTokenIdsAt(address,uint16)\":{\"notice\":\"Returns the list of token ids owned by an address in an epoch.\"},\"ownedTokensInEpochs(address)\":{\"notice\":\"Returns the list of token ids owned by an address.\"},\"supplyManager()\":{\"notice\":\"The address of the supply manager contract.\"},\"tokenURI(uint256)\":{\"notice\":\"Returns the URI of the token metadata.\"},\"transfersEnabled()\":{\"notice\":\"The flag that enables token transfers.\"}},\"notice\":\"The token is representation of a stake in the PWN DAO.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/StakedPWN.sol\":\"StakedPWN\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e\",\"dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"src/PWNEpochClock.sol\":{\"keccak256\":\"0x40f2a4bd411418be1f7ba0ffef9c77bddd39ce6acfb14a94bd8955f931d62934\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e979fc32e7f429a7b6880fd5bc2f65b3eecc243347950f333a8d9f91badc04aa\",\"dweb:/ipfs/QmP8URUek56T9TwZFdsqFWVbiKhdhhqZQXezUJZJLkimQW\"]},\"src/StakedPWN.sol\":{\"keccak256\":\"0xdc896d2bcfaf3eca2bc6635f7ca7ac530f76479e7e077213e38b25818d6b904d\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://44a12d6a3a03631690b167679d5d912a1faadb7d1e123e5773acd09657563d8b\",\"dweb:/ipfs/QmSXpMH5RFrtyt9nDjdk4cYJL7XvxGPg7BEY2KyKe7VHgq\"]},\"src/interfaces/IStakedPWNSupplyManager.sol\":{\"keccak256\":\"0x8d7823d6d99730f19a626ee004d86ddb660f98a125e535288d1192d8b219de15\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ea55ba97f764a0d730c905fffb007925da39d04fdf14d85aef89cc515cdd0c90\",\"dweb:/ipfs/QmRZh16nBN3kqDvaNqsAFtRXScHpgqh3vJZsw1RrJaSk3w\"]},\"src/lib/Error.sol\":{\"keccak256\":\"0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90\",\"dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.18+commit.87f61d96"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_epochClock",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_supplyManager",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "CallerNotSupplyManager"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TransfersAlreadyEnabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TransfersDisabled"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "approved",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "operator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "bool",
              "name": "approved",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ApprovalForAll",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferStarted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "enableTransfers"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "epochClock",
          "outputs": [
            {
              "internalType": "contract PWNEpochClock",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getApproved",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isApprovedForAll",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "epoch",
              "type": "uint16"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "ownedTokenIdsAt",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "ownedTokensInEpochs",
          "outputs": [
            {
              "internalType": "struct StakedPWN.OwnedTokensInEpoch[]",
              "name": "",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "uint16",
                  "name": "epoch",
                  "type": "uint16"
                },
                {
                  "internalType": "uint48[]",
                  "name": "ids",
                  "type": "uint48[]"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "ownerOf",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pendingOwner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "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"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setApprovalForAll"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "supplyManager",
          "outputs": [
            {
              "internalType": "contract IStakedPWNSupplyManager",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "tokenURI",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "transfersEnabled",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "acceptOwnership()": {
            "details": "The new owner accepts the ownership transfer."
          },
          "approve(address,uint256)": {
            "details": "See {IERC721-approve}."
          },
          "balanceOf(address)": {
            "details": "See {IERC721-balanceOf}."
          },
          "burn(uint256)": {
            "details": "Only the supply manager can burn tokens.",
            "params": {
              "tokenId": "The token id."
            }
          },
          "constructor": {
            "details": "The owner must be the PWN DAO. The supply manager must be the VoteEscrowedPWN contract.",
            "params": {
              "_epochClock": "The address of the epoch clock contract.",
              "_owner": "The address of the owner.",
              "_supplyManager": "The address of the supply manager contract."
            }
          },
          "enableTransfers()": {
            "details": "Only the owner can enable transfers."
          },
          "getApproved(uint256)": {
            "details": "See {IERC721-getApproved}."
          },
          "isApprovedForAll(address,address)": {
            "details": "See {IERC721-isApprovedForAll}."
          },
          "mint(address,uint256)": {
            "details": "Only the supply manager can mint tokens.",
            "params": {
              "to": "The address of the token owner.",
              "tokenId": "The token id."
            }
          },
          "name()": {
            "details": "See {IERC721Metadata-name}."
          },
          "ownedTokenIdsAt(address,uint16)": {
            "params": {
              "epoch": "The epoch.",
              "owner": "The address of the token owner."
            }
          },
          "ownedTokensInEpochs(address)": {
            "params": {
              "owner": "The address of the token owner."
            }
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "ownerOf(uint256)": {
            "details": "See {IERC721-ownerOf}."
          },
          "pendingOwner()": {
            "details": "Returns the address of the pending owner."
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
          },
          "safeTransferFrom(address,address,uint256)": {
            "details": "See {IERC721-safeTransferFrom}."
          },
          "safeTransferFrom(address,address,uint256,bytes)": {
            "details": "See {IERC721-safeTransferFrom}."
          },
          "setApprovalForAll(address,bool)": {
            "details": "See {IERC721-setApprovalForAll}."
          },
          "supportsInterface(bytes4)": {
            "details": "See {IERC165-supportsInterface}."
          },
          "symbol()": {
            "details": "See {IERC721Metadata-symbol}."
          },
          "tokenURI(uint256)": {
            "params": {
              "tokenId": "The token id."
            },
            "returns": {
              "_0": "The URI of the token metadata."
            }
          },
          "transferFrom(address,address,uint256)": {
            "details": "See {IERC721-transferFrom}."
          },
          "transferOwnership(address)": {
            "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "burn(uint256)": {
            "notice": "Burns a token."
          },
          "constructor": {
            "notice": "StakedPWN constructor."
          },
          "enableTransfers()": {
            "notice": "Enables token transfers."
          },
          "epochClock()": {
            "notice": "The address of the epoch clock contract."
          },
          "mint(address,uint256)": {
            "notice": "Mints a token."
          },
          "ownedTokenIdsAt(address,uint16)": {
            "notice": "Returns the list of token ids owned by an address in an epoch."
          },
          "ownedTokensInEpochs(address)": {
            "notice": "Returns the list of token ids owned by an address."
          },
          "supplyManager()": {
            "notice": "The address of the supply manager contract."
          },
          "tokenURI(uint256)": {
            "notice": "Returns the URI of the token metadata."
          },
          "transfersEnabled()": {
            "notice": "The flag that enables token transfers."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin/=lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/StakedPWN.sol": "StakedPWN"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218",
        "urls": [
          "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32",
          "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
        "keccak256": "0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c",
        "urls": [
          "bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e",
          "dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol": {
        "keccak256": "0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff",
        "urls": [
          "bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005",
          "dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
        "keccak256": "0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266",
        "urls": [
          "bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4",
          "dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": {
        "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da",
        "urls": [
          "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708",
          "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "keccak256": "0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9",
        "urls": [
          "bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146",
          "dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa",
        "urls": [
          "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931",
          "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Strings.sol": {
        "keccak256": "0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0",
        "urls": [
          "bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f",
          "dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": {
        "keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b",
        "urls": [
          "bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d",
          "dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
        "urls": [
          "bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
          "dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3",
        "urls": [
          "bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c",
          "dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
        "urls": [
          "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
          "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
        ],
        "license": "MIT"
      },
      "src/PWNEpochClock.sol": {
        "keccak256": "0x40f2a4bd411418be1f7ba0ffef9c77bddd39ce6acfb14a94bd8955f931d62934",
        "urls": [
          "bzz-raw://e979fc32e7f429a7b6880fd5bc2f65b3eecc243347950f333a8d9f91badc04aa",
          "dweb:/ipfs/QmP8URUek56T9TwZFdsqFWVbiKhdhhqZQXezUJZJLkimQW"
        ],
        "license": "GPL-3.0-only"
      },
      "src/StakedPWN.sol": {
        "keccak256": "0xdc896d2bcfaf3eca2bc6635f7ca7ac530f76479e7e077213e38b25818d6b904d",
        "urls": [
          "bzz-raw://44a12d6a3a03631690b167679d5d912a1faadb7d1e123e5773acd09657563d8b",
          "dweb:/ipfs/QmSXpMH5RFrtyt9nDjdk4cYJL7XvxGPg7BEY2KyKe7VHgq"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IStakedPWNSupplyManager.sol": {
        "keccak256": "0x8d7823d6d99730f19a626ee004d86ddb660f98a125e535288d1192d8b219de15",
        "urls": [
          "bzz-raw://ea55ba97f764a0d730c905fffb007925da39d04fdf14d85aef89cc515cdd0c90",
          "dweb:/ipfs/QmRZh16nBN3kqDvaNqsAFtRXScHpgqh3vJZsw1RrJaSk3w"
        ],
        "license": "GPL-3.0-only"
      },
      "src/lib/Error.sol": {
        "keccak256": "0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c",
        "urls": [
          "bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90",
          "dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto"
        ],
        "license": "GPL-3.0-only"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/StakedPWN.sol",
    "id": 52083,
    "exportedSymbols": {
      "ERC721": [
        47433
      ],
      "Error": [
        52544
      ],
      "IStakedPWNSupplyManager": [
        52196
      ],
      "Ownable2Step": [
        44794
      ],
      "PWNEpochClock": [
        51522
      ],
      "StakedPWN": [
        52082
      ]
    },
    "nodeType": "SourceUnit",
    "src": "41:8993:54",
    "nodes": [
      {
        "id": 51524,
        "nodeType": "PragmaDirective",
        "src": "41:23:54",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".18"
        ]
      },
      {
        "id": 51526,
        "nodeType": "ImportDirective",
        "src": "66:88:54",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol",
        "file": "openzeppelin-contracts/contracts/access/Ownable2Step.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52083,
        "sourceUnit": 44795,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51525,
              "name": "Ownable2Step",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 44794,
              "src": "75:12:54",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51528,
        "nodeType": "ImportDirective",
        "src": "155:82:54",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52083,
        "sourceUnit": 47434,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51527,
              "name": "ERC721",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47433,
              "src": "164:6:54",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51530,
        "nodeType": "ImportDirective",
        "src": "239:83:54",
        "nodes": [],
        "absolutePath": "src/interfaces/IStakedPWNSupplyManager.sol",
        "file": "./interfaces/IStakedPWNSupplyManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52083,
        "sourceUnit": 52197,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51529,
              "name": "IStakedPWNSupplyManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52196,
              "src": "248:23:54",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51532,
        "nodeType": "ImportDirective",
        "src": "323:40:54",
        "nodes": [],
        "absolutePath": "src/lib/Error.sol",
        "file": "./lib/Error.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52083,
        "sourceUnit": 52545,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51531,
              "name": "Error",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52544,
              "src": "332:5:54",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51534,
        "nodeType": "ImportDirective",
        "src": "364:52:54",
        "nodes": [],
        "absolutePath": "src/PWNEpochClock.sol",
        "file": "./PWNEpochClock.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52083,
        "sourceUnit": 51523,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51533,
              "name": "PWNEpochClock",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 51522,
              "src": "373:13:54",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52082,
        "nodeType": "ContractDefinition",
        "src": "714:8319:54",
        "nodes": [
          {
            "id": 51543,
            "nodeType": "VariableDeclaration",
            "src": "1026:54:54",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51540,
              "nodeType": "StructuredDocumentation",
              "src": "966:55:54",
              "text": "@notice The address of the supply manager contract."
            },
            "functionSelector": "f147389f",
            "mutability": "immutable",
            "name": "supplyManager",
            "nameLocation": "1067:13:54",
            "scope": 52082,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
              "typeString": "contract IStakedPWNSupplyManager"
            },
            "typeName": {
              "id": 51542,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 51541,
                "name": "IStakedPWNSupplyManager",
                "nameLocations": [
                  "1026:23:54"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 52196,
                "src": "1026:23:54"
              },
              "referencedDeclaration": 52196,
              "src": "1026:23:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                "typeString": "contract IStakedPWNSupplyManager"
              }
            },
            "visibility": "public"
          },
          {
            "id": 51547,
            "nodeType": "VariableDeclaration",
            "src": "1143:41:54",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51544,
              "nodeType": "StructuredDocumentation",
              "src": "1086:52:54",
              "text": "@notice The address of the epoch clock contract."
            },
            "functionSelector": "9cf9a327",
            "mutability": "immutable",
            "name": "epochClock",
            "nameLocation": "1174:10:54",
            "scope": 52082,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
              "typeString": "contract PWNEpochClock"
            },
            "typeName": {
              "id": 51546,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 51545,
                "name": "PWNEpochClock",
                "nameLocations": [
                  "1143:13:54"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 51522,
                "src": "1143:13:54"
              },
              "referencedDeclaration": 51522,
              "src": "1143:13:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                "typeString": "contract PWNEpochClock"
              }
            },
            "visibility": "public"
          },
          {
            "id": 51550,
            "nodeType": "VariableDeclaration",
            "src": "1246:28:54",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 51548,
              "nodeType": "StructuredDocumentation",
              "src": "1191:50:54",
              "text": "@notice The flag that enables token transfers."
            },
            "functionSelector": "bef97c87",
            "mutability": "mutable",
            "name": "transfersEnabled",
            "nameLocation": "1258:16:54",
            "scope": 52082,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 51549,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1246:4:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "public"
          },
          {
            "id": 51556,
            "nodeType": "StructDefinition",
            "src": "1344:206:54",
            "nodes": [],
            "canonicalName": "StakedPWN.OwnedTokensInEpoch",
            "members": [
              {
                "constant": false,
                "id": 51552,
                "mutability": "mutable",
                "name": "epoch",
                "nameLocation": "1387:5:54",
                "nodeType": "VariableDeclaration",
                "scope": 51556,
                "src": "1380:12:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 51551,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1380:6:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 51555,
                "mutability": "mutable",
                "name": "ids",
                "nameLocation": "1540:3:54",
                "nodeType": "VariableDeclaration",
                "scope": 51556,
                "src": "1531:12:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                  "typeString": "uint48[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 51553,
                    "name": "uint48",
                    "nodeType": "ElementaryTypeName",
                    "src": "1531:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint48",
                      "typeString": "uint48"
                    }
                  },
                  "id": 51554,
                  "nodeType": "ArrayTypeName",
                  "src": "1531:8:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                    "typeString": "uint48[]"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "OwnedTokensInEpoch",
            "nameLocation": "1351:18:54",
            "scope": 52082,
            "visibility": "public"
          },
          {
            "id": 51562,
            "nodeType": "VariableDeclaration",
            "src": "1555:70:54",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_ownedTokensInEpochs",
            "nameLocation": "1605:20:54",
            "scope": 52082,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch[])"
            },
            "typeName": {
              "id": 51561,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 51557,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1563:7:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1555:40:54",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch[])"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "baseType": {
                  "id": 51559,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 51558,
                    "name": "OwnedTokensInEpoch",
                    "nameLocations": [
                      "1574:18:54"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 51556,
                    "src": "1574:18:54"
                  },
                  "referencedDeclaration": 51556,
                  "src": "1574:18:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                    "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                  }
                },
                "id": 51560,
                "nodeType": "ArrayTypeName",
                "src": "1574:20:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                  "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 51580,
            "nodeType": "ModifierDefinition",
            "src": "1835:160:54",
            "nodes": [],
            "body": {
              "id": 51579,
              "nodeType": "Block",
              "src": "1864:131:54",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51564,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "1878:3:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 51565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1882:6:54",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "1878:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 51568,
                          "name": "supplyManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51543,
                          "src": "1900:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                            "typeString": "contract IStakedPWNSupplyManager"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                            "typeString": "contract IStakedPWNSupplyManager"
                          }
                        ],
                        "id": 51567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1892:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51566,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1892:7:54",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1892:22:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1878:36:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51577,
                  "nodeType": "IfStatement",
                  "src": "1874:104:54",
                  "trueBody": {
                    "id": 51576,
                    "nodeType": "Block",
                    "src": "1916:62:54",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51571,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "1937:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1943:22:54",
                            "memberName": "CallerNotSupplyManager",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52505,
                            "src": "1937:28:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1937:30:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51575,
                        "nodeType": "RevertStatement",
                        "src": "1930:37:54"
                      }
                    ]
                  }
                },
                {
                  "id": 51578,
                  "nodeType": "PlaceholderStatement",
                  "src": "1987:1:54"
                }
              ]
            },
            "name": "onlySupplyManager",
            "nameLocation": "1844:17:54",
            "parameters": {
              "id": 51563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1861:2:54"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 51611,
            "nodeType": "FunctionDefinition",
            "src": "2542:260:54",
            "nodes": [],
            "body": {
              "id": 51610,
              "nodeType": "Block",
              "src": "2645:157:54",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 51594,
                      "name": "epochClock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51547,
                      "src": "2655:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                        "typeString": "contract PWNEpochClock"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 51596,
                          "name": "_epochClock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51585,
                          "src": "2682:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 51595,
                        "name": "PWNEpochClock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51522,
                        "src": "2668:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNEpochClock_$51522_$",
                          "typeString": "type(contract PWNEpochClock)"
                        }
                      },
                      "id": 51597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2668:26:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                        "typeString": "contract PWNEpochClock"
                      }
                    },
                    "src": "2655:39:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                      "typeString": "contract PWNEpochClock"
                    }
                  },
                  "id": 51599,
                  "nodeType": "ExpressionStatement",
                  "src": "2655:39:54"
                },
                {
                  "expression": {
                    "id": 51604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 51600,
                      "name": "supplyManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51543,
                      "src": "2704:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                        "typeString": "contract IStakedPWNSupplyManager"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 51602,
                          "name": "_supplyManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51587,
                          "src": "2744:14:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 51601,
                        "name": "IStakedPWNSupplyManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52196,
                        "src": "2720:23:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IStakedPWNSupplyManager_$52196_$",
                          "typeString": "type(contract IStakedPWNSupplyManager)"
                        }
                      },
                      "id": 51603,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2720:39:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                        "typeString": "contract IStakedPWNSupplyManager"
                      }
                    },
                    "src": "2704:55:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                      "typeString": "contract IStakedPWNSupplyManager"
                    }
                  },
                  "id": 51605,
                  "nodeType": "ExpressionStatement",
                  "src": "2704:55:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51607,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51583,
                        "src": "2788:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51606,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        44771
                      ],
                      "referencedDeclaration": 44771,
                      "src": "2769:18:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2769:26:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51609,
                  "nodeType": "ExpressionStatement",
                  "src": "2769:26:54"
                }
              ]
            },
            "documentation": {
              "id": 51581,
              "nodeType": "StructuredDocumentation",
              "src": "2204:333:54",
              "text": "@notice StakedPWN constructor.\n @dev The owner must be the PWN DAO.\n The supply manager must be the VoteEscrowedPWN contract.\n @param _owner The address of the owner.\n @param _epochClock The address of the epoch clock contract.\n @param _supplyManager The address of the supply manager contract."
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "hexValue": "5374616b65642050574e",
                    "id": 51590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2622:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_14df6c46280170a23ef2238f273e4ecb25672ffc5ded2322ac022b96eebda722",
                      "typeString": "literal_string \"Staked PWN\""
                    },
                    "value": "Staked PWN"
                  },
                  {
                    "hexValue": "737450574e",
                    "id": 51591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2636:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_684b6416d93ce0c5b468f4f312ecb77fae970b18a7fa2c47d510650c449780e2",
                      "typeString": "literal_string \"stPWN\""
                    },
                    "value": "stPWN"
                  }
                ],
                "id": 51592,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 51589,
                  "name": "ERC721",
                  "nameLocations": [
                    "2615:6:54"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 47433,
                  "src": "2615:6:54"
                },
                "nodeType": "ModifierInvocation",
                "src": "2615:29:54"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 51588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51583,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2562:6:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51611,
                  "src": "2554:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2554:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51585,
                  "mutability": "mutable",
                  "name": "_epochClock",
                  "nameLocation": "2578:11:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51611,
                  "src": "2570:19:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2570:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51587,
                  "mutability": "mutable",
                  "name": "_supplyManager",
                  "nameLocation": "2599:14:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51611,
                  "src": "2591:22:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51586,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2591:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2553:61:54"
            },
            "returnParameters": {
              "id": 51593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2645:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 51627,
            "nodeType": "FunctionDefinition",
            "src": "3183:105:54",
            "nodes": [],
            "body": {
              "id": 51626,
              "nodeType": "Block",
              "src": "3253:35:54",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51622,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51614,
                        "src": "3269:2:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51623,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51616,
                        "src": "3273:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51621,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47107,
                      "src": "3263:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 51624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3263:18:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51625,
                  "nodeType": "ExpressionStatement",
                  "src": "3263:18:54"
                }
              ]
            },
            "documentation": {
              "id": 51612,
              "nodeType": "StructuredDocumentation",
              "src": "3011:167:54",
              "text": "@notice Mints a token.\n @dev Only the supply manager can mint tokens.\n @param to The address of the token owner.\n @param tokenId The token id."
            },
            "functionSelector": "40c10f19",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51619,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51618,
                  "name": "onlySupplyManager",
                  "nameLocations": [
                    "3235:17:54"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 51580,
                  "src": "3235:17:54"
                },
                "nodeType": "ModifierInvocation",
                "src": "3235:17:54"
              }
            ],
            "name": "mint",
            "nameLocation": "3192:4:54",
            "parameters": {
              "id": 51617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51614,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3205:2:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51627,
                  "src": "3197:10:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51613,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3197:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51616,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3217:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51627,
                  "src": "3209:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51615,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3209:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3196:29:54"
            },
            "returnParameters": {
              "id": 51620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3253:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51640,
            "nodeType": "FunctionDefinition",
            "src": "3416:89:54",
            "nodes": [],
            "body": {
              "id": 51639,
              "nodeType": "Block",
              "src": "3474:31:54",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51636,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51630,
                        "src": "3490:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51635,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47174,
                      "src": "3484:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 51637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3484:14:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51638,
                  "nodeType": "ExpressionStatement",
                  "src": "3484:14:54"
                }
              ]
            },
            "documentation": {
              "id": 51628,
              "nodeType": "StructuredDocumentation",
              "src": "3294:117:54",
              "text": "@notice Burns a token.\n @dev Only the supply manager can burn tokens.\n @param tokenId The token id."
            },
            "functionSelector": "42966c68",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51633,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51632,
                  "name": "onlySupplyManager",
                  "nameLocations": [
                    "3456:17:54"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 51580,
                  "src": "3456:17:54"
                },
                "nodeType": "ModifierInvocation",
                "src": "3456:17:54"
              }
            ],
            "name": "burn",
            "nameLocation": "3425:4:54",
            "parameters": {
              "id": 51631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51630,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3438:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51640,
                  "src": "3430:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51629,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3430:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3429:17:54"
            },
            "returnParameters": {
              "id": 51634,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3474:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51659,
            "nodeType": "FunctionDefinition",
            "src": "3805:180:54",
            "nodes": [],
            "body": {
              "id": 51658,
              "nodeType": "Block",
              "src": "3851:134:54",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 51646,
                    "name": "transfersEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 51550,
                    "src": "3865:16:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51653,
                  "nodeType": "IfStatement",
                  "src": "3861:85:54",
                  "trueBody": {
                    "id": 51652,
                    "nodeType": "Block",
                    "src": "3883:63:54",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51647,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "3904:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3910:23:54",
                            "memberName": "TransfersAlreadyEnabled",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52509,
                            "src": "3904:29:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3904:31:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51651,
                        "nodeType": "RevertStatement",
                        "src": "3897:38:54"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 51656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 51654,
                      "name": "transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51550,
                      "src": "3955:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 51655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3974:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3955:23:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51657,
                  "nodeType": "ExpressionStatement",
                  "src": "3955:23:54"
                }
              ]
            },
            "documentation": {
              "id": 51641,
              "nodeType": "StructuredDocumentation",
              "src": "3714:86:54",
              "text": "@notice Enables token transfers.\n @dev Only the owner can enable transfers."
            },
            "functionSelector": "af35c6c7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51644,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51643,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "3841:9:54"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44630,
                  "src": "3841:9:54"
                },
                "nodeType": "ModifierInvocation",
                "src": "3841:9:54"
              }
            ],
            "name": "enableTransfers",
            "nameLocation": "3814:15:54",
            "parameters": {
              "id": 51642,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3829:2:54"
            },
            "returnParameters": {
              "id": 51645,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3851:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51674,
            "nodeType": "FunctionDefinition",
            "src": "4314:147:54",
            "nodes": [],
            "body": {
              "id": 51673,
              "nodeType": "Block",
              "src": "4410:51:54",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 51669,
                      "name": "_ownedTokensInEpochs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51562,
                      "src": "4427:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
                        "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref)"
                      }
                    },
                    "id": 51671,
                    "indexExpression": {
                      "id": 51670,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51662,
                      "src": "4448:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4427:27:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref"
                    }
                  },
                  "functionReturnParameters": 51668,
                  "id": 51672,
                  "nodeType": "Return",
                  "src": "4420:34:54"
                }
              ]
            },
            "documentation": {
              "id": 51660,
              "nodeType": "StructuredDocumentation",
              "src": "4194:115:54",
              "text": "@notice Returns the list of token ids owned by an address.\n @param owner The address of the token owner."
            },
            "functionSelector": "602fdb03",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownedTokensInEpochs",
            "nameLocation": "4323:19:54",
            "parameters": {
              "id": 51663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51662,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4351:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51674,
                  "src": "4343:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4343:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4342:15:54"
            },
            "returnParameters": {
              "id": 51668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51667,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51674,
                  "src": "4381:27:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51665,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 51664,
                        "name": "OwnedTokensInEpoch",
                        "nameLocations": [
                          "4381:18:54"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 51556,
                        "src": "4381:18:54"
                      },
                      "referencedDeclaration": 51556,
                      "src": "4381:18:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                      }
                    },
                    "id": 51666,
                    "nodeType": "ArrayTypeName",
                    "src": "4381:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4380:29:54"
            },
            "scope": 52082,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51783,
            "nodeType": "FunctionDefinition",
            "src": "4631:942:54",
            "nodes": [],
            "body": {
              "id": 51782,
              "nodeType": "Block",
              "src": "4726:847:54",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51689
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51689,
                      "mutability": "mutable",
                      "name": "ownedTokenIds",
                      "nameLocation": "4765:13:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51782,
                      "src": "4736:42:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 51687,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 51686,
                            "name": "OwnedTokensInEpoch",
                            "nameLocations": [
                              "4736:18:54"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 51556,
                            "src": "4736:18:54"
                          },
                          "referencedDeclaration": 51556,
                          "src": "4736:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                          }
                        },
                        "id": 51688,
                        "nodeType": "ArrayTypeName",
                        "src": "4736:20:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51693,
                  "initialValue": {
                    "baseExpression": {
                      "id": 51690,
                      "name": "_ownedTokensInEpochs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51562,
                      "src": "4781:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
                        "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref)"
                      }
                    },
                    "id": 51692,
                    "indexExpression": {
                      "id": 51691,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51677,
                      "src": "4802:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4781:27:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4736:72:54"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51694,
                        "name": "ownedTokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51689,
                        "src": "4849:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                        }
                      },
                      "id": 51695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4863:6:54",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "4849:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 51696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4873:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4849:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51705,
                  "nodeType": "IfStatement",
                  "src": "4845:79:54",
                  "trueBody": {
                    "id": 51704,
                    "nodeType": "Block",
                    "src": "4876:48:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 51701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4911:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 51700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "4897:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 51698,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4901:7:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 51699,
                              "nodeType": "ArrayTypeName",
                              "src": "4901:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 51702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4897:16:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 51684,
                        "id": 51703,
                        "nodeType": "Return",
                        "src": "4890:23:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 51711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51706,
                      "name": "epoch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51679,
                      "src": "4985:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 51707,
                          "name": "ownedTokenIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51689,
                          "src": "4993:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                          }
                        },
                        "id": 51709,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 51708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5007:1:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4993:16:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                        }
                      },
                      "id": 51710,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5010:5:54",
                      "memberName": "epoch",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51552,
                      "src": "4993:22:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4985:30:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51719,
                  "nodeType": "IfStatement",
                  "src": "4981:84:54",
                  "trueBody": {
                    "id": 51718,
                    "nodeType": "Block",
                    "src": "5017:48:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 51715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5052:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 51714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "5038:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 51712,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5042:7:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 51713,
                              "nodeType": "ArrayTypeName",
                              "src": "5042:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 51716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5038:16:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 51684,
                        "id": 51717,
                        "nodeType": "Return",
                        "src": "5031:23:54"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51721
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51721,
                      "mutability": "mutable",
                      "name": "changeIndex",
                      "nameLocation": "5122:11:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51782,
                      "src": "5114:19:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51720,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5114:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51726,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51722,
                        "name": "ownedTokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51689,
                        "src": "5136:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                        }
                      },
                      "id": 51723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5150:6:54",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5136:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 51724,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5159:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "5136:24:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5114:46:54"
                },
                {
                  "body": {
                    "id": 51736,
                    "nodeType": "Block",
                    "src": "5219:38:54",
                    "statements": [
                      {
                        "expression": {
                          "id": 51734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "--",
                          "prefix": false,
                          "src": "5233:13:54",
                          "subExpression": {
                            "id": 51733,
                            "name": "changeIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51721,
                            "src": "5233:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51735,
                        "nodeType": "ExpressionStatement",
                        "src": "5233:13:54"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 51732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 51727,
                          "name": "ownedTokenIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51689,
                          "src": "5177:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                          }
                        },
                        "id": 51729,
                        "indexExpression": {
                          "id": 51728,
                          "name": "changeIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51721,
                          "src": "5191:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5177:26:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                        }
                      },
                      "id": 51730,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5204:5:54",
                      "memberName": "epoch",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51552,
                      "src": "5177:32:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 51731,
                      "name": "epoch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51679,
                      "src": "5212:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "5177:40:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51737,
                  "nodeType": "WhileStatement",
                  "src": "5170:87:54"
                },
                {
                  "assignments": [
                    51739
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51739,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "5309:6:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51782,
                      "src": "5301:14:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 51738,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5301:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51745,
                  "initialValue": {
                    "expression": {
                      "expression": {
                        "baseExpression": {
                          "id": 51740,
                          "name": "ownedTokenIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51689,
                          "src": "5318:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                          }
                        },
                        "id": 51742,
                        "indexExpression": {
                          "id": 51741,
                          "name": "changeIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51721,
                          "src": "5332:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5318:26:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                        }
                      },
                      "id": 51743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5345:3:54",
                      "memberName": "ids",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51555,
                      "src": "5318:30:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                        "typeString": "uint48[] storage ref"
                      }
                    },
                    "id": 51744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "5349:6:54",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "5318:37:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5301:54:54"
                },
                {
                  "assignments": [
                    51750
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51750,
                      "mutability": "mutable",
                      "name": "ids",
                      "nameLocation": "5382:3:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51782,
                      "src": "5365:20:54",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 51748,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5365:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51749,
                        "nodeType": "ArrayTypeName",
                        "src": "5365:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51756,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 51754,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51739,
                        "src": "5402:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 51753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5388:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 51751,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5392:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51752,
                        "nodeType": "ArrayTypeName",
                        "src": "5392:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 51755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5388:21:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5365:44:54"
                },
                {
                  "body": {
                    "id": 51778,
                    "nodeType": "Block",
                    "src": "5448:98:54",
                    "statements": [
                      {
                        "expression": {
                          "id": 51772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 51763,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51750,
                              "src": "5462:3:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 51765,
                            "indexExpression": {
                              "id": 51764,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51758,
                              "src": "5466:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5462:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 51766,
                                  "name": "ownedTokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51689,
                                  "src": "5471:13:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                                    "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                                  }
                                },
                                "id": 51768,
                                "indexExpression": {
                                  "id": 51767,
                                  "name": "changeIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51721,
                                  "src": "5485:11:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5471:26:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                                }
                              },
                              "id": 51769,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5498:3:54",
                              "memberName": "ids",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 51555,
                              "src": "5471:30:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                "typeString": "uint48[] storage ref"
                              }
                            },
                            "id": 51771,
                            "indexExpression": {
                              "id": 51770,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51758,
                              "src": "5502:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5471:33:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          },
                          "src": "5462:42:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51773,
                        "nodeType": "ExpressionStatement",
                        "src": "5462:42:54"
                      },
                      {
                        "id": 51777,
                        "nodeType": "UncheckedBlock",
                        "src": "5518:18:54",
                        "statements": [
                          {
                            "expression": {
                              "id": 51775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "5530:3:54",
                              "subExpression": {
                                "id": 51774,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51758,
                                "src": "5532:1:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 51776,
                            "nodeType": "ExpressionStatement",
                            "src": "5530:3:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51760,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51758,
                      "src": "5435:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 51761,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51739,
                      "src": "5439:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5435:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51779,
                  "initializationExpression": {
                    "assignments": [
                      51758
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 51758,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5432:1:54",
                        "nodeType": "VariableDeclaration",
                        "scope": 51779,
                        "src": "5424:9:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 51757,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5424:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 51759,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5424:9:54"
                  },
                  "nodeType": "ForStatement",
                  "src": "5419:127:54"
                },
                {
                  "expression": {
                    "id": 51780,
                    "name": "ids",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 51750,
                    "src": "5563:3:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 51684,
                  "id": 51781,
                  "nodeType": "Return",
                  "src": "5556:10:54"
                }
              ]
            },
            "documentation": {
              "id": 51675,
              "nodeType": "StructuredDocumentation",
              "src": "4467:159:54",
              "text": "@notice Returns the list of token ids owned by an address in an epoch.\n @param owner The address of the token owner.\n @param epoch The epoch."
            },
            "functionSelector": "29e4eae3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownedTokenIdsAt",
            "nameLocation": "4640:15:54",
            "parameters": {
              "id": 51680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51677,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4664:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51783,
                  "src": "4656:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51676,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4656:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51679,
                  "mutability": "mutable",
                  "name": "epoch",
                  "nameLocation": "4678:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51783,
                  "src": "4671:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 51678,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4671:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4655:29:54"
            },
            "returnParameters": {
              "id": 51684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51683,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51783,
                  "src": "4708:16:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 51681,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "4708:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 51682,
                    "nodeType": "ArrayTypeName",
                    "src": "4708:9:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4707:18:54"
            },
            "scope": 52082,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51798,
            "nodeType": "FunctionDefinition",
            "src": "5921:148:54",
            "nodes": [],
            "body": {
              "id": 51797,
              "nodeType": "Block",
              "src": "6009:60:54",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51794,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51786,
                        "src": "6054:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 51792,
                        "name": "supplyManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51543,
                        "src": "6026:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IStakedPWNSupplyManager_$52196",
                          "typeString": "contract IStakedPWNSupplyManager"
                        }
                      },
                      "id": 51793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6040:13:54",
                      "memberName": "stakeMetadata",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 52195,
                      "src": "6026:27:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) view external returns (string memory)"
                      }
                    },
                    "id": 51795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6026:36:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 51791,
                  "id": 51796,
                  "nodeType": "Return",
                  "src": "6019:43:54"
                }
              ]
            },
            "baseFunctions": [
              46711
            ],
            "documentation": {
              "id": 51784,
              "nodeType": "StructuredDocumentation",
              "src": "5782:134:54",
              "text": "@notice Returns the URI of the token metadata.\n @param tokenId The token id.\n @return The URI of the token metadata."
            },
            "functionSelector": "c87b56dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "nameLocation": "5930:8:54",
            "overrides": {
              "id": 51788,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5976:8:54"
            },
            "parameters": {
              "id": 51787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51786,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "5947:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51798,
                  "src": "5939:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51785,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5939:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5938:17:54"
            },
            "returnParameters": {
              "id": 51791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51790,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51798,
                  "src": "5994:13:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 51789,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5994:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5993:15:54"
            },
            "scope": 52082,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 51871,
            "nodeType": "FunctionDefinition",
            "src": "6497:672:54",
            "nodes": [],
            "body": {
              "id": 51870,
              "nodeType": "Block",
              "src": "6632:537:54",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 51826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 51819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 51812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "6703:17:54",
                        "subExpression": {
                          "id": 51811,
                          "name": "transfersEnabled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51550,
                          "src": "6704:16:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 51818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 51813,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51801,
                          "src": "6724:4:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 51816,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6740:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 51815,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6732:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 51814,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6732:7:54",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 51817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6732:10:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6724:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "6703:39:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 51825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 51820,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51803,
                        "src": "6746:2:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 51823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6760:1:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 51822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6752:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 51821,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6752:7:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 51824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6752:10:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "6746:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6703:59:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51833,
                  "nodeType": "IfStatement",
                  "src": "6699:122:54",
                  "trueBody": {
                    "id": 51832,
                    "nodeType": "Block",
                    "src": "6764:57:54",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 51827,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52544,
                              "src": "6785:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Error_$52544_$",
                                "typeString": "type(library Error)"
                              }
                            },
                            "id": 51829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6791:17:54",
                            "memberName": "TransfersDisabled",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 52507,
                            "src": "6785:23:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51830,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6785:25:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51831,
                        "nodeType": "RevertStatement",
                        "src": "6778:32:54"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    51835
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51835,
                      "mutability": "mutable",
                      "name": "epoch",
                      "nameLocation": "6838:5:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51870,
                      "src": "6831:12:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 51834,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "6831:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51841,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 51840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 51836,
                          "name": "epochClock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51547,
                          "src": "6846:10:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                            "typeString": "contract PWNEpochClock"
                          }
                        },
                        "id": 51837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6857:12:54",
                        "memberName": "currentEpoch",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 51521,
                        "src": "6846:23:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint16_$",
                          "typeString": "function () view external returns (uint16)"
                        }
                      },
                      "id": 51838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6846:25:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 51839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6874:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6846:29:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6831:44:54"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51842,
                      "name": "from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51801,
                      "src": "6979:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 51845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6995:1:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 51844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6987:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6987:7:54",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6987:10:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6979:18:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51855,
                  "nodeType": "IfStatement",
                  "src": "6975:94:54",
                  "trueBody": {
                    "id": 51854,
                    "nodeType": "Block",
                    "src": "6999:70:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 51849,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51801,
                              "src": "7032:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 51850,
                              "name": "firstTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51805,
                              "src": "7038:12:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 51851,
                              "name": "epoch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51835,
                              "src": "7052:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "id": 51848,
                            "name": "_removeIdFromOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52032,
                            "src": "7013:18:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint16_$returns$__$",
                              "typeString": "function (address,uint256,uint16)"
                            }
                          },
                          "id": 51852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7013:45:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51853,
                        "nodeType": "ExpressionStatement",
                        "src": "7013:45:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 51861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51856,
                      "name": "to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51803,
                      "src": "7082:2:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 51859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7096:1:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 51858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7088:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 51857,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7088:7:54",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 51860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7088:10:54",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7082:16:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51869,
                  "nodeType": "IfStatement",
                  "src": "7078:85:54",
                  "trueBody": {
                    "id": 51868,
                    "nodeType": "Block",
                    "src": "7100:63:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 51863,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51803,
                              "src": "7128:2:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 51864,
                              "name": "firstTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51805,
                              "src": "7132:12:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 51865,
                              "name": "epoch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51835,
                              "src": "7146:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "id": 51862,
                            "name": "_addIdToOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51964,
                            "src": "7114:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint16_$returns$__$",
                              "typeString": "function (address,uint256,uint16)"
                            }
                          },
                          "id": 51866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7114:38:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51867,
                        "nodeType": "ExpressionStatement",
                        "src": "7114:38:54"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              47404
            ],
            "documentation": {
              "id": 51799,
              "nodeType": "StructuredDocumentation",
              "src": "6278:214:54",
              "text": "@notice Hook that is called before any token transfer.\n @dev The token transfer is allowed only if the transfers are enabled.\n The token ownership is updated in the `_ownedTokensInEpochs` mapping."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nameLocation": "6506:20:54",
            "overrides": {
              "id": 51809,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6614:8:54"
            },
            "parameters": {
              "id": 51808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51801,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "6544:4:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51871,
                  "src": "6536:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51800,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6536:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51803,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "6558:2:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51871,
                  "src": "6550:10:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6550:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51805,
                  "mutability": "mutable",
                  "name": "firstTokenId",
                  "nameLocation": "6570:12:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51871,
                  "src": "6562:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51804,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6562:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51807,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51871,
                  "src": "6584:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51806,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6584:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6526:87:54"
            },
            "returnParameters": {
              "id": 51810,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6632:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 51964,
            "nodeType": "FunctionDefinition",
            "src": "7175:846:54",
            "nodes": [],
            "body": {
              "id": 51963,
              "nodeType": "Block",
              "src": "7253:768:54",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51884
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51884,
                      "mutability": "mutable",
                      "name": "ownedTokenIdsList",
                      "nameLocation": "7292:17:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51963,
                      "src": "7263:46:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 51882,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 51881,
                            "name": "OwnedTokensInEpoch",
                            "nameLocations": [
                              "7263:18:54"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 51556,
                            "src": "7263:18:54"
                          },
                          "referencedDeclaration": 51556,
                          "src": "7263:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                          }
                        },
                        "id": 51883,
                        "nodeType": "ArrayTypeName",
                        "src": "7263:20:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51888,
                  "initialValue": {
                    "baseExpression": {
                      "id": 51885,
                      "name": "_ownedTokensInEpochs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51562,
                      "src": "7312:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
                        "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref)"
                      }
                    },
                    "id": 51887,
                    "indexExpression": {
                      "id": 51886,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51873,
                      "src": "7333:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7312:27:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7263:76:54"
                },
                {
                  "assignments": [
                    51891
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51891,
                      "mutability": "mutable",
                      "name": "ownedTokenIds",
                      "nameLocation": "7376:13:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 51963,
                      "src": "7349:40:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                      },
                      "typeName": {
                        "id": 51890,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51889,
                          "name": "OwnedTokensInEpoch",
                          "nameLocations": [
                            "7349:18:54"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 51556,
                          "src": "7349:18:54"
                        },
                        "referencedDeclaration": 51556,
                        "src": "7349:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51892,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7349:40:54"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51893,
                        "name": "ownedTokenIdsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51884,
                        "src": "7404:17:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                        }
                      },
                      "id": 51894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7422:6:54",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7404:24:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 51895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7432:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7404:29:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 51950,
                    "nodeType": "Block",
                    "src": "7547:419:54",
                    "statements": [
                      {
                        "assignments": [
                          51912
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 51912,
                            "mutability": "mutable",
                            "name": "lastOwnedTokenIds",
                            "nameLocation": "7588:17:54",
                            "nodeType": "VariableDeclaration",
                            "scope": 51950,
                            "src": "7561:44:54",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                              "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                            },
                            "typeName": {
                              "id": 51911,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 51910,
                                "name": "OwnedTokensInEpoch",
                                "nameLocations": [
                                  "7561:18:54"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 51556,
                                "src": "7561:18:54"
                              },
                              "referencedDeclaration": 51556,
                              "src": "7561:18:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 51919,
                        "initialValue": {
                          "baseExpression": {
                            "id": 51913,
                            "name": "ownedTokenIdsList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51884,
                            "src": "7608:17:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                              "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                            }
                          },
                          "id": 51918,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 51917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 51914,
                                "name": "ownedTokenIdsList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51884,
                                "src": "7626:17:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                                }
                              },
                              "id": 51915,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7644:6:54",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "7626:24:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 51916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7653:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "7626:28:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7608:47:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7561:94:54"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 51923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 51920,
                              "name": "lastOwnedTokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51912,
                              "src": "7673:17:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                              }
                            },
                            "id": 51921,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7691:5:54",
                            "memberName": "epoch",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 51552,
                            "src": "7673:23:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 51922,
                            "name": "epoch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51877,
                            "src": "7700:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "7673:32:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 51948,
                          "nodeType": "Block",
                          "src": "7779:177:54",
                          "statements": [
                            {
                              "expression": {
                                "id": 51933,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 51929,
                                  "name": "ownedTokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51891,
                                  "src": "7797:13:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                    "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 51930,
                                      "name": "ownedTokenIdsList",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 51884,
                                      "src": "7813:17:54",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                                        "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                                      }
                                    },
                                    "id": 51931,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7831:4:54",
                                    "memberName": "push",
                                    "nodeType": "MemberAccess",
                                    "src": "7813:22:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$returns$_t_struct$_OwnedTokensInEpoch_$51556_storage_$attached_to$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$",
                                      "typeString": "function (struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer) returns (struct StakedPWN.OwnedTokensInEpoch storage ref)"
                                    }
                                  },
                                  "id": 51932,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7813:24:54",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                                    "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                                  }
                                },
                                "src": "7797:40:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                }
                              },
                              "id": 51934,
                              "nodeType": "ExpressionStatement",
                              "src": "7797:40:54"
                            },
                            {
                              "expression": {
                                "id": 51939,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 51935,
                                    "name": "ownedTokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 51891,
                                    "src": "7855:13:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                    }
                                  },
                                  "id": 51937,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "7869:5:54",
                                  "memberName": "epoch",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 51552,
                                  "src": "7855:19:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 51938,
                                  "name": "epoch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51877,
                                  "src": "7877:5:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "src": "7855:27:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "id": 51940,
                              "nodeType": "ExpressionStatement",
                              "src": "7855:27:54"
                            },
                            {
                              "expression": {
                                "id": 51946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 51941,
                                    "name": "ownedTokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 51891,
                                    "src": "7900:13:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                    }
                                  },
                                  "id": 51943,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "7914:3:54",
                                  "memberName": "ids",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 51555,
                                  "src": "7900:17:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                    "typeString": "uint48[] storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 51944,
                                    "name": "lastOwnedTokenIds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 51912,
                                    "src": "7920:17:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                    }
                                  },
                                  "id": 51945,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7938:3:54",
                                  "memberName": "ids",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 51555,
                                  "src": "7920:21:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                    "typeString": "uint48[] storage ref"
                                  }
                                },
                                "src": "7900:41:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                  "typeString": "uint48[] storage ref"
                                }
                              },
                              "id": 51947,
                              "nodeType": "ExpressionStatement",
                              "src": "7900:41:54"
                            }
                          ]
                        },
                        "id": 51949,
                        "nodeType": "IfStatement",
                        "src": "7669:287:54",
                        "trueBody": {
                          "id": 51928,
                          "nodeType": "Block",
                          "src": "7707:66:54",
                          "statements": [
                            {
                              "expression": {
                                "id": 51926,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 51924,
                                  "name": "ownedTokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51891,
                                  "src": "7725:13:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                    "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 51925,
                                  "name": "lastOwnedTokenIds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 51912,
                                  "src": "7741:17:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                    "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                  }
                                },
                                "src": "7725:33:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                }
                              },
                              "id": 51927,
                              "nodeType": "ExpressionStatement",
                              "src": "7725:33:54"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 51951,
                  "nodeType": "IfStatement",
                  "src": "7400:566:54",
                  "trueBody": {
                    "id": 51909,
                    "nodeType": "Block",
                    "src": "7435:106:54",
                    "statements": [
                      {
                        "expression": {
                          "id": 51901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 51897,
                            "name": "ownedTokenIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51891,
                            "src": "7449:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                              "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 51898,
                                "name": "ownedTokenIdsList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51884,
                                "src": "7465:17:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                                }
                              },
                              "id": 51899,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7483:4:54",
                              "memberName": "push",
                              "nodeType": "MemberAccess",
                              "src": "7465:22:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$returns$_t_struct$_OwnedTokensInEpoch_$51556_storage_$attached_to$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$",
                                "typeString": "function (struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer) returns (struct StakedPWN.OwnedTokensInEpoch storage ref)"
                              }
                            },
                            "id": 51900,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7465:24:54",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                              "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                            }
                          },
                          "src": "7449:40:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                          }
                        },
                        "id": 51902,
                        "nodeType": "ExpressionStatement",
                        "src": "7449:40:54"
                      },
                      {
                        "expression": {
                          "id": 51907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 51903,
                              "name": "ownedTokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51891,
                              "src": "7503:13:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                              }
                            },
                            "id": 51905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7517:5:54",
                            "memberName": "epoch",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 51552,
                            "src": "7503:19:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 51906,
                            "name": "epoch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51877,
                            "src": "7525:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "7503:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 51908,
                        "nodeType": "ExpressionStatement",
                        "src": "7503:27:54"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 51959,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51875,
                            "src": "8005:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 51958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7998:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint48_$",
                            "typeString": "type(uint48)"
                          },
                          "typeName": {
                            "id": 51957,
                            "name": "uint48",
                            "nodeType": "ElementaryTypeName",
                            "src": "7998:6:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 51960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7998:15:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 51952,
                          "name": "ownedTokenIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51891,
                          "src": "7975:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                          }
                        },
                        "id": 51955,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7989:3:54",
                        "memberName": "ids",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 51555,
                        "src": "7975:17:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                          "typeString": "uint48[] storage ref"
                        }
                      },
                      "id": 51956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7993:4:54",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "7975:22:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_uint48_$dyn_storage_ptr_$_t_uint48_$returns$__$attached_to$_t_array$_t_uint48_$dyn_storage_ptr_$",
                        "typeString": "function (uint48[] storage pointer,uint48)"
                      }
                    },
                    "id": 51961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7975:39:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51962,
                  "nodeType": "ExpressionStatement",
                  "src": "7975:39:54"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addIdToOwner",
            "nameLocation": "7184:13:54",
            "parameters": {
              "id": 51878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51873,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "7206:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51964,
                  "src": "7198:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7198:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51875,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "7221:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51964,
                  "src": "7213:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7213:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51877,
                  "mutability": "mutable",
                  "name": "epoch",
                  "nameLocation": "7237:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 51964,
                  "src": "7230:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 51876,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7230:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7197:46:54"
            },
            "returnParameters": {
              "id": 51879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7253:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 52032,
            "nodeType": "FunctionDefinition",
            "src": "8027:655:54",
            "nodes": [],
            "body": {
              "id": 52031,
              "nodeType": "Block",
              "src": "8110:572:54",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    51977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51977,
                      "mutability": "mutable",
                      "name": "ownedTokenIdsList",
                      "nameLocation": "8149:17:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 52031,
                      "src": "8120:46:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 51975,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 51974,
                            "name": "OwnedTokensInEpoch",
                            "nameLocations": [
                              "8120:18:54"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 51556,
                            "src": "8120:18:54"
                          },
                          "referencedDeclaration": 51556,
                          "src": "8120:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                          }
                        },
                        "id": 51976,
                        "nodeType": "ArrayTypeName",
                        "src": "8120:20:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51981,
                  "initialValue": {
                    "baseExpression": {
                      "id": 51978,
                      "name": "_ownedTokensInEpochs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51562,
                      "src": "8169:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_$",
                        "typeString": "mapping(address => struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref)"
                      }
                    },
                    "id": 51980,
                    "indexExpression": {
                      "id": 51979,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51966,
                      "src": "8190:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8169:27:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8120:76:54"
                },
                {
                  "assignments": [
                    51984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 51984,
                      "mutability": "mutable",
                      "name": "lastOwnedTokenIds",
                      "nameLocation": "8233:17:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 52031,
                      "src": "8206:44:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                      },
                      "typeName": {
                        "id": 51983,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 51982,
                          "name": "OwnedTokensInEpoch",
                          "nameLocations": [
                            "8206:18:54"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 51556,
                          "src": "8206:18:54"
                        },
                        "referencedDeclaration": 51556,
                        "src": "8206:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 51991,
                  "initialValue": {
                    "baseExpression": {
                      "id": 51985,
                      "name": "ownedTokenIdsList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51977,
                      "src": "8253:17:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                        "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                      }
                    },
                    "id": 51990,
                    "indexExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 51989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 51986,
                          "name": "ownedTokenIdsList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51977,
                          "src": "8271:17:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                          }
                        },
                        "id": 51987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8289:6:54",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "8271:24:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 51988,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8298:1:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "8271:28:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8253:47:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                      "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8206:94:54"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 51995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 51992,
                        "name": "lastOwnedTokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51984,
                        "src": "8315:17:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                          "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                        }
                      },
                      "id": 51993,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8333:5:54",
                      "memberName": "epoch",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51552,
                      "src": "8315:23:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 51994,
                      "name": "epoch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51970,
                      "src": "8342:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "8315:32:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 52029,
                    "nodeType": "Block",
                    "src": "8429:247:54",
                    "statements": [
                      {
                        "assignments": [
                          52005
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 52005,
                            "mutability": "mutable",
                            "name": "ownedTokenIds",
                            "nameLocation": "8470:13:54",
                            "nodeType": "VariableDeclaration",
                            "scope": 52029,
                            "src": "8443:40:54",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                              "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                            },
                            "typeName": {
                              "id": 52004,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 52003,
                                "name": "OwnedTokensInEpoch",
                                "nameLocations": [
                                  "8443:18:54"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 51556,
                                "src": "8443:18:54"
                              },
                              "referencedDeclaration": 51556,
                              "src": "8443:18:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 52009,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 52006,
                              "name": "ownedTokenIdsList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51977,
                              "src": "8486:17:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer"
                              }
                            },
                            "id": 52007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8504:4:54",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "8486:22:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$returns$_t_struct$_OwnedTokensInEpoch_$51556_storage_$attached_to$_t_array$_t_struct$_OwnedTokensInEpoch_$51556_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct StakedPWN.OwnedTokensInEpoch storage ref[] storage pointer) returns (struct StakedPWN.OwnedTokensInEpoch storage ref)"
                            }
                          },
                          "id": 52008,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8486:24:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage",
                            "typeString": "struct StakedPWN.OwnedTokensInEpoch storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8443:67:54"
                      },
                      {
                        "expression": {
                          "id": 52014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 52010,
                              "name": "ownedTokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52005,
                              "src": "8524:13:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                              }
                            },
                            "id": 52012,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8538:5:54",
                            "memberName": "epoch",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 51552,
                            "src": "8524:19:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 52013,
                            "name": "epoch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51970,
                            "src": "8546:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "8524:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 52015,
                        "nodeType": "ExpressionStatement",
                        "src": "8524:27:54"
                      },
                      {
                        "expression": {
                          "id": 52021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 52016,
                              "name": "ownedTokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52005,
                              "src": "8565:13:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                              }
                            },
                            "id": 52018,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8579:3:54",
                            "memberName": "ids",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 51555,
                            "src": "8565:17:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                              "typeString": "uint48[] storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 52019,
                              "name": "lastOwnedTokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51984,
                              "src": "8585:17:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                              }
                            },
                            "id": 52020,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8603:3:54",
                            "memberName": "ids",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 51555,
                            "src": "8585:21:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                              "typeString": "uint48[] storage ref"
                            }
                          },
                          "src": "8565:41:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                            "typeString": "uint48[] storage ref"
                          }
                        },
                        "id": 52022,
                        "nodeType": "ExpressionStatement",
                        "src": "8565:41:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 52024,
                                "name": "ownedTokenIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 52005,
                                "src": "8638:13:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                }
                              },
                              "id": 52025,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8652:3:54",
                              "memberName": "ids",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 51555,
                              "src": "8638:17:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                "typeString": "uint48[] storage ref"
                              }
                            },
                            {
                              "id": 52026,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51968,
                              "src": "8657:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                "typeString": "uint48[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 52023,
                            "name": "_removeIdFromList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52081,
                            "src": "8620:17:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint48_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (uint48[] storage pointer,uint256)"
                            }
                          },
                          "id": 52027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8620:45:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 52028,
                        "nodeType": "ExpressionStatement",
                        "src": "8620:45:54"
                      }
                    ]
                  },
                  "id": 52030,
                  "nodeType": "IfStatement",
                  "src": "8311:365:54",
                  "trueBody": {
                    "id": 52002,
                    "nodeType": "Block",
                    "src": "8349:74:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 51997,
                                "name": "lastOwnedTokenIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51984,
                                "src": "8381:17:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OwnedTokensInEpoch_$51556_storage_ptr",
                                  "typeString": "struct StakedPWN.OwnedTokensInEpoch storage pointer"
                                }
                              },
                              "id": 51998,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8399:3:54",
                              "memberName": "ids",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 51555,
                              "src": "8381:21:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                "typeString": "uint48[] storage ref"
                              }
                            },
                            {
                              "id": 51999,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51968,
                              "src": "8404:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage",
                                "typeString": "uint48[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 51996,
                            "name": "_removeIdFromList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52081,
                            "src": "8363:17:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint48_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (uint48[] storage pointer,uint256)"
                            }
                          },
                          "id": 52000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8363:49:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 52001,
                        "nodeType": "ExpressionStatement",
                        "src": "8363:49:54"
                      }
                    ]
                  }
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeIdFromOwner",
            "nameLocation": "8036:18:54",
            "parameters": {
              "id": 51971,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51966,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "8063:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 52032,
                  "src": "8055:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51965,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8055:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51968,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "8078:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 52032,
                  "src": "8070:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51967,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8070:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51970,
                  "mutability": "mutable",
                  "name": "epoch",
                  "nameLocation": "8094:5:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 52032,
                  "src": "8087:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 51969,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8087:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8054:46:54"
            },
            "returnParameters": {
              "id": 51972,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8110:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 52081,
            "nodeType": "FunctionDefinition",
            "src": "8688:342:54",
            "nodes": [],
            "body": {
              "id": 52080,
              "nodeType": "Block",
              "src": "8762:268:54",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    52041
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52041,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "8780:6:54",
                      "nodeType": "VariableDeclaration",
                      "scope": 52080,
                      "src": "8772:14:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 52040,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8772:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52044,
                  "initialValue": {
                    "expression": {
                      "id": 52042,
                      "name": "ids",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52035,
                      "src": "8789:3:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                        "typeString": "uint48[] storage pointer"
                      }
                    },
                    "id": 52043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8793:6:54",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "8789:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8772:27:54"
                },
                {
                  "body": {
                    "id": 52078,
                    "nodeType": "Block",
                    "src": "8838:186:54",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 52055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 52051,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52035,
                              "src": "8856:3:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                                "typeString": "uint48[] storage pointer"
                              }
                            },
                            "id": 52053,
                            "indexExpression": {
                              "id": 52052,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52046,
                              "src": "8860:1:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8856:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 52054,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52037,
                            "src": "8866:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8856:17:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 52073,
                        "nodeType": "IfStatement",
                        "src": "8852:131:54",
                        "trueBody": {
                          "id": 52072,
                          "nodeType": "Block",
                          "src": "8875:108:54",
                          "statements": [
                            {
                              "expression": {
                                "id": 52064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 52056,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52035,
                                    "src": "8893:3:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                                      "typeString": "uint48[] storage pointer"
                                    }
                                  },
                                  "id": 52058,
                                  "indexExpression": {
                                    "id": 52057,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52046,
                                    "src": "8897:1:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "8893:6:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint48",
                                    "typeString": "uint48"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 52059,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52035,
                                    "src": "8902:3:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                                      "typeString": "uint48[] storage pointer"
                                    }
                                  },
                                  "id": 52063,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 52062,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 52060,
                                      "name": "length",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 52041,
                                      "src": "8906:6:54",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 52061,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8915:1:54",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "8906:10:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "8902:15:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint48",
                                    "typeString": "uint48"
                                  }
                                },
                                "src": "8893:24:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint48",
                                  "typeString": "uint48"
                                }
                              },
                              "id": 52065,
                              "nodeType": "ExpressionStatement",
                              "src": "8893:24:54"
                            },
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 52066,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52035,
                                    "src": "8935:3:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                                      "typeString": "uint48[] storage pointer"
                                    }
                                  },
                                  "id": 52068,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8939:3:54",
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "src": "8935:7:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_uint48_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_uint48_$dyn_storage_ptr_$",
                                    "typeString": "function (uint48[] storage pointer)"
                                  }
                                },
                                "id": 52069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8935:9:54",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 52070,
                              "nodeType": "ExpressionStatement",
                              "src": "8935:9:54"
                            },
                            {
                              "functionReturnParameters": 52039,
                              "id": 52071,
                              "nodeType": "Return",
                              "src": "8962:7:54"
                            }
                          ]
                        }
                      },
                      {
                        "id": 52077,
                        "nodeType": "UncheckedBlock",
                        "src": "8996:18:54",
                        "statements": [
                          {
                            "expression": {
                              "id": 52075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "9008:3:54",
                              "subExpression": {
                                "id": 52074,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 52046,
                                "src": "9010:1:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 52076,
                            "nodeType": "ExpressionStatement",
                            "src": "9008:3:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 52050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 52048,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52046,
                      "src": "8825:1:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 52049,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52041,
                      "src": "8829:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8825:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 52079,
                  "initializationExpression": {
                    "assignments": [
                      52046
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 52046,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "8822:1:54",
                        "nodeType": "VariableDeclaration",
                        "scope": 52079,
                        "src": "8814:9:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52045,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8814:7:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 52047,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "8814:9:54"
                  },
                  "nodeType": "ForStatement",
                  "src": "8809:215:54"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeIdFromList",
            "nameLocation": "8697:17:54",
            "parameters": {
              "id": 52038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52035,
                  "mutability": "mutable",
                  "name": "ids",
                  "nameLocation": "8732:3:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 52081,
                  "src": "8715:20:54",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                    "typeString": "uint48[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 52033,
                      "name": "uint48",
                      "nodeType": "ElementaryTypeName",
                      "src": "8715:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint48",
                        "typeString": "uint48"
                      }
                    },
                    "id": 52034,
                    "nodeType": "ArrayTypeName",
                    "src": "8715:8:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint48_$dyn_storage_ptr",
                      "typeString": "uint48[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52037,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "8745:7:54",
                  "nodeType": "VariableDeclaration",
                  "scope": 52081,
                  "src": "8737:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52036,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8737:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8714:39:54"
            },
            "returnParameters": {
              "id": 52039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8762:0:54"
            },
            "scope": 52082,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 51536,
              "name": "Ownable2Step",
              "nameLocations": [
                "736:12:54"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 44794,
              "src": "736:12:54"
            },
            "id": 51537,
            "nodeType": "InheritanceSpecifier",
            "src": "736:12:54"
          },
          {
            "baseName": {
              "id": 51538,
              "name": "ERC721",
              "nameLocations": [
                "750:6:54"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 47433,
              "src": "750:6:54"
            },
            "id": 51539,
            "nodeType": "InheritanceSpecifier",
            "src": "750:6:54"
          }
        ],
        "canonicalName": "StakedPWN",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 51535,
          "nodeType": "StructuredDocumentation",
          "src": "418:296:54",
          "text": "@title Staked PWN token contract.\n @notice The token is representation of a stake in the PWN DAO.\n @dev This contract is Ownable2Step, which means that the ownership transfer\n must be accepted by the new owner.\n The token is mintable and burnable by the VoteEscrowedPWN contract."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          52082,
          47433,
          47594,
          47549,
          48356,
          48368,
          44794,
          44711,
          47993
        ],
        "name": "StakedPWN",
        "nameLocation": "723:9:54",
        "scope": 52083,
        "usedErrors": [
          52505,
          52507,
          52509
        ]
      }
    ],
    "license": "GPL-3.0-only"
  },
  "id": 54
}