{
  "_format": "hh-sol-artifact-1",
  "contractName": "Staking",
  "sourceName": "contracts/governance/Staking/Staking.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "ContractCodeHashAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "ContractCodeHashRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lockedUntil",
          "type": "uint256"
        },
        {
          "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": "lockedUntil",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateStakeChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousDate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountStaked",
          "type": "uint256"
        }
      ],
      "name": "ExtendedStakingDuration",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isGovernance",
          "type": "bool"
        }
      ],
      "name": "StakingWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lockedUntil",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalStaked",
          "type": "uint256"
        }
      ],
      "name": "TokensStaked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensUnlocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "VestingTokensWithdrawn",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DELEGATION_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DOMAIN_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_DURATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_VOTING_WEIGHT",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SOVToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "WEIGHT_FACTOR",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "admins",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "allUnlocked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "balance",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startDate",
          "type": "uint256"
        }
      ],
      "name": "computeWeightByDate",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "weight",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "lockDate",
          "type": "uint256"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "lockDate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "delegateStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "fromBlock",
          "type": "uint32"
        },
        {
          "internalType": "uint96",
          "name": "stake",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "previousLock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        }
      ],
      "name": "extendStakingDuration",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeSharing",
      "outputs": [
        {
          "internalType": "contract IFeeSharingProxy",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "lockedTS",
          "type": "uint256"
        }
      ],
      "name": "getCurrentStakedUntil",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getCurrentVotes",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPriorStakeByDateForDelegatee",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPriorTotalStakesForDate",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint32",
          "name": "blockNumber",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "name": "getPriorTotalVotingPower",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "totalVotingPower",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPriorUserStakeByDate",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "getPriorVotes",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "votes",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "getPriorWeightedStake",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "votes",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getStakes",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "dates",
          "type": "uint256[]"
        },
        {
          "internalType": "uint96[]",
          "name": "stakes",
          "type": "uint96[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        }
      ],
      "name": "getWithdrawAmounts",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        },
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "governanceWithdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "governanceWithdrawVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kickoffTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "migrateToNewStakingContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newStakingContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "numDelegateStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "numTotalStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "numUserStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeSharing",
          "type": "address"
        }
      ],
      "name": "setFeeSharing",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newStakingContract",
          "type": "address"
        }
      ],
      "name": "setNewStakingContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingRegistryProxy",
          "type": "address"
        }
      ],
      "name": "setVestingRegistry",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint96",
          "name": "_weightScaling",
          "type": "uint96"
        }
      ],
      "name": "setWeightScaling",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "stakeFor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "stake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "stakeFor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "stakeWithApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "intervalLength",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "stakeFor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "stakesBySchedule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "timestampToLockDate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockDate",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "totalStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "fromBlock",
          "type": "uint32"
        },
        {
          "internalType": "uint96",
          "name": "stake",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unlockAllTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "userStakingCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "fromBlock",
          "type": "uint32"
        },
        {
          "internalType": "uint96",
          "name": "stake",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "vestingCodeHashes",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingRegistryLogic",
      "outputs": [
        {
          "internalType": "contract VestingRegistryLogic",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "vestingWhitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "weightScaling",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startDate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "weightedStakeByDate",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "power",
          "type": "uint96"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052600a608081905269534f565374616b696e6760b01b60a09081526200002d9160029190620000ae565b506005805460ff19169055600d80546001600160a01b0316600360a01b179055600062000059620000a9565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000150565b335b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000f157805160ff191683800117855562000121565b8280016001018555821562000121579182015b828111156200012157825182559160200191906001019062000104565b506200012f92915062000133565b5090565b620000ab91905b808211156200012f57600081556001016200013a565b61555980620001606000396000f3fe608060405234801561001057600080fd5b506004361061038d5760003560e01c8063836eebee116101de578063b4b5ea571161010f578063db27ec18116100ad578063e97ffacb1161007c578063e97ffacb14610767578063eefb8c471461077a578063f09cfc641461078d578063f2fde38b146107a05761038d565b8063db27ec1814610726578063dfb267c214610739578063e63a562e1461074c578063e7a324dc1461075f5761038d565b8063cf7b684a116100e9578063cf7b684a146106e5578063d27569e7146106f8578063d5c3846414610700578063dab6ca44146107135761038d565b8063b4b5ea57146106b7578063b8a98732146106ca578063bf626ec1146106dd5761038d565b806396a590c11161017c578063a58848c511610156578063a58848c51461068c578063adae900214610694578063ae81dfe4146106a7578063b1724b46146106af5761038d565b806396a590c1146106505780639929e886146106715780639a377b82146106795761038d565b80638f32d59b116101b85780638f32d59b146106025780638f4ffcb11461060a5780639436e7d41461061d57806394c2ce581461063d5761038d565b8063836eebee146105d45780638da5cb5b146105e75780638dae1b16146105ef5761038d565b8063429b62e5116102c357806368cefccc1161026157806372ec97951161023057806372ec97951461057a5780637ba6f4581461058d5780637ecebe00146105ae578063800b64ca146105c15761038d565b806368cefccc146105205780636b6fde0e14610541578063704802751461055457806370a08231146105675761038d565b80635419675f1161029d5780635419675f146104ea5780635e0be607146104f2578063626ee2d9146104fa57806362cf8a081461050d5761038d565b8063429b62e5146104b1578063450b0601146104c45780634b2fea1e146104d75761038d565b80631785f53c1161033057806325629ec01161030a57806325629ec01461045857806327dd1b001461046b57806337e6b1c11461048b5780633827fca51461049e5761038d565b80631785f53c1461042a57806320606b701461043d5780632522d7ba146104455761038d565b806307392cc01161036c57806307392cc0146103da5780630c09ddfd146103fa578063104932cf1461040d57806317748adc146104155761038d565b8062073f9914610392578063026e402b146103b057806303a18fa3146103c5575b600080fd5b61039a6107b3565b6040516103a79190614d3b565b60405180910390f35b6103c36103be366004613a61565b6107b9565b005b6103cd6107d3565b6040516103a79190614dff565b6103ed6103e8366004613d2f565b6107e2565b6040516103a79190614d2d565b6103c3610408366004613c9c565b6107f7565b6103cd610835565b61041d610844565b6040516103a79190615040565b6103c3610438366004613a01565b610849565b61039a6108c8565b61041d610453366004613e84565b6108df565b6103c3610466366004613f23565b610945565b61047e610479366004613a61565b61095a565b6040516103a79190614c73565b61041d610499366004613b0f565b610980565b6103c36104ac366004613a27565b6109f8565b6103ed6104bf366004613a01565b610b0a565b6103c36104d2366004613a01565b610b1f565b6103c36104e5366004613dcd565b610b8b565b6103c3610c2a565b6103c3610c59565b6103c3610508366004613a01565b610d41565b61041d61051b366004613dae565b610dad565b61053361052e366004613c59565b610ee8565b6040516103a7929190615032565b61053361054f366004613c59565b610f23565b6103c3610562366004613a01565b610f5e565b61041d610575366004613a01565b610fd5565b61039a610588366004613d2f565b611044565b6105a061059b366004613a01565b61108f565b6040516103a7929190614d08565b61039a6105bc366004613a01565b6111ca565b6103c36105cf366004613ee0565b6111dc565b61041d6105e2366004613b0f565b61122a565b61047e611282565b61041d6105fd366004613b5c565b611291565b6103ed611313565b6103c3610618366004613a91565b611337565b61063061062b366004613d2f565b61152b565b6040516103a79190615024565b61063061064b366004613a61565b611543565b61066361065e366004613ec1565b611566565b6040516103a7929190615084565b6103ed61158f565b6103c3610687366004613a01565b611598565b6103cd61160a565b6103ed6106a2366004613a01565b611619565b61047e61162e565b61039a611642565b61041d6106c5366004613a01565b61164a565b6103c36106d8366004613ea3565b611660565b61041d6116ec565b61041d6106f3366004613b0f565b611702565b61041d61173f565b61041d61070e366004613d2f565b611744565b6103c3610721366004613ee0565b6117a0565b610630610734366004613a61565b6117ba565b610533610747366004613e54565b6117dd565b6103c361075a366004613bbd565b611812565b61039a6119d0565b61041d610775366004613b0f565b6119dc565b6103c3610788366004613dae565b611c25565b61041d61079b366004613dae565b611dc9565b6103c36107ae366004613a01565b611fa2565b60015481565b6107c4338383611fd2565b6107cf33838361208b565b5050565b600d546001600160a01b031681565b60106020526000908152604090205460ff1681565b33301461081f5760405162461bcd60e51b815260040161081690614f4e565b60405180910390fd5b61082e858585858560006121c4565b5050505050565b6011546001600160a01b031681565b600981565b610851611313565b61086d5760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166000908152600f602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906108bd908390614c73565b60405180910390a150565b6040516108d490614c5d565b604051809103902081565b6000806108eb83611044565b905063059fa6008101815b81811161093c576109308461091283868a63ffffffff166123a2565b6040518060800160405280605581526020016151e260559139612408565b935062127500016108f6565b50505092915050565b610954338585858560006121c4565b50505050565b60046020908152600092835260408084209091529082529020546001600160a01b031681565b60008061098c83611044565b905063059fa6008101815b8181116109ee5760006109ac8883868a611291565b90506001600160601b038116156109e3576109e085826040518060800160405280604c81526020016153ff604c9139612408565b94505b506212750001610997565b5050509392505050565b610a00611313565b80610a1a5750336000908152600f602052604090205460ff165b610a365760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0382166000818152600e602052604090819020805460ff1916600117905551633c7925e360e11b81526378f24bc690610a7a908490600401614c73565b600060405180830381600087803b158015610a9457600080fd5b505af1158015610aa8573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600e602052604090819020805460ff19169055517f2366e0b6b1af17c0ceed50685c570d519cae11e7faaf007bbe667e94a5ee3cd59150610afe9084908490614c8f565b60405180910390a15050565b600f6020526000908152604090205460ff1681565b610b27611313565b610b435760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b038116610b695760405162461bcd60e51b815260040161081690614e5e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b98864201611044565b905063059fa600851115610bae5763059fa60094505b6000610bbb864201611044565b905060008583830381610bca57fe5b0460010190506000818a81610bdb57fe5b04905060018210610bfc57610bfc336001840383028c0386898960016121c4565b8387015b838111610c1d57610c163383838a8a60016121c4565b8701610c00565b5050505050505050505050565b60055461010090046001600160a01b0316610c575760405162461bcd60e51b815260040161081690614e2e565b565b610c61611313565b610c7d5760405162461bcd60e51b815260040161081690614f4e565b6005805460ff191660011790556003546040516370a0823160e01b81527fd8cc4e8d808fe950b07bfffcd83eebf1190cd35ea77fe0c8a7d75a6e9b90e5c1916001600160a01b0316906370a0823190610cda903090600401614c73565b60206040518083038186803b158015610cf257600080fd5b505afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d2a9190810190613d90565b604051610d379190614d3b565b60405180910390a1565b610d49611313565b610d655760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b038116610d8b5760405162461bcd60e51b815260040161081690614f9e565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600081831015610dcf5760405162461bcd60e51b815260040161081690614f3e565b81830363059fa600811115610df65760405162461bcd60e51b815260040161081690614f5e565b6000620151808263059fa600036001600160601b031681610e1357fe5b049050610edf600a621232106001600160601b0316610e93600a600902610e75621232108788026040518060400160405280601f81526020017f756e646572666c6f77206f6e207765696768742063616c63756c6174696f6e0081525061243b565b6040518060600160405280602d8152602001615237602d913961247a565b6001600160601b031681610ea357fe5b046040518060400160405280601e81526020017f6f766572666c6f77206f6e2077656967687420636f6d7075746174696f6e0000815250612408565b95945050505050565b600a60209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b600860209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b610f66611313565b610f825760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166000908152600f602052604090819020805460ff19166001179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906108bd908390614c73565b6001546000905b63059fa6004201811161103e5761103282610ff785846124d8565b6040518060400160405280601c81526020017f5374616b696e673a3a62616c616e63654f663a206f766572666c6f7700000000815250612408565b91506212750001610fdc565b50919050565b60006001548210156110685760405162461bcd60e51b815260040161081690614eee565b60006212750060015484038161107a57fe5b04905060015462127500820201915050919050565b60608060006110a363059fa6004201611044565b60015490915060009062127500015b8281116110e55760006110c587836124d8565b6001600160601b031611156110db576001909101905b62127500016110b2565b5080604051908082528060200260200182016040528015611110578160200160208202803883390190505b5093508060405190808252806020026020018201604052801561113d578160200160208202803883390190505b5060015490935060009062127500015b8381116111c157600061116088836124d8565b90506001600160601b038116156111b6578187848151811061117e57fe5b6020026020010181815250508086848151811061119757fe5b6001600160601b03909216602092830291909101909101526001909201915b50621275000161114d565b50505050915091565b600c6020526000908152604090205481565b336000908152600e602052604090205460ff1661120b5760405162461bcd60e51b815260040161081690614f4e565b6112188383836001612539565b6112258383836001612823565b505050565b60008061123683611044565b905063059fa6008101815b8181116109ee57611276846112588984878b612885565b6040518060800160405280604a81526020016152d5604a9139612408565b93506212750001611241565b6000546001600160a01b031690565b60008061129f8686856128ed565b90506001600160601b038116156113055760006112bc8686610dad565b9050600a6001600160601b03166112ec83836040518060600160405280603d8152602001615264603d913961247a565b6001600160601b0316816112fc57fe5b0492505061130a565b600091505b50949350505050565b600080546001600160a01b0316611328612b42565b6001600160a01b031614905090565b61133f612b46565b6001600160a01b0316336001600160a01b03161461136f5760405162461bcd60e51b815260040161081690614f4e565b336001600160a01b038416146113975760405162461bcd60e51b815260040161081690614f4e565b600060606113a3612b55565b905060006113e685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bad92505050565b905060005b82518110156114345782818151811061140057fe5b60200260200101516001600160e01b031916826001600160e01b031916141561142c5760019350611434565b6001016113eb565b50826114525760405162461bcd60e51b815260040161081690614eae565b600080600060201b878760405160200161146e93929190614bf7565b6040516020818303038152906040528060200190516114909190810190613d4d565b9093509150506001600160a01b03808316908b16146114c15760405162461bcd60e51b815260040161081690614f2e565b8881146114e05760405162461bcd60e51b815260040161081690614fbe565b61151f87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bb492505050565b50505050505050505050565b60076020526000908152604090205463ffffffff1681565b600960209081526000928352604080842090915290825290205463ffffffff1681565b6000806115738484612c89565b600061157f8585612cf6565b80860393509150505b9250929050565b60055460ff1681565b6115a0611313565b6115bc5760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166115e25760405162461bcd60e51b815260040161081690614f7e565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6003546001600160a01b031681565b600e6020526000908152604090205460ff1681565b60055461010090046001600160a01b031681565b63059fa60081565b600061165a82600143034261122a565b92915050565b611668611313565b6116845760405162461bcd60e51b815260040161081690614f4e565b6001600160601b0381166001118015906116a8575060096001600160601b03821611155b6116c45760405162461bcd60e51b815260040161081690614efe565b600d80546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b600d54600160a01b90046001600160601b031681565b6000806117108585856128ed565b90506001600160601b03811615801561172c575061172c612d41565b15611735575060015b90505b9392505050565b600a81565b60008181526007602052604081205463ffffffff1680611765576000611738565b6000838152600660209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6117ad8383836000612539565b6112258383836000612823565b600b60209081526000928352604080842090915290825290205463ffffffff1681565b600660209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b600060405161182090614c5d565b604051809103902060026040516118379190614c20565b6040518091039020611847612dc7565b3060405160200161185b9493929190614d95565b604051602081830303815290604052805190602001209050600060405161188190614c68565b60405190819003812061189e918b908b908b908b90602001614d49565b604051602081830303815290604052805190602001209050600082826040516020016118cb929190614c2c565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516119089493929190614dca565b6020604051602081039080840390855afa15801561192a573d6000803e3d6000fd5b50505060206040510351905061193f81612dcb565b61195b5760405162461bcd60e51b815260040161081690614ede565b6001600160a01b0381166000908152600c60205260409020805460018101909155891461199a5760405162461bcd60e51b815260040161081690614fde565b874211156119ba5760405162461bcd60e51b815260040161081690614e1e565b6119c5818c8c611fd2565b610c1d818c8c61208b565b6040516108d490614c68565b60006119e6612e04565b8210611a045760405162461bcd60e51b815260040161081690614fce565b6001600160a01b038416600090815260096020908152604080832086845290915290205463ffffffff1680611a3d576000915050611738565b6001600160a01b0385166000908152600860209081526040808320878452825280832063ffffffff600019860181168552925290912054168310611ac9576001600160a01b038516600090815260086020908152604080832087845282528083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611738565b6001600160a01b0385166000908152600860209081526040808320878452825280832083805290915290205463ffffffff16831015611b0c576000915050611738565b600060001982015b8163ffffffff168163ffffffff161115611bd757600282820363ffffffff16048103611b3e613950565b506001600160a01b03881660009081526008602090815260408083208a8452825280832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415611bb2576020015194506117389350505050565b805163ffffffff16871115611bc957819350611bd0565b6001820392505b5050611b14565b506001600160a01b0386166000908152600860209081526040808320888452825280832063ffffffff909416835292905220546001600160601b03600160201b909104169150509392505050565b611c2e81611044565b905080821115611c505760405162461bcd60e51b815260040161081690614e3e565b6000611c6163059fa6004201611044565b905080821115611c6f578091505b6000611c7f3385600143036128ed565b90506000816001600160601b031611611caa5760405162461bcd60e51b815260040161081690614f1e565b611cb5338583612e08565b611cc0338483612e99565b611cca8482612f1c565b611cd48382612f94565b336000908152600460209081526040808320878452909152808220548583529120546001600160a01b03918216911680611d3e5750336000908152600460209081526040808320878452909152902080546001600160a01b0319166001600160a01b038316179055805b336000908152600460209081526040808320898452909152902080546001600160a01b0319169055611d71828785612fff565b611d7c81868561309c565b336001600160a01b03167f809d79c94c86576d61afef75495b8df415224bf885310fed7ea315039f8c5b4c878786604051611db993929190614fee565b60405180910390a2505050505050565b6000611dd3612e04565b8210611df15760405162461bcd60e51b815260040161081690614fae565b60008381526007602052604090205463ffffffff1680611e1557600091505061165a565b600084815260066020908152604080832063ffffffff600019860181168552925290912054168310611e7d5760008481526006602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b0316905061165a565b600084815260066020908152604080832083805290915290205463ffffffff16831015611eae57600091505061165a565b600060001982015b8163ffffffff168163ffffffff161115611f6757600282820363ffffffff16048103611ee0613950565b50600087815260066020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415611f425760200151945061165a9350505050565b805163ffffffff16871115611f5957819350611f60565b6001820392505b5050611eb6565b50600085815260066020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b611faa611313565b611fc65760405162461bcd60e51b815260040161081690614f4e565b611fcf8161311f565b50565b6001600160a01b0380841660009081526004602090815260408083208584529091528120549091169061200585846124d8565b6001600160a01b0386811660008181526004602090815260408083208984529091529081902080546001600160a01b031916898516908117909155905193945092918516917fb846dc53d3621f480d692e73f4473156d20f23ff6b2c8237b7130b883226cca990612077908890614d3b565b60405180910390a461082e828583866131a0565b612093612d41565b156112255760006120ad826212750063ffffffff61320416565b6001600160a01b03808616600090815260046020908152604080832085845290915290205491925090811690841681146120ec576120ec858584611fd2565b6000336001600160a01b031663c24a0f8b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121619190810190613d90565b9050612176846224ea0063ffffffff61320416565b9250808314156121bc576001600160a01b03808716600090815260046020908152604080832087845290915290205481169250851682146121bc576121bc868685611fd2565b505050505050565b6000856001600160601b0316116121ed5760405162461bcd60e51b815260040161081690614f0e565b806121fe576121fb84611044565b93505b42841161221d5760405162461bcd60e51b815260040161081690614f6e565b6001600160a01b03831661222f578592505b6001600160a01b038216612241578291505b8061226757600061225763059fa6004201611044565b905080851115612265578094505b505b600061227384866124d8565b905061228187878688613229565b6001600160a01b03808516600090815260046020908152604080832089845290915290205481169084168114612338576001600160a01b0385811660009081526004602090815260408083208a8452909152902080546001600160a01b0319169186169190911790556122f5818784612fff565b61233582886040518060400160405280602081526020017f5374616b696e673a3a7374616b653a2062616c616e6365206f766572666c6f77815250612408565b96505b61234384878961309c565b836001600160a01b0316816001600160a01b0316866001600160a01b03167fb846dc53d3621f480d692e73f4473156d20f23ff6b2c8237b7130b883226cca9896040516123909190614d3b565b60405180910390a45050505050505050565b6000806123af8585610dad565b905060006123bd8685611dc9565b9050600a6001600160601b03166123ed82846040518060600160405280603b81526020016153c4603b913961247a565b6001600160601b0316816123fd57fe5b049695505050505050565b6000838301826001600160601b03808716908316101561130a5760405162461bcd60e51b81526004016108169190614e0d565b6000836001600160601b0316836001600160601b0316111582906124725760405162461bcd60e51b81526004016108169190614e0d565b505050900390565b60006001600160601b03841661249257506000611738565b8383026001600160601b0380851690808716908316816124ae57fe5b046001600160601b031614839061130a5760405162461bcd60e51b81526004016108169190614e0d565b6001600160a01b0382166000818152600a602090815260408083208584528252808320938352600b825280832085845282528083205460001963ffffffff9182160116835292905220546001600160601b03600160201b9091041692915050565b836001600160601b031660011480156125555750612555612d41565b1561255f57610954565b61256883613341565b92506125748484612c89565b6001600160a01b038216612586573391505b6125908385612f1c565b61259b338486612e08565b3360009081526004602090815260408083208684529091529020546125ca906001600160a01b03168486612fff565b82421080156125dc575060055460ff16155b80156125e6575080155b156127295760006125f78585612cf6565b948590039490506001600160601b0381161561272757600d546001600160a01b03166126355760405162461bcd60e51b815260040161081690614ece565b600354600d5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261266b929116908590600401614cd2565b602060405180830381600087803b15801561268557600080fd5b505af1158015612699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126bd9190810190613d11565b50600d5460035460405163abe979e160e01b81526001600160a01b039283169263abe979e1926126f4929116908590600401614ced565b600060405180830381600087803b15801561270e57600080fd5b505af1158015612722573d6000803e3d6000fd5b505050505b505b60035460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb9061275c9086908990600401614cd2565b602060405180830381600087803b15801561277657600080fd5b505af115801561278a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ae9190810190613d11565b9050806127cd5760405162461bcd60e51b815260040161081690614e7e565b826001600160a01b0316336001600160a01b03167f667b6c8ed8622dae7927a8b0837455098e32037a0181f9a2e21b9b72fead6cc78787866040516128149392919061504e565b60405180910390a35050505050565b61282b612d41565b15610954576000612845846212750063ffffffff61320416565b905081806128535750804210155b1561082e5760006128683383600143036128ed565b90506001600160601b038116156121bc576121bc81838686612539565b6000806128928585610dad565b905060006128a18787866119dc565b9050600a6001600160601b03166128d1828460405180608001604052806047815260200161519b6047913961247a565b6001600160601b0316816128e157fe5b04979650505050505050565b60006128f7612e04565b82106129155760405162461bcd60e51b815260040161081690614f8e565b61291e83613341565b6001600160a01b0385166000908152600b6020908152604080832084845290915290205490935063ffffffff168061295a576000915050611738565b6001600160a01b0385166000908152600a60209081526040808320878452825280832063ffffffff6000198601811685529252909120541683106129e6576001600160a01b0385166000908152600a6020908152604080832087845282528083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611738565b6001600160a01b0385166000908152600a60209081526040808320878452825280832083805290915290205463ffffffff16831015612a29576000915050611738565b600060001982015b8163ffffffff168163ffffffff161115612af457600282820363ffffffff16048103612a5b613950565b506001600160a01b0388166000908152600a602090815260408083208a8452825280832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415612acf576020015194506117389350505050565b805163ffffffff16871115612ae657819350612aed565b6001820392505b5050612a31565b506001600160a01b0386166000908152600a60209081526040808320888452825280832063ffffffff909416835292905220546001600160601b03600160201b909104169150509392505050565b3390565b6003546001600160a01b031690565b60408051600180825281830190925260609182919060208083019080388339019050509050630c09ddfd60e01b81600081518110612b8f57fe5b6001600160e01b031990921660209283029190910190910152905090565b6020015190565b60006060306001600160a01b031683604051612bd09190614c14565b6000604051808303816000865af19150503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b509150915081611225576044815111612c3d5760405162461bcd60e51b815260040161081690614e6e565b612c706040518060400160405280601181526020017003932b1b2b4bb32a0b8383937bb30b61d1607d1b81525082613366565b60405162461bcd60e51b81526004016108169190614e0d565b6000826001600160601b031611612cb25760405162461bcd60e51b815260040161081690614e4e565b6000612cc23383600143036128ed565b9050806001600160601b0316836001600160601b031611156112255760405162461bcd60e51b815260040161081690614e9e565b600080612d0242611044565b90506000612d108483610dad565b600d54600160a01b90046001600160601b03908116919091029150606490600a878402821604160495945050505050565b60115460405163dbb049d160e01b81526000916001600160a01b03169063dbb049d190612d72903390600401614c81565b60206040518083038186803b158015612d8a57600080fd5b505afa158015612d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dc29190810190613d11565b905090565b4690565b600073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383161480159061165a5750506001600160a01b0316151590565b4390565b6001600160a01b0383166000818152600b60209081526040808320868452825280832054938352600a8252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526034808352600160201b9091046001600160601b03169392612e8b92859288926152a19083013961243b565b90506121bc86868584613460565b6001600160a01b0383166000818152600b60209081526040808320868452825280832054938352600a8252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526033808352600160201b9091046001600160601b03169392612e8b928592889261539190830139612408565b6000828152600760209081526040808320546006835281842063ffffffff9182166000198101909216855283528184205482516060810190935260358084529194600160201b9091046001600160601b0316939092612f87928592889291906154739083013961243b565b905061082e8584836135e0565b6000828152600760209081526040808320546006835281842063ffffffff9182166000198101909216855283528184205482516060810190935260348084529194600160201b9091046001600160601b0316939092612f879285928892919061531f90830139612408565b6001600160a01b038316600081815260096020908152604080832086845282528083205493835260088252808320868452825280832063ffffffff94851660001981019095168452909152812054600160201b90046001600160601b03908116919084168211156130905761308d82856040518060600160405280603881526020016154df6038913961243b565b90505b6121bc8686858461371e565b6001600160a01b038316600081815260096020908152604080832086845282528083205493835260088252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526037808352600160201b9091046001600160601b0316939261308d92859288926154a890830139612408565b6001600160a01b0381166131455760405162461bcd60e51b815260040161081690614e8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b826001600160a01b0316846001600160a01b0316141580156131cb57506000826001600160601b0316115b15610954576001600160a01b038416156131ea576131ea848284612fff565b6001600160a01b038316156109545761095483828461309c565b6000828201838110156117385760405162461bcd60e51b815260040161081690614ebe565b6003546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061325e90889030908990600401614caa565b602060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132b09190810190613d11565b9050806132bc57600080fd5b60006132c884846124d8565b90506132ed818660405180606001604052806028815260200161544b60289139612408565b90506132f98386612f94565b613304848487612e99565b836001600160a01b03167f0fc5b1bac0416800b42a669229a346b6e5a15db3896339dbdc5fa376e1e4570a868584604051611db993929190615076565b60008061334d83611044565b905082811461335f5762127500810192505b5090919050565b6060808390506060839050606060448251845101036040519080825280601f01601f1916602001820160405280156133a5576020820181803883390190505b509050806000805b85518110156133fe578581815181106133c257fe5b602001015160f81c60f81b8383806001019450815181106133df57fe5b60200101906001600160f81b031916908160001a9053506001016133ad565b5060445b84518110156134535784818151811061341757fe5b602001015160f81c60f81b83838060010194508151811061343457fe5b60200101906001600160f81b031916908160001a905350600101613402565b5090979650505050505050565b6000613484436040518060600160405280603e8152602001615353603e9139613921565b905060008363ffffffff161180156134d557506001600160a01b0385166000908152600a60209081526040808320878452825280832063ffffffff6000198801811685529252909120548282169116145b15613537576001600160a01b0385166000908152600a602090815260408083208784528252808320600019870163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b0385160217905561082e565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526001600160a01b03989098166000818152600a8a528481208982528a5284812088871682528a52848120935184549351909716600160201b02640100000000600160801b031997871663ffffffff19948516179790971696909617909255908452600b875281842095845294909552939020805460019092019093169116179055565b6000613604436040518060600160405280603e8152602001615353603e9139613921565b905060008363ffffffff161180156136435750600084815260066020908152604080832063ffffffff6000198801811685529252909120548282169116145b15613693576000848152600660209081526040808320600019870163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055610954565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526000888152600682528481208887168252825284812093518454935163ffffffff1994851691881691909117640100000000600160801b031916600160201b919098160296909617909255958452600790529091208054909316600190920116179055565b6000613742436040518060600160405280603e8152602001615353603e9139613921565b6001600160a01b03861660009081526008602090815260408083208884528252808320600019880163ffffffff9081168552925290912054919250600160201b9091046001600160601b0316908416158015906137d857506001600160a01b0386166000908152600860209081526040808320888452825280832063ffffffff6000198901811685529252909120548382169116145b1561383a576001600160a01b03861660009081526008602090815260408083208884528252808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b038616021790556138e4565b60408051808201825263ffffffff80851682526001600160601b0380871660208085019182526001600160a01b038c166000818152600883528781208d825283528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600984528482208a835290935292909220805460018801909316929091169190911790555b856001600160a01b03167fc7b38fb25352e6f351f57e2c922f84db5c97e09a6246bbe1d2eedfcdb01c4c62868386604051611db993929190615009565b600081600160201b84106139485760405162461bcd60e51b81526004016108169190614e0d565b509192915050565b604080518082019091526000808252602082015290565b803561165a81615159565b805161165a81615159565b805161165a8161516d565b803561165a81615176565b805161165a81615176565b60008083601f8401126139b057600080fd5b50813567ffffffffffffffff8111156139c857600080fd5b60208301915083600182028301111561158857600080fd5b803561165a8161517f565b803561165a81615188565b803561165a81615191565b600060208284031215613a1357600080fd5b6000613a1f8484613967565b949350505050565b60008060408385031215613a3a57600080fd5b6000613a468585613967565b9250506020613a5785828601613967565b9150509250929050565b60008060408385031215613a7457600080fd5b6000613a808585613967565b9250506020613a5785828601613988565b600080600080600060808688031215613aa957600080fd5b6000613ab58888613967565b9550506020613ac688828901613988565b9450506040613ad788828901613967565b935050606086013567ffffffffffffffff811115613af457600080fd5b613b008882890161399e565b92509250509295509295909350565b600080600060608486031215613b2457600080fd5b6000613b308686613967565b9350506020613b4186828701613988565b9250506040613b5286828701613988565b9150509250925092565b60008060008060808587031215613b7257600080fd5b6000613b7e8787613967565b9450506020613b8f87828801613988565b9350506040613ba087828801613988565b9250506060613bb187828801613988565b91505092959194509250565b600080600080600080600060e0888a031215613bd857600080fd5b6000613be48a8a613967565b9750506020613bf58a828b01613988565b9650506040613c068a828b01613988565b9550506060613c178a828b01613988565b9450506080613c288a828b016139eb565b93505060a0613c398a828b01613988565b92505060c0613c4a8a828b01613988565b91505092959891949750929550565b600080600060608486031215613c6e57600080fd5b6000613c7a8686613967565b9350506020613c8b86828701613988565b9250506040613b52868287016139e0565b600080600080600060a08688031215613cb457600080fd5b6000613cc08888613967565b9550506020613cd1888289016139f6565b9450506040613ce288828901613988565b9350506060613cf388828901613967565b9250506080613d0488828901613967565b9150509295509295909350565b600060208284031215613d2357600080fd5b6000613a1f848461397d565b600060208284031215613d4157600080fd5b6000613a1f8484613988565b600080600060608486031215613d6257600080fd5b6000613d6e8686613993565b9350506020613d7f86828701613972565b9250506040613b5286828701613993565b600060208284031215613da257600080fd5b6000613a1f8484613993565b60008060408385031215613dc157600080fd5b6000613a808585613988565b60008060008060008060c08789031215613de657600080fd5b6000613df28989613988565b9650506020613e0389828a01613988565b9550506040613e1489828a01613988565b9450506060613e2589828a01613988565b9350506080613e3689828a01613967565b92505060a0613e4789828a01613967565b9150509295509295509295565b60008060408385031215613e6757600080fd5b6000613e738585613988565b9250506020613a57858286016139e0565b60008060408385031215613e9757600080fd5b6000613a8085856139e0565b600060208284031215613eb557600080fd5b6000613a1f84846139f6565b60008060408385031215613ed457600080fd5b6000613a8085856139f6565b600080600060608486031215613ef557600080fd5b6000613f0186866139f6565b9350506020613f1286828701613988565b9250506040613b5286828701613967565b60008060008060808587031215613f3957600080fd5b6000613f4587876139f6565b9450506020613f5687828801613988565b9350506040613f6787828801613967565b9250506060613bb187828801613967565b6000613f848383614071565b505060200190565b6000613f848383614bee565b613fa1816150fa565b82525050565b613fa1816150b6565b6000613fbb826150a4565b613fc581856150a8565b9350613fd083615092565b8060005b83811015613ffe578151613fe88882613f78565b9750613ff383615092565b925050600101613fd4565b509495945050505050565b6000614014826150a4565b61401e81856150a8565b935061402983615092565b8060005b83811015613ffe5781516140418882613f8c565b975061404c83615092565b92505060010161402d565b613fa1816150c1565b613fa161406c826150c6565b6150d0565b613fa1816150d0565b613fa161406c826150d0565b600061409283856150b1565b935061409f838584615117565b50500190565b60006140b0826150a4565b6140ba81856150b1565b93506140ca818560208601615123565b9290920192915050565b6000815460018116600081146140f1576001811461411457614153565b607f600283041661410281876150b1565b60ff1984168152955085019250614153565b6002820461412281876150b1565b955061412d85615098565b60005b8281101561414c57815488820152600190910190602001614130565b5050850192505b505092915050565b613fa181615101565b600061416f826150a4565b61417981856150a8565b9350614189818560208601615123565b6141928161514f565b9093019392505050565b60006141a96029836150a8565b7f5374616b696e673a3a64656c656761746542795369673a207369676e617475728152681948195e1c1a5c995960ba1b602082015260400192915050565b60006141f46024836150a8565b7f7468657265206973206e6f206e6577207374616b696e6720636f6e7472616374815263081cd95d60e21b602082015260400192915050565b600061423a6042836150a8565b7f5374616b696e673a3a657874656e645374616b696e674475726174696f6e3a2081527f63616e6e6f742072656475636520746865207374616b696e672064757261746960208201526137b760f11b604082015260600192915050565b60006142a4604d836150a8565b7f5374616b696e673a3a77697468647261773a20616d6f756e74206f6620746f6b81527f656e7320746f2062652077697468647261776e206e6565647320746f2062652060208201526c0626967676572207468616e203609c1b604082015260600192915050565b60006143196020836150a8565b7f76657374696e67207265676973747279206164647265737320696e76616c6964815260200192915050565b60006143526030836150a8565b7f72656365697665417070726f76616c3a205472616e73616374696f6e2065786581526f31baba34b7b7103932bb32b93a32b21760811b602082015260400192915050565b60006143a46028836150a8565b7f5374616b696e673a3a77697468647261773a20546f6b656e207472616e7366658152671c8819985a5b195960c21b602082015260400192915050565b60006143ee6026836150a8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006144366025836150a8565b7f5374616b696e673a3a77697468647261773a206e6f7420656e6f7567682062618152646c616e636560d81b602082015260400192915050565b600061447d6015836150a8565b741b595d1a1bd9081a5cc81b9bdd08185b1b1bddd959605a1b815260200192915050565b60006144ae6002836150b1565b61190160f01b815260020192915050565b60006144cc601b836150a8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006145056030836150a8565b7f5374616b696e673a3a77697468647261773a2046656553686172696e6720616481526f191c995cdcc81dd85cdb89dd081cd95d60821b602082015260400192915050565b60006145576029836150a8565b7f5374616b696e673a3a64656c656761746542795369673a20696e76616c6964208152687369676e617475726560b81b602082015260400192915050565b60006145a2604d836150a8565b7f57656967687465645374616b696e673a3a74696d657374616d70546f4c6f636b81527f446174653a2074696d657374616d70206c696573206265666f726520636f6e7460208201526c3930b1ba1031b932b0ba34b7b760991b604082015260600192915050565b6000614617602d836150a8565b7f776569676874207363616c696e6720646f65736e27742062656c6f6e6720746f81526c2072616e6765205b312c20395d60981b602082015260400192915050565b60006146666043836150a8565b7f5374616b696e673a3a7374616b653a20616d6f756e74206f6620746f6b656e7381527f20746f207374616b65206e6565647320746f206265206269676765722074686160208201526206e20360ec1b604082015260600192915050565b60006146d1604b836150a8565b7f5374616b696e673a3a657874656e645374616b696e674475726174696f6e3a2081527f6e6f7468696e67207374616b656420756e74696c207468652070726576696f7560208201526a73206c6f636b206461746560a81b604082015260600192915050565b6000614744600f836150a8565b6e0e6cadcc8cae440dad2e6dac2e8c6d608b1b815260200192915050565b600061476f604c836150a8565b7f57656967687465645374616b696e673a3a636f6d70757465576569676874427981527f446174653a2064617465206e6565647320746f2062652062696767657220746860208201526b616e2073746172744461746560a01b604082015260600192915050565b60006147e36043836150b1565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b600061484e600c836150a8565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000614876604d836150a8565b7f5374616b696e673a3a636f6d707574655765696768744279446174653a72656d81527f61696e696e672074696d652063616e277420626520626967676572207468616e60208201526c1036b0bc10323ab930ba34b7b760991b604082015260600192915050565b60006148eb6036836150a8565b7f5374616b696e673a3a74696d657374616d70546f4c6f636b446174653a207374815275185ada5b99c81c195c9a5bd9081d1bdbc81cda1bdc9d60521b602082015260400192915050565b60006149436029836150a8565b7f63616e277420726573657420746865206e6577207374616b696e6720636f6e7481526807261637420746f20360bc1b602082015260400192915050565b600061498e604b836150b1565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206c6f636b446174652c75696e74323536206e6f6e63652c75696e7460208201526a323536206578706972792960a81b6040820152604b0192915050565b6000614a01603d836150a8565b7f57656967687465645374616b696e673a3a6765745072696f725573657253746181527f6b65416e64446174653a206e6f74207965742064657465726d696e6564000000602082015260400192915050565b6000614a606021836150a8565b7f46656553686172696e6720616464726573732073686f756c646e2774206265208152600360fc1b602082015260400192915050565b6000614aa3603f836150a8565b7f57656967687465645374616b696e673a3a6765745072696f72546f74616c537481527f616b6573466f72446174653a206e6f74207965742064657465726d696e656400602082015260400192915050565b6000614b02600f836150a8565b6e0c2dadeeadce840dad2e6dac2e8c6d608b1b815260200192915050565b6000614b2d6044836150a8565b7f57656967687465645374616b696e673a3a6765745072696f725374616b65427981527f44617465466f7244656c6567617465653a206e6f74207965742064657465726d6020820152631a5b995960e21b604082015260600192915050565b6000614b996025836150a8565b7f5374616b696e673a3a64656c656761746542795369673a20696e76616c6964208152646e6f6e636560d81b602082015260400192915050565b613fa1816150df565b613fa1816150e8565b613fa18161510c565b613fa1816150ee565b6000614c038286614060565b601c82019150610edf828486614086565b600061173882846140a5565b600061173882846140d4565b6000614c37826144a1565b9150614c43828561407a565b602082019150614c53828461407a565b5060200192915050565b600061165a826147d6565b600061165a82614981565b6020810161165a8284613fa7565b6020810161165a8284613f98565b60408101614c9d8285613fa7565b6117386020830184613fa7565b60608101614cb88286613fa7565b614cc56020830185613fa7565b613a1f6040830184614be5565b60408101614ce08285613fa7565b6117386020830184614be5565b60408101614cfb8285613fa7565b6117386020830184614bee565b60408082528101614d198185613fb0565b90508181036020830152613a1f8184614009565b6020810161165a8284614057565b6020810161165a8284614071565b60a08101614d578288614071565b614d646020830187613fa7565b614d716040830186614071565b614d7e6060830185614071565b614d8b6080830184614071565b9695505050505050565b60808101614da38287614071565b614db06020830186614071565b614dbd6040830185614071565b610edf6060830184613fa7565b60808101614dd88287614071565b614de56020830186614bdc565b614df26040830185614071565b610edf6060830184614071565b6020810161165a828461415b565b602080825281016117388184614164565b6020808252810161165a8161419c565b6020808252810161165a816141e7565b6020808252810161165a8161422d565b6020808252810161165a81614297565b6020808252810161165a8161430c565b6020808252810161165a81614345565b6020808252810161165a81614397565b6020808252810161165a816143e1565b6020808252810161165a81614429565b6020808252810161165a81614470565b6020808252810161165a816144bf565b6020808252810161165a816144f8565b6020808252810161165a8161454a565b6020808252810161165a81614595565b6020808252810161165a8161460a565b6020808252810161165a81614659565b6020808252810161165a816146c4565b6020808252810161165a81614737565b6020808252810161165a81614762565b6020808252810161165a81614841565b6020808252810161165a81614869565b6020808252810161165a816148de565b6020808252810161165a81614936565b6020808252810161165a816149f4565b6020808252810161165a81614a53565b6020808252810161165a81614a96565b6020808252810161165a81614af5565b6020808252810161165a81614b20565b6020808252810161165a81614b8c565b60608101614ffc8286614071565b614cc56020830185614071565b606081016150178286614071565b614cc56020830185614be5565b6020810161165a8284614bd3565b60408101614cfb8285614bd3565b6020810161165a8284614bee565b6060810161505c8286614be5565b6150696020830185614071565b613a1f6040830184614057565b60608101614ffc8286614be5565b60408101614cfb8285614bee565b60200190565b60009081526020902090565b5190565b90815260200190565b919050565b600061165a826150d3565b151590565b63ffffffff191690565b90565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b600061165a825b600061165a826150b6565b600061165a826150ee565b82818337506000910152565b60005b8381101561513e578181015183820152602001615126565b838111156109545750506000910152565b601f01601f191690565b615162816150b6565b8114611fcf57600080fd5b615162816150c1565b615162816150d0565b615162816150df565b615162816150e8565b615162816150ee56fe57656967687465645374616b696e673a3a5f746f74616c506f776572427944617465466f7244656c6567617465653a206d756c7469706c69636174696f6e206f766572666c6f7757656967687465645374616b696e673a3a6765745072696f72546f74616c566f74696e67506f7765723a206f766572666c6f77206f6e20746f74616c20766f74696e6720706f77657220636f6d7075746174696f6e6d756c7469706c69636174696f6e206f766572666c6f77206f6e2077656967687420636f6d7075746174696f6e57656967687465645374616b696e673a3a77656967687465645374616b654279446174653a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e673a3a5f6465637265617365557365725374616b653a207374616b656420616d6f756e7420756e646572666c6f7757656967687465645374616b696e673a3a6765745072696f72566f7465733a206f766572666c6f77206f6e20746f74616c20766f74696e6720706f77657220636f6d7075746174696f6e5374616b696e673a3a5f696e6372656173654461696c795374616b653a207374616b656420616d6f756e74206f766572666c6f775374616b696e673a3a5f77726974655374616b696e67436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974735374616b696e673a3a5f696e637265617365557365725374616b653a207374616b656420616d6f756e74206f766572666c6f7757656967687465645374616b696e673a3a5f746f74616c506f7765724279446174653a206d756c7469706c69636174696f6e206f766572666c6f7757656967687465645374616b696e673a3a6765745072696f7257656967687465645374616b653a206f766572666c6f77206f6e20746f74616c2077656967687420636f6d7075746174696f6e5374616b696e673a3a696e6372656173655374616b653a2062616c616e6365206f766572666c6f775374616b696e673a3a5f64656372656173654461696c795374616b653a207374616b656420616d6f756e7420756e646572666c6f775374616b696e673a3a5f696e63726561736544656c65676174655374616b653a207374616b656420616d6f756e74206f766572666c6f775374616b696e673a3a5f646563726561736544656c65676174655374616b653a207374616b656420616d6f756e7420756e646572666c6f77a365627a7a723158204e5624842b70eebad1ef63a30cc6e4f4b569e7eaa0b2a2fe9242485d8115741a6c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061038d5760003560e01c8063836eebee116101de578063b4b5ea571161010f578063db27ec18116100ad578063e97ffacb1161007c578063e97ffacb14610767578063eefb8c471461077a578063f09cfc641461078d578063f2fde38b146107a05761038d565b8063db27ec1814610726578063dfb267c214610739578063e63a562e1461074c578063e7a324dc1461075f5761038d565b8063cf7b684a116100e9578063cf7b684a146106e5578063d27569e7146106f8578063d5c3846414610700578063dab6ca44146107135761038d565b8063b4b5ea57146106b7578063b8a98732146106ca578063bf626ec1146106dd5761038d565b806396a590c11161017c578063a58848c511610156578063a58848c51461068c578063adae900214610694578063ae81dfe4146106a7578063b1724b46146106af5761038d565b806396a590c1146106505780639929e886146106715780639a377b82146106795761038d565b80638f32d59b116101b85780638f32d59b146106025780638f4ffcb11461060a5780639436e7d41461061d57806394c2ce581461063d5761038d565b8063836eebee146105d45780638da5cb5b146105e75780638dae1b16146105ef5761038d565b8063429b62e5116102c357806368cefccc1161026157806372ec97951161023057806372ec97951461057a5780637ba6f4581461058d5780637ecebe00146105ae578063800b64ca146105c15761038d565b806368cefccc146105205780636b6fde0e14610541578063704802751461055457806370a08231146105675761038d565b80635419675f1161029d5780635419675f146104ea5780635e0be607146104f2578063626ee2d9146104fa57806362cf8a081461050d5761038d565b8063429b62e5146104b1578063450b0601146104c45780634b2fea1e146104d75761038d565b80631785f53c1161033057806325629ec01161030a57806325629ec01461045857806327dd1b001461046b57806337e6b1c11461048b5780633827fca51461049e5761038d565b80631785f53c1461042a57806320606b701461043d5780632522d7ba146104455761038d565b806307392cc01161036c57806307392cc0146103da5780630c09ddfd146103fa578063104932cf1461040d57806317748adc146104155761038d565b8062073f9914610392578063026e402b146103b057806303a18fa3146103c5575b600080fd5b61039a6107b3565b6040516103a79190614d3b565b60405180910390f35b6103c36103be366004613a61565b6107b9565b005b6103cd6107d3565b6040516103a79190614dff565b6103ed6103e8366004613d2f565b6107e2565b6040516103a79190614d2d565b6103c3610408366004613c9c565b6107f7565b6103cd610835565b61041d610844565b6040516103a79190615040565b6103c3610438366004613a01565b610849565b61039a6108c8565b61041d610453366004613e84565b6108df565b6103c3610466366004613f23565b610945565b61047e610479366004613a61565b61095a565b6040516103a79190614c73565b61041d610499366004613b0f565b610980565b6103c36104ac366004613a27565b6109f8565b6103ed6104bf366004613a01565b610b0a565b6103c36104d2366004613a01565b610b1f565b6103c36104e5366004613dcd565b610b8b565b6103c3610c2a565b6103c3610c59565b6103c3610508366004613a01565b610d41565b61041d61051b366004613dae565b610dad565b61053361052e366004613c59565b610ee8565b6040516103a7929190615032565b61053361054f366004613c59565b610f23565b6103c3610562366004613a01565b610f5e565b61041d610575366004613a01565b610fd5565b61039a610588366004613d2f565b611044565b6105a061059b366004613a01565b61108f565b6040516103a7929190614d08565b61039a6105bc366004613a01565b6111ca565b6103c36105cf366004613ee0565b6111dc565b61041d6105e2366004613b0f565b61122a565b61047e611282565b61041d6105fd366004613b5c565b611291565b6103ed611313565b6103c3610618366004613a91565b611337565b61063061062b366004613d2f565b61152b565b6040516103a79190615024565b61063061064b366004613a61565b611543565b61066361065e366004613ec1565b611566565b6040516103a7929190615084565b6103ed61158f565b6103c3610687366004613a01565b611598565b6103cd61160a565b6103ed6106a2366004613a01565b611619565b61047e61162e565b61039a611642565b61041d6106c5366004613a01565b61164a565b6103c36106d8366004613ea3565b611660565b61041d6116ec565b61041d6106f3366004613b0f565b611702565b61041d61173f565b61041d61070e366004613d2f565b611744565b6103c3610721366004613ee0565b6117a0565b610630610734366004613a61565b6117ba565b610533610747366004613e54565b6117dd565b6103c361075a366004613bbd565b611812565b61039a6119d0565b61041d610775366004613b0f565b6119dc565b6103c3610788366004613dae565b611c25565b61041d61079b366004613dae565b611dc9565b6103c36107ae366004613a01565b611fa2565b60015481565b6107c4338383611fd2565b6107cf33838361208b565b5050565b600d546001600160a01b031681565b60106020526000908152604090205460ff1681565b33301461081f5760405162461bcd60e51b815260040161081690614f4e565b60405180910390fd5b61082e858585858560006121c4565b5050505050565b6011546001600160a01b031681565b600981565b610851611313565b61086d5760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166000908152600f602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906108bd908390614c73565b60405180910390a150565b6040516108d490614c5d565b604051809103902081565b6000806108eb83611044565b905063059fa6008101815b81811161093c576109308461091283868a63ffffffff166123a2565b6040518060800160405280605581526020016151e260559139612408565b935062127500016108f6565b50505092915050565b610954338585858560006121c4565b50505050565b60046020908152600092835260408084209091529082529020546001600160a01b031681565b60008061098c83611044565b905063059fa6008101815b8181116109ee5760006109ac8883868a611291565b90506001600160601b038116156109e3576109e085826040518060800160405280604c81526020016153ff604c9139612408565b94505b506212750001610997565b5050509392505050565b610a00611313565b80610a1a5750336000908152600f602052604090205460ff165b610a365760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0382166000818152600e602052604090819020805460ff1916600117905551633c7925e360e11b81526378f24bc690610a7a908490600401614c73565b600060405180830381600087803b158015610a9457600080fd5b505af1158015610aa8573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600e602052604090819020805460ff19169055517f2366e0b6b1af17c0ceed50685c570d519cae11e7faaf007bbe667e94a5ee3cd59150610afe9084908490614c8f565b60405180910390a15050565b600f6020526000908152604090205460ff1681565b610b27611313565b610b435760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b038116610b695760405162461bcd60e51b815260040161081690614e5e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b98864201611044565b905063059fa600851115610bae5763059fa60094505b6000610bbb864201611044565b905060008583830381610bca57fe5b0460010190506000818a81610bdb57fe5b04905060018210610bfc57610bfc336001840383028c0386898960016121c4565b8387015b838111610c1d57610c163383838a8a60016121c4565b8701610c00565b5050505050505050505050565b60055461010090046001600160a01b0316610c575760405162461bcd60e51b815260040161081690614e2e565b565b610c61611313565b610c7d5760405162461bcd60e51b815260040161081690614f4e565b6005805460ff191660011790556003546040516370a0823160e01b81527fd8cc4e8d808fe950b07bfffcd83eebf1190cd35ea77fe0c8a7d75a6e9b90e5c1916001600160a01b0316906370a0823190610cda903090600401614c73565b60206040518083038186803b158015610cf257600080fd5b505afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d2a9190810190613d90565b604051610d379190614d3b565b60405180910390a1565b610d49611313565b610d655760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b038116610d8b5760405162461bcd60e51b815260040161081690614f9e565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600081831015610dcf5760405162461bcd60e51b815260040161081690614f3e565b81830363059fa600811115610df65760405162461bcd60e51b815260040161081690614f5e565b6000620151808263059fa600036001600160601b031681610e1357fe5b049050610edf600a621232106001600160601b0316610e93600a600902610e75621232108788026040518060400160405280601f81526020017f756e646572666c6f77206f6e207765696768742063616c63756c6174696f6e0081525061243b565b6040518060600160405280602d8152602001615237602d913961247a565b6001600160601b031681610ea357fe5b046040518060400160405280601e81526020017f6f766572666c6f77206f6e2077656967687420636f6d7075746174696f6e0000815250612408565b95945050505050565b600a60209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b600860209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b610f66611313565b610f825760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166000908152600f602052604090819020805460ff19166001179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906108bd908390614c73565b6001546000905b63059fa6004201811161103e5761103282610ff785846124d8565b6040518060400160405280601c81526020017f5374616b696e673a3a62616c616e63654f663a206f766572666c6f7700000000815250612408565b91506212750001610fdc565b50919050565b60006001548210156110685760405162461bcd60e51b815260040161081690614eee565b60006212750060015484038161107a57fe5b04905060015462127500820201915050919050565b60608060006110a363059fa6004201611044565b60015490915060009062127500015b8281116110e55760006110c587836124d8565b6001600160601b031611156110db576001909101905b62127500016110b2565b5080604051908082528060200260200182016040528015611110578160200160208202803883390190505b5093508060405190808252806020026020018201604052801561113d578160200160208202803883390190505b5060015490935060009062127500015b8381116111c157600061116088836124d8565b90506001600160601b038116156111b6578187848151811061117e57fe5b6020026020010181815250508086848151811061119757fe5b6001600160601b03909216602092830291909101909101526001909201915b50621275000161114d565b50505050915091565b600c6020526000908152604090205481565b336000908152600e602052604090205460ff1661120b5760405162461bcd60e51b815260040161081690614f4e565b6112188383836001612539565b6112258383836001612823565b505050565b60008061123683611044565b905063059fa6008101815b8181116109ee57611276846112588984878b612885565b6040518060800160405280604a81526020016152d5604a9139612408565b93506212750001611241565b6000546001600160a01b031690565b60008061129f8686856128ed565b90506001600160601b038116156113055760006112bc8686610dad565b9050600a6001600160601b03166112ec83836040518060600160405280603d8152602001615264603d913961247a565b6001600160601b0316816112fc57fe5b0492505061130a565b600091505b50949350505050565b600080546001600160a01b0316611328612b42565b6001600160a01b031614905090565b61133f612b46565b6001600160a01b0316336001600160a01b03161461136f5760405162461bcd60e51b815260040161081690614f4e565b336001600160a01b038416146113975760405162461bcd60e51b815260040161081690614f4e565b600060606113a3612b55565b905060006113e685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bad92505050565b905060005b82518110156114345782818151811061140057fe5b60200260200101516001600160e01b031916826001600160e01b031916141561142c5760019350611434565b6001016113eb565b50826114525760405162461bcd60e51b815260040161081690614eae565b600080600060201b878760405160200161146e93929190614bf7565b6040516020818303038152906040528060200190516114909190810190613d4d565b9093509150506001600160a01b03808316908b16146114c15760405162461bcd60e51b815260040161081690614f2e565b8881146114e05760405162461bcd60e51b815260040161081690614fbe565b61151f87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bb492505050565b50505050505050505050565b60076020526000908152604090205463ffffffff1681565b600960209081526000928352604080842090915290825290205463ffffffff1681565b6000806115738484612c89565b600061157f8585612cf6565b80860393509150505b9250929050565b60055460ff1681565b6115a0611313565b6115bc5760405162461bcd60e51b815260040161081690614f4e565b6001600160a01b0381166115e25760405162461bcd60e51b815260040161081690614f7e565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6003546001600160a01b031681565b600e6020526000908152604090205460ff1681565b60055461010090046001600160a01b031681565b63059fa60081565b600061165a82600143034261122a565b92915050565b611668611313565b6116845760405162461bcd60e51b815260040161081690614f4e565b6001600160601b0381166001118015906116a8575060096001600160601b03821611155b6116c45760405162461bcd60e51b815260040161081690614efe565b600d80546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b600d54600160a01b90046001600160601b031681565b6000806117108585856128ed565b90506001600160601b03811615801561172c575061172c612d41565b15611735575060015b90505b9392505050565b600a81565b60008181526007602052604081205463ffffffff1680611765576000611738565b6000838152600660209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6117ad8383836000612539565b6112258383836000612823565b600b60209081526000928352604080842090915290825290205463ffffffff1681565b600660209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b600060405161182090614c5d565b604051809103902060026040516118379190614c20565b6040518091039020611847612dc7565b3060405160200161185b9493929190614d95565b604051602081830303815290604052805190602001209050600060405161188190614c68565b60405190819003812061189e918b908b908b908b90602001614d49565b604051602081830303815290604052805190602001209050600082826040516020016118cb929190614c2c565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516119089493929190614dca565b6020604051602081039080840390855afa15801561192a573d6000803e3d6000fd5b50505060206040510351905061193f81612dcb565b61195b5760405162461bcd60e51b815260040161081690614ede565b6001600160a01b0381166000908152600c60205260409020805460018101909155891461199a5760405162461bcd60e51b815260040161081690614fde565b874211156119ba5760405162461bcd60e51b815260040161081690614e1e565b6119c5818c8c611fd2565b610c1d818c8c61208b565b6040516108d490614c68565b60006119e6612e04565b8210611a045760405162461bcd60e51b815260040161081690614fce565b6001600160a01b038416600090815260096020908152604080832086845290915290205463ffffffff1680611a3d576000915050611738565b6001600160a01b0385166000908152600860209081526040808320878452825280832063ffffffff600019860181168552925290912054168310611ac9576001600160a01b038516600090815260086020908152604080832087845282528083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611738565b6001600160a01b0385166000908152600860209081526040808320878452825280832083805290915290205463ffffffff16831015611b0c576000915050611738565b600060001982015b8163ffffffff168163ffffffff161115611bd757600282820363ffffffff16048103611b3e613950565b506001600160a01b03881660009081526008602090815260408083208a8452825280832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415611bb2576020015194506117389350505050565b805163ffffffff16871115611bc957819350611bd0565b6001820392505b5050611b14565b506001600160a01b0386166000908152600860209081526040808320888452825280832063ffffffff909416835292905220546001600160601b03600160201b909104169150509392505050565b611c2e81611044565b905080821115611c505760405162461bcd60e51b815260040161081690614e3e565b6000611c6163059fa6004201611044565b905080821115611c6f578091505b6000611c7f3385600143036128ed565b90506000816001600160601b031611611caa5760405162461bcd60e51b815260040161081690614f1e565b611cb5338583612e08565b611cc0338483612e99565b611cca8482612f1c565b611cd48382612f94565b336000908152600460209081526040808320878452909152808220548583529120546001600160a01b03918216911680611d3e5750336000908152600460209081526040808320878452909152902080546001600160a01b0319166001600160a01b038316179055805b336000908152600460209081526040808320898452909152902080546001600160a01b0319169055611d71828785612fff565b611d7c81868561309c565b336001600160a01b03167f809d79c94c86576d61afef75495b8df415224bf885310fed7ea315039f8c5b4c878786604051611db993929190614fee565b60405180910390a2505050505050565b6000611dd3612e04565b8210611df15760405162461bcd60e51b815260040161081690614fae565b60008381526007602052604090205463ffffffff1680611e1557600091505061165a565b600084815260066020908152604080832063ffffffff600019860181168552925290912054168310611e7d5760008481526006602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b0316905061165a565b600084815260066020908152604080832083805290915290205463ffffffff16831015611eae57600091505061165a565b600060001982015b8163ffffffff168163ffffffff161115611f6757600282820363ffffffff16048103611ee0613950565b50600087815260066020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415611f425760200151945061165a9350505050565b805163ffffffff16871115611f5957819350611f60565b6001820392505b5050611eb6565b50600085815260066020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b611faa611313565b611fc65760405162461bcd60e51b815260040161081690614f4e565b611fcf8161311f565b50565b6001600160a01b0380841660009081526004602090815260408083208584529091528120549091169061200585846124d8565b6001600160a01b0386811660008181526004602090815260408083208984529091529081902080546001600160a01b031916898516908117909155905193945092918516917fb846dc53d3621f480d692e73f4473156d20f23ff6b2c8237b7130b883226cca990612077908890614d3b565b60405180910390a461082e828583866131a0565b612093612d41565b156112255760006120ad826212750063ffffffff61320416565b6001600160a01b03808616600090815260046020908152604080832085845290915290205491925090811690841681146120ec576120ec858584611fd2565b6000336001600160a01b031663c24a0f8b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121619190810190613d90565b9050612176846224ea0063ffffffff61320416565b9250808314156121bc576001600160a01b03808716600090815260046020908152604080832087845290915290205481169250851682146121bc576121bc868685611fd2565b505050505050565b6000856001600160601b0316116121ed5760405162461bcd60e51b815260040161081690614f0e565b806121fe576121fb84611044565b93505b42841161221d5760405162461bcd60e51b815260040161081690614f6e565b6001600160a01b03831661222f578592505b6001600160a01b038216612241578291505b8061226757600061225763059fa6004201611044565b905080851115612265578094505b505b600061227384866124d8565b905061228187878688613229565b6001600160a01b03808516600090815260046020908152604080832089845290915290205481169084168114612338576001600160a01b0385811660009081526004602090815260408083208a8452909152902080546001600160a01b0319169186169190911790556122f5818784612fff565b61233582886040518060400160405280602081526020017f5374616b696e673a3a7374616b653a2062616c616e6365206f766572666c6f77815250612408565b96505b61234384878961309c565b836001600160a01b0316816001600160a01b0316866001600160a01b03167fb846dc53d3621f480d692e73f4473156d20f23ff6b2c8237b7130b883226cca9896040516123909190614d3b565b60405180910390a45050505050505050565b6000806123af8585610dad565b905060006123bd8685611dc9565b9050600a6001600160601b03166123ed82846040518060600160405280603b81526020016153c4603b913961247a565b6001600160601b0316816123fd57fe5b049695505050505050565b6000838301826001600160601b03808716908316101561130a5760405162461bcd60e51b81526004016108169190614e0d565b6000836001600160601b0316836001600160601b0316111582906124725760405162461bcd60e51b81526004016108169190614e0d565b505050900390565b60006001600160601b03841661249257506000611738565b8383026001600160601b0380851690808716908316816124ae57fe5b046001600160601b031614839061130a5760405162461bcd60e51b81526004016108169190614e0d565b6001600160a01b0382166000818152600a602090815260408083208584528252808320938352600b825280832085845282528083205460001963ffffffff9182160116835292905220546001600160601b03600160201b9091041692915050565b836001600160601b031660011480156125555750612555612d41565b1561255f57610954565b61256883613341565b92506125748484612c89565b6001600160a01b038216612586573391505b6125908385612f1c565b61259b338486612e08565b3360009081526004602090815260408083208684529091529020546125ca906001600160a01b03168486612fff565b82421080156125dc575060055460ff16155b80156125e6575080155b156127295760006125f78585612cf6565b948590039490506001600160601b0381161561272757600d546001600160a01b03166126355760405162461bcd60e51b815260040161081690614ece565b600354600d5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261266b929116908590600401614cd2565b602060405180830381600087803b15801561268557600080fd5b505af1158015612699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126bd9190810190613d11565b50600d5460035460405163abe979e160e01b81526001600160a01b039283169263abe979e1926126f4929116908590600401614ced565b600060405180830381600087803b15801561270e57600080fd5b505af1158015612722573d6000803e3d6000fd5b505050505b505b60035460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb9061275c9086908990600401614cd2565b602060405180830381600087803b15801561277657600080fd5b505af115801561278a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ae9190810190613d11565b9050806127cd5760405162461bcd60e51b815260040161081690614e7e565b826001600160a01b0316336001600160a01b03167f667b6c8ed8622dae7927a8b0837455098e32037a0181f9a2e21b9b72fead6cc78787866040516128149392919061504e565b60405180910390a35050505050565b61282b612d41565b15610954576000612845846212750063ffffffff61320416565b905081806128535750804210155b1561082e5760006128683383600143036128ed565b90506001600160601b038116156121bc576121bc81838686612539565b6000806128928585610dad565b905060006128a18787866119dc565b9050600a6001600160601b03166128d1828460405180608001604052806047815260200161519b6047913961247a565b6001600160601b0316816128e157fe5b04979650505050505050565b60006128f7612e04565b82106129155760405162461bcd60e51b815260040161081690614f8e565b61291e83613341565b6001600160a01b0385166000908152600b6020908152604080832084845290915290205490935063ffffffff168061295a576000915050611738565b6001600160a01b0385166000908152600a60209081526040808320878452825280832063ffffffff6000198601811685529252909120541683106129e6576001600160a01b0385166000908152600a6020908152604080832087845282528083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611738565b6001600160a01b0385166000908152600a60209081526040808320878452825280832083805290915290205463ffffffff16831015612a29576000915050611738565b600060001982015b8163ffffffff168163ffffffff161115612af457600282820363ffffffff16048103612a5b613950565b506001600160a01b0388166000908152600a602090815260408083208a8452825280832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415612acf576020015194506117389350505050565b805163ffffffff16871115612ae657819350612aed565b6001820392505b5050612a31565b506001600160a01b0386166000908152600a60209081526040808320888452825280832063ffffffff909416835292905220546001600160601b03600160201b909104169150509392505050565b3390565b6003546001600160a01b031690565b60408051600180825281830190925260609182919060208083019080388339019050509050630c09ddfd60e01b81600081518110612b8f57fe5b6001600160e01b031990921660209283029190910190910152905090565b6020015190565b60006060306001600160a01b031683604051612bd09190614c14565b6000604051808303816000865af19150503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b509150915081611225576044815111612c3d5760405162461bcd60e51b815260040161081690614e6e565b612c706040518060400160405280601181526020017003932b1b2b4bb32a0b8383937bb30b61d1607d1b81525082613366565b60405162461bcd60e51b81526004016108169190614e0d565b6000826001600160601b031611612cb25760405162461bcd60e51b815260040161081690614e4e565b6000612cc23383600143036128ed565b9050806001600160601b0316836001600160601b031611156112255760405162461bcd60e51b815260040161081690614e9e565b600080612d0242611044565b90506000612d108483610dad565b600d54600160a01b90046001600160601b03908116919091029150606490600a878402821604160495945050505050565b60115460405163dbb049d160e01b81526000916001600160a01b03169063dbb049d190612d72903390600401614c81565b60206040518083038186803b158015612d8a57600080fd5b505afa158015612d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dc29190810190613d11565b905090565b4690565b600073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383161480159061165a5750506001600160a01b0316151590565b4390565b6001600160a01b0383166000818152600b60209081526040808320868452825280832054938352600a8252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526034808352600160201b9091046001600160601b03169392612e8b92859288926152a19083013961243b565b90506121bc86868584613460565b6001600160a01b0383166000818152600b60209081526040808320868452825280832054938352600a8252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526033808352600160201b9091046001600160601b03169392612e8b928592889261539190830139612408565b6000828152600760209081526040808320546006835281842063ffffffff9182166000198101909216855283528184205482516060810190935260358084529194600160201b9091046001600160601b0316939092612f87928592889291906154739083013961243b565b905061082e8584836135e0565b6000828152600760209081526040808320546006835281842063ffffffff9182166000198101909216855283528184205482516060810190935260348084529194600160201b9091046001600160601b0316939092612f879285928892919061531f90830139612408565b6001600160a01b038316600081815260096020908152604080832086845282528083205493835260088252808320868452825280832063ffffffff94851660001981019095168452909152812054600160201b90046001600160601b03908116919084168211156130905761308d82856040518060600160405280603881526020016154df6038913961243b565b90505b6121bc8686858461371e565b6001600160a01b038316600081815260096020908152604080832086845282528083205493835260088252808320868452825280832063ffffffff948516600019810190951684528252808320548151606081019092526037808352600160201b9091046001600160601b0316939261308d92859288926154a890830139612408565b6001600160a01b0381166131455760405162461bcd60e51b815260040161081690614e8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b826001600160a01b0316846001600160a01b0316141580156131cb57506000826001600160601b0316115b15610954576001600160a01b038416156131ea576131ea848284612fff565b6001600160a01b038316156109545761095483828461309c565b6000828201838110156117385760405162461bcd60e51b815260040161081690614ebe565b6003546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061325e90889030908990600401614caa565b602060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132b09190810190613d11565b9050806132bc57600080fd5b60006132c884846124d8565b90506132ed818660405180606001604052806028815260200161544b60289139612408565b90506132f98386612f94565b613304848487612e99565b836001600160a01b03167f0fc5b1bac0416800b42a669229a346b6e5a15db3896339dbdc5fa376e1e4570a868584604051611db993929190615076565b60008061334d83611044565b905082811461335f5762127500810192505b5090919050565b6060808390506060839050606060448251845101036040519080825280601f01601f1916602001820160405280156133a5576020820181803883390190505b509050806000805b85518110156133fe578581815181106133c257fe5b602001015160f81c60f81b8383806001019450815181106133df57fe5b60200101906001600160f81b031916908160001a9053506001016133ad565b5060445b84518110156134535784818151811061341757fe5b602001015160f81c60f81b83838060010194508151811061343457fe5b60200101906001600160f81b031916908160001a905350600101613402565b5090979650505050505050565b6000613484436040518060600160405280603e8152602001615353603e9139613921565b905060008363ffffffff161180156134d557506001600160a01b0385166000908152600a60209081526040808320878452825280832063ffffffff6000198801811685529252909120548282169116145b15613537576001600160a01b0385166000908152600a602090815260408083208784528252808320600019870163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b0385160217905561082e565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526001600160a01b03989098166000818152600a8a528481208982528a5284812088871682528a52848120935184549351909716600160201b02640100000000600160801b031997871663ffffffff19948516179790971696909617909255908452600b875281842095845294909552939020805460019092019093169116179055565b6000613604436040518060600160405280603e8152602001615353603e9139613921565b905060008363ffffffff161180156136435750600084815260066020908152604080832063ffffffff6000198801811685529252909120548282169116145b15613693576000848152600660209081526040808320600019870163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055610954565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526000888152600682528481208887168252825284812093518454935163ffffffff1994851691881691909117640100000000600160801b031916600160201b919098160296909617909255958452600790529091208054909316600190920116179055565b6000613742436040518060600160405280603e8152602001615353603e9139613921565b6001600160a01b03861660009081526008602090815260408083208884528252808320600019880163ffffffff9081168552925290912054919250600160201b9091046001600160601b0316908416158015906137d857506001600160a01b0386166000908152600860209081526040808320888452825280832063ffffffff6000198901811685529252909120548382169116145b1561383a576001600160a01b03861660009081526008602090815260408083208884528252808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b038616021790556138e4565b60408051808201825263ffffffff80851682526001600160601b0380871660208085019182526001600160a01b038c166000818152600883528781208d825283528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600984528482208a835290935292909220805460018801909316929091169190911790555b856001600160a01b03167fc7b38fb25352e6f351f57e2c922f84db5c97e09a6246bbe1d2eedfcdb01c4c62868386604051611db993929190615009565b600081600160201b84106139485760405162461bcd60e51b81526004016108169190614e0d565b509192915050565b604080518082019091526000808252602082015290565b803561165a81615159565b805161165a81615159565b805161165a8161516d565b803561165a81615176565b805161165a81615176565b60008083601f8401126139b057600080fd5b50813567ffffffffffffffff8111156139c857600080fd5b60208301915083600182028301111561158857600080fd5b803561165a8161517f565b803561165a81615188565b803561165a81615191565b600060208284031215613a1357600080fd5b6000613a1f8484613967565b949350505050565b60008060408385031215613a3a57600080fd5b6000613a468585613967565b9250506020613a5785828601613967565b9150509250929050565b60008060408385031215613a7457600080fd5b6000613a808585613967565b9250506020613a5785828601613988565b600080600080600060808688031215613aa957600080fd5b6000613ab58888613967565b9550506020613ac688828901613988565b9450506040613ad788828901613967565b935050606086013567ffffffffffffffff811115613af457600080fd5b613b008882890161399e565b92509250509295509295909350565b600080600060608486031215613b2457600080fd5b6000613b308686613967565b9350506020613b4186828701613988565b9250506040613b5286828701613988565b9150509250925092565b60008060008060808587031215613b7257600080fd5b6000613b7e8787613967565b9450506020613b8f87828801613988565b9350506040613ba087828801613988565b9250506060613bb187828801613988565b91505092959194509250565b600080600080600080600060e0888a031215613bd857600080fd5b6000613be48a8a613967565b9750506020613bf58a828b01613988565b9650506040613c068a828b01613988565b9550506060613c178a828b01613988565b9450506080613c288a828b016139eb565b93505060a0613c398a828b01613988565b92505060c0613c4a8a828b01613988565b91505092959891949750929550565b600080600060608486031215613c6e57600080fd5b6000613c7a8686613967565b9350506020613c8b86828701613988565b9250506040613b52868287016139e0565b600080600080600060a08688031215613cb457600080fd5b6000613cc08888613967565b9550506020613cd1888289016139f6565b9450506040613ce288828901613988565b9350506060613cf388828901613967565b9250506080613d0488828901613967565b9150509295509295909350565b600060208284031215613d2357600080fd5b6000613a1f848461397d565b600060208284031215613d4157600080fd5b6000613a1f8484613988565b600080600060608486031215613d6257600080fd5b6000613d6e8686613993565b9350506020613d7f86828701613972565b9250506040613b5286828701613993565b600060208284031215613da257600080fd5b6000613a1f8484613993565b60008060408385031215613dc157600080fd5b6000613a808585613988565b60008060008060008060c08789031215613de657600080fd5b6000613df28989613988565b9650506020613e0389828a01613988565b9550506040613e1489828a01613988565b9450506060613e2589828a01613988565b9350506080613e3689828a01613967565b92505060a0613e4789828a01613967565b9150509295509295509295565b60008060408385031215613e6757600080fd5b6000613e738585613988565b9250506020613a57858286016139e0565b60008060408385031215613e9757600080fd5b6000613a8085856139e0565b600060208284031215613eb557600080fd5b6000613a1f84846139f6565b60008060408385031215613ed457600080fd5b6000613a8085856139f6565b600080600060608486031215613ef557600080fd5b6000613f0186866139f6565b9350506020613f1286828701613988565b9250506040613b5286828701613967565b60008060008060808587031215613f3957600080fd5b6000613f4587876139f6565b9450506020613f5687828801613988565b9350506040613f6787828801613967565b9250506060613bb187828801613967565b6000613f848383614071565b505060200190565b6000613f848383614bee565b613fa1816150fa565b82525050565b613fa1816150b6565b6000613fbb826150a4565b613fc581856150a8565b9350613fd083615092565b8060005b83811015613ffe578151613fe88882613f78565b9750613ff383615092565b925050600101613fd4565b509495945050505050565b6000614014826150a4565b61401e81856150a8565b935061402983615092565b8060005b83811015613ffe5781516140418882613f8c565b975061404c83615092565b92505060010161402d565b613fa1816150c1565b613fa161406c826150c6565b6150d0565b613fa1816150d0565b613fa161406c826150d0565b600061409283856150b1565b935061409f838584615117565b50500190565b60006140b0826150a4565b6140ba81856150b1565b93506140ca818560208601615123565b9290920192915050565b6000815460018116600081146140f1576001811461411457614153565b607f600283041661410281876150b1565b60ff1984168152955085019250614153565b6002820461412281876150b1565b955061412d85615098565b60005b8281101561414c57815488820152600190910190602001614130565b5050850192505b505092915050565b613fa181615101565b600061416f826150a4565b61417981856150a8565b9350614189818560208601615123565b6141928161514f565b9093019392505050565b60006141a96029836150a8565b7f5374616b696e673a3a64656c656761746542795369673a207369676e617475728152681948195e1c1a5c995960ba1b602082015260400192915050565b60006141f46024836150a8565b7f7468657265206973206e6f206e6577207374616b696e6720636f6e7472616374815263081cd95d60e21b602082015260400192915050565b600061423a6042836150a8565b7f5374616b696e673a3a657874656e645374616b696e674475726174696f6e3a2081527f63616e6e6f742072656475636520746865207374616b696e672064757261746960208201526137b760f11b604082015260600192915050565b60006142a4604d836150a8565b7f5374616b696e673a3a77697468647261773a20616d6f756e74206f6620746f6b81527f656e7320746f2062652077697468647261776e206e6565647320746f2062652060208201526c0626967676572207468616e203609c1b604082015260600192915050565b60006143196020836150a8565b7f76657374696e67207265676973747279206164647265737320696e76616c6964815260200192915050565b60006143526030836150a8565b7f72656365697665417070726f76616c3a205472616e73616374696f6e2065786581526f31baba34b7b7103932bb32b93a32b21760811b602082015260400192915050565b60006143a46028836150a8565b7f5374616b696e673a3a77697468647261773a20546f6b656e207472616e7366658152671c8819985a5b195960c21b602082015260400192915050565b60006143ee6026836150a8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006144366025836150a8565b7f5374616b696e673a3a77697468647261773a206e6f7420656e6f7567682062618152646c616e636560d81b602082015260400192915050565b600061447d6015836150a8565b741b595d1a1bd9081a5cc81b9bdd08185b1b1bddd959605a1b815260200192915050565b60006144ae6002836150b1565b61190160f01b815260020192915050565b60006144cc601b836150a8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006145056030836150a8565b7f5374616b696e673a3a77697468647261773a2046656553686172696e6720616481526f191c995cdcc81dd85cdb89dd081cd95d60821b602082015260400192915050565b60006145576029836150a8565b7f5374616b696e673a3a64656c656761746542795369673a20696e76616c6964208152687369676e617475726560b81b602082015260400192915050565b60006145a2604d836150a8565b7f57656967687465645374616b696e673a3a74696d657374616d70546f4c6f636b81527f446174653a2074696d657374616d70206c696573206265666f726520636f6e7460208201526c3930b1ba1031b932b0ba34b7b760991b604082015260600192915050565b6000614617602d836150a8565b7f776569676874207363616c696e6720646f65736e27742062656c6f6e6720746f81526c2072616e6765205b312c20395d60981b602082015260400192915050565b60006146666043836150a8565b7f5374616b696e673a3a7374616b653a20616d6f756e74206f6620746f6b656e7381527f20746f207374616b65206e6565647320746f206265206269676765722074686160208201526206e20360ec1b604082015260600192915050565b60006146d1604b836150a8565b7f5374616b696e673a3a657874656e645374616b696e674475726174696f6e3a2081527f6e6f7468696e67207374616b656420756e74696c207468652070726576696f7560208201526a73206c6f636b206461746560a81b604082015260600192915050565b6000614744600f836150a8565b6e0e6cadcc8cae440dad2e6dac2e8c6d608b1b815260200192915050565b600061476f604c836150a8565b7f57656967687465645374616b696e673a3a636f6d70757465576569676874427981527f446174653a2064617465206e6565647320746f2062652062696767657220746860208201526b616e2073746172744461746560a01b604082015260600192915050565b60006147e36043836150b1565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b600061484e600c836150a8565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000614876604d836150a8565b7f5374616b696e673a3a636f6d707574655765696768744279446174653a72656d81527f61696e696e672074696d652063616e277420626520626967676572207468616e60208201526c1036b0bc10323ab930ba34b7b760991b604082015260600192915050565b60006148eb6036836150a8565b7f5374616b696e673a3a74696d657374616d70546f4c6f636b446174653a207374815275185ada5b99c81c195c9a5bd9081d1bdbc81cda1bdc9d60521b602082015260400192915050565b60006149436029836150a8565b7f63616e277420726573657420746865206e6577207374616b696e6720636f6e7481526807261637420746f20360bc1b602082015260400192915050565b600061498e604b836150b1565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206c6f636b446174652c75696e74323536206e6f6e63652c75696e7460208201526a323536206578706972792960a81b6040820152604b0192915050565b6000614a01603d836150a8565b7f57656967687465645374616b696e673a3a6765745072696f725573657253746181527f6b65416e64446174653a206e6f74207965742064657465726d696e6564000000602082015260400192915050565b6000614a606021836150a8565b7f46656553686172696e6720616464726573732073686f756c646e2774206265208152600360fc1b602082015260400192915050565b6000614aa3603f836150a8565b7f57656967687465645374616b696e673a3a6765745072696f72546f74616c537481527f616b6573466f72446174653a206e6f74207965742064657465726d696e656400602082015260400192915050565b6000614b02600f836150a8565b6e0c2dadeeadce840dad2e6dac2e8c6d608b1b815260200192915050565b6000614b2d6044836150a8565b7f57656967687465645374616b696e673a3a6765745072696f725374616b65427981527f44617465466f7244656c6567617465653a206e6f74207965742064657465726d6020820152631a5b995960e21b604082015260600192915050565b6000614b996025836150a8565b7f5374616b696e673a3a64656c656761746542795369673a20696e76616c6964208152646e6f6e636560d81b602082015260400192915050565b613fa1816150df565b613fa1816150e8565b613fa18161510c565b613fa1816150ee565b6000614c038286614060565b601c82019150610edf828486614086565b600061173882846140a5565b600061173882846140d4565b6000614c37826144a1565b9150614c43828561407a565b602082019150614c53828461407a565b5060200192915050565b600061165a826147d6565b600061165a82614981565b6020810161165a8284613fa7565b6020810161165a8284613f98565b60408101614c9d8285613fa7565b6117386020830184613fa7565b60608101614cb88286613fa7565b614cc56020830185613fa7565b613a1f6040830184614be5565b60408101614ce08285613fa7565b6117386020830184614be5565b60408101614cfb8285613fa7565b6117386020830184614bee565b60408082528101614d198185613fb0565b90508181036020830152613a1f8184614009565b6020810161165a8284614057565b6020810161165a8284614071565b60a08101614d578288614071565b614d646020830187613fa7565b614d716040830186614071565b614d7e6060830185614071565b614d8b6080830184614071565b9695505050505050565b60808101614da38287614071565b614db06020830186614071565b614dbd6040830185614071565b610edf6060830184613fa7565b60808101614dd88287614071565b614de56020830186614bdc565b614df26040830185614071565b610edf6060830184614071565b6020810161165a828461415b565b602080825281016117388184614164565b6020808252810161165a8161419c565b6020808252810161165a816141e7565b6020808252810161165a8161422d565b6020808252810161165a81614297565b6020808252810161165a8161430c565b6020808252810161165a81614345565b6020808252810161165a81614397565b6020808252810161165a816143e1565b6020808252810161165a81614429565b6020808252810161165a81614470565b6020808252810161165a816144bf565b6020808252810161165a816144f8565b6020808252810161165a8161454a565b6020808252810161165a81614595565b6020808252810161165a8161460a565b6020808252810161165a81614659565b6020808252810161165a816146c4565b6020808252810161165a81614737565b6020808252810161165a81614762565b6020808252810161165a81614841565b6020808252810161165a81614869565b6020808252810161165a816148de565b6020808252810161165a81614936565b6020808252810161165a816149f4565b6020808252810161165a81614a53565b6020808252810161165a81614a96565b6020808252810161165a81614af5565b6020808252810161165a81614b20565b6020808252810161165a81614b8c565b60608101614ffc8286614071565b614cc56020830185614071565b606081016150178286614071565b614cc56020830185614be5565b6020810161165a8284614bd3565b60408101614cfb8285614bd3565b6020810161165a8284614bee565b6060810161505c8286614be5565b6150696020830185614071565b613a1f6040830184614057565b60608101614ffc8286614be5565b60408101614cfb8285614bee565b60200190565b60009081526020902090565b5190565b90815260200190565b919050565b600061165a826150d3565b151590565b63ffffffff191690565b90565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b600061165a825b600061165a826150b6565b600061165a826150ee565b82818337506000910152565b60005b8381101561513e578181015183820152602001615126565b838111156109545750506000910152565b601f01601f191690565b615162816150b6565b8114611fcf57600080fd5b615162816150c1565b615162816150d0565b615162816150df565b615162816150e8565b615162816150ee56fe57656967687465645374616b696e673a3a5f746f74616c506f776572427944617465466f7244656c6567617465653a206d756c7469706c69636174696f6e206f766572666c6f7757656967687465645374616b696e673a3a6765745072696f72546f74616c566f74696e67506f7765723a206f766572666c6f77206f6e20746f74616c20766f74696e6720706f77657220636f6d7075746174696f6e6d756c7469706c69636174696f6e206f766572666c6f77206f6e2077656967687420636f6d7075746174696f6e57656967687465645374616b696e673a3a77656967687465645374616b654279446174653a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e673a3a5f6465637265617365557365725374616b653a207374616b656420616d6f756e7420756e646572666c6f7757656967687465645374616b696e673a3a6765745072696f72566f7465733a206f766572666c6f77206f6e20746f74616c20766f74696e6720706f77657220636f6d7075746174696f6e5374616b696e673a3a5f696e6372656173654461696c795374616b653a207374616b656420616d6f756e74206f766572666c6f775374616b696e673a3a5f77726974655374616b696e67436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974735374616b696e673a3a5f696e637265617365557365725374616b653a207374616b656420616d6f756e74206f766572666c6f7757656967687465645374616b696e673a3a5f746f74616c506f7765724279446174653a206d756c7469706c69636174696f6e206f766572666c6f7757656967687465645374616b696e673a3a6765745072696f7257656967687465645374616b653a206f766572666c6f77206f6e20746f74616c2077656967687420636f6d7075746174696f6e5374616b696e673a3a696e6372656173655374616b653a2062616c616e6365206f766572666c6f775374616b696e673a3a5f64656372656173654461696c795374616b653a207374616b656420616d6f756e7420756e646572666c6f775374616b696e673a3a5f696e63726561736544656c65676174655374616b653a207374616b656420616d6f756e74206f766572666c6f775374616b696e673a3a5f646563726561736544656c65676174655374616b653a207374616b656420616d6f756e7420756e646572666c6f77a365627a7a723158204e5624842b70eebad1ef63a30cc6e4f4b569e7eaa0b2a2fe9242485d8115741a6c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
