{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ApproveDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DelegateBySigDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DelegateDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EpochStillRunning",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLockUpPeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LockUpPeriodMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotStakeOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NothingToIncrease",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "lastCalculatedEpoch",
          "type": "uint256"
        }
      ],
      "name": "PowerAlreadyCalculated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WithrawalBeforeLockUpEnd",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lockUpEpochs",
          "type": "uint256"
        }
      ],
      "name": "StakeCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "additionalAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "additionalEpochs",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newEpochs",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newStakeId",
          "type": "uint256"
        }
      ],
      "name": "StakeIncreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "stakeId1",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "stakeId2",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lockUpEpochs",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newStakeId",
          "type": "uint256"
        }
      ],
      "name": "StakeMerged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newStakeId1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newStakeId2",
          "type": "uint256"
        }
      ],
      "name": "StakeSplit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "StakeWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "TotalPowerCalculated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EPOCHS_IN_YEAR",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOTAL_POWER_NAMESPACE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "calculateTotalPower",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "calculateTotalPowerUpTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lockUpEpochs",
          "type": "uint256"
        }
      ],
      "name": "createStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "epochClock",
      "outputs": [
        {
          "internalType": "contract PWNEpochClock",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "additionalAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "additionalEpochs",
          "type": "uint256"
        }
      ],
      "name": "increaseStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newStakeId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pwnToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakedPWN",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_epochClock",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastCalculatedTotalPowerEpoch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastStakeId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakeId2",
          "type": "uint256"
        }
      ],
      "name": "mergeStakes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newStakeId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "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": "pwnToken",
      "outputs": [
        {
          "internalType": "contract PWN",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "splitAmount",
          "type": "uint256"
        }
      ],
      "name": "splitStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newStakeId1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newStakeId2",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        }
      ],
      "name": "stakeMetadata",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "initialEpoch",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lockUpEpochs",
          "type": "uint256"
        }
      ],
      "name": "stakePowers",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "epoch",
              "type": "uint16"
            },
            {
              "internalType": "int104",
              "name": "power",
              "type": "int104"
            }
          ],
          "internalType": "struct VoteEscrowedPWNPower.EpochPower[]",
          "name": "powers",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakedPWN",
      "outputs": [
        {
          "internalType": "contract StakedPWN",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "stakerPowerAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "epochs",
          "type": "uint256[]"
        }
      ],
      "name": "stakerPowers",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        }
      ],
      "name": "stakes",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "initialEpoch",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "lockUpEpochs",
          "type": "uint8"
        },
        {
          "internalType": "uint104",
          "name": "amount",
          "type": "uint104"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        }
      ],
      "name": "totalPowerAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "epochs",
          "type": "uint256[]"
        }
      ],
      "name": "totalPowers",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeId",
          "type": "uint256"
        }
      ],
      "name": "withdrawStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b506200001d3362000023565b6200009d565b600180546001600160a01b03191690556200004a816200004d602090811b62001f3d17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6148af80620000ad6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80638da5cb5b11610151578063d5a44f86116100c3578063e2df21b211610087578063e2df21b21461060d578063e30c397814610615578063e959319f14610626578063f2fde38b14610639578063f8c8765e1461064c578063fe7f0e8b1461065f57600080fd5b8063d5a44f861461053e578063d7fa023d146105a9578063dbeb5a37146105bc578063dc310451146105cf578063dd62ed3e146105f757600080fd5b80639ab24eb0116101155780639ab24eb0146104325780639cf9a327146104dc578063a54244b2146104ef578063a9059cbb146104f8578063c3cda5201461050b578063ce127aa31461051e57600080fd5b80638da5cb5b146104655780638e539e8c1461047657806391ddadf4146104895780639350039b146104a857806395d89b41146104bb57600080fd5b80634bf5d7e9116101ea57806368ed223e116101ae57806368ed223e1461041f57806370a0823114610432578063715018a61461044557806371fc49b51461044d57806377a4e5981461045557806379ba50971461045d57600080fd5b80634bf5d7e914610390578063510d3ee6146103ba578063587cde1e146103cd5780635c19a95c146103f9578063681100111461040c57600080fd5b806324a4afd51161023c57806324a4afd51461032457806325d5971f1461032d5780632ee293dc14610342578063313ce56714610355578063351383821461036a5780633a46b1a81461037d57600080fd5b806302aedf3c1461027957806306fdde03146102a2578063095ea7b3146102d857806318160ddd146102fb57806323b872dd14610311575b600080fd5b61028c6102873660046136cd565b610672565b60405161029991906136f9565b60405180910390f35b6040805180820190915260118152702b37ba3296b2b9b1b937bbb2b210282ba760791b60208201525b6040516102999190613773565b6102eb6102e63660046137bb565b6108b6565b6040519015158152602001610299565b6103036108d1565b604051908152602001610299565b6102eb61031f3660046137e7565b61094e565b61030360055481565b61034061033b366004613828565b610969565b005b610303610350366004613841565b610ba3565b60125b60405160ff9091168152602001610299565b6103036103783660046136cd565b610efe565b61030361038b3660046137bb565b611324565b60408051808201909152600e81526d0dadec8ca7ae0eedc5acae0dec6d60931b60208201526102cb565b6103406103c8366004613828565b611339565b6103e16103db366004613863565b50600090565b6040516001600160a01b039091168152602001610299565b610340610407366004613863565b611492565b6002546103e1906001600160a01b031681565b61030361042d3660046137bb565b6114ab565b610303610440366004613863565b6114b7565b61034061153d565b610358600d81565b610340611551565b6103406115d4565b6000546001600160a01b03166103e1565b610303610484366004613828565b61164e565b610491611659565b60405165ffffffffffff9091168152602001610299565b6003546103e1906001600160a01b031681565b6040805180820190915260058152643b32a82ba760d91b60208201526102cb565b6004546103e1906001600160a01b031681565b61030360075481565b6102eb6105063660046137bb565b6116db565b610340610519366004613880565b6116f6565b61053161052c36600461392e565b61170f565b6040516102999190613983565b61057e61054c366004613828565b60066020526000908152604090205461ffff81169062010000810460ff1690630100000090046001600160681b031683565b6040805161ffff909416845260ff90921660208401526001600160681b031690820152606001610299565b6103036105b7366004613841565b6117b3565b6105316105ca3660046139c7565b6119e4565b6105e26105dd366004613841565b611a86565b60408051928352602083019190915201610299565b610303610605366004613a09565b600092915050565b610303611c68565b6001546001600160a01b03166103e1565b6102cb610634366004613828565b611c84565b610340610647366004613863565b611d57565b61034061065a366004613a42565b611dc8565b61030361066d366004613828565b611f32565b6060606483108061068d5750600061068b606485613ab4565b115b806106a257506affffffffffffffffffffff83115b156106c05760405163162908e360e11b815260040160405180910390fd5b60018210806106dc57506106d6600d600a613ade565b60ff1682115b156106fa57604051631cf6815760e31b815260040160405180910390fd5b6000610708600d6005613ade565b60ff1683111561071a57506007610751565b6000610727600d85613ab4565b11610733576001610736565b60025b60ff16610744600d85613b01565b61074e9190613b15565b90505b8067ffffffffffffffff81111561076a5761076a613b28565b6040519080825280602002602001820160405280156107af57816020015b60408051808201909152600080825260208201528152602001906001900390816107885790505b50915060006107bd86611f8d565b90508360006107cb87611ff4565b905060006107d9828461205d565b905060405180604001604052808561ffff16815260200182600c0b8152508660008151811061080a5761080a613b3e565b602090810291909101015260015b858110156108a957600061082b85612124565b90506108378186613b54565b945061084660ff821687613b6d565b9550610852848661217d565b61085c9084613b88565b925060405180604001604052808761ffff16815260200184600c0b81525088838151811061088c5761088c613b3e565b602002602001018190525050806108a290613bc1565b9050610818565b5050505050509392505050565b6000604051633ad830b160e21b815260040160405180910390fd5b6004805460408051630ecce30160e31b81529051600093610949936001600160a01b031692637667180892818301926020928290030181865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190613bda565b61ffff16611f32565b905090565b6000604051632a505d8560e21b815260040160405180910390fd5b6000818152600660205260409081902060035491516331a9108f60e11b815260048101849052339283916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156109c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e99190613bfe565b6001600160a01b031614610a105760405163335e79fb60e21b815260040160405180910390fd5b6004805460408051630ecce30160e31b815290516001600160a01b039092169263766718089282820192602092908290030181865afa158015610a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b9190613bda565b815461ffff91821691610a989160ff620100008204169116613b6d565b61ffff161115610abb5760405163c23d91cf60e01b815260040160405180910390fd5b610ac483612269565b600254815460405163a9059cbb60e01b81526001600160a01b03858116600483015263010000009092046001600160681b0316602482015291169063a9059cbb906044016020604051808303816000875af1158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190613c1b565b50805460405163010000009091046001600160681b031681526001600160a01b0383169084907f459d5aef2c549903c1eeb1736f5728845d5ccf82537ddd5bf8035795eee892639060200160405180910390a3505050565b6000828152600660205260408082208383529082208154339291908490610bd79060ff620100008204169061ffff16613b6d565b8254909150600090610bf69060ff620100008204169061ffff16613b6d565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c719190613bda565b610c7c906001613b6d565b6003546040516331a9108f60e11b8152600481018c90529192506001600160a01b0388811692911690636352211e90602401602060405180830381865afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef9190613bfe565b6001600160a01b031614610d165760405163335e79fb60e21b815260040160405180910390fd5b6003546040516331a9108f60e11b8152600481018a90526001600160a01b03888116921690636352211e90602401602060405180830381865afa158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d859190613bfe565b6001600160a01b031614610dac5760405163335e79fb60e21b815260040160405180910390fd5b8161ffff168361ffff161080610dca57508061ffff168361ffff1611155b15610de7576040516254c0a160e91b815260040160405180910390fd5b6000610df38285613c3d565b90508261ffff168461ffff1614610e4a578454630100000090046001600160681b031661ffff8381169085161115610e3b57610e3b8184610e348188613c3d565b60006122c3565b610e4881848460016122c3565b505b610e538a612269565b610e5c89612269565b84548654600091610e84916001600160681b0363010000009283900481169290910416613c58565b9050610e928884838561235f565b604080516001600160681b038416815260ff851660208201529081018290529099506001600160a01b038916908b908d907f2100e56b48f7fcd6ab7b9c2bb12f63ff1d7c1d0d8265c6e684dd07b303b562f09060600160405180910390a4505050505050505092915050565b60008381526006602052604080822060035491516331a9108f60e11b815260048101879052339283916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190613bfe565b6001600160a01b031614610fa45760405163335e79fb60e21b815260040160405180910390fd5b84158015610fb0575083155b15610fce57604051632a1a3ca760e11b815260040160405180910390fd5b6affffffffffffffffffffff851115610ffa5760405163162908e360e11b815260040160405180910390fd5b6000611007606487613ab4565b11156110265760405163162908e360e11b815260040160405180910390fd5b611032600d600a613ade565b60ff1684111561105557604051631cf6815760e31b815260040160405180910390fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190613bda565b6110d9906001613b6d565b82549091506000906110f89060ff620100008204169061ffff16613b6d565b905060006111398361ffff168361ffff161115611133578361ffff16888461ffff166111249190613b15565b61112e9190613c78565b612438565b87612438565b9050600d60ff8216101561116057604051631cf6815760e31b815260040160405180910390fd5b61116c600d6005613ade565b60ff168160ff161180156111915750611187600d600a613ade565b60ff168160ff1614155b156111af57604051631cf6815760e31b815260040160405180910390fd5b8354630100000090046001600160681b031660006111cd8a83613c58565b905088158015816111e05750898460ff16115b156111f4576111f48387610e348d88613b54565b6000816112015782611203565b8b5b905061121281888760016122c3565b505061121d8b612269565b6112298786838661235f565b975089156112b0576002546040516323b872dd60e01b81526001600160a01b038981166004830152306024830152604482018d9052909116906323b872dd906064016020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190613c1b565b505b604080518b81526001600160681b03831660208201529081018a905260ff84166060820152608081018990526001600160a01b038816908c907fcb22a70629d8c624d65b4359cbb5d63952c81d8a036e1e1c41c638ce16eceae99060a00160405180910390a3505050505050509392505050565b600061133083836114ab565b90505b92915050565b6004805460408051630ecce30160e31b815290516001600160a01b039092169263766718089282820192602092908290030181865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613bda565b61ffff168111156113c857604051630604170b60e21b815260040160405180910390fd5b80600754106113f95760075460405163acca0d9160e01b81526004016113f091815260200190565b60405180910390fd5b6007545b8181101561145e57611456611413826001613b15565b6114368361143060008051602061485a8339815191526001613b15565b90612499565b61144f60008051602061485a8339815191526001613b15565b91906124d7565b6001016113fd565b50600781905560405181907f1356e7f9e012a2125a584d468afd3bf6ed3f6f499741680831e1cfb88790a71290600090a250565b60405163468ec0b760e11b815260040160405180910390fd5b60006113308383612586565b600061133382600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115349190613bda565b61ffff166114ab565b6115456126c3565b61154f600061271d565b565b61154f600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190613bda565b61ffff16611339565b60015433906001600160a01b031681146116425760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016113f0565b61164b8161271d565b50565b600061133382611f32565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190613bda565b61ffff16905090565b600060405163a24e573d60e01b815260040160405180910390fd5b604051631c97e0a760e01b815260040160405180910390fd5b606060008267ffffffffffffffff81111561172c5761172c613b28565b604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b838110156117aa576117858686868481811061177957611779613b3e565b905060200201356114ab565b82828151811061179757611797613b3e565b602090810291909101015260010161175b565b50949350505050565b600060648310806117ce57506affffffffffffffffffffff83115b156117ec5760405163162908e360e11b815260040160405180910390fd5b60006117f9606485613ab4565b11156118185760405163162908e360e11b815260040160405180910390fd5b600d82101561183a57604051631cf6815760e31b815260040160405180910390fd5b611846600d6005613ade565b60ff1682118015611865575061185e600d600a613ade565b60ff168214155b1561188357604051631cf6815760e31b815260040160405180910390fd5b6004805460408051630ecce30160e31b8152905133936000936001600160a01b031692637667180892818301926020928290030181865afa1580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190613bda565b6118fb906001613b6d565b905061190a85828660016122c3565b6119168282878761235f565b6002546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018990529295509116906323b872dd906064016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613c1b565b5060408051868152602081018690526001600160a01b0384169185917ff234bd1a05f5a6f0b6af3f0c8bacad613635f0022e2ec2162717ef21a1591d6a910160405180910390a3505092915050565b606060008267ffffffffffffffff811115611a0157611a01613b28565b604051908082528060200260200182016040528015611a2a578160200160208202803683370190505b50905060005b83811015611a7e57611a59858583818110611a4d57611a4d613b3e565b90506020020135611f32565b828281518110611a6b57611a6b613b3e565b6020908102919091010152600101611a30565b509392505050565b600082815260066020526040808220805460035492516331a9108f60e11b815260048101879052849333939261ffff811692630100000082046001600160681b0316926201000090920460ff169186916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190613bfe565b6001600160a01b031614611b535760405163335e79fb60e21b815260040160405180910390fd5b87600003611b745760405163162908e360e11b815260040160405180910390fd5b816001600160681b03168810611b9d5760405163162908e360e11b815260040160405180910390fd5b6000611baa60648a613ab4565b1115611bc95760405163162908e360e11b815260040160405180910390fd5b611bd289612269565b611be78584611be18b86613c8b565b8461235f565b9650611bf585848a8461235f565b95506001600160a01b038516897f3e64b92abec16c720f9a9719b637576f719b7b85e62aa4c632fda977e65a5437611c2d8b86613c8b565b604080516001600160681b039092168252602082018d905281018b9052606081018a905260800160405180910390a350505050509250929050565b611c8160008051602061485a8339815191526001613b15565b81565b60606000611c9183612736565b611c9a84612767565b611cc585604051806040016040528060098152602001681d1a1d5b589b985a5b60ba1b815250612796565b611cf0866040518060400160405280600981526020016830b734b6b0ba34b7b760b91b815250612796565b611cf9876127de565b611d0161287a565b604051602001611d1696959493929190613cc7565b6040516020818303038152906040529050611d308161289b565b604051602001611d409190613df2565b604051602081830303815290604052915050919050565b611d5f6126c3565b600180546001600160a01b0383166001600160a01b03199091168117909155611d906000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600154600160a81b900460ff1615808015611dee575060018054600160a01b900460ff16105b80611e0e5750303b158015611e0e575060018054600160a01b900460ff16145b611e715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113f0565b6001805460ff60a01b1916600160a01b1790558015611e9e576001805460ff60a81b1916600160a81b1790555b600280546001600160a01b038088166001600160a01b031992831617909255600380548784169083161790556004805492861692909116919091179055611ee48261271d565b8015611f2b576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000611333826129ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061ffff821115611ff05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016113f0565b5090565b80600c81900b81146120585760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663034206269747360c81b60648201526084016113f0565b919050565b6000600d60ff831611612071575081611333565b61207d600d6002613ade565b60ff168260ff16116120a7576064612096846073613e37565b6120a09190613e57565b9050611333565b6120b3600d6003613ade565b60ff168260ff16116120cc576064612096846082613e37565b6120d8600d6004613ade565b60ff168260ff16116120f1576064612096846096613e37565b6120fd600d6005613ade565b60ff168260ff16116121165760646120968460af613e37565b60646120968461015e613e37565b6000612132600d6005613ade565b60ff168260ff1611156121555761214b600d6005613ade565b6113339083613b54565b6000612162600d84613e9b565b905060ff8116156121735780612176565b600d5b9392505050565b60008160ff16600003612193576120a083613ebd565b600d60ff8316116121b45760646121a984613ebd565b61209690600f613e37565b6121c0600d6002613ade565b60ff168260ff16116121d75760646121a984613ebd565b6121e3600d6003613ade565b60ff168260ff16116122055760646121fa84613ebd565b612096906014613e37565b612211600d6004613ade565b60ff168260ff161161223357606461222884613ebd565b612096906019613e37565b61223f600d6005613ade565b60ff168260ff161161226157606461225684613ebd565b6120969060af613e37565b506000611333565b600354604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156122af57600080fd5b505af1158015611f2b573d6000803e3d6000fd5b6000816122d2576000196122d5565b60015b6122e7866001600160681b0316611ff4565b6122f19190613e37565b90508261230661ffff8616611436848461205d565b60ff8116156123575761231881612124565b6123229082613b54565b90506123528160ff168560ff168761233a9190613b6d565b6123449190613c3d565b61ffff16611436848461217d565b612306565b505050505050565b600060056000815461237090613bc1565b918290555060008181526006602052604090819020805461ffff88166fffffffffffffffffffffffffff00ffff199091161763010000006001600160681b038816021762ff000019166201000060ff87160217815560035491516340c10f1960e01b81526001600160a01b038981166004830152602482018590529394509092909116906340c10f1990604401600060405180830381600087803b15801561241757600080fd5b505af115801561242b573d6000803e3d6000fd5b5050505050949350505050565b600060ff821115611ff05760405162461bcd60e51b815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2038604482015264206269747360d81b60648201526084016113f0565b6000806124a68484612a6d565b90506124b3600284613ab4565b156124c9578054600160681b9004600c0b6124cf565b8054600c0b5b949350505050565b60006124e38484612a6d565b90506124f0600284613ab4565b60000361253a5780548290829060009061250e908490600c0b613b88565b92506101000a8154816001600160681b030219169083600c0b6001600160681b03160217905550612580565b805482908290600d90612558908490600160681b9004600c0b613b88565b92506101000a8154816001600160681b030219169083600c0b6001600160681b031602179055505b50505050565b60008061259283611f8d565b6003546040516329e4eae360e01b81526001600160a01b03878116600483015261ffff84166024830152929350600092909116906329e4eae390604401600060405180830381865afa1580156125ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126149190810190613ee9565b80519091506000805b828110156126ab576126976006600086848151811061263e5761263e613b3e565b60209081029190910181015182528181019290925260409081016000208151606081018352905461ffff8116825262010000810460ff169382019390935263010000009092046001600160681b03169082015286612a85565b6126a19083613b88565b915060010161261d565b506126b881600c0b612b09565b979650505050505050565b6000546001600160a01b0316331461154f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016113f0565b600180546001600160a01b031916905561164b81611f3d565b606061274182612b5b565b6040516020016127519190613fa7565b6040516020818303038152906040529050919050565b606061277246612b5b565b61277b30612bee565b61278484612b5b565b60405160200161275193929190613feb565b60606127a146612b5b565b6127aa30612bee565b6127b385612b5b565b846040516020016127c7949392919061407c565b604051602081830303815290604052905092915050565b606060006127eb83612c04565b90506127fa8160200151612b5b565b8151612805906131db565b6128128360400151612b5b565b61281f8460600151612b5b565b61282c8560800151612b5b565b6128398660a00151612b5b565b8660c0015161284c88610100015161321f565b6128628960e001516001600160a01b0316612bee565b604051602001611d409998979695949392919061412a565b606060405180610120016040528060fd815260200161471d60fd9139905090565b606081516000036128ba57505060408051602081019091526000815290565b600060405180606001604052806040815260200161481a60409139905060006003845160026128e99190613b15565b6128f39190613b01565b6128fe906004614505565b67ffffffffffffffff81111561291657612916613b28565b6040519080825280601f01601f191660200182016040528015612940576020820181803683370190505b509050600182016020820185865187015b808210156129ac576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250612951565b50506003865106600181146129c857600281146129db576129e3565b603d6001830353603d60028303536129e3565b603d60018303535b509195945050505050565b60008160075410612a2157611333612a198361143060008051602061485a8339815191526001613b15565b600c0b612b09565b6007546000905b838111612a6057612a4c8161143060008051602061485a8339815191526001613b15565b612a569083613b88565b9150600101612a28565b5061217681600c0b612b09565b600080612a7b600284613b01565b6124cf9085613b15565b60008161ffff16836000015161ffff161115612aa357506000611333565b8161ffff16836020015160ff168460000151612abf9190613b6d565b61ffff1611612ad057506000611333565b611330612ae984604001516001600160681b0316611ff4565b8451612af59085613c3d565b8560200151612b049190613b54565b61205d565b600080821215611ff05760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f73697469766560448201526064016113f0565b60606000612b688361331e565b600101905060008167ffffffffffffffff811115612b8857612b88613b28565b6040519080825280601f01601f191660200182016040528015612bb2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612bbc57509392505050565b60606113336001600160a01b03831660146133f6565b612c776040805161018081019091526000610120820181815261014083018290526101608301919091528190815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b03168152602001606081525090565b6003546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015612cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce49190613bfe565b6001600160a01b0390811660e08301526000838152600660209081526040918290208251606081018452905461ffff8116825262010000810460ff1682840152630100000090046001600160681b0316818401819052855181905285516012930192909252600254855194169390920192909252825151909190612d7190670de0b6b3a764000090613b01565b602080850191909152820151612d8b9060ff16601c614505565b60808401526020820151600790604160ff90911611612def57600d8360200151612db5919061451c565b60ff1690506000600d8460200151612dcd9190613e9b565b60ff1611612ddc576001612ddf565b60025b612dec9060ff1682613b15565b90505b8067ffffffffffffffff811115612e0857612e08613b28565b604051908082528060200260200182016040528015612e5d57816020015b612e4a60405180606001604052806000815260200160008152602001606081525090565b815260200190600190039081612e265790505b50610100850152825160208085015160048054604080516358cc124560e01b81529051939460009485946001600160a01b03909416936358cc124593808201939291908290030181865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd919061453e565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166339c5ea9b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f58919061453e565b905060005b868110156130c2576000612f72600189613c78565b8214905083612f82600189613c3d565b61ffff16612f909190614505565b612f9a9084613b15565b8b61010001518381518110612fb157612fb1613b3e565b60209081029190910101515280612fd457612fcc898761205d565b600c0b612fd7565b60005b8b61010001518381518110612fee57612fee613b3e565b60200260200101516020018181525050806130115761300c86613592565b61302f565b6040518060400160405280600481526020016311183c1160e11b8152505b8b6101000151838151811061304657613046613b3e565b602002602001015160400181905250428b6101000151838151811061306d5761306d613b3e565b60200260200101516000015111613082578194505b806130b157600061309287612124565b90506130a160ff821689613b6d565b97506130ad8188613b54565b9650505b506130bb81613bc1565b9050612f5d565b508861010001516000815181106130db576130db613b3e565b60209081029190910101515160608a01526101008901516130fd600188613c78565b8151811061310d5761310d613b3e565b60209081029190910101515160a08a0152610100890151805160009061313557613135613b3e565b6020026020010151600001514210156131765760006040808b01919091528051808201909152600481526311183c1160e11b602082015260c08a01526131ce565b886101000151838151811061318d5761318d613b3e565b60200260200101516020015189604001818152505088610100015183815181106131b9576131b9613b3e565b6020026020010151604001518960c001819052505b5050505050505050919050565b60606131ea8260000151612b5b565b6131f78360200151612b5b565b61320d84604001516001600160a01b0316612bee565b60405160200161275193929190614557565b6040805180820190915260018152605b60f81b602082015260005b825181101561330c57801561326c578160405160200161325a9190614609565b60405160208183030381529060405291505b8161329384838151811061328257613282613b3e565b602002602001015160000151612b5b565b6132b98584815181106132a8576132a8613b3e565b602002602001015160200151612b5b565b8584815181106132cb576132cb613b3e565b6020026020010151604001516040516020016132ea949392919061462e565b60405160208183030381529060405291508061330590613bc1565b905061323a565b508060405160200161275191906146e0565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061335d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613389576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106133a757662386f26fc10000830492506010015b6305f5e10083106133bf576305f5e100830492506008015b61271083106133d357612710830492506004015b606483106133e5576064830492506002015b600a83106113335760010192915050565b60606000613405836002614505565b613410906002613b15565b67ffffffffffffffff81111561342857613428613b28565b6040519080825280601f01601f191660200182016040528015613452576020820181803683370190505b509050600360fc1b8160008151811061346d5761346d613b3e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061349c5761349c613b3e565b60200101906001600160f81b031916908160001a90535060006134c0846002614505565b6134cb906001613b15565b90505b6001811115613543576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134ff576134ff613b3e565b1a60f81b82828151811061351557613515613b3e565b60200101906001600160f81b031916908160001a90535060049490941c9361353c81614705565b90506134ce565b5083156113305760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113f0565b6060600d60ff8316116135c1575050604080518082019091526006815265111897183c1160d11b602082015290565b6135cd600d6002613ade565b60ff168260ff16116135fc575050604080518082019091526007815266111897189abc1160c91b602082015290565b613608600d6003613ade565b60ff168260ff161161363657505060408051808201909152600681526511189719bc1160d11b602082015290565b613642600d6004613ade565b60ff168260ff16116136705750506040805180820190915260068152651118971abc1160d11b602082015290565b61367c600d6005613ade565b60ff168260ff16116136ab5750506040805180820190915260078152661118971b9abc1160c91b602082015290565b50506040805180820190915260068152651119971abc1160d11b602082015290565b6000806000606084860312156136e257600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b82811015613742578151805161ffff168552860151600c0b868501529284019290850190600101613716565b5091979650505050505050565b60005b8381101561376a578181015183820152602001613752565b50506000910152565b602081526000825180602084015261379281604085016020870161374f565b601f01601f19169190910160400192915050565b6001600160a01b038116811461164b57600080fd5b600080604083850312156137ce57600080fd5b82356137d9816137a6565b946020939093013593505050565b6000806000606084860312156137fc57600080fd5b8335613807816137a6565b92506020840135613817816137a6565b929592945050506040919091013590565b60006020828403121561383a57600080fd5b5035919050565b6000806040838503121561385457600080fd5b50508035926020909101359150565b60006020828403121561387557600080fd5b8135611330816137a6565b60008060008060008060c0878903121561389957600080fd5b86356138a4816137a6565b95506020870135945060408701359350606087013560ff811681146138c857600080fd5b9598949750929560808101359460a0909101359350915050565b60008083601f8401126138f457600080fd5b50813567ffffffffffffffff81111561390c57600080fd5b6020830191508360208260051b850101111561392757600080fd5b9250929050565b60008060006040848603121561394357600080fd5b833561394e816137a6565b9250602084013567ffffffffffffffff81111561396a57600080fd5b613976868287016138e2565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156139bb5783518352928401929184019160010161399f565b50909695505050505050565b600080602083850312156139da57600080fd5b823567ffffffffffffffff8111156139f157600080fd5b6139fd858286016138e2565b90969095509350505050565b60008060408385031215613a1c57600080fd5b8235613a27816137a6565b91506020830135613a37816137a6565b809150509250929050565b60008060008060808587031215613a5857600080fd5b8435613a63816137a6565b93506020850135613a73816137a6565b92506040850135613a83816137a6565b91506060850135613a93816137a6565b939692955090935050565b634e487b7160e01b600052601260045260246000fd5b600082613ac357613ac3613a9e565b500690565b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160290811690818114613afa57613afa613ac8565b5092915050565b600082613b1057613b10613a9e565b500490565b8082018082111561133357611333613ac8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60ff828116828216039081111561133357611333613ac8565b61ffff818116838216019080821115613afa57613afa613ac8565b600c81810b9083900b016c7fffffffffffffffffffffffff81136c7fffffffffffffffffffffffff198212171561133357611333613ac8565b600060018201613bd357613bd3613ac8565b5060010190565b600060208284031215613bec57600080fd5b815161ffff8116811461133057600080fd5b600060208284031215613c1057600080fd5b8151611330816137a6565b600060208284031215613c2d57600080fd5b8151801515811461133057600080fd5b61ffff828116828216039080821115613afa57613afa613ac8565b6001600160681b03818116838216019080821115613afa57613afa613ac8565b8181038181111561133357611333613ac8565b6001600160681b03828116828216039080821115613afa57613afa613ac8565b60008151613cbd81856020860161374f565b9290920192915050565b673d913730b6b2911d60c11b81528651600090613ceb816008850160208c0161374f565b600b60fa1b6008918401918201526e1132bc3a32b93730b62fbab936111d60891b60098201528751613d24816018840160208c0161374f565b01613d3560188201600b60fa1b9052565b671134b6b0b3b2911d60c11b6019820152613d536021820188613cab565b600b60fa1b815290506f1130b734b6b0ba34b7b72fbab936111d60811b6001820152613d826011820187613cab565b600b60fa1b815290506c1130ba3a3934b13aba32b9911d60991b6001820152613dae600e820186613cab565b600b60fa1b815290506d113232b9b1b934b83a34b7b7111d60911b6001820152613ddb600f820185613cab565b607d60f81b81526001019998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613e2a81601d85016020870161374f565b91909101601d0192915050565b600082600c0b82600c0b0280600c0b9150808214613afa57613afa613ac8565b600081600c0b83600c0b80613e6e57613e6e613a9e565b6c7fffffffffffffffffffffffff19821460001982141615613e9257613e92613ac8565b90059392505050565b600060ff831680613eae57613eae613a9e565b8060ff84160691505092915050565b600081600c0b6c7fffffffffffffffffffffffff198103613ee057613ee0613ac8565b60000392915050565b60006020808385031215613efc57600080fd5b825167ffffffffffffffff80821115613f1457600080fd5b818501915085601f830112613f2857600080fd5b815181811115613f3a57613f3a613b28565b8060051b604051601f19603f83011681018181108582111715613f5f57613f5f613b28565b604052918252848201925083810185019188831115613f7d57600080fd5b938501935b82851015613f9b57845184529385019392850192613f82565b98975050505050505050565b6f2250574e2044414f205374616b65202360801b81528151600090613fd381601085016020870161374f565b601160f91b6010939091019283015250601101919050565b7f2268747470733a2f2f6170702e70776e2e78797a2f232f61737365742f00000081526000845161402381601d85016020890161374f565b8083019050602f60f81b80601d830152855161404681601e850160208a0161374f565b601e920191820152835161406181601f84016020880161374f565b601160f91b601f929091019182015260200195945050505050565b7f2268747470733a2f2f6170692d64616f2e70776e2e78797a2f737470776e2f0081526000855160206140b582601f8601838b0161374f565b8184019150602f60f81b80601f84015287516140d681848601858c0161374f565b808401935050808284015286516140f38160218601858b0161374f565b6021930192830152845161410d816022850184890161374f565b601160f91b60229390910192830152506023019695505050505050565b7f5b7b2274726169745f74797065223a225374616b6564202450574e20666f726d81527f6174746564222c22646973706c61795f74797065223a226e756d626572222c226020820152663b30b63ab2911d60c91b60408201526000614192604783018c613cab565b611f4b60f21b815260026141fa6141f48284017f7b2274726169745f74797065223a225374616b6564202450574e222c2264697381527f706c61795f74797065223a226f626a656374222c2276616c7565223a000000006020820152603c0190565b8d613cab565b611f4b60f21b8152915061425b6142558284017f7b2274726169745f74797065223a22506f776572222c22646973706c61795f748152753cb832911d11373ab6b132b91116113b30b63ab2911d60511b602082015260360190565b8c613cab565b611f4b60f21b815291506142c36142bd8284017f7b2274726169745f74797065223a225374616b65205374617274222c2264697381527f706c61795f74797065223a2264617465222c2276616c7565223a0000000000006020820152603a0190565b8b613cab565b611f4b60f21b8152915061433561432f8284017f7b2274726169745f74797065223a224c6f636b205570204475726174696f6e2281527f2c22646973706c61795f74797065223a226e756d626572222c2276616c7565226020820152601d60f91b604082015260410190565b8a613cab565b611f4b60f21b8152915061439d6143978284017f7b2274726169745f74797065223a22556e6c6f636b2044617465222c2264697381527f706c61795f74797065223a2264617465222c2276616c7565223a0000000000006020820152603a0190565b89613cab565b611f4b60f21b8152915061441161440b8284017f7b2274726169745f74797065223a2243757272656e74204d756c7469706c696581527f72222c22646973706c61795f74797065223a22737472696e67222c2276616c7560208201526232911d60e91b604082015260430190565b88613cab565b611f4b60f21b815291506144796144738284017f7b2274726169745f74797065223a22506f776572204368616e676573222c226481527f6973706c61795f74797065223a226f626a656374222c2276616c7565223a00006020820152603e0190565b87613cab565b611f4b60f21b815291506144e16144db8284017f7b2274726169745f74797065223a224f776e6572222c22646973706c61795f7481527f797065223a22737472696e67222c2276616c7565223a22000000000000000000602082015260370190565b86613cab565b9150506144f38162227d5d60e81b9052565b6003019b9a5050505050505050505050565b808202811582820484141761133357611333613ac8565b600060ff83168061452f5761452f613a9e565b8060ff84160491505092915050565b60006020828403121561455057600080fd5b5051919050565b693d9130b6b7bab73a111d60b11b8152835160009061457d81600a85016020890161374f565b600b60fa1b600a9184019182018190526a113232b1b4b6b0b639911d60a91b600b83015285516145b4816016850160208a0161374f565b60169201918201527411383bb72fba37b5b2b72fb0b2323932b9b9911d1160591b601782015283516145ed81602c84016020880161374f565b61227d60f01b602c9290910191820152602e0195945050505050565b6000825161461b81846020870161374f565b600b60fa1b920191825250600101919050565b60008551614640818460208a0161374f565b6d3d9139ba30b93a2fb230ba32911d60911b908301908152855161466b81600e840160208a0161374f565b6816113837bbb2b9111d60b91b600e9290910191820152845161469581601784016020890161374f565b6d161136bab63a34b83634b2b9111d60911b6017929091019182015283516146c481602584016020880161374f565b607d60f81b602592909101918201526026019695505050505050565b600082516146f281846020870161374f565b605d60f81b920191825250600101919050565b60008161471457614714613ac8565b50600019019056fe2254686973204e4654206973206120726570726573656e746174696f6e206f6620612050574e2044414f207374616b652e205374616b65206f776e657273686970206772616e747320697473206f776e657220706f77657220696e207468652050574e2044414f2e2054686520706f7765722069732064657465726d696e65642062792074686520616d6f756e74206f662050574e20746f6b656e73207374616b656420616e64207468652072656d61696e696e67206c6f636b757020706572696f642e2054686520706f77657220646563726561736573206f7665722074696d6520756e74696c20746865206c6f636b7570206973206f7665722e224142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f920c353e14947c4dbbef6103c601d908b93371995902e76fd01b61e605e633fda2646970667358221220f2a70b4d1ab1ae02247fedf2e904fa99abdaec91a334e45101d27ca5d06f60c064736f6c63430008120033",
    "sourceMap": "682:1752:55:-:0;;;1041:97;;;;;;;;;-1:-1:-1;936:32:21;719:10:43;936:18:21;:32::i;:::-;682:1752:55;;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;682:1752:55:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106102745760003560e01c80638da5cb5b11610151578063d5a44f86116100c3578063e2df21b211610087578063e2df21b21461060d578063e30c397814610615578063e959319f14610626578063f2fde38b14610639578063f8c8765e1461064c578063fe7f0e8b1461065f57600080fd5b8063d5a44f861461053e578063d7fa023d146105a9578063dbeb5a37146105bc578063dc310451146105cf578063dd62ed3e146105f757600080fd5b80639ab24eb0116101155780639ab24eb0146104325780639cf9a327146104dc578063a54244b2146104ef578063a9059cbb146104f8578063c3cda5201461050b578063ce127aa31461051e57600080fd5b80638da5cb5b146104655780638e539e8c1461047657806391ddadf4146104895780639350039b146104a857806395d89b41146104bb57600080fd5b80634bf5d7e9116101ea57806368ed223e116101ae57806368ed223e1461041f57806370a0823114610432578063715018a61461044557806371fc49b51461044d57806377a4e5981461045557806379ba50971461045d57600080fd5b80634bf5d7e914610390578063510d3ee6146103ba578063587cde1e146103cd5780635c19a95c146103f9578063681100111461040c57600080fd5b806324a4afd51161023c57806324a4afd51461032457806325d5971f1461032d5780632ee293dc14610342578063313ce56714610355578063351383821461036a5780633a46b1a81461037d57600080fd5b806302aedf3c1461027957806306fdde03146102a2578063095ea7b3146102d857806318160ddd146102fb57806323b872dd14610311575b600080fd5b61028c6102873660046136cd565b610672565b60405161029991906136f9565b60405180910390f35b6040805180820190915260118152702b37ba3296b2b9b1b937bbb2b210282ba760791b60208201525b6040516102999190613773565b6102eb6102e63660046137bb565b6108b6565b6040519015158152602001610299565b6103036108d1565b604051908152602001610299565b6102eb61031f3660046137e7565b61094e565b61030360055481565b61034061033b366004613828565b610969565b005b610303610350366004613841565b610ba3565b60125b60405160ff9091168152602001610299565b6103036103783660046136cd565b610efe565b61030361038b3660046137bb565b611324565b60408051808201909152600e81526d0dadec8ca7ae0eedc5acae0dec6d60931b60208201526102cb565b6103406103c8366004613828565b611339565b6103e16103db366004613863565b50600090565b6040516001600160a01b039091168152602001610299565b610340610407366004613863565b611492565b6002546103e1906001600160a01b031681565b61030361042d3660046137bb565b6114ab565b610303610440366004613863565b6114b7565b61034061153d565b610358600d81565b610340611551565b6103406115d4565b6000546001600160a01b03166103e1565b610303610484366004613828565b61164e565b610491611659565b60405165ffffffffffff9091168152602001610299565b6003546103e1906001600160a01b031681565b6040805180820190915260058152643b32a82ba760d91b60208201526102cb565b6004546103e1906001600160a01b031681565b61030360075481565b6102eb6105063660046137bb565b6116db565b610340610519366004613880565b6116f6565b61053161052c36600461392e565b61170f565b6040516102999190613983565b61057e61054c366004613828565b60066020526000908152604090205461ffff81169062010000810460ff1690630100000090046001600160681b031683565b6040805161ffff909416845260ff90921660208401526001600160681b031690820152606001610299565b6103036105b7366004613841565b6117b3565b6105316105ca3660046139c7565b6119e4565b6105e26105dd366004613841565b611a86565b60408051928352602083019190915201610299565b610303610605366004613a09565b600092915050565b610303611c68565b6001546001600160a01b03166103e1565b6102cb610634366004613828565b611c84565b610340610647366004613863565b611d57565b61034061065a366004613a42565b611dc8565b61030361066d366004613828565b611f32565b6060606483108061068d5750600061068b606485613ab4565b115b806106a257506affffffffffffffffffffff83115b156106c05760405163162908e360e11b815260040160405180910390fd5b60018210806106dc57506106d6600d600a613ade565b60ff1682115b156106fa57604051631cf6815760e31b815260040160405180910390fd5b6000610708600d6005613ade565b60ff1683111561071a57506007610751565b6000610727600d85613ab4565b11610733576001610736565b60025b60ff16610744600d85613b01565b61074e9190613b15565b90505b8067ffffffffffffffff81111561076a5761076a613b28565b6040519080825280602002602001820160405280156107af57816020015b60408051808201909152600080825260208201528152602001906001900390816107885790505b50915060006107bd86611f8d565b90508360006107cb87611ff4565b905060006107d9828461205d565b905060405180604001604052808561ffff16815260200182600c0b8152508660008151811061080a5761080a613b3e565b602090810291909101015260015b858110156108a957600061082b85612124565b90506108378186613b54565b945061084660ff821687613b6d565b9550610852848661217d565b61085c9084613b88565b925060405180604001604052808761ffff16815260200184600c0b81525088838151811061088c5761088c613b3e565b602002602001018190525050806108a290613bc1565b9050610818565b5050505050509392505050565b6000604051633ad830b160e21b815260040160405180910390fd5b6004805460408051630ecce30160e31b81529051600093610949936001600160a01b031692637667180892818301926020928290030181865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190613bda565b61ffff16611f32565b905090565b6000604051632a505d8560e21b815260040160405180910390fd5b6000818152600660205260409081902060035491516331a9108f60e11b815260048101849052339283916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156109c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e99190613bfe565b6001600160a01b031614610a105760405163335e79fb60e21b815260040160405180910390fd5b6004805460408051630ecce30160e31b815290516001600160a01b039092169263766718089282820192602092908290030181865afa158015610a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b9190613bda565b815461ffff91821691610a989160ff620100008204169116613b6d565b61ffff161115610abb5760405163c23d91cf60e01b815260040160405180910390fd5b610ac483612269565b600254815460405163a9059cbb60e01b81526001600160a01b03858116600483015263010000009092046001600160681b0316602482015291169063a9059cbb906044016020604051808303816000875af1158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190613c1b565b50805460405163010000009091046001600160681b031681526001600160a01b0383169084907f459d5aef2c549903c1eeb1736f5728845d5ccf82537ddd5bf8035795eee892639060200160405180910390a3505050565b6000828152600660205260408082208383529082208154339291908490610bd79060ff620100008204169061ffff16613b6d565b8254909150600090610bf69060ff620100008204169061ffff16613b6d565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c719190613bda565b610c7c906001613b6d565b6003546040516331a9108f60e11b8152600481018c90529192506001600160a01b0388811692911690636352211e90602401602060405180830381865afa158015610ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cef9190613bfe565b6001600160a01b031614610d165760405163335e79fb60e21b815260040160405180910390fd5b6003546040516331a9108f60e11b8152600481018a90526001600160a01b03888116921690636352211e90602401602060405180830381865afa158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d859190613bfe565b6001600160a01b031614610dac5760405163335e79fb60e21b815260040160405180910390fd5b8161ffff168361ffff161080610dca57508061ffff168361ffff1611155b15610de7576040516254c0a160e91b815260040160405180910390fd5b6000610df38285613c3d565b90508261ffff168461ffff1614610e4a578454630100000090046001600160681b031661ffff8381169085161115610e3b57610e3b8184610e348188613c3d565b60006122c3565b610e4881848460016122c3565b505b610e538a612269565b610e5c89612269565b84548654600091610e84916001600160681b0363010000009283900481169290910416613c58565b9050610e928884838561235f565b604080516001600160681b038416815260ff851660208201529081018290529099506001600160a01b038916908b908d907f2100e56b48f7fcd6ab7b9c2bb12f63ff1d7c1d0d8265c6e684dd07b303b562f09060600160405180910390a4505050505050505092915050565b60008381526006602052604080822060035491516331a9108f60e11b815260048101879052339283916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190613bfe565b6001600160a01b031614610fa45760405163335e79fb60e21b815260040160405180910390fd5b84158015610fb0575083155b15610fce57604051632a1a3ca760e11b815260040160405180910390fd5b6affffffffffffffffffffff851115610ffa5760405163162908e360e11b815260040160405180910390fd5b6000611007606487613ab4565b11156110265760405163162908e360e11b815260040160405180910390fd5b611032600d600a613ade565b60ff1684111561105557604051631cf6815760e31b815260040160405180910390fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190613bda565b6110d9906001613b6d565b82549091506000906110f89060ff620100008204169061ffff16613b6d565b905060006111398361ffff168361ffff161115611133578361ffff16888461ffff166111249190613b15565b61112e9190613c78565b612438565b87612438565b9050600d60ff8216101561116057604051631cf6815760e31b815260040160405180910390fd5b61116c600d6005613ade565b60ff168160ff161180156111915750611187600d600a613ade565b60ff168160ff1614155b156111af57604051631cf6815760e31b815260040160405180910390fd5b8354630100000090046001600160681b031660006111cd8a83613c58565b905088158015816111e05750898460ff16115b156111f4576111f48387610e348d88613b54565b6000816112015782611203565b8b5b905061121281888760016122c3565b505061121d8b612269565b6112298786838661235f565b975089156112b0576002546040516323b872dd60e01b81526001600160a01b038981166004830152306024830152604482018d9052909116906323b872dd906064016020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190613c1b565b505b604080518b81526001600160681b03831660208201529081018a905260ff84166060820152608081018990526001600160a01b038816908c907fcb22a70629d8c624d65b4359cbb5d63952c81d8a036e1e1c41c638ce16eceae99060a00160405180910390a3505050505050509392505050565b600061133083836114ab565b90505b92915050565b6004805460408051630ecce30160e31b815290516001600160a01b039092169263766718089282820192602092908290030181865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613bda565b61ffff168111156113c857604051630604170b60e21b815260040160405180910390fd5b80600754106113f95760075460405163acca0d9160e01b81526004016113f091815260200190565b60405180910390fd5b6007545b8181101561145e57611456611413826001613b15565b6114368361143060008051602061485a8339815191526001613b15565b90612499565b61144f60008051602061485a8339815191526001613b15565b91906124d7565b6001016113fd565b50600781905560405181907f1356e7f9e012a2125a584d468afd3bf6ed3f6f499741680831e1cfb88790a71290600090a250565b60405163468ec0b760e11b815260040160405180910390fd5b60006113308383612586565b600061133382600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115349190613bda565b61ffff166114ab565b6115456126c3565b61154f600061271d565b565b61154f600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb9190613bda565b61ffff16611339565b60015433906001600160a01b031681146116425760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016113f0565b61164b8161271d565b50565b600061133382611f32565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190613bda565b61ffff16905090565b600060405163a24e573d60e01b815260040160405180910390fd5b604051631c97e0a760e01b815260040160405180910390fd5b606060008267ffffffffffffffff81111561172c5761172c613b28565b604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b838110156117aa576117858686868481811061177957611779613b3e565b905060200201356114ab565b82828151811061179757611797613b3e565b602090810291909101015260010161175b565b50949350505050565b600060648310806117ce57506affffffffffffffffffffff83115b156117ec5760405163162908e360e11b815260040160405180910390fd5b60006117f9606485613ab4565b11156118185760405163162908e360e11b815260040160405180910390fd5b600d82101561183a57604051631cf6815760e31b815260040160405180910390fd5b611846600d6005613ade565b60ff1682118015611865575061185e600d600a613ade565b60ff168214155b1561188357604051631cf6815760e31b815260040160405180910390fd5b6004805460408051630ecce30160e31b8152905133936000936001600160a01b031692637667180892818301926020928290030181865afa1580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190613bda565b6118fb906001613b6d565b905061190a85828660016122c3565b6119168282878761235f565b6002546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018990529295509116906323b872dd906064016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613c1b565b5060408051868152602081018690526001600160a01b0384169185917ff234bd1a05f5a6f0b6af3f0c8bacad613635f0022e2ec2162717ef21a1591d6a910160405180910390a3505092915050565b606060008267ffffffffffffffff811115611a0157611a01613b28565b604051908082528060200260200182016040528015611a2a578160200160208202803683370190505b50905060005b83811015611a7e57611a59858583818110611a4d57611a4d613b3e565b90506020020135611f32565b828281518110611a6b57611a6b613b3e565b6020908102919091010152600101611a30565b509392505050565b600082815260066020526040808220805460035492516331a9108f60e11b815260048101879052849333939261ffff811692630100000082046001600160681b0316926201000090920460ff169186916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190613bfe565b6001600160a01b031614611b535760405163335e79fb60e21b815260040160405180910390fd5b87600003611b745760405163162908e360e11b815260040160405180910390fd5b816001600160681b03168810611b9d5760405163162908e360e11b815260040160405180910390fd5b6000611baa60648a613ab4565b1115611bc95760405163162908e360e11b815260040160405180910390fd5b611bd289612269565b611be78584611be18b86613c8b565b8461235f565b9650611bf585848a8461235f565b95506001600160a01b038516897f3e64b92abec16c720f9a9719b637576f719b7b85e62aa4c632fda977e65a5437611c2d8b86613c8b565b604080516001600160681b039092168252602082018d905281018b9052606081018a905260800160405180910390a350505050509250929050565b611c8160008051602061485a8339815191526001613b15565b81565b60606000611c9183612736565b611c9a84612767565b611cc585604051806040016040528060098152602001681d1a1d5b589b985a5b60ba1b815250612796565b611cf0866040518060400160405280600981526020016830b734b6b0ba34b7b760b91b815250612796565b611cf9876127de565b611d0161287a565b604051602001611d1696959493929190613cc7565b6040516020818303038152906040529050611d308161289b565b604051602001611d409190613df2565b604051602081830303815290604052915050919050565b611d5f6126c3565b600180546001600160a01b0383166001600160a01b03199091168117909155611d906000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600154600160a81b900460ff1615808015611dee575060018054600160a01b900460ff16105b80611e0e5750303b158015611e0e575060018054600160a01b900460ff16145b611e715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113f0565b6001805460ff60a01b1916600160a01b1790558015611e9e576001805460ff60a81b1916600160a81b1790555b600280546001600160a01b038088166001600160a01b031992831617909255600380548784169083161790556004805492861692909116919091179055611ee48261271d565b8015611f2b576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000611333826129ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061ffff821115611ff05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016113f0565b5090565b80600c81900b81146120585760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663034206269747360c81b60648201526084016113f0565b919050565b6000600d60ff831611612071575081611333565b61207d600d6002613ade565b60ff168260ff16116120a7576064612096846073613e37565b6120a09190613e57565b9050611333565b6120b3600d6003613ade565b60ff168260ff16116120cc576064612096846082613e37565b6120d8600d6004613ade565b60ff168260ff16116120f1576064612096846096613e37565b6120fd600d6005613ade565b60ff168260ff16116121165760646120968460af613e37565b60646120968461015e613e37565b6000612132600d6005613ade565b60ff168260ff1611156121555761214b600d6005613ade565b6113339083613b54565b6000612162600d84613e9b565b905060ff8116156121735780612176565b600d5b9392505050565b60008160ff16600003612193576120a083613ebd565b600d60ff8316116121b45760646121a984613ebd565b61209690600f613e37565b6121c0600d6002613ade565b60ff168260ff16116121d75760646121a984613ebd565b6121e3600d6003613ade565b60ff168260ff16116122055760646121fa84613ebd565b612096906014613e37565b612211600d6004613ade565b60ff168260ff161161223357606461222884613ebd565b612096906019613e37565b61223f600d6005613ade565b60ff168260ff161161226157606461225684613ebd565b6120969060af613e37565b506000611333565b600354604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156122af57600080fd5b505af1158015611f2b573d6000803e3d6000fd5b6000816122d2576000196122d5565b60015b6122e7866001600160681b0316611ff4565b6122f19190613e37565b90508261230661ffff8616611436848461205d565b60ff8116156123575761231881612124565b6123229082613b54565b90506123528160ff168560ff168761233a9190613b6d565b6123449190613c3d565b61ffff16611436848461217d565b612306565b505050505050565b600060056000815461237090613bc1565b918290555060008181526006602052604090819020805461ffff88166fffffffffffffffffffffffffff00ffff199091161763010000006001600160681b038816021762ff000019166201000060ff87160217815560035491516340c10f1960e01b81526001600160a01b038981166004830152602482018590529394509092909116906340c10f1990604401600060405180830381600087803b15801561241757600080fd5b505af115801561242b573d6000803e3d6000fd5b5050505050949350505050565b600060ff821115611ff05760405162461bcd60e51b815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2038604482015264206269747360d81b60648201526084016113f0565b6000806124a68484612a6d565b90506124b3600284613ab4565b156124c9578054600160681b9004600c0b6124cf565b8054600c0b5b949350505050565b60006124e38484612a6d565b90506124f0600284613ab4565b60000361253a5780548290829060009061250e908490600c0b613b88565b92506101000a8154816001600160681b030219169083600c0b6001600160681b03160217905550612580565b805482908290600d90612558908490600160681b9004600c0b613b88565b92506101000a8154816001600160681b030219169083600c0b6001600160681b031602179055505b50505050565b60008061259283611f8d565b6003546040516329e4eae360e01b81526001600160a01b03878116600483015261ffff84166024830152929350600092909116906329e4eae390604401600060405180830381865afa1580156125ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126149190810190613ee9565b80519091506000805b828110156126ab576126976006600086848151811061263e5761263e613b3e565b60209081029190910181015182528181019290925260409081016000208151606081018352905461ffff8116825262010000810460ff169382019390935263010000009092046001600160681b03169082015286612a85565b6126a19083613b88565b915060010161261d565b506126b881600c0b612b09565b979650505050505050565b6000546001600160a01b0316331461154f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016113f0565b600180546001600160a01b031916905561164b81611f3d565b606061274182612b5b565b6040516020016127519190613fa7565b6040516020818303038152906040529050919050565b606061277246612b5b565b61277b30612bee565b61278484612b5b565b60405160200161275193929190613feb565b60606127a146612b5b565b6127aa30612bee565b6127b385612b5b565b846040516020016127c7949392919061407c565b604051602081830303815290604052905092915050565b606060006127eb83612c04565b90506127fa8160200151612b5b565b8151612805906131db565b6128128360400151612b5b565b61281f8460600151612b5b565b61282c8560800151612b5b565b6128398660a00151612b5b565b8660c0015161284c88610100015161321f565b6128628960e001516001600160a01b0316612bee565b604051602001611d409998979695949392919061412a565b606060405180610120016040528060fd815260200161471d60fd9139905090565b606081516000036128ba57505060408051602081019091526000815290565b600060405180606001604052806040815260200161481a60409139905060006003845160026128e99190613b15565b6128f39190613b01565b6128fe906004614505565b67ffffffffffffffff81111561291657612916613b28565b6040519080825280601f01601f191660200182016040528015612940576020820181803683370190505b509050600182016020820185865187015b808210156129ac576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250612951565b50506003865106600181146129c857600281146129db576129e3565b603d6001830353603d60028303536129e3565b603d60018303535b509195945050505050565b60008160075410612a2157611333612a198361143060008051602061485a8339815191526001613b15565b600c0b612b09565b6007546000905b838111612a6057612a4c8161143060008051602061485a8339815191526001613b15565b612a569083613b88565b9150600101612a28565b5061217681600c0b612b09565b600080612a7b600284613b01565b6124cf9085613b15565b60008161ffff16836000015161ffff161115612aa357506000611333565b8161ffff16836020015160ff168460000151612abf9190613b6d565b61ffff1611612ad057506000611333565b611330612ae984604001516001600160681b0316611ff4565b8451612af59085613c3d565b8560200151612b049190613b54565b61205d565b600080821215611ff05760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f73697469766560448201526064016113f0565b60606000612b688361331e565b600101905060008167ffffffffffffffff811115612b8857612b88613b28565b6040519080825280601f01601f191660200182016040528015612bb2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612bbc57509392505050565b60606113336001600160a01b03831660146133f6565b612c776040805161018081019091526000610120820181815261014083018290526101608301919091528190815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b03168152602001606081525090565b6003546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015612cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce49190613bfe565b6001600160a01b0390811660e08301526000838152600660209081526040918290208251606081018452905461ffff8116825262010000810460ff1682840152630100000090046001600160681b0316818401819052855181905285516012930192909252600254855194169390920192909252825151909190612d7190670de0b6b3a764000090613b01565b602080850191909152820151612d8b9060ff16601c614505565b60808401526020820151600790604160ff90911611612def57600d8360200151612db5919061451c565b60ff1690506000600d8460200151612dcd9190613e9b565b60ff1611612ddc576001612ddf565b60025b612dec9060ff1682613b15565b90505b8067ffffffffffffffff811115612e0857612e08613b28565b604051908082528060200260200182016040528015612e5d57816020015b612e4a60405180606001604052806000815260200160008152602001606081525090565b815260200190600190039081612e265790505b50610100850152825160208085015160048054604080516358cc124560e01b81529051939460009485946001600160a01b03909416936358cc124593808201939291908290030181865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd919061453e565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166339c5ea9b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f58919061453e565b905060005b868110156130c2576000612f72600189613c78565b8214905083612f82600189613c3d565b61ffff16612f909190614505565b612f9a9084613b15565b8b61010001518381518110612fb157612fb1613b3e565b60209081029190910101515280612fd457612fcc898761205d565b600c0b612fd7565b60005b8b61010001518381518110612fee57612fee613b3e565b60200260200101516020018181525050806130115761300c86613592565b61302f565b6040518060400160405280600481526020016311183c1160e11b8152505b8b6101000151838151811061304657613046613b3e565b602002602001015160400181905250428b6101000151838151811061306d5761306d613b3e565b60200260200101516000015111613082578194505b806130b157600061309287612124565b90506130a160ff821689613b6d565b97506130ad8188613b54565b9650505b506130bb81613bc1565b9050612f5d565b508861010001516000815181106130db576130db613b3e565b60209081029190910101515160608a01526101008901516130fd600188613c78565b8151811061310d5761310d613b3e565b60209081029190910101515160a08a0152610100890151805160009061313557613135613b3e565b6020026020010151600001514210156131765760006040808b01919091528051808201909152600481526311183c1160e11b602082015260c08a01526131ce565b886101000151838151811061318d5761318d613b3e565b60200260200101516020015189604001818152505088610100015183815181106131b9576131b9613b3e565b6020026020010151604001518960c001819052505b5050505050505050919050565b60606131ea8260000151612b5b565b6131f78360200151612b5b565b61320d84604001516001600160a01b0316612bee565b60405160200161275193929190614557565b6040805180820190915260018152605b60f81b602082015260005b825181101561330c57801561326c578160405160200161325a9190614609565b60405160208183030381529060405291505b8161329384838151811061328257613282613b3e565b602002602001015160000151612b5b565b6132b98584815181106132a8576132a8613b3e565b602002602001015160200151612b5b565b8584815181106132cb576132cb613b3e565b6020026020010151604001516040516020016132ea949392919061462e565b60405160208183030381529060405291508061330590613bc1565b905061323a565b508060405160200161275191906146e0565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061335d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613389576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106133a757662386f26fc10000830492506010015b6305f5e10083106133bf576305f5e100830492506008015b61271083106133d357612710830492506004015b606483106133e5576064830492506002015b600a83106113335760010192915050565b60606000613405836002614505565b613410906002613b15565b67ffffffffffffffff81111561342857613428613b28565b6040519080825280601f01601f191660200182016040528015613452576020820181803683370190505b509050600360fc1b8160008151811061346d5761346d613b3e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061349c5761349c613b3e565b60200101906001600160f81b031916908160001a90535060006134c0846002614505565b6134cb906001613b15565b90505b6001811115613543576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134ff576134ff613b3e565b1a60f81b82828151811061351557613515613b3e565b60200101906001600160f81b031916908160001a90535060049490941c9361353c81614705565b90506134ce565b5083156113305760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113f0565b6060600d60ff8316116135c1575050604080518082019091526006815265111897183c1160d11b602082015290565b6135cd600d6002613ade565b60ff168260ff16116135fc575050604080518082019091526007815266111897189abc1160c91b602082015290565b613608600d6003613ade565b60ff168260ff161161363657505060408051808201909152600681526511189719bc1160d11b602082015290565b613642600d6004613ade565b60ff168260ff16116136705750506040805180820190915260068152651118971abc1160d11b602082015290565b61367c600d6005613ade565b60ff168260ff16116136ab5750506040805180820190915260078152661118971b9abc1160c91b602082015290565b50506040805180820190915260068152651119971abc1160d11b602082015290565b6000806000606084860312156136e257600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b82811015613742578151805161ffff168552860151600c0b868501529284019290850190600101613716565b5091979650505050505050565b60005b8381101561376a578181015183820152602001613752565b50506000910152565b602081526000825180602084015261379281604085016020870161374f565b601f01601f19169190910160400192915050565b6001600160a01b038116811461164b57600080fd5b600080604083850312156137ce57600080fd5b82356137d9816137a6565b946020939093013593505050565b6000806000606084860312156137fc57600080fd5b8335613807816137a6565b92506020840135613817816137a6565b929592945050506040919091013590565b60006020828403121561383a57600080fd5b5035919050565b6000806040838503121561385457600080fd5b50508035926020909101359150565b60006020828403121561387557600080fd5b8135611330816137a6565b60008060008060008060c0878903121561389957600080fd5b86356138a4816137a6565b95506020870135945060408701359350606087013560ff811681146138c857600080fd5b9598949750929560808101359460a0909101359350915050565b60008083601f8401126138f457600080fd5b50813567ffffffffffffffff81111561390c57600080fd5b6020830191508360208260051b850101111561392757600080fd5b9250929050565b60008060006040848603121561394357600080fd5b833561394e816137a6565b9250602084013567ffffffffffffffff81111561396a57600080fd5b613976868287016138e2565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156139bb5783518352928401929184019160010161399f565b50909695505050505050565b600080602083850312156139da57600080fd5b823567ffffffffffffffff8111156139f157600080fd5b6139fd858286016138e2565b90969095509350505050565b60008060408385031215613a1c57600080fd5b8235613a27816137a6565b91506020830135613a37816137a6565b809150509250929050565b60008060008060808587031215613a5857600080fd5b8435613a63816137a6565b93506020850135613a73816137a6565b92506040850135613a83816137a6565b91506060850135613a93816137a6565b939692955090935050565b634e487b7160e01b600052601260045260246000fd5b600082613ac357613ac3613a9e565b500690565b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160290811690818114613afa57613afa613ac8565b5092915050565b600082613b1057613b10613a9e565b500490565b8082018082111561133357611333613ac8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60ff828116828216039081111561133357611333613ac8565b61ffff818116838216019080821115613afa57613afa613ac8565b600c81810b9083900b016c7fffffffffffffffffffffffff81136c7fffffffffffffffffffffffff198212171561133357611333613ac8565b600060018201613bd357613bd3613ac8565b5060010190565b600060208284031215613bec57600080fd5b815161ffff8116811461133057600080fd5b600060208284031215613c1057600080fd5b8151611330816137a6565b600060208284031215613c2d57600080fd5b8151801515811461133057600080fd5b61ffff828116828216039080821115613afa57613afa613ac8565b6001600160681b03818116838216019080821115613afa57613afa613ac8565b8181038181111561133357611333613ac8565b6001600160681b03828116828216039080821115613afa57613afa613ac8565b60008151613cbd81856020860161374f565b9290920192915050565b673d913730b6b2911d60c11b81528651600090613ceb816008850160208c0161374f565b600b60fa1b6008918401918201526e1132bc3a32b93730b62fbab936111d60891b60098201528751613d24816018840160208c0161374f565b01613d3560188201600b60fa1b9052565b671134b6b0b3b2911d60c11b6019820152613d536021820188613cab565b600b60fa1b815290506f1130b734b6b0ba34b7b72fbab936111d60811b6001820152613d826011820187613cab565b600b60fa1b815290506c1130ba3a3934b13aba32b9911d60991b6001820152613dae600e820186613cab565b600b60fa1b815290506d113232b9b1b934b83a34b7b7111d60911b6001820152613ddb600f820185613cab565b607d60f81b81526001019998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613e2a81601d85016020870161374f565b91909101601d0192915050565b600082600c0b82600c0b0280600c0b9150808214613afa57613afa613ac8565b600081600c0b83600c0b80613e6e57613e6e613a9e565b6c7fffffffffffffffffffffffff19821460001982141615613e9257613e92613ac8565b90059392505050565b600060ff831680613eae57613eae613a9e565b8060ff84160691505092915050565b600081600c0b6c7fffffffffffffffffffffffff198103613ee057613ee0613ac8565b60000392915050565b60006020808385031215613efc57600080fd5b825167ffffffffffffffff80821115613f1457600080fd5b818501915085601f830112613f2857600080fd5b815181811115613f3a57613f3a613b28565b8060051b604051601f19603f83011681018181108582111715613f5f57613f5f613b28565b604052918252848201925083810185019188831115613f7d57600080fd5b938501935b82851015613f9b57845184529385019392850192613f82565b98975050505050505050565b6f2250574e2044414f205374616b65202360801b81528151600090613fd381601085016020870161374f565b601160f91b6010939091019283015250601101919050565b7f2268747470733a2f2f6170702e70776e2e78797a2f232f61737365742f00000081526000845161402381601d85016020890161374f565b8083019050602f60f81b80601d830152855161404681601e850160208a0161374f565b601e920191820152835161406181601f84016020880161374f565b601160f91b601f929091019182015260200195945050505050565b7f2268747470733a2f2f6170692d64616f2e70776e2e78797a2f737470776e2f0081526000855160206140b582601f8601838b0161374f565b8184019150602f60f81b80601f84015287516140d681848601858c0161374f565b808401935050808284015286516140f38160218601858b0161374f565b6021930192830152845161410d816022850184890161374f565b601160f91b60229390910192830152506023019695505050505050565b7f5b7b2274726169745f74797065223a225374616b6564202450574e20666f726d81527f6174746564222c22646973706c61795f74797065223a226e756d626572222c226020820152663b30b63ab2911d60c91b60408201526000614192604783018c613cab565b611f4b60f21b815260026141fa6141f48284017f7b2274726169745f74797065223a225374616b6564202450574e222c2264697381527f706c61795f74797065223a226f626a656374222c2276616c7565223a000000006020820152603c0190565b8d613cab565b611f4b60f21b8152915061425b6142558284017f7b2274726169745f74797065223a22506f776572222c22646973706c61795f748152753cb832911d11373ab6b132b91116113b30b63ab2911d60511b602082015260360190565b8c613cab565b611f4b60f21b815291506142c36142bd8284017f7b2274726169745f74797065223a225374616b65205374617274222c2264697381527f706c61795f74797065223a2264617465222c2276616c7565223a0000000000006020820152603a0190565b8b613cab565b611f4b60f21b8152915061433561432f8284017f7b2274726169745f74797065223a224c6f636b205570204475726174696f6e2281527f2c22646973706c61795f74797065223a226e756d626572222c2276616c7565226020820152601d60f91b604082015260410190565b8a613cab565b611f4b60f21b8152915061439d6143978284017f7b2274726169745f74797065223a22556e6c6f636b2044617465222c2264697381527f706c61795f74797065223a2264617465222c2276616c7565223a0000000000006020820152603a0190565b89613cab565b611f4b60f21b8152915061441161440b8284017f7b2274726169745f74797065223a2243757272656e74204d756c7469706c696581527f72222c22646973706c61795f74797065223a22737472696e67222c2276616c7560208201526232911d60e91b604082015260430190565b88613cab565b611f4b60f21b815291506144796144738284017f7b2274726169745f74797065223a22506f776572204368616e676573222c226481527f6973706c61795f74797065223a226f626a656374222c2276616c7565223a00006020820152603e0190565b87613cab565b611f4b60f21b815291506144e16144db8284017f7b2274726169745f74797065223a224f776e6572222c22646973706c61795f7481527f797065223a22737472696e67222c2276616c7565223a22000000000000000000602082015260370190565b86613cab565b9150506144f38162227d5d60e81b9052565b6003019b9a5050505050505050505050565b808202811582820484141761133357611333613ac8565b600060ff83168061452f5761452f613a9e565b8060ff84160491505092915050565b60006020828403121561455057600080fd5b5051919050565b693d9130b6b7bab73a111d60b11b8152835160009061457d81600a85016020890161374f565b600b60fa1b600a9184019182018190526a113232b1b4b6b0b639911d60a91b600b83015285516145b4816016850160208a0161374f565b60169201918201527411383bb72fba37b5b2b72fb0b2323932b9b9911d1160591b601782015283516145ed81602c84016020880161374f565b61227d60f01b602c9290910191820152602e0195945050505050565b6000825161461b81846020870161374f565b600b60fa1b920191825250600101919050565b60008551614640818460208a0161374f565b6d3d9139ba30b93a2fb230ba32911d60911b908301908152855161466b81600e840160208a0161374f565b6816113837bbb2b9111d60b91b600e9290910191820152845161469581601784016020890161374f565b6d161136bab63a34b83634b2b9111d60911b6017929091019182015283516146c481602584016020880161374f565b607d60f81b602592909101918201526026019695505050505050565b600082516146f281846020870161374f565b605d60f81b920191825250600101919050565b60008161471457614714613ac8565b50600019019056fe2254686973204e4654206973206120726570726573656e746174696f6e206f6620612050574e2044414f207374616b652e205374616b65206f776e657273686970206772616e747320697473206f776e657220706f77657220696e207468652050574e2044414f2e2054686520706f7765722069732064657465726d696e65642062792074686520616d6f756e74206f662050574e20746f6b656e73207374616b656420616e64207468652072656d61696e696e67206c6f636b757020706572696f642e2054686520706f77657220646563726561736573206f7665722074696d6520756e74696c20746865206c6f636b7570206973206f7665722e224142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f920c353e14947c4dbbef6103c601d908b93371995902e76fd01b61e605e633fda2646970667358221220f2a70b4d1ab1ae02247fedf2e904fa99abdaec91a334e45101d27ca5d06f60c064736f6c63430008120033",
    "sourceMap": "682:1752:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1213:1448:63;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;877:97:62;941:26;;;;;;;;;;;;-1:-1:-1;;;941:26:62;;;;877:97;;;;;;;:::i;2140:138::-;;;;;;:::i;:::-;;:::i;:::-;;;2442:14:82;;2435:22;2417:41;;2405:2;2390:18;2140:138:62;2277:187:82;1258:118:62;;;:::i;:::-;;;2615:25:82;;;2603:2;2588:18;1258:118:62;2469:177:82;1777:163:62;;;;;;:::i;:::-;;:::i;1619:26:66:-;;;;;;13218:704:64;;;;;;:::i;:::-;;:::i;:::-;;7595:2024;;;;;;:::i;:::-;;:::i;1139:76:62:-;1206:2;1139:76;;;3722:4:82;3710:17;;;3692:36;;3680:2;3665:18;1139:76:62;3550:184:82;10248:2793:64;;;;;;:::i;:::-;;:::i;2689:139:62:-;;;;;;:::i;:::-;;:::i;3984:100::-;4054:23;;;;;;;;;;;;-1:-1:-1;;;4054:23:62;;;;3984:100;;6500:676:63;;;;;;:::i;:::-;;:::i;3021:108:62:-;;;;;;:::i;:::-;-1:-1:-1;3086:7:62;;3021:108;;;;-1:-1:-1;;;;;4155:32:82;;;4137:51;;4125:2;4110:18;3021:108:62;3991:203:82;3161:105:62;;;;;;:::i;:::-;;:::i;1167:19:66:-;;;;;-1:-1:-1;;;;;1167:19:66;;;1919:246:55;;;;;;:::i;:::-;;:::i;1417:141:62:-;;;;;;:::i;:::-;;:::i;1824:101:21:-;;;:::i;1064:41:66:-;;1103:2;1064:41;;6134:107:63;;;:::i;1734:212:22:-;;;:::i;1201:85:21:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:21;1201:85;;2870:118:62;;;;;;:::i;:::-;;:::i;3798:97::-;;;:::i;:::-;;;4594:14:82;4582:27;;;4564:46;;4552:2;4537:18;3798:97:62;4420:196:82;1254:26:66;;;;;-1:-1:-1;;;;;1254:26:66;;;1012:87:62;1078:14;;;;;;;;;;;;-1:-1:-1;;;1078:14:62;;;;1012:87;;1343:31:66;;;;;-1:-1:-1;;;;;1343:31:66;;;3218:44;;;;;;1598:135:62;;;;;;:::i;:::-;;:::i;3303:261::-;;;;;;:::i;:::-;;:::i;3109:408:63:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2314:47:66:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2314:47:66;;;;;;;7583:6:82;7571:19;;;7553:38;;7639:4;7627:17;;;7622:2;7607:18;;7600:45;-1:-1:-1;;;;;7681:41:82;7661:18;;;7654:69;7541:2;7526:18;2314:47:66;7357:372:82;4021:1288:64;;;;;;:::i;:::-;;:::i;5066:319:63:-;;;;;;:::i;:::-;;:::i;5668:1549:64:-;;;;;;:::i;:::-;;:::i;:::-;;;;8350:25:82;;;8406:2;8391:18;;8384:34;;;;8323:18;5668:1549:64;8176:248:82;1981:120:62;;;;;;:::i;:::-;2067:7;1981:120;;;;;3039:100:66;;;:::i;847:99:22:-;926:13;;-1:-1:-1;;;;;926:13:22;847:99;;1473:602:65;;;;;;:::i;:::-;;:::i;1139:178:22:-;;;;;;:::i;:::-;;:::i;1480:325:55:-;;;;;;:::i;:::-;;:::i;2211:220::-;;;;;;:::i;:::-;;:::i;1213:1448:63:-;1341:26;1396:3;1387:6;:12;:32;;;-1:-1:-1;1418:1:63;1403:12;1412:3;1403:6;:12;:::i;:::-;:16;1387:32;:61;;;-1:-1:-1;1432:16:63;1423:25;;1387:61;1383:120;;;1471:21;;-1:-1:-1;;;1471:21:63;;;;;;;;;;;1383:120;1531:1;1516:12;:16;:54;;;-1:-1:-1;1551:19:63;1103:2:66;1568::63;1551:19;:::i;:::-;1536:34;;:12;:34;1516:54;1512:119;;;1593:27;;-1:-1:-1;;;1593:27:63;;;;;;;;;;;1512:119;1688:14;1731:18;1103:2:66;1748:1:63;1731:18;:::i;:::-;1716:33;;:12;:33;1712:189;;;-1:-1:-1;1774:1:63;1712:189;;;1880:1;1848:29;1103:2:66;1848:12:63;:29;:::i;:::-;:33;:41;;1888:1;1848:41;;;1884:1;1848:41;1815:75;;:29;1103:2:66;1815:12:63;:29;:::i;:::-;:75;;;;:::i;:::-;1806:84;;1712:189;1937:6;1920:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1920:24:63;;;;;;;;;;;;;;;;1911:33;;1954:12;1969:31;1987:12;1969:17;:31::i;:::-;1954:46;-1:-1:-1;2040:12:63;2010:21;2080:42;2113:6;2080:17;:42::i;:::-;2063:59;;2132:12;2147:32;2154:7;2163:15;2147:6;:32::i;:::-;2132:47;;2235:42;;;;;;;;2255:5;2235:42;;;;;;2269:5;2235:42;;;;;2223:6;2230:1;2223:9;;;;;;;;:::i;:::-;;;;;;;;;;:54;2304:1;2287:368;2311:6;2307:1;:10;2287:368;;;2338:29;2370:41;2395:15;2370:24;:41::i;:::-;2338:73;-1:-1:-1;2425:42:63;2338:73;2425:42;;:::i;:::-;;-1:-1:-1;2481:32:63;;;;;;:::i;:::-;;;2536:40;2551:7;2560:15;2536:14;:40::i;:::-;2527:49;;;;:::i;:::-;;;2602:42;;;;;;;;2622:5;2602:42;;;;;;2636:5;2602:42;;;;;2590:6;2597:1;2590:9;;;;;;;;:::i;:::-;;;;;;:54;;;;2324:331;2319:3;;;;:::i;:::-;;;2287:368;;;;1373:1288;;;;;1213:1448;;;;;:::o;2140:138:62:-;2225:4;2248:23;;-1:-1:-1;;;2248:23:62;;;;;;;;;;;1258:118;1343:10;;;:25;;;-1:-1:-1;;;1343:25:62;;;;1304:7;;1330:39;;-1:-1:-1;;;;;1343:10:62;;:23;;:25;;;;;;;;;;;:10;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1330:39;;:12;:39::i;:::-;1323:46;;1258:118;:::o;1777:163::-;1882:4;1905:28;;-1:-1:-1;;;1905:28:62;;;;;;;;;;;13218:704:64;13277:14;13336:15;;;:6;:15;;;;;;;13411:9;;:26;;-1:-1:-1;;;13411:26:64;;;;;2615:25:82;;;13294:10:64;;;;-1:-1:-1;;;;;13411:9:64;;;;:17;;2588:18:82;;13411:26:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13411:36:64;;13407:95;;13470:21;;-1:-1:-1;;;13470:21:64;;;;;;;;;;;13407:95;13591:10;;;:25;;;-1:-1:-1;;;13591:25:64;;;;-1:-1:-1;;;;;13591:10:64;;;;:23;;:25;;;;;;;;;;;;:10;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13570:18;;13549:67;;;;;:39;;13570:18;;;;;;13549;:39;:::i;:::-;:67;;;13545:137;;;13639:32;;-1:-1:-1;;;13639:32:64;;;;;;;;;;;13545:137;13716:21;13729:7;13716:12;:21::i;:::-;13793:8;;13819:12;;13793:39;;-1:-1:-1;;;13793:39:64;;-1:-1:-1;;;;;12246:32:82;;;13793:39:64;;;12228:51:82;13819:12:64;;;;-1:-1:-1;;;;;13819:12:64;12295:18:82;;;12288:69;13793:8:64;;;:17;;12201:18:82;;13793:39:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13902:12:64;;13870:45;;13902:12;;;;-1:-1:-1;;;;;13902:12:64;12796:60:82;;-1:-1:-1;;;;;13870:45:64;;;13885:7;;13870:45;;12784:2:82;12769:18;13870:45:64;;;;;;;13267:655;;13218:704;:::o;7595:2024::-;7670:18;7760:16;;;:6;:16;;;;;;7809;;;;;;7878:19;;7717:10;;7760:16;7809;7670:18;;7856:41;;7878:19;;;;;;7856;;:41;:::i;:::-;7950:19;;7835:62;;-1:-1:-1;7907:18:64;;7928:41;;7950:19;;;;;;7928;;:41;:::i;:::-;7907:62;;7979:22;8004:10;;;;;;;;;-1:-1:-1;;;;;8004:10:64;-1:-1:-1;;;;;8004:23:64;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;8032:1;8004:29;:::i;:::-;8099:9;;:27;;-1:-1:-1;;;8099:27:64;;;;;2615:25:82;;;7979:54:64;;-1:-1:-1;;;;;;8099:37:64;;;;:9;;;:17;;2588:18:82;;8099:27:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8099:37:64;;8095:96;;8159:21;;-1:-1:-1;;;8159:21:64;;;;;;;;;;;8095:96;8204:9;;:27;;-1:-1:-1;;;8204:27:64;;;;;2615:25:82;;;-1:-1:-1;;;;;8204:37:64;;;;:9;;:17;;2588:18:82;;8204:27:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8204:37:64;;8200:96;;8264:21;;-1:-1:-1;;;8264:21:64;;;;;;;;;;;8200:96;8495:11;8481:25;;:11;:25;;;:59;;;;8525:15;8510:30;;:11;:30;;;;8481:59;8477:125;;;8563:28;;-1:-1:-1;;;8563:28:64;;;;;;;;;;;8477:125;8612:21;8642:29;8656:15;8642:11;:29;:::i;:::-;8612:60;;8801:11;8786:26;;:11;:26;;;8782:444;;8846:13;;;;;-1:-1:-1;;;;;8846:13:64;8938:29;;;;;;;;8934:156;;;8987:88;9005:7;9014:15;9037:29;9014:15;9037:11;:29;:::i;:::-;9069:5;8987:17;:88::i;:::-;9149:66;9167:7;9176:15;9193;9210:4;9149:17;:66::i;:::-;8814:412;8782:444;9265:22;9278:8;9265:12;:22::i;:::-;9297;9310:8;9297:12;:22::i;:::-;9394:13;;9378;;9358:17;;9378:29;;-1:-1:-1;;;;;9394:13:64;;;;;;;;9378;;;;:29;:::i;:::-;9358:49;;9430:65;9443:6;9451:15;9468:9;9479:15;9430:12;:65::i;:::-;9533:79;;;-1:-1:-1;;;;;13457:41:82;;13439:60;;13547:4;13535:17;;13530:2;13515:18;;13508:45;13569:18;;;13562:34;;;9417:78:64;;-1:-1:-1;;;;;;9533:79:64;;;9555:8;;9545;;9533:79;;13427:2:82;13412:18;9533:79:64;;;;;;;7690:1929;;;;;;;;7595:2024;;;;:::o;10248:2793::-;10374:18;10467:15;;;:6;:15;;;;;;10542:9;;:26;;-1:-1:-1;;;10542:26:64;;;;;2615:25:82;;;10425:10:64;;;;-1:-1:-1;;;;;10542:9:64;;;;:17;;2588:18:82;;10542:26:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10542:36:64;;10538:95;;10601:21;;-1:-1:-1;;;10601:21:64;;;;;;;;;;;10538:95;10719:21;;:46;;;;-1:-1:-1;10744:21:64;;10719:46;10715:109;;;10788:25;;-1:-1:-1;;;10788:25:64;;;;;;;;;;;10715:109;10856:16;10837:35;;10833:94;;;10895:21;;-1:-1:-1;;;10895:21:64;;;;;;;;;;;10833:94;11024:1;10999:22;11018:3;10999:16;:22;:::i;:::-;:26;10995:85;;;11048:21;;-1:-1:-1;;;11048:21:64;;;;;;;;;;;10995:85;11112:19;1103:2:66;11112::64;:19;:::i;:::-;11093:38;;:16;:38;11089:103;;;11154:27;;-1:-1:-1;;;11154:27:64;;;;;;;;;;;11089:103;11202:22;11227:10;;;;;;;;;-1:-1:-1;;;;;11227:10:64;-1:-1:-1;;;;;11227:23:64;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;11255:1;11227:29;:::i;:::-;11310:18;;11202:54;;-1:-1:-1;11266:20:64;;11289:39;;11310:18;;;;;;11289;;:39;:::i;:::-;11266:62;;11338:21;11362:144;11409:15;11392:32;;:13;:32;;;;:104;;11481:15;11446:50;;11462:16;11446:13;:32;;;;;;:::i;:::-;:50;;;;:::i;:::-;11362:16;:144::i;11392:104::-;11427:16;11362;:144::i;:::-;11338:168;-1:-1:-1;1103:2:66;11578:32:64;;;;11574:97;;;11633:27;;-1:-1:-1;;;11633:27:64;;;;;;;;;;;11574:97;11702:18;1103:2:66;11702:1:64;:18;:::i;:::-;11684:36;;:15;:36;;;:78;;;;-1:-1:-1;11743:19:64;1103:2:66;11743::64;:19;:::i;:::-;11724:38;;:15;:38;;;;11684:78;11680:143;;;11785:27;;-1:-1:-1;;;11785:27:64;;;;;;;;;;;11680:143;11853:12;;;;;-1:-1:-1;;;;;11853:12:64;11833:17;11895:37;11915:16;11853:12;11895:37;:::i;:::-;11875:57;-1:-1:-1;12020:21:64;;12116:19;;12020:21;12116:57;;;12157:16;12139:15;:34;;;12116:57;12112:191;;;12193:95;12211:9;12222:15;12239:41;12263:16;12239:15;:41;:::i;12193:95::-;12356:14;12373:18;:58;;12422:9;12373:58;;;12402:16;12373:58;12356:75;;12445:65;12463:6;12471:15;12488;12505:4;12445:17;:65::i;:::-;11956:565;;12564:21;12577:7;12564:12;:21::i;:::-;12637:65;12650:6;12658:15;12675:9;12686:15;12637:12;:65::i;:::-;12624:78;-1:-1:-1;12759:20:64;;12755:113;;12795:8;;:62;;-1:-1:-1;;;12795:62:64;;-1:-1:-1;;;;;13998:15:82;;;12795:62:64;;;13980:34:82;12833:4:64;14030:18:82;;;14023:43;14082:18;;;14075:34;;;12795:8:64;;;;:21;;13915:18:82;;12795:62:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12755:113;12905:129;;;14377:25:82;;;-1:-1:-1;;;;;14438:41:82;;14433:2;14418:18;;14411:69;14496:18;;;14489:34;;;14571:4;14559:17;;14554:2;14539:18;;14532:45;14608:3;14593:19;;14586:35;;;-1:-1:-1;;;;;12905:129:64;;;12933:7;;12905:129;;14364:3:82;14349:19;12905:129:64;;;;;;;10398:2643;;;;;;;10248:2793;;;;;:::o;2689:139:62:-;2766:7;2792:29;2806:7;2815:5;2792:13;:29::i;:::-;2785:36;;2689:139;;;;;:::o;6500:676:63:-;6577:10;;;:25;;;-1:-1:-1;;;6577:25:63;;;;-1:-1:-1;;;;;6577:10:63;;;;:23;;:25;;;;;;;;;;;;:10;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6569:33;;:5;:33;6565:96;;;6625:25;;-1:-1:-1;;;6625:25:63;;;;;;;;;;;6565:96;6707:5;6674:29;;:38;6670:135;;6764:29;;6735:59;;-1:-1:-1;;;6735:59:63;;;;;;2615:25:82;;2603:2;2588:18;;2469:177;6735:59:63;;;;;;;;6670:135;6832:29;;6815:264;6867:5;6863:1;:9;6815:264;;;6889:147;6953:5;:1;6957;6953:5;:::i;:::-;6983:38;7019:1;3095:43:66;-1:-1:-1;;;;;;;;;;;3137:1:66;3095:43;:::i;:::-;3087:52;6983:35:63;:38::i;:::-;3095:43:66;-1:-1:-1;;;;;;;;;;;3137:1:66;3095:43;:::i;:::-;3087:52;6889:147:63;:38;:147::i;:::-;7063:3;;6815:264;;;-1:-1:-1;7089:29:63;:37;;;7142:27;;7121:5;;7142:27;;;;;6500:676;:::o;3161:105:62:-;3235:24;;-1:-1:-1;;;3235:24:62;;;;;;;;;;;1919:246:55;2094:7;2124:34;2144:6;2152:5;2124:19;:34::i;1417:141:62:-;1476:7;1502:49;1516:7;1525:10;;;;;;;;;-1:-1:-1;;;;;1525:10:62;-1:-1:-1;;;;;1525:23:62;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1502:49;;:13;:49::i;1824:101:21:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;6134:107:63:-;6184:50;6208:10;;;;;;;;;-1:-1:-1;;;;;6208:10:63;-1:-1:-1;;;;;6208:23:63;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6184:50;;:23;:50::i;1734:212:22:-;926:13;;719:10:43;;-1:-1:-1;;;;;926:13:22;1833:24;;1825:78;;;;-1:-1:-1;;;1825:78:22;;14834:2:82;1825:78:22;;;14816:21:82;14873:2;14853:18;;;14846:30;14912:34;14892:18;;;14885:62;-1:-1:-1;;;14963:18:82;;;14956:39;15012:19;;1825:78:22;14632:405:82;1825:78:22;1913:26;1932:6;1913:18;:26::i;:::-;1776:170;1734:212::o;2870:118:62:-;2936:7;2962:19;2975:5;2962:12;:19::i;3798:97::-;3838:6;3863:10;;;;;;;;;-1:-1:-1;;;;;3863:10:62;-1:-1:-1;;;;;3863:23:62;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3856:32;;;;3798:97;:::o;1598:135::-;1679:4;1702:24;;-1:-1:-1;;;1702:24:62;;;;;;;;;;;3303:261;3528:29;;-1:-1:-1;;;3528:29:62;;;;;;;;;;;3109:408:63;3197:16;3225:23;3265:6;3251:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3251:28:63;;3225:54;;3294:9;3289:199;3305:17;;;3289:199;;;3351:95;3391:6;3422;;3429:1;3422:9;;;;;;;:::i;:::-;;;;;;;3351:13;:95::i;:::-;3339:6;3346:1;3339:9;;;;;;;;:::i;:::-;;;;;;;;;;:107;3472:3;;3289:199;;;-1:-1:-1;3504:6:63;3109:408;-1:-1:-1;;;;3109:408:63:o;4021:1288:64:-;4098:15;4229:3;4220:6;:12;:41;;;-1:-1:-1;4245:16:64;4236:25;;4220:41;4216:100;;;4284:21;;-1:-1:-1;;;4284:21:64;;;;;;;;;;;4216:100;4436:1;4421:12;4430:3;4421:6;:12;:::i;:::-;:16;4417:75;;;4460:21;;-1:-1:-1;;;4460:21:64;;;;;;;;;;;4417:75;1103:2:66;4548:29:64;;4544:94;;;4600:27;;-1:-1:-1;;;4600:27:64;;;;;;;;;;;4544:94;4666:18;1103:2:66;4666:1:64;:18;:::i;:::-;4651:33;;:12;:33;:72;;;;-1:-1:-1;4704:19:64;1103:2:66;4704::64;:19;:::i;:::-;4688:35;;:12;:35;;4651:72;4647:137;;;4746:27;;-1:-1:-1;;;4746:27:64;;;;;;;;;;;4647:137;4853:10;;;:25;;;-1:-1:-1;;;4853:25:64;;;;4811:10;;4794:14;;-1:-1:-1;;;;;4853:10:64;;:23;;:25;;;;;;;;;;;:10;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;4881:1;4853:29;:::i;:::-;4831:51;;4924:75;4950:6;4959:12;4979;4994:4;4924:17;:75::i;:::-;5048:72;5061:6;5069:12;5091:6;5106:12;5048;:72::i;:::-;5161:8;;:52;;-1:-1:-1;;;5161:52:64;;-1:-1:-1;;;;;13998:15:82;;;5161:52:64;;;13980:34:82;5199:4:64;14030:18:82;;;14023:43;14082:18;;;14075:34;;;5038:82:64;;-1:-1:-1;5161:8:64;;;:21;;13915:18:82;;5161:52:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5251:51:64;;;8350:25:82;;;8406:2;8391:18;;8384:34;;;-1:-1:-1;;;;;5251:51:64;;;5264:7;;5251:51;;8323:18:82;5251:51:64;;;;;;;4115:1194;;4021:1288;;;;:::o;5066:319:63:-;5137:16;5165:23;5205:6;5191:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5191:28:63;;5165:54;;5234:9;5229:127;5245:17;;;5229:127;;;5291:23;5304:6;;5311:1;5304:9;;;;;;;:::i;:::-;;;;;;;5291:12;:23::i;:::-;5279:6;5286:1;5279:9;;;;;;;;:::i;:::-;;;;;;;;;;:35;5340:3;;5229:127;;;-1:-1:-1;5372:6:63;5066:319;-1:-1:-1;;;5066:319:63:o;5668:1549:64:-;5760:19;5883:15;;;:6;:15;;;;;;5938:26;;5999:20;6153:9;:26;;-1:-1:-1;;;6153:26:64;;;;;2615:25:82;;;5760:19:64;;5833:10;;5883:15;5938:26;;;;5999:20;;;-1:-1:-1;;;;;5999:20:64;;6058:26;;;;;;;5833:10;;-1:-1:-1;;;;;6153:9:64;;;;:17;;2588:18:82;;6153:26:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6153:36:64;;6149:95;;6212:21;;-1:-1:-1;;;6212:21:64;;;;;;;;;;;6149:95;6304:11;6319:1;6304:16;6300:75;;6343:21;;-1:-1:-1;;;6343:21:64;;;;;;;;;;;6300:75;6458:14;-1:-1:-1;;;;;6443:29:64;:11;:29;6439:88;;6495:21;;-1:-1:-1;;;6495:21:64;;;;;;;;;;;6439:88;6658:1;6638:17;6652:3;6638:11;:17;:::i;:::-;:21;6634:80;;;6682:21;;-1:-1:-1;;;6682:21:64;;;;;;;;;;;6634:80;6757:21;6770:7;6757:12;:21::i;:::-;6832:125;6858:6;6866:20;6888:37;6913:11;6888:14;:37;:::i;:::-;6927:20;6832:12;:125::i;:::-;6818:139;;6981:86;6994:6;7002:20;7032:11;7046:20;6981:12;:86::i;:::-;6967:100;-1:-1:-1;;;;;;7105:105:64;;7116:7;7105:105;7133:37;7158:11;7133:14;:37;:::i;:::-;7105:105;;;-1:-1:-1;;;;;15490:41:82;;;15472:60;;15563:2;15548:18;;15541:34;;;15591:18;;15584:34;;;15649:2;15634:18;;15627:34;;;15459:3;15444:19;7105:105:64;;;;;;;5806:1411;;;;;5668:1549;;;;;:::o;3039:100:66:-;3095:43;-1:-1:-1;;;;;;;;;;;3137:1:66;3095:43;:::i;:::-;3039:100;:::o;1473:602:65:-;1536:13;1561:18;1621;1631:7;1621:9;:18::i;:::-;1677:25;1694:7;1677:16;:25::i;:::-;1733:37;1749:7;1733:37;;;;;;;;;;;;;-1:-1:-1;;;1733:37:65;;;:15;:37::i;:::-;1809;1825:7;1809:37;;;;;;;;;;;;;-1:-1:-1;;;1809:37:65;;;:15;:37::i;:::-;1882:24;1898:7;1882:15;:24::i;:::-;1943:18;:16;:18::i;:::-;1582:394;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1561:415;;2041:26;2061:4;2041:13;:26::i;:::-;1994:74;;;;;;;;:::i;:::-;;;;;;;;;;;;;1987:81;;;1473:602;;;:::o;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;1480:325:55:-;3291:13:33;;-1:-1:-1;;;3291:13:33;;;;3290:14;;3336:34;;;;-1:-1:-1;3369:1:33;3354:12;;-1:-1:-1;;;3354:12:33;;;;:16;3336:34;3335:97;;;-1:-1:-1;3404:4:33;1702:19:41;:23;;;3376:55:33;;-1:-1:-1;3414:12:33;;;-1:-1:-1;;;3414:12:33;;;;:17;3376:55;3314:190;;;;-1:-1:-1;;;3314:190:33;;19807:2:82;3314:190:33;;;19789:21:82;19846:2;19826:18;;;19819:30;19885:34;19865:18;;;19858:62;-1:-1:-1;;;19936:18:82;;;19929:44;19990:19;;3314:190:33;19605:410:82;3314:190:33;3529:1;3514:16;;-1:-1:-1;;;;3514:16:33;-1:-1:-1;;;3514:16:33;;;3540:65;;;;3590:4;3574:20;;-1:-1:-1;;;;3574:20:33;-1:-1:-1;;;3574:20:33;;;3540:65;1645:8:55::1;:25:::0;;-1:-1:-1;;;;;1645:25:55;;::::1;-1:-1:-1::0;;;;;;1645:25:55;;::::1;;::::0;;;1680:9:::1;:33:::0;;;;::::1;::::0;;::::1;;::::0;;1723:10:::1;:39:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1772:26:::1;1791:6:::0;1772:18:::1;:26::i;:::-;3629:14:33::0;3625:99;;;3659:13;:21;;-1:-1:-1;;;;3659:21:33;;;3699:14;;3692:36:82;;;3699:14:33;;3680:2:82;3665:18;3699:14:33;;;;;;;3625:99;3258:472;1480:325:55;;;;:::o;2211:220::-;2369:7;2399:25;2418:5;2399:18;:25::i;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;16288::49:-;16344:6;16379:16;16370:25;;;16362:76;;;;-1:-1:-1;;;16362:76:49;;20421:2:82;16362:76:49;;;20403:21:82;20460:2;20440:18;;;20433:30;20499:34;20479:18;;;20472:62;-1:-1:-1;;;20550:18:82;;;20543:36;20596:19;;16362:76:49;20219:402:82;16362:76:49;-1:-1:-1;16462:5:49;16288:187::o;27778:198::-;27882:5;27906:19;;;;;;27898:71;;;;-1:-1:-1;;;27898:71:49;;20828:2:82;27898:71:49;;;20810:21:82;20867:2;20847:18;;;20840:30;20906:34;20886:18;;;20879:62;-1:-1:-1;;;20957:18:82;;;20950:37;21004:19;;27898:71:49;20626:403:82;27898:71:49;27778:198;;;:::o;5163:508:62:-;5237:6;1103:2:66;5259:30:62;;;;5255:409;;-1:-1:-1;5298:6:62;5291:13;;5255:409;5339:18;1103:2:66;5356:1:62;5339:18;:::i;:::-;5323:34;;:12;:34;;;5319:345;;5381:3;5366:12;:6;5375:3;5366:12;:::i;:::-;:18;;;;:::i;:::-;5359:25;;;;5319:345;5419:18;1103:2:66;5436:1:62;5419:18;:::i;:::-;5403:34;;:12;:34;;;5399:265;;5461:3;5446:12;:6;5455:3;5446:12;:::i;5399:265::-;5499:18;1103:2:66;5516:1:62;5499:18;:::i;:::-;5483:34;;:12;:34;;;5479:185;;5541:3;5526:12;:6;5535:3;5526:12;:::i;5479:185::-;5579:18;1103:2:66;5596:1:62;5579:18;:::i;:::-;5563:34;;:12;:34;;;5559:105;;5621:3;5606:12;:6;5615:3;5606:12;:::i;5559:105::-;5661:3;5646:12;:6;5655:3;5646:12;:::i;6449:408::-;6529:5;6568:18;1103:2:66;6568:1:62;:18;:::i;:::-;6550:36;;:15;:36;;;6546:305;;;6628:18;1103:2:66;6628:1:62;:18;:::i;:::-;6609:38;;:15;:38;:::i;6546:305::-;6678:31;6712:32;1103:2:66;6712:15:62;:32;:::i;:::-;6678:66;-1:-1:-1;6765:30:62;;;;:75;;6815:25;6765:75;;;1103:2:66;6765:75:62;6758:82;6449:408;-1:-1:-1;;;6449:408:62:o;5783:605::-;5868:6;5890:15;:20;;5909:1;5890:20;5886:495;;5919:7;5920:6;5919:7;:::i;5886:495::-;1103:2:66;5965:33:62;;;;5961:420;;6022:3;6007:7;6008:6;6007:7;:::i;:::-;:12;;6017:2;6007:12;:::i;5961:420::-;6063:18;1103:2:66;6080:1:62;6063:18;:::i;:::-;6044:37;;:15;:37;;;6040:341;;6105:3;6090:7;6091:6;6090:7;:::i;6040:341::-;6146:18;1103:2:66;6163:1:62;6146:18;:::i;:::-;6127:37;;:15;:37;;;6123:258;;6188:3;6173:7;6174:6;6173:7;:::i;:::-;:12;;6183:2;6173:12;:::i;6123:258::-;6229:18;1103:2:66;6246:1:62;6229:18;:::i;:::-;6210:37;;:15;:37;;;6206:175;;6271:3;6256:7;6257:6;6256:7;:::i;:::-;:12;;6266:2;6256:12;:::i;6206:175::-;6312:18;1103:2:66;6329:1:62;6312:18;:::i;:::-;6293:37;;:15;:37;;;6289:92;;6355:3;6339:7;6340:6;6339:7;:::i;:::-;:13;;6349:3;6339:13;:::i;6289:92::-;-1:-1:-1;6380:1:62;6373:8;;14708:88:64;14766:9;;:23;;-1:-1:-1;;;14766:23:64;;;;;2615:25:82;;;-1:-1:-1;;;;;14766:9:64;;;;:14;;2588:18:82;;14766:23:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14872:802;14990:14;15053:8;:25;;-1:-1:-1;;15053:25:64;;;15071:1;15053:25;15007:42;15040:6;-1:-1:-1;;;;;15032:15:64;15007:17;:42::i;:::-;:72;;;;:::i;:::-;14990:89;-1:-1:-1;15113:12:64;15166:136;;;;15259:32;14990:89;15113:12;15259:6;:32::i;15166:136::-;15359:19;;;;15352:316;;15413:41;15438:15;15413:24;:41::i;:::-;15394:60;;;;:::i;:::-;;;15468:189;15562:15;15532:45;;15547:12;15532:27;;:12;:27;;;;:::i;:::-;:45;;;;:::i;:::-;15468:189;;15602:40;15617:7;15626:15;15602:14;:40::i;15468:189::-;15352:316;;;14980:694;;14872:802;;;;:::o;14203:408::-;14332:18;14381:11;;14379:13;;;;;:::i;:::-;;;;;-1:-1:-1;14402:19:64;14424:18;;;:6;:18;;;;;;;14452:33;;;;;-1:-1:-1;;14495:21:64;;;;;-1:-1:-1;;;;;14495:21:64;;;;-1:-1:-1;;14526:33:64;;;;;;;;;14495:12;14570:9;:34;;-1:-1:-1;;;14570:34:64;;-1:-1:-1;;;;;22150:32:82;;;14570:34:64;;;22132:51:82;22199:18;;;22192:34;;;14379:13:64;;-1:-1:-1;14424:18:64;;14570:9;;;;:14;;22105:18:82;;14570:34:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14356:255;14203:408;;;;;;:::o;16796:182:49:-;16851:5;16885:15;16876:24;;;16868:74;;;;-1:-1:-1;;;16868:74:49;;22439:2:82;16868:74:49;;;22421:21:82;22478:2;22458:18;;;22451:30;22517:34;22497:18;;;22490:62;-1:-1:-1;;;22568:18:82;;;22561:35;22613:19;;16868:74:49;22237:401:82;832:224:59;912:6;930:25;958:36;977:9;988:5;958:18;:36::i;:::-;930:64;-1:-1:-1;1011:9:59;1019:1;1011:5;:9;:::i;:::-;:14;:38;;1040:9;;-1:-1:-1;;;1040:9:59;;;;1011:38;;;1028:9;;;;1011:38;1004:45;832:224;-1:-1:-1;;;;832:224:59:o;1412:285::-;1505:25;1533:36;1552:9;1563:5;1533:18;:36::i;:::-;1505:64;-1:-1:-1;1583:9:59;1591:1;1583:5;:9;:::i;:::-;1596:1;1583:14;1579:112;;1613:18;;1626:5;;1613:2;;:9;;:18;;1626:5;;1613:18;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;1613:18:59;;;;;;;-1:-1:-1;;;;;1613:18:59;;;;;;1579:112;;;1662:18;;1675:5;;1662:2;;:9;;:18;;1675:5;;-1:-1:-1;;;1662:18:59;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;1662:18:59;;;;;;;-1:-1:-1;;;;;1662:18:59;;;;;;1579:112;1495:202;1412:285;;;:::o;3563:611:63:-;3655:7;3674:13;3690:24;3708:5;3690:17;:24::i;:::-;3752:9;;:41;;-1:-1:-1;;;3752:41:63;;-1:-1:-1;;;;;22833:32:82;;;3752:41:63;;;22815:51:82;22914:6;22902:19;;22882:18;;;22875:47;3674:40:63;;-1:-1:-1;3724:25:63;;3752:9;;;;:25;;22788:18:82;;3752:41:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3752:41:63;;;;;;;;;;;;:::i;:::-;3826:15;;3724:69;;-1:-1:-1;3803:20:63;;3873:244;3893:12;3889:1;:16;3873:244;;;3970:104;4009:6;:19;4016:8;4025:1;4016:11;;;;;;;;:::i;:::-;;;;;;;;;;;;4009:19;;;;;;;;;;;;;-1:-1:-1;4009:19:63;3970:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3970:104:63;;;;;4053:6;3970:13;:104::i;:::-;3961:113;;;;:::i;:::-;;-1:-1:-1;4101:3:63;;3873:244;;;;4134:33;4160:5;4153:13;;4134:18;:33::i;:::-;4127:40;3563:611;-1:-1:-1;;;;;;;3563:611:63: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;;24245:2:82;1414:68:21;;;24227:21:82;;;24264:18;;;24257:30;24323:34;24303:18;;;24296:62;24375:18;;1414:68:21;24043:356:82;1501:153:22;1590:13;1583:20;;-1:-1:-1;;;;;;1583:20:22;;;1613:34;1638:8;1613:24;:34::i;2284:156:65:-;2343:13;2409:18;:7;:16;:18::i;:::-;2375:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;2368:65;;2284:156;;;:::o;2446:287::-;2512:13;2604:24;:13;:22;:24::i;:::-;2647:27;2655:4;2647:25;:27::i;:::-;2693:18;:7;:16;:18::i;:::-;2544:182;;;;;;;;;;:::i;2739:319::-;2824:13;2918:24;:13;:22;:24::i;:::-;2961:27;2969:4;2961:25;:27::i;:::-;3007:18;:7;:16;:18::i;:::-;3032:4;2856:195;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2849:202;;2739:319;;;;:::o;3468:1383::-;3533:13;3558:36;3597:27;3616:7;3597:18;:27::i;:::-;3558:66;;3786:43;:10;:32;;;:41;:43::i;:::-;3931:23;;3913:42;;:17;:42::i;:::-;4033:34;:10;:23;;;:32;:34::i;:::-;4149:38;:10;:27;;;:36;:38::i;:::-;4276:36;:10;:25;;;:34;:36::i;:::-;4394:37;:10;:26;;;:35;:37::i;:::-;4522:10;:21;;;4629:42;4647:10;:23;;;4629:17;:42::i;:::-;4750:35;:10;:21;;;-1:-1:-1;;;;;4750:33:65;;:35::i;:::-;3684:1118;;;;;;;;;;;;;;;;:::i;3064:398::-;3115:13;3193:262;;;;;;;;;;;;;;;;;;;3064:398;:::o;505:3026:42:-;563:13;795:4;:11;810:1;795:16;791:31;;-1:-1:-1;;813:9:42;;;;;;;;;-1:-1:-1;813:9:42;;;505:3026::o;791:31::-;872:19;894:6;;;;;;;;;;;;;;;;;872:28;;1303:20;1362:1;1343:4;:11;1357:1;1343:15;;;;:::i;:::-;1342:21;;;;:::i;:::-;1337:27;;:1;:27;:::i;:::-;1326:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1326:39:42;;1303:62;;1540:1;1533:5;1529:13;1641:2;1633:6;1629:15;1748:4;1799;1793:11;1787:4;1783:22;1711:1403;1832:6;1823:7;1820:19;1711:1403;;;1934:1;1925:7;1921:15;1910:26;;1972:7;1966:14;2615:4;2607:5;2603:2;2599:14;2595:25;2585:8;2581:40;2575:47;2564:9;2556:67;2668:1;2657:9;2653:17;2640:30;;2758:4;2750:5;2746:2;2742:14;2738:25;2728:8;2724:40;2718:47;2707:9;2699:67;2811:1;2800:9;2796:17;2783:30;;2900:4;2892:5;2889:1;2885:13;2881:24;2871:8;2867:39;2861:46;2850:9;2842:66;2953:1;2942:9;2938:17;2925:30;;3034:4;3027:5;3023:16;3013:8;3009:31;3003:38;2992:9;2984:58;;3087:1;3076:9;3072:17;3059:30;;1711:1403;;;1715:104;;3272:1;3265:4;3259:11;3255:19;3292:1;3287:120;;;;3425:1;3420:71;;;;3248:243;;3287:120;3339:4;3335:1;3324:9;3320:17;3312:32;3388:4;3384:1;3373:9;3369:17;3361:32;3287:120;;3420:71;3472:4;3468:1;3457:9;3453:17;3445:32;3248:243;-1:-1:-1;3518:6:42;;505:3026;-1:-1:-1;;;;;505:3026:42:o;5431:542:63:-;5506:7;5562:5;5529:29;;:38;5525:146;;5590:70;5616:42;5652:5;3095:43:66;-1:-1:-1;;;;;;;;;;;3137:1:66;3095:43;:::i;5616:42:63:-;5609:50;;5590:18;:70::i;5525:146::-;5759:29;;5715:17;;5742:169;5795:5;5790:1;:10;5742:169;;5831:38;5867:1;3095:43:66;-1:-1:-1;;;;;;;;;;;3137:1:66;3095:43;:::i;5831:38:63:-;5817:52;;;;:::i;:::-;;-1:-1:-1;5895:3:63;;5742:169;;;;5928:38;5954:10;5947:18;;5928;:38::i;1704:311:59:-;1788:25;;1869:9;1877:1;1869:5;:9;:::i;:::-;1848:30;;1856:9;1848:30;:::i;4180:488:63:-;4260:6;4303:5;4282:26;;:5;:18;;;:26;;;4278:83;;;-1:-1:-1;4331:1:63;4324:8;;4278:83;4417:5;4374:48;;4395:5;:18;;;4374:39;;:5;:18;;;:39;;;;:::i;:::-;:48;;;4370:105;;-1:-1:-1;4445:1:63;4438:8;;4370:105;4491:170;4520:48;4553:5;:12;;;-1:-1:-1;;;;;4545:21:63;4520:17;:48::i;:::-;4631:18;;4623:26;;:5;:26;:::i;:::-;4596:5;:18;;;:54;;;;:::i;:::-;4491:6;:170::i;17187:168:49:-;17243:7;17279:1;17270:5;:10;;17262:55;;;;-1:-1:-1;;;17262:55:49;;34642:2:82;17262:55:49;;;34624:21:82;;;34661:18;;;34654:30;34720:34;34700:18;;;34693:62;34772:18;;17262:55:49;34440:356:82;447:696:45;503:13;552:14;569:17;580:5;569:10;:17::i;:::-;589:1;569:21;552:38;;604:20;638:6;627:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;627:18:45;-1:-1:-1;604:41:45;-1:-1:-1;765:28:45;;;781:2;765:28;820:280;-1:-1:-1;;851:5:45;-1:-1:-1;;;985:2:45;974:14;;969:30;851:5;956:44;1044:2;1035:11;;;-1:-1:-1;1064:21:45;820:280;1064:21;-1:-1:-1;1120:6:45;447:696;-1:-1:-1;;;447:696:45:o;2407:149::-;2465:13;2497:52;-1:-1:-1;;;;;2509:22:45;;343:2;2497:11;:52::i;4857:2576:65:-;4925:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4925:36:65;4997:9;;:26;;-1:-1:-1;;;4997:26:65;;;;;2615:25:82;;;-1:-1:-1;;;;;4997:9:65;;;;:17;;2588:18:82;;4997:26:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4973:50:65;;;:21;;;:50;5034:18;5055:15;;;:6;:15;;;;;;;;;5034:36;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5034:36:65;;;;;;;5129:23;;:60;;;5199:23;;5234:2;5199:32;;:37;;;;5034:36;5296:8;5246:23;;5296:8;;5246:39;;;;:59;;;;5350:23;;:30;5034:36;;;5350:37;;5383:4;;5350:37;:::i;:::-;5315:32;;;;:72;;;;5433:18;;;5425:32;;:27;;5455:2;5425:32;:::i;:::-;5397:25;;;:60;5524:18;;;;5509:1;;5546:2;5524:24;;;;;5520:168;;1103:2:66;5572:5:65;:18;;;:35;;;;:::i;:::-;5564:43;;;;5668:1;1103:2:66;5630:5:65;:18;;;:35;;;;:::i;:::-;:39;;;:47;;5676:1;5630:47;;;5672:1;5630:47;5621:56;;;;;;:::i;:::-;;;5520:168;5741:5;5723:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5723:24:65;;;;;;;;;;;;;;;;-1:-1:-1;5697:23:65;;;:50;5772:18;;5824;;;;;5953:10;;;:29;;;-1:-1:-1;;;5953:29:65;;;;5824:18;;5757:12;;;;-1:-1:-1;;;;;5953:10:65;;;;:27;;:29;;;;5824:18;5953:29;;;;;;;:10;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5928:54;;5992:29;6024:10;;;;;;;;;-1:-1:-1;;;;;6024:10:65;-1:-1:-1;;;;;6024:34:65;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5992:68;;6075:9;6070:756;6090:5;6086:1;:9;6070:756;;;6116:13;6137:9;6145:1;6137:5;:9;:::i;:::-;6132:14;;;-1:-1:-1;6237:14:65;6224:9;6232:1;6224:5;:9;:::i;:::-;6223:28;;;;;;:::i;:::-;6199:52;;:21;:52;:::i;:::-;6160:10;:23;;;6184:1;6160:26;;;;;;;;:::i;:::-;;;;;;;;;;;:91;6300:8;:66;;6330:34;6337:9;6348:15;6330:6;:34::i;:::-;6323:42;;6300:66;;;6311:1;6300:66;6265:10;:23;;;6289:1;6265:26;;;;;;;;:::i;:::-;;;;;;;:32;;:101;;;;;6420:8;:52;;6440:32;6456:15;6440;:32::i;:::-;6420:52;;;;;;;;;;;;;;;;-1:-1:-1;;;6420:52:65;;;;6380:10;:23;;;6404:1;6380:26;;;;;;;;:::i;:::-;;;;;;;:37;;:92;;;;6531:15;6491:10;:23;;;6515:1;6491:26;;;;;;;;:::i;:::-;;;;;;;:36;;;:55;6487:121;;6592:1;6566:27;;6487:121;6626:8;6621:195;;6654:17;6674:41;6699:15;6674:24;:41::i;:::-;6654:61;-1:-1:-1;6733:20:65;;;;;;:::i;:::-;;-1:-1:-1;6771:30:65;6790:11;6771:30;;:::i;:::-;;;6636:180;6621:195;-1:-1:-1;6097:3:65;;;:::i;:::-;;;6070:756;;;;6866:10;:23;;;6890:1;6866:26;;;;;;;;:::i;:::-;;;;;;;;;;;:36;6836:27;;;:66;6941:23;;;;6965:9;6973:1;6965:5;:9;:::i;:::-;6941:34;;;;;;;;:::i;:::-;;;;;;;;;;;:44;6912:26;;;:73;7085:23;;;;:26;;6941:44;;7085:26;;;;:::i;:::-;;;;;;;:36;;;7067:15;:54;7063:364;;;7163:1;7137:23;;;;:27;;;;7178:30;;;;;;;;;;;-1:-1:-1;;;7178:30:65;;;;:21;;;:30;7063:364;;;7265:10;:23;;;7289;7265:48;;;;;;;;:::i;:::-;;;;;;;:54;;;7239:10;:23;;:80;;;;;7357:10;:23;;;7381;7357:48;;;;;;;;:::i;:::-;;;;;;;:59;;;7333:10;:21;;:83;;;;7063:364;4963:2470;;;;;;;;4857:2576;;;:::o;7908:362::-;7992:13;8065:30;:12;:19;;;:28;:30::i;:::-;8129:32;:12;:21;;;:30;:32::i;:::-;8205:42;:12;:28;;;-1:-1:-1;;;;;8205:40:65;;:42::i;:::-;8024:239;;;;;;;;;;:::i;8276:599::-;8391:10;;;;;;;;;;;;-1:-1:-1;;;8391:10:65;;;;-1:-1:-1;8411:417:65;8431:12;:19;8427:1;:23;8411:417;;;8475:5;;8471:75;;8521:4;8507:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;8500:31;;8471:75;8597:4;8637:36;:12;8650:1;8637:15;;;;;;;;:::i;:::-;;;;;;;:25;;;:34;:36::i;:::-;8704:32;:12;8717:1;8704:15;;;;;;;;:::i;:::-;;;;;;;:21;;;:30;:32::i;:::-;8772:12;8785:1;8772:15;;;;;;;;:::i;:::-;;;;;;;:26;;;8566:251;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8559:258;;8452:3;;;;:::i;:::-;;;8411:417;;;;8858:4;8844:24;;;;;;;;:::i;10139:916:48:-;10192:7;;-1:-1:-1;;;10267:17:48;;10263:103;;-1:-1:-1;;;10304:17:48;;;-1:-1:-1;10349:2:48;10339:12;10263:103;10392:8;10383:5;:17;10379:103;;10429:8;10420:17;;;-1:-1:-1;10465:2:48;10455:12;10379:103;10508:8;10499:5;:17;10495:103;;10545:8;10536:17;;;-1:-1:-1;10581:2:48;10571:12;10495:103;10624:7;10615:5;:16;10611:100;;10660:7;10651:16;;;-1:-1:-1;10695:1:48;10685:11;10611:100;10737:7;10728:5;:16;10724:100;;10773:7;10764:16;;;-1:-1:-1;10808:1:48;10798:11;10724:100;10850:7;10841:5;:16;10837:100;;10886:7;10877:16;;;-1:-1:-1;10921:1:48;10911:11;10837:100;10963:7;10954:5;:16;10950:66;;11000:1;10990:11;11042:6;10139:916;-1:-1:-1;;10139:916:48:o;1818:437:45:-;1893:13;1918:19;1950:10;1954:6;1950:1;:10;:::i;:::-;:14;;1963:1;1950:14;:::i;:::-;1940:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1940:25:45;;1918:47;;-1:-1:-1;;;1975:6:45;1982:1;1975:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1975:15:45;;;;;;;;;-1:-1:-1;;;2000:6:45;2007:1;2000:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2000:15:45;;;;;;;;-1:-1:-1;2030:9:45;2042:10;2046:6;2042:1;:10;:::i;:::-;:14;;2055:1;2042:14;:::i;:::-;2030:26;;2025:128;2062:1;2058;:5;2025:128;;;-1:-1:-1;;;2105:5:45;2113:3;2105:11;2096:21;;;;;;;:::i;:::-;;;;2084:6;2091:1;2084:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;2084:33:45;;;;;;;;-1:-1:-1;2141:1:45;2131:11;;;;;2065:3;;;:::i;:::-;;;2025:128;;;-1:-1:-1;2170:10:45;;2162:55;;;;-1:-1:-1;;;2162:55:45;;39559:2:82;2162:55:45;;;39541:21:82;;;39578:18;;;39571:30;39637:34;39617:18;;;39610:62;39689:18;;2162:55:45;39357:356:82;7439:463:65;7507:13;1103:2:66;7536:30:65;;;;7532:363;;-1:-1:-1;;7568:15:65;;;;;;;;;;;;-1:-1:-1;;;7568:15:65;;;;;7439:463::o;7532:363::-;7618:18;1103:2:66;7635:1:65;7618:18;:::i;:::-;7602:34;;:12;:34;;;7598:297;;-1:-1:-1;;7638:16:65;;;;;;;;;;;;-1:-1:-1;;;7638:16:65;;;;;7439:463::o;7598:297::-;7689:18;1103:2:66;7706:1:65;7689:18;:::i;:::-;7673:34;;:12;:34;;;7669:226;;-1:-1:-1;;7709:15:65;;;;;;;;;;;;-1:-1:-1;;;7709:15:65;;;;;7439:463::o;7669:226::-;7759:18;1103:2:66;7776:1:65;7759:18;:::i;:::-;7743:34;;:12;:34;;;7739:156;;-1:-1:-1;;7779:15:65;;;;;;;;;;;;-1:-1:-1;;;7779:15:65;;;;;7439:463::o;7739:156::-;7829:18;1103:2:66;7846:1:65;7829:18;:::i;:::-;7813:34;;:12;:34;;;7809:86;;-1:-1:-1;;7849:16:65;;;;;;;;;;;;-1:-1:-1;;;7849:16:65;;;;;7439:463::o;7809:86::-;-1:-1:-1;;7880:15:65;;;;;;;;;;;;-1:-1:-1;;;7880:15:65;;;;;7439:463::o;14:316:82:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:82;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:82;305:18;;;292:32;;14:316;-1:-1:-1;14:316:82:o;335:825::-;564:2;616:21;;;686:13;;589:18;;;708:22;;;535:4;;564:2;749;;767:18;;;;808:15;;;535:4;851:283;865:6;862:1;859:13;851:283;;;924:13;;966:9;;977:6;962:22;950:35;;1040:11;;1034:18;1030:2;1019:34;1005:12;;;998:56;1074:12;;;;1109:15;;;;887:1;880:9;851:283;;;-1:-1:-1;1151:3:82;;335:825;-1:-1:-1;;;;;;;335:825:82:o;1165:250::-;1250:1;1260:113;1274:6;1271:1;1268:13;1260:113;;;1350:11;;;1344:18;1331:11;;;1324:39;1296:2;1289:10;1260:113;;;-1:-1:-1;;1407:1:82;1389:16;;1382:27;1165:250::o;1420:396::-;1569:2;1558:9;1551:21;1532:4;1601:6;1595:13;1644:6;1639:2;1628:9;1624:18;1617:34;1660:79;1732:6;1727:2;1716:9;1712:18;1707:2;1699:6;1695:15;1660:79;:::i;:::-;1800:2;1779:15;-1:-1:-1;;1775:29:82;1760:45;;;;1807:2;1756:54;;1420:396;-1:-1:-1;;1420:396:82:o;1821:131::-;-1:-1:-1;;;;;1896:31:82;;1886:42;;1876:70;;1942:1;1939;1932:12;1957:315;2025:6;2033;2086:2;2074:9;2065:7;2061:23;2057:32;2054:52;;;2102:1;2099;2092:12;2054:52;2141:9;2128:23;2160:31;2185:5;2160:31;:::i;:::-;2210:5;2262:2;2247:18;;;;2234:32;;-1:-1:-1;;;1957:315:82:o;2651:456::-;2728:6;2736;2744;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;2852:9;2839:23;2871:31;2896:5;2871:31;:::i;:::-;2921:5;-1:-1:-1;2978:2:82;2963:18;;2950:32;2991:33;2950:32;2991:33;:::i;:::-;2651:456;;3043:7;;-1:-1:-1;;;3097:2:82;3082:18;;;;3069:32;;2651:456::o;3112:180::-;3171:6;3224:2;3212:9;3203:7;3199:23;3195:32;3192:52;;;3240:1;3237;3230:12;3192:52;-1:-1:-1;3263:23:82;;3112:180;-1:-1:-1;3112:180:82:o;3297:248::-;3365:6;3373;3426:2;3414:9;3405:7;3401:23;3397:32;3394:52;;;3442:1;3439;3432:12;3394:52;-1:-1:-1;;3465:23:82;;;3535:2;3520:18;;;3507:32;;-1:-1:-1;3297:248:82:o;3739:247::-;3798:6;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3906:9;3893:23;3925:31;3950:5;3925:31;:::i;5079:687::-;5181:6;5189;5197;5205;5213;5221;5274:3;5262:9;5253:7;5249:23;5245:33;5242:53;;;5291:1;5288;5281:12;5242:53;5330:9;5317:23;5349:31;5374:5;5349:31;:::i;:::-;5399:5;-1:-1:-1;5451:2:82;5436:18;;5423:32;;-1:-1:-1;5502:2:82;5487:18;;5474:32;;-1:-1:-1;5558:2:82;5543:18;;5530:32;5606:4;5593:18;;5581:31;;5571:59;;5626:1;5623;5616:12;5571:59;5079:687;;;;-1:-1:-1;5079:687:82;;5703:3;5688:19;;5675:33;;5755:3;5740:19;;;5727:33;;-1:-1:-1;5079:687:82;-1:-1:-1;;5079:687:82:o;5771:367::-;5834:8;5844:6;5898:3;5891:4;5883:6;5879:17;5875:27;5865:55;;5916:1;5913;5906:12;5865:55;-1:-1:-1;5939:20:82;;5982:18;5971:30;;5968:50;;;6014:1;6011;6004:12;5968:50;6051:4;6043:6;6039:17;6027:29;;6111:3;6104:4;6094:6;6091:1;6087:14;6079:6;6075:27;6071:38;6068:47;6065:67;;;6128:1;6125;6118:12;6065:67;5771:367;;;;;:::o;6143:572::-;6238:6;6246;6254;6307:2;6295:9;6286:7;6282:23;6278:32;6275:52;;;6323:1;6320;6313:12;6275:52;6362:9;6349:23;6381:31;6406:5;6381:31;:::i;:::-;6431:5;-1:-1:-1;6487:2:82;6472:18;;6459:32;6514:18;6503:30;;6500:50;;;6546:1;6543;6536:12;6500:50;6585:70;6647:7;6638:6;6627:9;6623:22;6585:70;:::i;:::-;6143:572;;6674:8;;-1:-1:-1;6559:96:82;;-1:-1:-1;;;;6143:572:82:o;6720:632::-;6891:2;6943:21;;;7013:13;;6916:18;;;7035:22;;;6862:4;;6891:2;7114:15;;;;7088:2;7073:18;;;6862:4;7157:169;7171:6;7168:1;7165:13;7157:169;;;7232:13;;7220:26;;7301:15;;;;7266:12;;;;7193:1;7186:9;7157:169;;;-1:-1:-1;7343:3:82;;6720:632;-1:-1:-1;;;;;;6720:632:82:o;7734:437::-;7820:6;7828;7881:2;7869:9;7860:7;7856:23;7852:32;7849:52;;;7897:1;7894;7887:12;7849:52;7937:9;7924:23;7970:18;7962:6;7959:30;7956:50;;;8002:1;7999;7992:12;7956:50;8041:70;8103:7;8094:6;8083:9;8079:22;8041:70;:::i;:::-;8130:8;;8015:96;;-1:-1:-1;7734:437:82;-1:-1:-1;;;;7734:437:82:o;8429:388::-;8497:6;8505;8558:2;8546:9;8537:7;8533:23;8529:32;8526:52;;;8574:1;8571;8564:12;8526:52;8613:9;8600:23;8632:31;8657:5;8632:31;:::i;:::-;8682:5;-1:-1:-1;8739:2:82;8724:18;;8711:32;8752:33;8711:32;8752:33;:::i;:::-;8804:7;8794:17;;;8429:388;;;;;:::o;9004:671::-;9090:6;9098;9106;9114;9167:3;9155:9;9146:7;9142:23;9138:33;9135:53;;;9184:1;9181;9174:12;9135:53;9223:9;9210:23;9242:31;9267:5;9242:31;:::i;:::-;9292:5;-1:-1:-1;9349:2:82;9334:18;;9321:32;9362:33;9321:32;9362:33;:::i;:::-;9414:7;-1:-1:-1;9473:2:82;9458:18;;9445:32;9486:33;9445:32;9486:33;:::i;:::-;9538:7;-1:-1:-1;9597:2:82;9582:18;;9569:32;9610:33;9569:32;9610:33;:::i;:::-;9004:671;;;;-1:-1:-1;9004:671:82;;-1:-1:-1;;9004:671:82:o;9680:127::-;9741:10;9736:3;9732:20;9729:1;9722:31;9772:4;9769:1;9762:15;9796:4;9793:1;9786:15;9812:112;9844:1;9870;9860:35;;9875:18;;:::i;:::-;-1:-1:-1;9909:9:82;;9812:112::o;9929:127::-;9990:10;9985:3;9981:20;9978:1;9971:31;10021:4;10018:1;10011:15;10045:4;10042:1;10035:15;10061:225;10165:4;10144:12;;;10158;;;10140:31;10191:22;;;;10232:24;;;10222:58;;10260:18;;:::i;:::-;10222:58;10061:225;;;;:::o;10291:120::-;10331:1;10357;10347:35;;10362:18;;:::i;:::-;-1:-1:-1;10396:9:82;;10291:120::o;10416:125::-;10481:9;;;10502:10;;;10499:36;;;10515:18;;:::i;10546:127::-;10607:10;10602:3;10598:20;10595:1;10588:31;10638:4;10635:1;10628:15;10662:4;10659:1;10652:15;10678:127;10739:10;10734:3;10730:20;10727:1;10720:31;10770:4;10767:1;10760:15;10794:4;10791:1;10784:15;10810:151;10900:4;10893:12;;;10879;;;10875:31;;10918:14;;10915:40;;;10935:18;;:::i;10966:168::-;11033:6;11059:10;;;11071;;;11055:27;;11094:11;;;11091:37;;;11108:18;;:::i;11139:233::-;11237:2;11207:17;;;11226;;;;11203:41;11312:28;11259:38;;-1:-1:-1;;11299:43:82;;11256:87;11253:113;;;11346:18;;:::i;11377:135::-;11416:3;11437:17;;;11434:43;;11457:18;;:::i;:::-;-1:-1:-1;11504:1:82;11493:13;;11377:135::o;11517:276::-;11586:6;11639:2;11627:9;11618:7;11614:23;11610:32;11607:52;;;11655:1;11652;11645:12;11607:52;11687:9;11681:16;11737:6;11730:5;11726:18;11719:5;11716:29;11706:57;;11759:1;11756;11749:12;11798:251;11868:6;11921:2;11909:9;11900:7;11896:23;11892:32;11889:52;;;11937:1;11934;11927:12;11889:52;11969:9;11963:16;11988:31;12013:5;11988:31;:::i;12368:277::-;12435:6;12488:2;12476:9;12467:7;12463:23;12459:32;12456:52;;;12504:1;12501;12494:12;12456:52;12536:9;12530:16;12589:5;12582:13;12575:21;12568:5;12565:32;12555:60;;12611:1;12608;12601:12;12867:171;12935:6;12974:10;;;12962;;;12958:27;;12997:12;;;12994:38;;;13012:18;;:::i;13043:191::-;-1:-1:-1;;;;;13159:10:82;;;13171;;;13155:27;;13194:11;;;13191:37;;;13208:18;;:::i;13607:128::-;13674:9;;;13695:11;;;13692:37;;;13709:18;;:::i;15042:194::-;-1:-1:-1;;;;;15172:10:82;;;15160;;;15156:27;;15195:12;;;15192:38;;;15210:18;;:::i;15672:198::-;15714:3;15752:5;15746:12;15767:65;15825:6;15820:3;15813:4;15806:5;15802:16;15767:65;:::i;:::-;15848:16;;;;;15672:198;-1:-1:-1;;15672:198:82:o;16494:2650::-;-1:-1:-1;;;17967:41:82;;18031:13;;17949:3;;18053:74;18031:13;18116:1;18107:11;;18100:4;18088:17;;18053:74;:::i;:::-;-1:-1:-1;;;18186:1:82;18146:16;;;18178:10;;;18171:23;-1:-1:-1;;;18218:1:82;18210:10;;18203:62;18290:13;;18312:76;18290:13;18374:2;18366:11;;18359:4;18347:17;;18312:76;:::i;:::-;18407:17;18433:42;18471:2;18463:11;;-1:-1:-1;;;15925:16:82;;15875:68;18433:42;-1:-1:-1;;;18517:2:82;18509:11;;16001:41;18543:38;18577:2;18573;18569:11;18561:6;18543:38;:::i;:::-;-1:-1:-1;;;15925:16:82;;18530:51;-1:-1:-1;;;;18676:1:82;18665:13;;16111:57;18701:41;18738:2;18731:5;18727:14;18719:6;18701:41;:::i;:::-;-1:-1:-1;;;15925:16:82;;18688:54;-1:-1:-1;;;;18837:1:82;18826:13;;16237:51;18862:41;18899:2;18892:5;18888:14;18880:6;18862:41;:::i;:::-;-1:-1:-1;;;15925:16:82;;18849:54;-1:-1:-1;;;;18998:1:82;18987:13;;16357:53;19023:41;19060:2;19053:5;19049:14;19041:6;19023:41;:::i;:::-;-1:-1:-1;;;16471:16:82;;19136:1;19125:13;;;-1:-1:-1;;;;;;;;;16494:2650:82:o;19149:451::-;19401:31;19396:3;19389:44;19371:3;19462:6;19456:13;19478:75;19546:6;19541:2;19536:3;19532:12;19525:4;19517:6;19513:17;19478:75;:::i;:::-;19573:16;;;;19591:2;19569:25;;19149:451;-1:-1:-1;;19149:451:82:o;21034:241::-;21073:7;21152:1;21148:2;21137:17;21133:1;21129:2;21118:17;21114:41;21190:11;21186:2;21175:27;21164:38;;21233:11;21224:7;21221:24;21211:58;;21249:18;;:::i;21280:299::-;21319:1;21361;21357:2;21346:17;21398:1;21394:2;21383:17;21419:3;21409:37;;21426:18;;:::i;:::-;-1:-1:-1;;21462:42:82;;-1:-1:-1;;21506:15:82;;21458:64;21455:90;;;21525:18;;:::i;:::-;21559:14;;;21280:299;-1:-1:-1;;;21280:299:82:o;21584:157::-;21614:1;21648:4;21645:1;21641:12;21672:3;21662:37;;21679:18;;:::i;:::-;21731:3;21724:4;21721:1;21717:12;21713:22;21708:27;;;21584:157;;;;:::o;21746:207::-;21781:3;21829:5;21825:2;21814:21;21863:28;21859:33;21850:7;21847:46;21844:72;;21896:18;;:::i;:::-;21936:1;21932:15;;21746:207;-1:-1:-1;;21746:207:82:o;22933:1105::-;23028:6;23059:2;23102;23090:9;23081:7;23077:23;23073:32;23070:52;;;23118:1;23115;23108:12;23070:52;23151:9;23145:16;23180:18;23221:2;23213:6;23210:14;23207:34;;;23237:1;23234;23227:12;23207:34;23275:6;23264:9;23260:22;23250:32;;23320:7;23313:4;23309:2;23305:13;23301:27;23291:55;;23342:1;23339;23332:12;23291:55;23371:2;23365:9;23393:2;23389;23386:10;23383:36;;;23399:18;;:::i;:::-;23445:2;23442:1;23438:10;23477:2;23471:9;23540:2;23536:7;23531:2;23527;23523:11;23519:25;23511:6;23507:38;23595:6;23583:10;23580:22;23575:2;23563:10;23560:18;23557:46;23554:72;;;23606:18;;:::i;:::-;23642:2;23635:22;23692:18;;;23726:15;;;;-1:-1:-1;23768:11:82;;;23764:20;;;23796:19;;;23793:39;;;23828:1;23825;23818:12;23793:39;23852:11;;;;23872:135;23888:6;23883:3;23880:15;23872:135;;;23954:10;;23942:23;;23905:12;;;;23985;;;;23872:135;;;24026:6;22933:1105;-1:-1:-1;;;;;;;;22933:1105:82:o;24404:617::-;-1:-1:-1;;;24734:57:82;;24814:13;;24716:3;;24836:75;24814:13;24899:2;24890:12;;24883:4;24871:17;;24836:75;:::i;:::-;-1:-1:-1;;;24970:2:82;24930:16;;;;24962:11;;;24955:33;-1:-1:-1;24984:2:82;25004:11;;24404:617;-1:-1:-1;24404:617:82:o;25026:1321::-;25644:66;25639:3;25632:79;25614:3;25740:6;25734:13;25756:75;25824:6;25819:2;25814:3;25810:12;25803:4;25795:6;25791:17;25756:75;:::i;:::-;25859:6;25854:3;25850:16;25840:26;;-1:-1:-1;;;25917:2:82;25912;25908;25904:11;25897:23;25951:6;25945:13;25967:76;26034:8;26029:2;26025;26021:11;26014:4;26006:6;26002:17;25967:76;:::i;:::-;26103:2;26062:17;;26095:11;;;26088:23;26136:13;;26158:76;26136:13;26220:2;26212:11;;26205:4;26193:17;;26158:76;:::i;:::-;-1:-1:-1;;;26294:2:82;26253:17;;;;26286:11;;;26279:33;26336:4;26328:13;;25026:1321;-1:-1:-1;;;;;25026:1321:82:o;26352:1663::-;27108:66;27103:3;27096:79;27078:3;27204:6;27198:13;27230:4;27243:73;27309:6;27304:2;27299:3;27295:12;27290:2;27282:6;27278:15;27243:73;:::i;:::-;27344:6;27339:3;27335:16;27325:26;;-1:-1:-1;;;27402:2:82;27397;27393;27389:11;27382:23;27436:6;27430:13;27452:74;27517:8;27512:2;27508;27504:11;27499:2;27491:6;27487:15;27452:74;:::i;:::-;27553:8;27549:2;27545:17;27535:27;;;27591:2;27586;27582;27578:11;27571:23;27625:6;27619:13;27641:74;27706:8;27701:2;27697;27693:11;27688:2;27680:6;27676:15;27641:74;:::i;:::-;27775:2;27734:17;;27767:11;;;27760:23;27808:13;;27830:74;27808:13;27890:2;27882:11;;27865:15;;;27830:74;:::i;:::-;-1:-1:-1;;;27964:2:82;27923:17;;;;27956:11;;;27949:33;-1:-1:-1;28006:2:82;27998:11;;26352:1663;-1:-1:-1;;;;;;26352:1663:82:o;30504:3758::-;32768:66;32756:79;;32865:66;32860:2;32851:12;;32844:88;-1:-1:-1;;;32957:2:82;32948:12;;32941:48;-1:-1:-1;33011:39:82;33046:2;33037:12;;33029:6;33011:39;:::i;:::-;-1:-1:-1;;;28070:17:82;;33114:1;33137:72;33163:45;33204:2;33197:5;33193:14;28171:66;28159:79;;28268:66;28263:2;28254:12;;28247:88;28360:2;28351:12;;28094:275;33163:45;33155:6;33137:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33124:85;-1:-1:-1;33276:72:82;33302:45;33343:2;33336:5;33332:14;28451:66;28439:79;;-1:-1:-1;;;28543:2:82;28534:12;;28527:77;28629:2;28620:12;;28374:264;33302:45;33294:6;33276:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33263:85;-1:-1:-1;33415:72:82;33441:45;33482:2;33475:5;33471:14;28720:66;28708:79;;28817:66;28812:2;28803:12;;28796:88;28909:2;28900:12;;28643:275;33441:45;33433:6;33415:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33402:85;-1:-1:-1;33554:72:82;33580:45;33621:2;33614:5;33610:14;29000:66;28988:79;;29097:66;29092:2;29083:12;;29076:88;-1:-1:-1;;;29189:2:82;29180:12;;29173:25;29223:2;29214:12;;28923:309;33580:45;33572:6;33554:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33541:85;-1:-1:-1;33693:72:82;33719:45;33760:2;33753:5;33749:14;29314:66;29302:79;;29411:66;29406:2;29397:12;;29390:88;29503:2;29494:12;;29237:275;33719:45;33711:6;33693:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33680:85;-1:-1:-1;33832:72:82;33858:45;33899:2;33892:5;33888:14;29594:66;29582:79;;29691:66;29686:2;29677:12;;29670:88;-1:-1:-1;;;29783:2:82;29774:12;;29767:39;29831:2;29822:12;;29517:323;33858:45;33850:6;33832:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33819:85;-1:-1:-1;33971:72:82;33997:45;34038:2;34031:5;34027:14;29922:66;29910:79;;30019:66;30014:2;30005:12;;29998:88;30111:2;30102:12;;29845:275;33997:45;33989:6;33971:72;:::i;:::-;-1:-1:-1;;;28070:17:82;;33958:85;-1:-1:-1;34110:72:82;34136:45;34177:2;34170:5;34166:14;30202:66;30190:79;;30299:66;30294:2;30285:12;;30278:88;30391:2;30382:12;;30125:275;34136:45;34128:6;34110:72;:::i;:::-;34097:85;;;34191:36;34221:5;-1:-1:-1;;;30463:30:82;;30405:94;34191:36;34254:1;34243:13;;30504:3758;-1:-1:-1;;;;;;;;;;;30504:3758:82:o;34267:168::-;34340:9;;;34371;;34388:15;;;34382:22;;34368:37;34358:71;;34409:18;;:::i;34801:165::-;34839:1;34873:4;34870:1;34866:12;34897:3;34887:37;;34904:18;;:::i;:::-;34956:3;34949:4;34946:1;34942:12;34938:22;34933:27;;;34801:165;;;;:::o;34971:184::-;35041:6;35094:2;35082:9;35073:7;35069:23;35065:32;35062:52;;;35110:1;35107;35100:12;35062:52;-1:-1:-1;35133:16:82;;34971:184;-1:-1:-1;34971:184:82:o;35160:1616::-;-1:-1:-1;;;35948:45:82;;36016:13;;35930:3;;36038:75;36016:13;36101:2;36092:12;;36085:4;36073:17;;36038:75;:::i;:::-;-1:-1:-1;;;36194:2:82;36132:16;;;36186:11;;;36179:23;;;-1:-1:-1;;;36226:2:82;36218:11;;36211:55;36291:13;;36313:76;36291:13;36375:2;36367:11;;36360:4;36348:17;;36313:76;:::i;:::-;36449:2;36408:17;;36441:11;;;36434:23;-1:-1:-1;;;36481:2:82;36473:11;;36466:74;36565:13;;36587:76;36565:13;36649:2;36641:11;;36634:4;36622:17;;36587:76;:::i;:::-;-1:-1:-1;;;36723:2:82;36682:17;;;;36715:11;;;36708:35;36767:2;36759:11;;35160:1616;-1:-1:-1;;;;;35160:1616:82:o;36781:441::-;37002:3;37040:6;37034:13;37056:66;37115:6;37110:3;37103:4;37095:6;37091:17;37056:66;:::i;:::-;-1:-1:-1;;;37144:16:82;;37169:18;;;-1:-1:-1;37214:1:82;37203:13;;36781:441;-1:-1:-1;36781:441:82:o;37227:1538::-;37864:3;37902:6;37896:13;37918:66;37977:6;37972:3;37965:4;37957:6;37953:17;37918:66;:::i;:::-;-1:-1:-1;;;38006:16:82;;;38031:55;;;38111:13;;38133:79;38111:13;38198:2;38187:14;;38180:4;38168:17;;38133:79;:::i;:::-;-1:-1:-1;;;38275:2:82;38231:20;;;;38267:11;;;38260:51;38336:13;;38358:76;38336:13;38420:2;38412:11;;38405:4;38393:17;;38358:76;:::i;:::-;-1:-1:-1;;;38494:2:82;38453:17;;;;38486:11;;;38479:61;38565:13;;38587:76;38565:13;38649:2;38641:11;;38634:4;38622:17;;38587:76;:::i;:::-;-1:-1:-1;;;38723:2:82;38682:17;;;;38715:11;;;38708:24;38756:2;38748:11;;37227:1538;-1:-1:-1;;;;;;37227:1538:82:o;38770:441::-;38991:3;39029:6;39023:13;39045:66;39104:6;39099:3;39092:4;39084:6;39080:17;39045:66;:::i;:::-;-1:-1:-1;;;39133:16:82;;39158:18;;;-1:-1:-1;39203:1:82;39192:13;;38770:441;-1:-1:-1;38770:441:82:o;39216:136::-;39255:3;39283:5;39273:39;;39292:18;;:::i;:::-;-1:-1:-1;;;39328:18:82;;39216:136::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "CLOCK_MODE()": "4bf5d7e9",
    "EPOCHS_IN_YEAR()": "71fc49b5",
    "TOTAL_POWER_NAMESPACE()": "e2df21b2",
    "acceptOwnership()": "79ba5097",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "calculateTotalPower()": "77a4e598",
    "calculateTotalPowerUpTo(uint256)": "510d3ee6",
    "clock()": "91ddadf4",
    "createStake(uint256,uint256)": "d7fa023d",
    "decimals()": "313ce567",
    "delegate(address)": "5c19a95c",
    "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": "c3cda520",
    "delegates(address)": "587cde1e",
    "epochClock()": "9cf9a327",
    "getPastTotalSupply(uint256)": "8e539e8c",
    "getPastVotes(address,uint256)": "3a46b1a8",
    "getVotes(address)": "9ab24eb0",
    "increaseStake(uint256,uint256,uint256)": "35138382",
    "initialize(address,address,address,address)": "f8c8765e",
    "lastCalculatedTotalPowerEpoch()": "a54244b2",
    "lastStakeId()": "24a4afd5",
    "mergeStakes(uint256,uint256)": "2ee293dc",
    "name()": "06fdde03",
    "owner()": "8da5cb5b",
    "pendingOwner()": "e30c3978",
    "pwnToken()": "68110011",
    "renounceOwnership()": "715018a6",
    "splitStake(uint256,uint256)": "dc310451",
    "stakeMetadata(uint256)": "e959319f",
    "stakePowers(uint256,uint256,uint256)": "02aedf3c",
    "stakedPWN()": "9350039b",
    "stakerPowerAt(address,uint256)": "68ed223e",
    "stakerPowers(address,uint256[])": "ce127aa3",
    "stakes(uint256)": "d5a44f86",
    "symbol()": "95d89b41",
    "totalPowerAt(uint256)": "fe7f0e8b",
    "totalPowers(uint256[])": "dbeb5a37",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b",
    "withdrawStake(uint256)": "25d5971f"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApproveDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegateBySigDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegateDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochStillRunning\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLockUpPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LockUpPeriodMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStakeOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NothingToIncrease\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lastCalculatedEpoch\",\"type\":\"uint256\"}],\"name\":\"PowerAlreadyCalculated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFromDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithrawalBeforeLockUpEnd\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lockUpEpochs\",\"type\":\"uint256\"}],\"name\":\"StakeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"additionalAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"additionalEpochs\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEpochs\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeId\",\"type\":\"uint256\"}],\"name\":\"StakeIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakeId1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakeId2\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lockUpEpochs\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeId\",\"type\":\"uint256\"}],\"name\":\"StakeMerged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount2\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeId1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeId2\",\"type\":\"uint256\"}],\"name\":\"StakeSplit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"TotalPowerCalculated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EPOCHS_IN_YEAR\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_POWER_NAMESPACE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calculateTotalPower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"calculateTotalPowerUpTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockUpEpochs\",\"type\":\"uint256\"}],\"name\":\"createStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochClock\",\"outputs\":[{\"internalType\":\"contract PWNEpochClock\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"additionalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"additionalEpochs\",\"type\":\"uint256\"}],\"name\":\"increaseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newStakeId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pwnToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stakedPWN\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_epochClock\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCalculatedTotalPowerEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastStakeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeId2\",\"type\":\"uint256\"}],\"name\":\"mergeStakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newStakeId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"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\":\"pwnToken\",\"outputs\":[{\"internalType\":\"contract PWN\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"splitAmount\",\"type\":\"uint256\"}],\"name\":\"splitStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newStakeId1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newStakeId2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"}],\"name\":\"stakeMetadata\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"initialEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockUpEpochs\",\"type\":\"uint256\"}],\"name\":\"stakePowers\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"epoch\",\"type\":\"uint16\"},{\"internalType\":\"int104\",\"name\":\"power\",\"type\":\"int104\"}],\"internalType\":\"struct VoteEscrowedPWNPower.EpochPower[]\",\"name\":\"powers\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakedPWN\",\"outputs\":[{\"internalType\":\"contract StakedPWN\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"stakerPowerAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"epochs\",\"type\":\"uint256[]\"}],\"name\":\"stakerPowers\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"}],\"name\":\"stakes\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"initialEpoch\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"lockUpEpochs\",\"type\":\"uint8\"},{\"internalType\":\"uint104\",\"name\":\"amount\",\"type\":\"uint104\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"totalPowerAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"epochs\",\"type\":\"uint256[]\"}],\"name\":\"totalPowers\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeId\",\"type\":\"uint256\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"VoteEscrowedPWN is a contract for gaining voting power with PWN tokens.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"DelegateChanged(address,address,address)\":{\"details\":\"Emitted when an account changes their delegate.\"},\"DelegateVotesChanged(address,uint256,uint256)\":{\"details\":\"Emitted when a token transfer or delegate change results in changes to a delegate's number of votes.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"StakeCreated(uint256,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of PWN tokens staked.\",\"lockUpEpochs\":\"The number of epochs the stake is locked up for.\",\"stakeId\":\"The id of the created stake.\",\"staker\":\"The staker address.\"}},\"StakeIncreased(uint256,address,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"additionalAmount\":\"The amount of PWN tokens added to the stake.\",\"additionalEpochs\":\"The number of epochs added to the stake lockup.\",\"newAmount\":\"The amount of PWN tokens in the new stake.\",\"newEpochs\":\"The number of epochs the stake is locked up for.\",\"newStakeId\":\"The id of the new stake.\",\"stakeId\":\"The id of the original stake.\",\"staker\":\"The staker address.\"}},\"StakeMerged(uint256,uint256,address,uint256,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of PWN tokens in the new stake.\",\"lockUpEpochs\":\"The number of epochs the stake is locked up for.\",\"newStakeId\":\"The id of the new stake.\",\"stakeId1\":\"The id of the first stake to merge.\",\"stakeId2\":\"The id of the second stake to merge.\",\"staker\":\"The staker address.\"}},\"StakeSplit(uint256,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amount1\":\"The amount of PWN tokens in the first new stake.\",\"amount2\":\"The amount of PWN tokens in the second new stake.\",\"newStakeId1\":\"The id of the first new stake.\",\"newStakeId2\":\"The id of the second new stake.\",\"stakeId\":\"The id of the original stake.\",\"staker\":\"The staker address.\"}},\"StakeWithdrawn(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of PWN tokens withdrawn.\",\"stakeId\":\"The id of the stake.\",\"staker\":\"The staker address.\"}},\"TotalPowerCalculated(uint256)\":{\"params\":{\"epoch\":\"The epoch for which the total power was calculated.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"calculateTotalPower()\":{\"details\":\"For more information, see {VoteEscrowedPWNPower.calculateTotalPowerUpTo}.\"},\"calculateTotalPowerUpTo(uint256)\":{\"details\":\"The total power is not calculated for every epoch and needs to be calculated explicitly. This function calculates the total power for all epochs up to the given epoch.\"},\"createStake(uint256,uint256)\":{\"details\":\"Mints stPWN token and transfers PWN tokens to the contract.\",\"params\":{\"amount\":\"Amount of PWN tokens to stake. Needs to be divisible by 100.\",\"lockUpEpochs\":\"Number of epochs to lock up the stake for. Needs to be in <13;65> + {130} epochs.\"},\"returns\":{\"stakeId\":\"Id of the created stake.\"}},\"increaseStake(uint256,uint256,uint256)\":{\"details\":\"Creates new stake and burns old stPWN token. If the stakes lockup ended, `additionalEpochs` will be added from the next epoch. The sum of `lockUpEpochs` and `additionalEpochs` must be in <13;65> + {130}. Expecting PWN token approval for the contract if `additionalAmount` > 0.\",\"params\":{\"additionalAmount\":\"Amount of PWN tokens to increase the stake by.\",\"additionalEpochs\":\"Number of epochs to add to exisitng stake lockup.\",\"stakeId\":\"Id of the stake to increase.\"},\"returns\":{\"newStakeId\":\"Id of the new stake.\"}},\"initialize(address,address,address,address)\":{\"details\":\"Can be called only once.\",\"params\":{\"_epochClock\":\"The address of the epoch clock contract.\",\"_owner\":\"The address of the owner. Should be PWN DAO.\",\"_pwnToken\":\"The address of the PWN token.\",\"_stakedPWN\":\"The address of the staked PWN contract.\"}},\"mergeStakes(uint256,uint256)\":{\"details\":\"Burns both stPWN tokens and mints a new one. Aligns stakes lockups. First stake lockup must be longer than or equal to the second one.\",\"params\":{\"stakeId1\":\"Id of the first stake to merge.\",\"stakeId2\":\"Id of the second stake to merge.\"},\"returns\":{\"newStakeId\":\"Id of the new merged stake.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"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.\"},\"splitStake(uint256,uint256)\":{\"details\":\"Burns an original stPWN token and mints two new ones.\",\"params\":{\"splitAmount\":\"Amount of PWN tokens to split into a first new stake.\",\"stakeId\":\"Id of the stake to split.\"},\"returns\":{\"newStakeId1\":\"Id of the first new stake.\",\"newStakeId2\":\"Id of the second new stake.\"}},\"stakeMetadata(uint256)\":{\"params\":{\"stakeId\":\"The ID of the stake.\"},\"returns\":{\"_0\":\"The metadata associated with the stake.\"}},\"stakerPowerAt(address,uint256)\":{\"params\":{\"epoch\":\"The epoch at which the power is calculated.\",\"staker\":\"The address of the staker.\"},\"returns\":{\"_0\":\"The power of the staker at the epoch.\"}},\"stakerPowers(address,uint256[])\":{\"params\":{\"epochs\":\"The epochs for which to return the powers.\",\"staker\":\"The staker address.\"},\"returns\":{\"_0\":\"powers The powers of the staker at the given epochs.\"}},\"totalPowerAt(uint256)\":{\"params\":{\"epoch\":\"The epoch at which the power is calculated.\"},\"returns\":{\"_0\":\"The total power at the epoch.\"}},\"totalPowers(uint256[])\":{\"params\":{\"epochs\":\"The epochs for which to return the total powers.\"},\"returns\":{\"_0\":\"powers The total powers at the given epochs.\"}},\"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.\"},\"withdrawStake(uint256)\":{\"details\":\"Burns stPWN token and transfers PWN tokens to the caller.\",\"params\":{\"stakeId\":\"Id of the stake to withdraw.\"}}},\"title\":\"VoteEscrowedPWN\",\"version\":1},\"userdoc\":{\"events\":{\"StakeCreated(uint256,address,uint256,uint256)\":{\"notice\":\"Emitted when a stake is created.\"},\"StakeIncreased(uint256,address,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a stake is increased.\"},\"StakeMerged(uint256,uint256,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when two stakes are merged.\"},\"StakeSplit(uint256,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a stake is split.\"},\"StakeWithdrawn(uint256,address,uint256)\":{\"notice\":\"Emitted when a stake is withdrawn.\"},\"TotalPowerCalculated(uint256)\":{\"notice\":\"Emitted when the total power for an epoch is calculated.\"}},\"kind\":\"user\",\"methods\":{\"CLOCK_MODE()\":{\"notice\":\"{IERC6372.CLOCK_MODE}\"},\"EPOCHS_IN_YEAR()\":{\"notice\":\"The number of epochs in a year.\"},\"TOTAL_POWER_NAMESPACE()\":{\"notice\":\"The namespace for the total power.\"},\"allowance(address,address)\":{\"notice\":\"{IERC20Metadata.allowance}\"},\"approve(address,uint256)\":{\"notice\":\"{IERC20Metadata.approve}\"},\"balanceOf(address)\":{\"notice\":\"{IERC20Metadata.balanceOf}\"},\"calculateTotalPower()\":{\"notice\":\"Calculates the total power up to the current epoch.\"},\"calculateTotalPowerUpTo(uint256)\":{\"notice\":\"Calculates the total power up to a given epoch.\"},\"clock()\":{\"notice\":\"{IERC6372.clock}\"},\"createStake(uint256,uint256)\":{\"notice\":\"Creates a new stake for a caller.\"},\"decimals()\":{\"notice\":\"{IERC20Metadata.decimals}\"},\"delegate(address)\":{\"notice\":\"{IVotes.delegate}\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"{IVotes.delegateBySig}\"},\"delegates(address)\":{\"notice\":\"{IVotes.delegates}\"},\"epochClock()\":{\"notice\":\"The address of the epoch clock contract.\"},\"getPastTotalSupply(uint256)\":{\"notice\":\"{IVotes.getPastTotalSupply}\"},\"getPastVotes(address,uint256)\":{\"notice\":\"{IVotes.getPastVotes}\"},\"getVotes(address)\":{\"notice\":\"{IVotes.getVotes}\"},\"increaseStake(uint256,uint256,uint256)\":{\"notice\":\"Increases a stake for a caller.\"},\"initialize(address,address,address,address)\":{\"notice\":\"Initializes the contract.\"},\"lastCalculatedTotalPowerEpoch()\":{\"notice\":\"The last epoch in which the total power was calculated.\"},\"lastStakeId()\":{\"notice\":\"The last stake id.\"},\"mergeStakes(uint256,uint256)\":{\"notice\":\"Merges two stakes for a caller.\"},\"name()\":{\"notice\":\"{IERC20Metadata.name}\"},\"pwnToken()\":{\"notice\":\"The address of the PWN token contract.\"},\"splitStake(uint256,uint256)\":{\"notice\":\"Splits a stake for a caller.\"},\"stakeMetadata(uint256)\":{\"notice\":\"Returns the metadata associated with a stake.\"},\"stakedPWN()\":{\"notice\":\"The address of the staked PWN token contract.\"},\"stakerPowerAt(address,uint256)\":{\"notice\":\"Returns the power of a staker at an epoch.\"},\"stakerPowers(address,uint256[])\":{\"notice\":\"Returns the power of a staker at given epochs.\"},\"stakes(uint256)\":{\"notice\":\"The stake for a stake id.\"},\"symbol()\":{\"notice\":\"{IERC20Metadata.symbol}\"},\"totalPowerAt(uint256)\":{\"notice\":\"Returns the total power at an epoch.\"},\"totalPowers(uint256[])\":{\"notice\":\"Returns the total power at given epochs.\"},\"totalSupply()\":{\"notice\":\"{IERC20Metadata.totalSupply}\"},\"transfer(address,uint256)\":{\"notice\":\"{IERC20Metadata.transfer}\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"{IERC20Metadata.transferFrom}\"},\"withdrawStake(uint256)\":{\"notice\":\"Withdraws a stake for a caller.\"}},\"notice\":\"VoteEscrowedPWN is a contract for voting with PWN tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/VoteEscrowedPWN.sol\":\"VoteEscrowedPWN\"},\"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/governance/utils/IVotes.sol\":{\"keccak256\":\"0x1618ddebe73377660f6da71afcba35d5ac4c4600918b3a381d9c6f37eba613eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://666c8d7c62478b55e082f1835275b7acfc1595491998df6d67183ff2c70eab96\",\"dweb:/ipfs/QmVXmnXfxNaLhoX283dqyKJ8DJbF5thUd9sMuRoFpNMwr7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol\":{\"keccak256\":\"0x687142c633b33037c3137b6bfeef848a44eb1ef83fb5fdb59a3affdf28a46516\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d26b5d0495ffb4c36b1abdf003f43ab478c324752ce60847af8019bad5a3ad0\",\"dweb:/ipfs/QmQGcXZcq7eBrZUyxLbHFkBFWCyMwFonvJwLRSsL82dbWx\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xcaea9aeda3816ba872358c828f4f01455c22ae48ced49c4c7d72bd74176c09b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16ff22d8df5aee94510ee43d361b6147caef164941a684cedcb75be44f351fe6\",\"dweb:/ipfs/QmaCCwMdHVdPApuEJHLZapSJyA7mp5dAugpma3VUzWGd8E\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://720d6bb56ea0c4ef781c0bd65c5bd0541f5a46100163b2587170f97658d2deed\",\"dweb:/ipfs/QmTS2biLVPrv8CeeXCaKmkFxonMiRvc1LxiYBRYDAJHQUS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cac938788bc4be12101e59d45588b4e059579f4e61062e1cda8d6b06c0191b15\",\"dweb:/ipfs/QmV2JKCyjTVH3rkWNrfdJRhAT7tZ3usAN2XcnD4h53Mvih\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"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/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"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/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"src/PWN.sol\":{\"keccak256\":\"0x72bb9bcd405d3993f86351a1320b78a0c772b6cb0ee095553987b595fb370883\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://c2b33ed3e6f780a469cda95085a1f3c6f334d7dc79a75c951e1ede1dc3271ef0\",\"dweb:/ipfs/QmcAZ6DaeY45uYQ1BamH68Y1jwDX7u1HGogLan62PLiyix\"]},\"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/VoteEscrowedPWN.sol\":{\"keccak256\":\"0xb2d56ceeb1576de1834674c301a8665b44e7a115f126a80b25e9025fc728da3d\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a7a33a724bc47c63c3be7afd1ae10a2860772fc5d9ef347eb90f4824b89b4633\",\"dweb:/ipfs/QmXEgXzXAjPYbFXCY4m3hMG1tpXtETHo4kFpVTDLw1p4xv\"]},\"src/interfaces/IStakedPWNSupplyManager.sol\":{\"keccak256\":\"0x8d7823d6d99730f19a626ee004d86ddb660f98a125e535288d1192d8b219de15\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ea55ba97f764a0d730c905fffb007925da39d04fdf14d85aef89cc515cdd0c90\",\"dweb:/ipfs/QmRZh16nBN3kqDvaNqsAFtRXScHpgqh3vJZsw1RrJaSk3w\"]},\"src/interfaces/IVotingContract.sol\":{\"keccak256\":\"0xcae933dc722c7e44d49742fa3f0f669298921c1e4f12b594a491ab7dfd588b47\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://8a61fb9f14e7630ed30fff0b6e4fc437d940d3617d5cf9c25a150849537955c5\",\"dweb:/ipfs/QmbbmC1c8PhvYxP9FNo9a4Y6Hbjan9fqyNjrRzzsAoAdMS\"]},\"src/lib/EpochPowerLib.sol\":{\"keccak256\":\"0x1bace35a5d3945bd9c479527c896ec4e904ec9bc2edae48574f7b0f82d7c195a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://772bcc73c42378ae2f5de734a96670352475ead51022c23db2e0475493f89fa4\",\"dweb:/ipfs/QmfWYXHFe9h9F59rVmYcRsDkpeTJ8duFzDXx6ECZYEagkT\"]},\"src/lib/Error.sol\":{\"keccak256\":\"0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90\",\"dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto\"]},\"src/vePWN/VoteEscrowedPWNBase.sol\":{\"keccak256\":\"0xecd2a8230bf524ce620b141655fb97d3811fea3c6352e5e279c62f510bae8acc\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://18410378973cc6bd17bd2e64994fd3813cf76cf20299d1b2c1822ee7744a0246\",\"dweb:/ipfs/QmU1jVYqmV9DiQsZzhnFdWjYdDibLpqy7Jydoxno41Ln5c\"]},\"src/vePWN/VoteEscrowedPWNPower.sol\":{\"keccak256\":\"0x5a94d2593f95fa1430a380e1b1ffa4c0814c9b844e86ff77e9353354af738ec0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://536d84012424e867e87b877eba847528f8ffb8326405024bed108c942986db59\",\"dweb:/ipfs/Qmcxdi5g3ndkAVrFf3wTckQPuMGbkcvdHvsZg5tqeurxUL\"]},\"src/vePWN/VoteEscrowedPWNStake.sol\":{\"keccak256\":\"0x3ae406a0c4f2cabf35cd33c476ee87f3d3d27a4c6bb5d43c4dba8babd8f36644\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cae8391ec6a08bd972e70f071e8137f0ac2814134886faf9ce877e30eb0f5ef3\",\"dweb:/ipfs/QmeWZcu7m17UhfrUUWUZ1HEknvP5B33RNsSoowJgj2tYWE\"]},\"src/vePWN/VoteEscrowedPWNStakeMetadata.sol\":{\"keccak256\":\"0x3c94d223b887ea61640228507b017ac80614c0f4dc93565f330f611205cc8271\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://18d245e3bb4e2967411abac28e4ca314618e1d2f3df497d9d52ff0778d827768\",\"dweb:/ipfs/QmXWjSjitNeB7fUQRU5Jv8nMnP8x1945zcePdc9a2BJM1w\"]},\"src/vePWN/VoteEscrowedPWNStorage.sol\":{\"keccak256\":\"0xabd29c28b37152f3f1ae49d26118ee5693d4e87b6c06d0a0136b41c7eab98fa7\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://f5775bf56d341361f6d2985070cf17fc93eed4e8e3cac242f325708f426d777b\",\"dweb:/ipfs/QmfAKapqNkmLFWxBHAA3xKrdU6GbZzvaVsxJRup7UjFtb7\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.18+commit.87f61d96"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ApproveDisabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "DelegateBySigDisabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "DelegateDisabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "EpochStillRunning"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidAmount"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidLockUpPeriod"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "LockUpPeriodMismatch"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NotStakeOwner"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NothingToIncrease"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "lastCalculatedEpoch",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "PowerAlreadyCalculated"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TransferDisabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "TransferFromDisabled"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WithrawalBeforeLockUpEnd"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "delegator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "fromDelegate",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "toDelegate",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "DelegateChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "delegate",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "previousBalance",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newBalance",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "DelegateVotesChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "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": "uint256",
              "name": "stakeId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "staker",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "lockUpEpochs",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "StakeCreated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "staker",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "additionalAmount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newAmount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "additionalEpochs",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newEpochs",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newStakeId",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "StakeIncreased",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId1",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "stakeId2",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "staker",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "lockUpEpochs",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newStakeId",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "StakeMerged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "staker",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount2",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newStakeId1",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newStakeId2",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "StakeSplit",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "staker",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "StakeWithdrawn",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "TotalPowerCalculated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "pure",
          "type": "function",
          "name": "CLOCK_MODE",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "EPOCHS_IN_YEAR",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "TOTAL_POWER_NAMESPACE",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "calculateTotalPower"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "calculateTotalPowerUpTo"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "clock",
          "outputs": [
            {
              "internalType": "uint48",
              "name": "",
              "type": "uint48"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lockUpEpochs",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "createStake",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "pure",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "delegate"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "delegateBySig"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "delegates",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "epochClock",
          "outputs": [
            {
              "internalType": "contract PWNEpochClock",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getPastTotalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getPastVotes",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getVotes",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "additionalAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "additionalEpochs",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "increaseStake",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "newStakeId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_pwnToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_stakedPWN",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_epochClock",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "lastCalculatedTotalPowerEpoch",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "lastStakeId",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId1",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeId2",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mergeStakes",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "newStakeId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "pure",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pendingOwner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pwnToken",
          "outputs": [
            {
              "internalType": "contract PWN",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "splitAmount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "splitStake",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "newStakeId1",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "newStakeId2",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "stakeMetadata",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "initialEpoch",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lockUpEpochs",
              "type": "uint256"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "stakePowers",
          "outputs": [
            {
              "internalType": "struct VoteEscrowedPWNPower.EpochPower[]",
              "name": "powers",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "uint16",
                  "name": "epoch",
                  "type": "uint16"
                },
                {
                  "internalType": "int104",
                  "name": "power",
                  "type": "int104"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "stakedPWN",
          "outputs": [
            {
              "internalType": "contract StakedPWN",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "staker",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "stakerPowerAt",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "staker",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "epochs",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "stakerPowers",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "stakes",
          "outputs": [
            {
              "internalType": "uint16",
              "name": "initialEpoch",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "lockUpEpochs",
              "type": "uint8"
            },
            {
              "internalType": "uint104",
              "name": "amount",
              "type": "uint104"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "pure",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "epoch",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "totalPowerAt",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "epochs",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "totalPowers",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "stakeId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdrawStake"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "acceptOwnership()": {
            "details": "The new owner accepts the ownership transfer."
          },
          "calculateTotalPower()": {
            "details": "For more information, see {VoteEscrowedPWNPower.calculateTotalPowerUpTo}."
          },
          "calculateTotalPowerUpTo(uint256)": {
            "details": "The total power is not calculated for every epoch and needs to be calculated explicitly. This function calculates the total power for all epochs up to the given epoch."
          },
          "createStake(uint256,uint256)": {
            "details": "Mints stPWN token and transfers PWN tokens to the contract.",
            "params": {
              "amount": "Amount of PWN tokens to stake. Needs to be divisible by 100.",
              "lockUpEpochs": "Number of epochs to lock up the stake for. Needs to be in <13;65> + {130} epochs."
            },
            "returns": {
              "stakeId": "Id of the created stake."
            }
          },
          "increaseStake(uint256,uint256,uint256)": {
            "details": "Creates new stake and burns old stPWN token. If the stakes lockup ended, `additionalEpochs` will be added from the next epoch. The sum of `lockUpEpochs` and `additionalEpochs` must be in <13;65> + {130}. Expecting PWN token approval for the contract if `additionalAmount` > 0.",
            "params": {
              "additionalAmount": "Amount of PWN tokens to increase the stake by.",
              "additionalEpochs": "Number of epochs to add to exisitng stake lockup.",
              "stakeId": "Id of the stake to increase."
            },
            "returns": {
              "newStakeId": "Id of the new stake."
            }
          },
          "initialize(address,address,address,address)": {
            "details": "Can be called only once.",
            "params": {
              "_epochClock": "The address of the epoch clock contract.",
              "_owner": "The address of the owner. Should be PWN DAO.",
              "_pwnToken": "The address of the PWN token.",
              "_stakedPWN": "The address of the staked PWN contract."
            }
          },
          "mergeStakes(uint256,uint256)": {
            "details": "Burns both stPWN tokens and mints a new one. Aligns stakes lockups. First stake lockup must be longer than or equal to the second one.",
            "params": {
              "stakeId1": "Id of the first stake to merge.",
              "stakeId2": "Id of the second stake to merge."
            },
            "returns": {
              "newStakeId": "Id of the new merged stake."
            }
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "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."
          },
          "splitStake(uint256,uint256)": {
            "details": "Burns an original stPWN token and mints two new ones.",
            "params": {
              "splitAmount": "Amount of PWN tokens to split into a first new stake.",
              "stakeId": "Id of the stake to split."
            },
            "returns": {
              "newStakeId1": "Id of the first new stake.",
              "newStakeId2": "Id of the second new stake."
            }
          },
          "stakeMetadata(uint256)": {
            "params": {
              "stakeId": "The ID of the stake."
            },
            "returns": {
              "_0": "The metadata associated with the stake."
            }
          },
          "stakerPowerAt(address,uint256)": {
            "params": {
              "epoch": "The epoch at which the power is calculated.",
              "staker": "The address of the staker."
            },
            "returns": {
              "_0": "The power of the staker at the epoch."
            }
          },
          "stakerPowers(address,uint256[])": {
            "params": {
              "epochs": "The epochs for which to return the powers.",
              "staker": "The staker address."
            },
            "returns": {
              "_0": "powers The powers of the staker at the given epochs."
            }
          },
          "totalPowerAt(uint256)": {
            "params": {
              "epoch": "The epoch at which the power is calculated."
            },
            "returns": {
              "_0": "The total power at the epoch."
            }
          },
          "totalPowers(uint256[])": {
            "params": {
              "epochs": "The epochs for which to return the total powers."
            },
            "returns": {
              "_0": "powers The total powers at the given epochs."
            }
          },
          "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."
          },
          "withdrawStake(uint256)": {
            "details": "Burns stPWN token and transfers PWN tokens to the caller.",
            "params": {
              "stakeId": "Id of the stake to withdraw."
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "CLOCK_MODE()": {
            "notice": "{IERC6372.CLOCK_MODE}"
          },
          "EPOCHS_IN_YEAR()": {
            "notice": "The number of epochs in a year."
          },
          "TOTAL_POWER_NAMESPACE()": {
            "notice": "The namespace for the total power."
          },
          "allowance(address,address)": {
            "notice": "{IERC20Metadata.allowance}"
          },
          "approve(address,uint256)": {
            "notice": "{IERC20Metadata.approve}"
          },
          "balanceOf(address)": {
            "notice": "{IERC20Metadata.balanceOf}"
          },
          "calculateTotalPower()": {
            "notice": "Calculates the total power up to the current epoch."
          },
          "calculateTotalPowerUpTo(uint256)": {
            "notice": "Calculates the total power up to a given epoch."
          },
          "clock()": {
            "notice": "{IERC6372.clock}"
          },
          "createStake(uint256,uint256)": {
            "notice": "Creates a new stake for a caller."
          },
          "decimals()": {
            "notice": "{IERC20Metadata.decimals}"
          },
          "delegate(address)": {
            "notice": "{IVotes.delegate}"
          },
          "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
            "notice": "{IVotes.delegateBySig}"
          },
          "delegates(address)": {
            "notice": "{IVotes.delegates}"
          },
          "epochClock()": {
            "notice": "The address of the epoch clock contract."
          },
          "getPastTotalSupply(uint256)": {
            "notice": "{IVotes.getPastTotalSupply}"
          },
          "getPastVotes(address,uint256)": {
            "notice": "{IVotes.getPastVotes}"
          },
          "getVotes(address)": {
            "notice": "{IVotes.getVotes}"
          },
          "increaseStake(uint256,uint256,uint256)": {
            "notice": "Increases a stake for a caller."
          },
          "initialize(address,address,address,address)": {
            "notice": "Initializes the contract."
          },
          "lastCalculatedTotalPowerEpoch()": {
            "notice": "The last epoch in which the total power was calculated."
          },
          "lastStakeId()": {
            "notice": "The last stake id."
          },
          "mergeStakes(uint256,uint256)": {
            "notice": "Merges two stakes for a caller."
          },
          "name()": {
            "notice": "{IERC20Metadata.name}"
          },
          "pwnToken()": {
            "notice": "The address of the PWN token contract."
          },
          "splitStake(uint256,uint256)": {
            "notice": "Splits a stake for a caller."
          },
          "stakeMetadata(uint256)": {
            "notice": "Returns the metadata associated with a stake."
          },
          "stakedPWN()": {
            "notice": "The address of the staked PWN token contract."
          },
          "stakerPowerAt(address,uint256)": {
            "notice": "Returns the power of a staker at an epoch."
          },
          "stakerPowers(address,uint256[])": {
            "notice": "Returns the power of a staker at given epochs."
          },
          "stakes(uint256)": {
            "notice": "The stake for a stake id."
          },
          "symbol()": {
            "notice": "{IERC20Metadata.symbol}"
          },
          "totalPowerAt(uint256)": {
            "notice": "Returns the total power at an epoch."
          },
          "totalPowers(uint256[])": {
            "notice": "Returns the total power at given epochs."
          },
          "totalSupply()": {
            "notice": "{IERC20Metadata.totalSupply}"
          },
          "transfer(address,uint256)": {
            "notice": "{IERC20Metadata.transfer}"
          },
          "transferFrom(address,address,uint256)": {
            "notice": "{IERC20Metadata.transferFrom}"
          },
          "withdrawStake(uint256)": {
            "notice": "Withdraws a stake for a caller."
          }
        },
        "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/VoteEscrowedPWN.sol": "VoteEscrowedPWN"
      },
      "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/governance/utils/IVotes.sol": {
        "keccak256": "0x1618ddebe73377660f6da71afcba35d5ac4c4600918b3a381d9c6f37eba613eb",
        "urls": [
          "bzz-raw://666c8d7c62478b55e082f1835275b7acfc1595491998df6d67183ff2c70eab96",
          "dweb:/ipfs/QmVXmnXfxNaLhoX283dqyKJ8DJbF5thUd9sMuRoFpNMwr7"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol": {
        "keccak256": "0x687142c633b33037c3137b6bfeef848a44eb1ef83fb5fdb59a3affdf28a46516",
        "urls": [
          "bzz-raw://0d26b5d0495ffb4c36b1abdf003f43ab478c324752ce60847af8019bad5a3ad0",
          "dweb:/ipfs/QmQGcXZcq7eBrZUyxLbHFkBFWCyMwFonvJwLRSsL82dbWx"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol": {
        "keccak256": "0xcaea9aeda3816ba872358c828f4f01455c22ae48ced49c4c7d72bd74176c09b9",
        "urls": [
          "bzz-raw://16ff22d8df5aee94510ee43d361b6147caef164941a684cedcb75be44f351fe6",
          "dweb:/ipfs/QmaCCwMdHVdPApuEJHLZapSJyA7mp5dAugpma3VUzWGd8E"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6",
        "urls": [
          "bzz-raw://720d6bb56ea0c4ef781c0bd65c5bd0541f5a46100163b2587170f97658d2deed",
          "dweb:/ipfs/QmTS2biLVPrv8CeeXCaKmkFxonMiRvc1LxiYBRYDAJHQUS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
        "keccak256": "0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c",
        "urls": [
          "bzz-raw://cac938788bc4be12101e59d45588b4e059579f4e61062e1cda8d6b06c0191b15",
          "dweb:/ipfs/QmV2JKCyjTVH3rkWNrfdJRhAT7tZ3usAN2XcnD4h53Mvih"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305",
        "urls": [
          "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5",
          "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "keccak256": "0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca",
        "urls": [
          "bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd",
          "dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"
        ],
        "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/Base64.sol": {
        "keccak256": "0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136",
        "urls": [
          "bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96",
          "dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ"
        ],
        "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/SafeCast.sol": {
        "keccak256": "0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad",
        "urls": [
          "bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278",
          "dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
        "urls": [
          "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
          "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
        ],
        "license": "MIT"
      },
      "src/PWN.sol": {
        "keccak256": "0x72bb9bcd405d3993f86351a1320b78a0c772b6cb0ee095553987b595fb370883",
        "urls": [
          "bzz-raw://c2b33ed3e6f780a469cda95085a1f3c6f334d7dc79a75c951e1ede1dc3271ef0",
          "dweb:/ipfs/QmcAZ6DaeY45uYQ1BamH68Y1jwDX7u1HGogLan62PLiyix"
        ],
        "license": "GPL-3.0-only"
      },
      "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/VoteEscrowedPWN.sol": {
        "keccak256": "0xb2d56ceeb1576de1834674c301a8665b44e7a115f126a80b25e9025fc728da3d",
        "urls": [
          "bzz-raw://a7a33a724bc47c63c3be7afd1ae10a2860772fc5d9ef347eb90f4824b89b4633",
          "dweb:/ipfs/QmXEgXzXAjPYbFXCY4m3hMG1tpXtETHo4kFpVTDLw1p4xv"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IStakedPWNSupplyManager.sol": {
        "keccak256": "0x8d7823d6d99730f19a626ee004d86ddb660f98a125e535288d1192d8b219de15",
        "urls": [
          "bzz-raw://ea55ba97f764a0d730c905fffb007925da39d04fdf14d85aef89cc515cdd0c90",
          "dweb:/ipfs/QmRZh16nBN3kqDvaNqsAFtRXScHpgqh3vJZsw1RrJaSk3w"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IVotingContract.sol": {
        "keccak256": "0xcae933dc722c7e44d49742fa3f0f669298921c1e4f12b594a491ab7dfd588b47",
        "urls": [
          "bzz-raw://8a61fb9f14e7630ed30fff0b6e4fc437d940d3617d5cf9c25a150849537955c5",
          "dweb:/ipfs/QmbbmC1c8PhvYxP9FNo9a4Y6Hbjan9fqyNjrRzzsAoAdMS"
        ],
        "license": "GPL-3.0-only"
      },
      "src/lib/EpochPowerLib.sol": {
        "keccak256": "0x1bace35a5d3945bd9c479527c896ec4e904ec9bc2edae48574f7b0f82d7c195a",
        "urls": [
          "bzz-raw://772bcc73c42378ae2f5de734a96670352475ead51022c23db2e0475493f89fa4",
          "dweb:/ipfs/QmfWYXHFe9h9F59rVmYcRsDkpeTJ8duFzDXx6ECZYEagkT"
        ],
        "license": "GPL-3.0-only"
      },
      "src/lib/Error.sol": {
        "keccak256": "0x8f54795e326660cef0caf4dbb3adfb2b404203babf485df1b373a930f2877b9c",
        "urls": [
          "bzz-raw://f5510b769bb8639e9310405f846c53a188503de2aa8c9b41862543f99e872e90",
          "dweb:/ipfs/QmPLNuydDHYGUGogzvdWFjzPSMSBqBztKxLn6udTzVbUto"
        ],
        "license": "GPL-3.0-only"
      },
      "src/vePWN/VoteEscrowedPWNBase.sol": {
        "keccak256": "0xecd2a8230bf524ce620b141655fb97d3811fea3c6352e5e279c62f510bae8acc",
        "urls": [
          "bzz-raw://18410378973cc6bd17bd2e64994fd3813cf76cf20299d1b2c1822ee7744a0246",
          "dweb:/ipfs/QmU1jVYqmV9DiQsZzhnFdWjYdDibLpqy7Jydoxno41Ln5c"
        ],
        "license": "GPL-3.0-only"
      },
      "src/vePWN/VoteEscrowedPWNPower.sol": {
        "keccak256": "0x5a94d2593f95fa1430a380e1b1ffa4c0814c9b844e86ff77e9353354af738ec0",
        "urls": [
          "bzz-raw://536d84012424e867e87b877eba847528f8ffb8326405024bed108c942986db59",
          "dweb:/ipfs/Qmcxdi5g3ndkAVrFf3wTckQPuMGbkcvdHvsZg5tqeurxUL"
        ],
        "license": "GPL-3.0-only"
      },
      "src/vePWN/VoteEscrowedPWNStake.sol": {
        "keccak256": "0x3ae406a0c4f2cabf35cd33c476ee87f3d3d27a4c6bb5d43c4dba8babd8f36644",
        "urls": [
          "bzz-raw://cae8391ec6a08bd972e70f071e8137f0ac2814134886faf9ce877e30eb0f5ef3",
          "dweb:/ipfs/QmeWZcu7m17UhfrUUWUZ1HEknvP5B33RNsSoowJgj2tYWE"
        ],
        "license": "GPL-3.0-only"
      },
      "src/vePWN/VoteEscrowedPWNStakeMetadata.sol": {
        "keccak256": "0x3c94d223b887ea61640228507b017ac80614c0f4dc93565f330f611205cc8271",
        "urls": [
          "bzz-raw://18d245e3bb4e2967411abac28e4ca314618e1d2f3df497d9d52ff0778d827768",
          "dweb:/ipfs/QmXWjSjitNeB7fUQRU5Jv8nMnP8x1945zcePdc9a2BJM1w"
        ],
        "license": "GPL-3.0-only"
      },
      "src/vePWN/VoteEscrowedPWNStorage.sol": {
        "keccak256": "0xabd29c28b37152f3f1ae49d26118ee5693d4e87b6c06d0a0136b41c7eab98fa7",
        "urls": [
          "bzz-raw://f5775bf56d341361f6d2985070cf17fc93eed4e8e3cac242f325708f426d777b",
          "dweb:/ipfs/QmfAKapqNkmLFWxBHAA3xKrdU6GbZzvaVsxJRup7UjFtb7"
        ],
        "license": "GPL-3.0-only"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/VoteEscrowedPWN.sol",
    "id": 52185,
    "exportedSymbols": {
      "PWN": [
        51453
      ],
      "PWNEpochClock": [
        51522
      ],
      "StakedPWN": [
        52082
      ],
      "VoteEscrowedPWN": [
        52184
      ],
      "VoteEscrowedPWNBase": [
        53089
      ],
      "VoteEscrowedPWNPower": [
        53648
      ],
      "VoteEscrowedPWNStake": [
        54614
      ],
      "VoteEscrowedPWNStakeMetadata": [
        55371
      ]
    },
    "nodeType": "SourceUnit",
    "src": "41:2394:55",
    "nodes": [
      {
        "id": 52084,
        "nodeType": "PragmaDirective",
        "src": "41:23:55",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".18"
        ]
      },
      {
        "id": 52086,
        "nodeType": "ImportDirective",
        "src": "66:32:55",
        "nodes": [],
        "absolutePath": "src/PWN.sol",
        "file": "./PWN.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 51454,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52085,
              "name": "PWN",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 51453,
              "src": "75:3:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52088,
        "nodeType": "ImportDirective",
        "src": "99:52:55",
        "nodes": [],
        "absolutePath": "src/PWNEpochClock.sol",
        "file": "./PWNEpochClock.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 51523,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52087,
              "name": "PWNEpochClock",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 51522,
              "src": "108:13:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52090,
        "nodeType": "ImportDirective",
        "src": "152:44:55",
        "nodes": [],
        "absolutePath": "src/StakedPWN.sol",
        "file": "./StakedPWN.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 52083,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52089,
              "name": "StakedPWN",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52082,
              "src": "161:9:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52092,
        "nodeType": "ImportDirective",
        "src": "197:70:55",
        "nodes": [],
        "absolutePath": "src/vePWN/VoteEscrowedPWNBase.sol",
        "file": "./vePWN/VoteEscrowedPWNBase.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 53090,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52091,
              "name": "VoteEscrowedPWNBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 53089,
              "src": "206:19:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52094,
        "nodeType": "ImportDirective",
        "src": "268:72:55",
        "nodes": [],
        "absolutePath": "src/vePWN/VoteEscrowedPWNStake.sol",
        "file": "./vePWN/VoteEscrowedPWNStake.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 54615,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52093,
              "name": "VoteEscrowedPWNStake",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 54614,
              "src": "277:20:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52096,
        "nodeType": "ImportDirective",
        "src": "341:88:55",
        "nodes": [],
        "absolutePath": "src/vePWN/VoteEscrowedPWNStakeMetadata.sol",
        "file": "./vePWN/VoteEscrowedPWNStakeMetadata.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 55372,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52095,
              "name": "VoteEscrowedPWNStakeMetadata",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 55371,
              "src": "350:28:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52098,
        "nodeType": "ImportDirective",
        "src": "430:72:55",
        "nodes": [],
        "absolutePath": "src/vePWN/VoteEscrowedPWNPower.sol",
        "file": "./vePWN/VoteEscrowedPWNPower.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52185,
        "sourceUnit": 53649,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52097,
              "name": "VoteEscrowedPWNPower",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 53648,
              "src": "439:20:55",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52184,
        "nodeType": "ContractDefinition",
        "src": "682:1752:55",
        "nodes": [
          {
            "id": 52109,
            "nodeType": "FunctionDefinition",
            "src": "1041:97:55",
            "nodes": [],
            "body": {
              "id": 52108,
              "nodeType": "Block",
              "src": "1055:83:55",
              "nodes": [],
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 52106,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1052:2:55"
            },
            "returnParameters": {
              "id": 52107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1055:0:55"
            },
            "scope": 52184,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 52146,
            "nodeType": "FunctionDefinition",
            "src": "1480:325:55",
            "nodes": [],
            "body": {
              "id": 52145,
              "nodeType": "Block",
              "src": "1635:170:55",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 52127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 52123,
                      "name": "pwnToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55396,
                      "src": "1645:8:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWN_$51453",
                        "typeString": "contract PWN"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 52125,
                          "name": "_pwnToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52112,
                          "src": "1660:9:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 52124,
                        "name": "PWN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51453,
                        "src": "1656:3:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWN_$51453_$",
                          "typeString": "type(contract PWN)"
                        }
                      },
                      "id": 52126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1656:14:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWN_$51453",
                        "typeString": "contract PWN"
                      }
                    },
                    "src": "1645:25:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWN_$51453",
                      "typeString": "contract PWN"
                    }
                  },
                  "id": 52128,
                  "nodeType": "ExpressionStatement",
                  "src": "1645:25:55"
                },
                {
                  "expression": {
                    "id": 52133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 52129,
                      "name": "stakedPWN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55400,
                      "src": "1680:9:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StakedPWN_$52082",
                        "typeString": "contract StakedPWN"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 52131,
                          "name": "_stakedPWN",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52114,
                          "src": "1702:10:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 52130,
                        "name": "StakedPWN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52082,
                        "src": "1692:9:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_StakedPWN_$52082_$",
                          "typeString": "type(contract StakedPWN)"
                        }
                      },
                      "id": 52132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1692:21:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StakedPWN_$52082",
                        "typeString": "contract StakedPWN"
                      }
                    },
                    "src": "1680:33:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StakedPWN_$52082",
                      "typeString": "contract StakedPWN"
                    }
                  },
                  "id": 52134,
                  "nodeType": "ExpressionStatement",
                  "src": "1680:33:55"
                },
                {
                  "expression": {
                    "id": 52139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 52135,
                      "name": "epochClock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55404,
                      "src": "1723:10:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                        "typeString": "contract PWNEpochClock"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 52137,
                          "name": "_epochClock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52116,
                          "src": "1750:11:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 52136,
                        "name": "PWNEpochClock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51522,
                        "src": "1736:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNEpochClock_$51522_$",
                          "typeString": "type(contract PWNEpochClock)"
                        }
                      },
                      "id": 52138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1736:26:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                        "typeString": "contract PWNEpochClock"
                      }
                    },
                    "src": "1723:39:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNEpochClock_$51522",
                      "typeString": "contract PWNEpochClock"
                    }
                  },
                  "id": 52140,
                  "nodeType": "ExpressionStatement",
                  "src": "1723:39:55"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52142,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52118,
                        "src": "1791:6:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52141,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        44771
                      ],
                      "referencedDeclaration": 44771,
                      "src": "1772:18:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1772:26:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52144,
                  "nodeType": "ExpressionStatement",
                  "src": "1772:26:55"
                }
              ]
            },
            "documentation": {
              "id": 52110,
              "nodeType": "StructuredDocumentation",
              "src": "1144:331:55",
              "text": "@notice Initializes the contract.\n @dev Can be called only once.\n @param _pwnToken The address of the PWN token.\n @param _stakedPWN The address of the staked PWN contract.\n @param _epochClock The address of the epoch clock contract.\n @param _owner The address of the owner. Should be PWN DAO."
            },
            "functionSelector": "f8c8765e",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 52121,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 52120,
                  "name": "initializer",
                  "nameLocations": [
                    "1623:11:55"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 45718,
                  "src": "1623:11:55"
                },
                "nodeType": "ModifierInvocation",
                "src": "1623:11:55"
              }
            ],
            "name": "initialize",
            "nameLocation": "1489:10:55",
            "parameters": {
              "id": 52119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52112,
                  "mutability": "mutable",
                  "name": "_pwnToken",
                  "nameLocation": "1517:9:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52146,
                  "src": "1509:17:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52111,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1509:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52114,
                  "mutability": "mutable",
                  "name": "_stakedPWN",
                  "nameLocation": "1544:10:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52146,
                  "src": "1536:18:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1536:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52116,
                  "mutability": "mutable",
                  "name": "_epochClock",
                  "nameLocation": "1572:11:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52146,
                  "src": "1564:19:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1564:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52118,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1601:6:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52146,
                  "src": "1593:14:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52117,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1593:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1499:114:55"
            },
            "returnParameters": {
              "id": 52122,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1635:0:55"
            },
            "scope": 52184,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52166,
            "nodeType": "FunctionDefinition",
            "src": "1919:246:55",
            "nodes": [],
            "body": {
              "id": 52165,
              "nodeType": "Block",
              "src": "2107:58:55",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52161,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52149,
                        "src": "2144:6:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 52162,
                        "name": "epoch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52151,
                        "src": "2152:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 52159,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "2124:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_VoteEscrowedPWN_$52184_$",
                          "typeString": "type(contract super VoteEscrowedPWN)"
                        }
                      },
                      "id": 52160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2130:13:55",
                      "memberName": "stakerPowerAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53414,
                      "src": "2124:19:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 52163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2124:34:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 52158,
                  "id": 52164,
                  "nodeType": "Return",
                  "src": "2117:41:55"
                }
              ]
            },
            "baseFunctions": [
              52889,
              53414
            ],
            "documentation": {
              "id": 52147,
              "nodeType": "StructuredDocumentation",
              "src": "1879:35:55",
              "text": "@inheritdoc VoteEscrowedPWNBase"
            },
            "functionSelector": "68ed223e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakerPowerAt",
            "nameLocation": "1928:13:55",
            "overrides": {
              "id": 52155,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 52153,
                  "name": "VoteEscrowedPWNBase",
                  "nameLocations": [
                    "2034:19:55"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53089,
                  "src": "2034:19:55"
                },
                {
                  "id": 52154,
                  "name": "VoteEscrowedPWNPower",
                  "nameLocations": [
                    "2055:20:55"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53648,
                  "src": "2055:20:55"
                }
              ],
              "src": "2025:51:55"
            },
            "parameters": {
              "id": 52152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52149,
                  "mutability": "mutable",
                  "name": "staker",
                  "nameLocation": "1950:6:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52166,
                  "src": "1942:14:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1942:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52151,
                  "mutability": "mutable",
                  "name": "epoch",
                  "nameLocation": "1966:5:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52166,
                  "src": "1958:13:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1958:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1941:31:55"
            },
            "returnParameters": {
              "id": 52158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52157,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 52166,
                  "src": "2094:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2094:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2093:9:55"
            },
            "scope": 52184,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 52183,
            "nodeType": "FunctionDefinition",
            "src": "2211:220:55",
            "nodes": [],
            "body": {
              "id": 52182,
              "nodeType": "Block",
              "src": "2382:49:55",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52179,
                        "name": "epoch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52169,
                        "src": "2418:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 52177,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "2399:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_VoteEscrowedPWN_$52184_$",
                          "typeString": "type(contract super VoteEscrowedPWN)"
                        }
                      },
                      "id": 52178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2405:12:55",
                      "memberName": "totalPowerAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53573,
                      "src": "2399:18:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 52180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2399:25:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 52176,
                  "id": 52181,
                  "nodeType": "Return",
                  "src": "2392:32:55"
                }
              ]
            },
            "baseFunctions": [
              52897,
              53573
            ],
            "documentation": {
              "id": 52167,
              "nodeType": "StructuredDocumentation",
              "src": "2171:35:55",
              "text": "@inheritdoc VoteEscrowedPWNBase"
            },
            "functionSelector": "fe7f0e8b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalPowerAt",
            "nameLocation": "2220:12:55",
            "overrides": {
              "id": 52173,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 52171,
                  "name": "VoteEscrowedPWNBase",
                  "nameLocations": [
                    "2309:19:55"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53089,
                  "src": "2309:19:55"
                },
                {
                  "id": 52172,
                  "name": "VoteEscrowedPWNPower",
                  "nameLocations": [
                    "2330:20:55"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 53648,
                  "src": "2330:20:55"
                }
              ],
              "src": "2300:51:55"
            },
            "parameters": {
              "id": 52170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52169,
                  "mutability": "mutable",
                  "name": "epoch",
                  "nameLocation": "2241:5:55",
                  "nodeType": "VariableDeclaration",
                  "scope": 52183,
                  "src": "2233:13:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2233:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2232:15:55"
            },
            "returnParameters": {
              "id": 52176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52175,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 52183,
                  "src": "2369:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2369:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2368:9:55"
            },
            "scope": 52184,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 52100,
              "name": "VoteEscrowedPWNStake",
              "nameLocations": [
                "710:20:55"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 54614,
              "src": "710:20:55"
            },
            "id": 52101,
            "nodeType": "InheritanceSpecifier",
            "src": "710:20:55"
          },
          {
            "baseName": {
              "id": 52102,
              "name": "VoteEscrowedPWNStakeMetadata",
              "nameLocations": [
                "732:28:55"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 55371,
              "src": "732:28:55"
            },
            "id": 52103,
            "nodeType": "InheritanceSpecifier",
            "src": "732:28:55"
          },
          {
            "baseName": {
              "id": 52104,
              "name": "VoteEscrowedPWNPower",
              "nameLocations": [
                "762:20:55"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 53648,
              "src": "762:20:55"
            },
            "id": 52105,
            "nodeType": "InheritanceSpecifier",
            "src": "762:20:55"
          }
        ],
        "canonicalName": "VoteEscrowedPWN",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 52099,
          "nodeType": "StructuredDocumentation",
          "src": "504:178:55",
          "text": "@title VoteEscrowedPWN\n @notice VoteEscrowedPWN is a contract for voting with PWN tokens.\n @dev VoteEscrowedPWN is a contract for gaining voting power with PWN tokens."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          52184,
          53648,
          55371,
          52196,
          54614,
          53089,
          44911,
          44872,
          46506,
          46481,
          55438,
          45816,
          44794,
          44711,
          47993
        ],
        "name": "VoteEscrowedPWN",
        "nameLocation": "691:15:55",
        "scope": 52185,
        "usedErrors": [
          52511,
          52513,
          52515,
          52517,
          52519,
          52523,
          52527,
          52531,
          52533,
          52535,
          52537,
          52539,
          52541
        ]
      }
    ],
    "license": "GPL-3.0-only"
  },
  "id": 55
}