Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,000,000,000.00 IGNORE

Holders:
118
Profile Summary
Blockchain:
Base (8453)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
GovernableERC20

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Wed, 11 Dec 2024 15:30:55 GMT
GovernableERC20.flattened.sol
src
GovernableERC20.flattened.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "_totalSupply",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "CheckpointUnorderedInsertion",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ECDSAInvalidSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "ECDSAInvalidSignatureLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "ECDSAInvalidSignatureS",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "increasedSupply",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "cap",
        "type": "uint256"
      }
    ],
    "name": "ERC20ExceededSafeSupply",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "ERC2612ExpiredSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC2612InvalidSigner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      },
      {
        "internalType": "uint48",
        "name": "clock",
        "type": "uint48"
      }
    ],
    "name": "ERC5805FutureLookup",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ERC6372InconsistentClock",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "currentNonce",
        "type": "uint256"
      }
    ],
    "name": "InvalidAccountNonce",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidShortString",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "bits",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "SafeCastOverflowedUintDowncast",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "str",
        "type": "string"
      }
    ],
    "name": "StringTooLong",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }
    ],
    "name": "VotesExpiredSignature",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromDelegate",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toDelegate",
        "type": "address"
      }
    ],
    "name": "DelegateChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "previousVotes",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newVotes",
        "type": "uint256"
      }
    ],
    "name": "DelegateVotesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "CLOCK_MODE",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "pos",
        "type": "uint32"
      }
    ],
    "name": "checkpoints",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint48",
            "name": "_key",
            "type": "uint48"
          },
          {
            "internalType": "uint208",
            "name": "_value",
            "type": "uint208"
          }
        ],
        "internalType": "struct Checkpoints.Checkpoint208",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "clock",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      }
    ],
    "name": "delegate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      },
      {
        "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": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "delegates",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "eip712Domain",
    "outputs": [
      {
        "internalType": "bytes1",
        "name": "fields",
        "type": "bytes1"
      },
      {
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "version",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "chainId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "verifyingContract",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "uint256[]",
        "name": "extensions",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "getVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "numCheckpoints",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
6101606040523480156200001257600080fd5b5060405162002a5238038062002a52833981016040819052620000359162000934565b6040805180820190915260018152603160f81b6020820152849081908186600362000061838262000a57565b50600462000070828262000a57565b50620000829150839050600562000141565b610120526200009381600662000141565b61014052815160208084019190912060e052815190820120610100524660a0526200012160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200013781836200017a565b5050505062000c0c565b600060208351101562000161576200015983620001bc565b905062000174565b816200016e848262000a57565b5060ff90505b92915050565b6001600160a01b038216620001aa5760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620001b860008383620001ff565b5050565b600080829050601f81511115620001ea578260405163305a27a960e01b8152600401620001a1919062000b23565b8051620001f78262000b58565b179392505050565b6200020c83838362000211565b505050565b6200021e83838362000280565b6001600160a01b038316620002735760006200023960025490565b90506001600160d01b03808211156200027057604051630e58ae9360e11b81526004810183905260248101829052604401620001a1565b50505b6200020c838383620003b3565b6001600160a01b038316620002af578060026000828254620002a3919062000b93565b90915550620003239050565b6001600160a01b03831660009081526020819052604090205481811015620003045760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620001a1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620003415760028054829003905562000360565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003a691815260200190565b60405180910390a3505050565b6001600160a01b038316620003e857620003e5600a620008e56200044b60201b17620003df8462000460565b6200049a565b50505b6001600160a01b038216620004175762000414600a620008f1620004d760201b17620003df8462000460565b50505b6001600160a01b038381166000908152600860205260408082205485841683529120546200020c92918216911683620004e5565b600062000459828462000ba9565b9392505050565b60006001600160d01b0382111562000496576040516306dfcc6560e41b815260d0600482015260248101839052604401620001a1565b5090565b600080620004ca620004ab6200064c565b620004c1620004ba886200065d565b868860201c565b879190620006ac565b915091505b935093915050565b600062000459828462000bd3565b816001600160a01b0316836001600160a01b031614158015620005085750600081115b156200020c576001600160a01b03831615620005ab576001600160a01b038316600090815260096020908152604082208291620005569190620004d7901b620008f117620003df8662000460565b6001600160d01b031691506001600160d01b03169150846001600160a01b031660008051602062002a328339815191528383604051620005a0929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200020c576001600160a01b038216600090815260096020908152604082208291620005f391906200044b901b620008e517620003df8662000460565b6001600160d01b031691506001600160d01b03169150836001600160a01b031660008051602062002a3283398151915283836040516200063d929190918252602082015260400190565b60405180910390a25050505050565b600062000658620006bc565b905090565b80546000908015620006a35762000689836200067b60018462000bf6565b600091825260209091200190565b54660100000000000090046001600160d01b031662000459565b60009392505050565b600080620004ca858585620006c9565b6000620006584362000832565b825460009081908015620007d3576000620006eb876200067b60018562000bf6565b805490915065ffffffffffff80821691660100000000000090046001600160d01b03169088168211156200073257604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff16036200077057825465ffffffffffff1666010000000000006001600160d01b03891602178355620007c4565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f5560008f815291909120945191519092166601000000000000029216919091179101555b9450859350620004cf92505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a8152918220955192519093166601000000000000029190931617920191909155905081620004cf565b600065ffffffffffff82111562000496576040516306dfcc6560e41b81526030600482015260248101839052604401620001a1565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200089a57818101518382015260200162000880565b50506000910152565b600082601f830112620008b557600080fd5b81516001600160401b0380821115620008d257620008d262000867565b604051601f8301601f19908116603f01168101908282118183101715620008fd57620008fd62000867565b816040528381528660208588010111156200091757600080fd5b6200092a8460208301602089016200087d565b9695505050505050565b600080600080608085870312156200094b57600080fd5b84516001600160401b03808211156200096357600080fd5b6200097188838901620008a3565b955060208701519150808211156200098857600080fd5b506200099787828801620008a3565b60408701516060880151919550935090506001600160a01b0381168114620009be57600080fd5b939692955090935050565b600181811c90821680620009de57607f821691505b602082108103620009ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020c57600081815260208120601f850160051c8101602086101562000a2e5750805b601f850160051c820191505b8181101562000a4f5782815560010162000a3a565b505050505050565b81516001600160401b0381111562000a735762000a7362000867565b62000a8b8162000a848454620009c9565b8462000a05565b602080601f83116001811462000ac3576000841562000aaa5750858301515b600019600386901b1c1916600185901b17855562000a4f565b600085815260208120601f198616915b8281101562000af45788860151825594840194600190910190840162000ad3565b508582101562000b135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000b448160408501602087016200087d565b601f01601f19169190910160400192915050565b80516020808301519190811015620009ff5760001960209190910360031b1b16919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000174576200017462000b7d565b6001600160d01b0381811683821601908082111562000bcc5762000bcc62000b7d565b5092915050565b6001600160d01b0382811682821603908082111562000bcc5762000bcc62000b7d565b8181038181111562000174576200017462000b7d565b60805160a05160c05160e051610100516101205161014051611dcb62000c676000396000610cf501526000610cc801526000610ac601526000610a9e015260006109f901526000610a2301526000610a4d0152611dcb6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c35780639ab24eb01161007c5780639ab24eb0146102fc578063a9059cbb1461030f578063c3cda52014610322578063d505accf14610335578063dd62ed3e14610348578063f1127ed81461038157600080fd5b806370a082311461026b5780637ecebe001461029457806384b0196e146102a75780638e539e8c146102c257806391ddadf4146102d557806395d89b41146102f457600080fd5b80633644e515116101155780633644e515146101c75780633a46b1a8146101cf5780634bf5d7e9146101e2578063587cde1e146101ea5780635c19a95c1461022e5780636fcfff451461024357600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a5578063313ce567146101b8575b600080fd5b61015a6103c0565b60405161016791906119cf565b60405180910390f35b61018361017e3660046119fe565b610452565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004611a28565b61046c565b60405160128152602001610167565b610197610490565b6101976101dd3660046119fe565b61049f565b61015a610525565b6102166101f8366004611a64565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b039091168152602001610167565b61024161023c366004611a64565b61059d565b005b610256610251366004611a64565b6105ac565b60405163ffffffff9091168152602001610167565b610197610279366004611a64565b6001600160a01b031660009081526020819052604090205490565b6101976102a2366004611a64565b6105b7565b6102af6105c2565b6040516101679796959493929190611a7f565b6101976102d0366004611b15565b610608565b6102dd610672565b60405165ffffffffffff9091168152602001610167565b61015a61067c565b61019761030a366004611a64565b61068b565b61018361031d3660046119fe565b6106bb565b610241610330366004611b3f565b6106c9565b610241610343366004611b97565b610786565b610197610356366004611c01565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61039461038f366004611c34565b6108c0565b60408051825165ffffffffffff1681526020928301516001600160d01b03169281019290925201610167565b6060600380546103cf90611c74565b80601f01602080910402602001604051908101604052809291908181526020018280546103fb90611c74565b80156104485780601f1061041d57610100808354040283529160200191610448565b820191906000526020600020905b81548152906001019060200180831161042b57829003601f168201915b5050505050905090565b6000336104608185856108fd565b60019150505b92915050565b60003361047a85828561090f565b61048585858561098d565b506001949350505050565b600061049a6109ec565b905090565b6000806104aa610672565b90508065ffffffffffff1683106104ea57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105146104f684610b17565b6001600160a01b038616600090815260096020526040902090610b4e565b6001600160d01b0316949350505050565b606061052f610c04565b65ffffffffffff1661053f610672565b65ffffffffffff1614610565576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105a88183610c0f565b5050565b600061046682610c81565b600061046682610ca3565b6000606080600080600060606105d6610cc1565b6105de610cee565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610613610672565b90508065ffffffffffff16831061064e57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016104e1565b61066261065a84610b17565b600a90610b4e565b6001600160d01b03169392505050565b600061049a610c04565b6060600480546103cf90611c74565b6001600160a01b03811660009081526009602052604081206106ac90610d1b565b6001600160d01b031692915050565b60003361046081858561098d565b834211156106ed57604051632341d78760e11b8152600481018590526024016104e1565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906107679061075f9060a00160405160208183030381529060405280519060200120610d54565b858585610d81565b90506107738187610daf565b61077d8188610c0f565b50505050505050565b834211156107aa5760405163313c898160e11b8152600481018590526024016104e1565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107f78c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061085282610d54565b9050600061086282878787610d81565b9050896001600160a01b0316816001600160a01b0316146108a9576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016104e1565b6108b48a8a8a6108fd565b50505050505050505050565b60408051808201909152600080825260208201526108de8383610e02565b9392505050565b60006108de8284611cc4565b60006108de8284611ceb565b61090a8383836001610e38565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610987578181101561097857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104e1565b61098784848484036000610e38565b50505050565b6001600160a01b0383166109b757604051634b637e8f60e11b8152600060048201526024016104e1565b6001600160a01b0382166109e15760405163ec442f0560e01b8152600060048201526024016104e1565b61090a838383610f0d565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610a4557507f000000000000000000000000000000000000000000000000000000000000000046145b15610a6f57507f000000000000000000000000000000000000000000000000000000000000000090565b61049a604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610b4a576040516306dfcc6560e41b815260306004820152602481018390526044016104e1565b5090565b815460009081816005811115610bad576000610b6984610f18565b610b739085611d0b565b60008881526020902090915081015465ffffffffffff9081169087161015610b9d57809150610bab565b610ba8816001611d1e565b92505b505b6000610bbb87878585611071565b90508015610bf657610be087610bd2600184611d0b565b600091825260209091200190565b54600160301b90046001600160d01b0316610bf9565b60005b979650505050505050565b600061049a43610b17565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461090a8183610c7c866110d3565b6110f1565b6001600160a01b0381166000908152600960205260408120546104669061125d565b6001600160a01b038116600090815260076020526040812054610466565b606061049a7f0000000000000000000000000000000000000000000000000000000000000000600561128e565b606061049a7f0000000000000000000000000000000000000000000000000000000000000000600661128e565b80546000908015610d4b57610d3583610bd2600184611d0b565b54600160301b90046001600160d01b03166108de565b60009392505050565b6000610466610d616109ec565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610d9388888888611339565b925092509250610da38282611408565b50909695505050505050565b6001600160a01b038216600090815260076020526040902080546001810190915581811461090a576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016104e1565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206108de90836114c1565b6001600160a01b038416610e625760405163e602df0560e01b8152600060048201526024016104e1565b6001600160a01b038316610e8c57604051634a1406b160e11b8152600060048201526024016104e1565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561098757826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eff91815260200190565b60405180910390a350505050565b61090a838383611531565b600060018211610f26575090565b816001600160801b8210610f3f5760809190911c9060401b5b680100000000000000008210610f5a5760409190911c9060201b5b6401000000008210610f715760209190911c9060101b5b620100008210610f865760109190911c9060081b5b6101008210610f9a5760089190911c9060041b5b60108210610fad5760049190911c9060021b5b60048210610fb95760011b5b600302600190811c90818581610fd157610fd1611d31565b048201901c90506001818581610fe957610fe9611d31565b048201901c9050600181858161100157611001611d31565b048201901c9050600181858161101957611019611d31565b048201901c9050600181858161103157611031611d31565b048201901c9050600181858161104957611049611d31565b048201901c905061106881858161106257611062611d31565b04821190565b90039392505050565b60005b818310156110cb5760006110888484611598565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156110b7578092506110c5565b6110c2816001611d1e565b93505b50611074565b509392505050565b6001600160a01b038116600090815260208190526040812054610466565b816001600160a01b0316836001600160a01b0316141580156111135750600081115b1561090a576001600160a01b038316156111bb576001600160a01b03831660009081526009602052604081208190611156906108f1611151866115b3565b6115e7565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516111b0929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561090a576001600160a01b038216600090815260096020526040812081906111f4906108e5611151866115b3565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161124e929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610b4a576040516306dfcc6560e41b815260206004820152602481018390526044016104e1565b606060ff83146112a8576112a183611620565b9050610466565b8180546112b490611c74565b80601f01602080910402602001604051908101604052809291908181526020018280546112e090611c74565b801561132d5780601f106113025761010080835404028352916020019161132d565b820191906000526020600020905b81548152906001019060200180831161131057829003601f168201915b50505050509050610466565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561137457506000915060039050826113fe565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156113c8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113f4575060009250600191508290506113fe565b9250600091508190505b9450945094915050565b600082600381111561141c5761141c611d47565b03611425575050565b600182600381111561143957611439611d47565b036114575760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561146b5761146b611d47565b0361148c5760405163fce698f760e01b8152600481018290526024016104e1565b60038260038111156114a0576114a0611d47565b036105a8576040516335e2f38360e21b8152600481018290526024016104e1565b6040805180820190915260008082526020820152826000018263ffffffff16815481106114f0576114f0611d5d565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b61153c83838361165f565b6001600160a01b03831661158d57600061155560025490565b90506001600160d01b038082111561158a57604051630e58ae9360e11b815260048101839052602481018290526044016104e1565b50505b61090a838383611789565b60006115a76002848418611d73565b6108de90848416611d1e565b60006001600160d01b03821115610b4a576040516306dfcc6560e41b815260d06004820152602481018390526044016104e1565b6000806116136115f5610672565b61160b61160188610d1b565b868863ffffffff16565b8791906117ff565b915091505b935093915050565b6060600061162d8361180d565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b03831661168a57806002600082825461167f9190611d1e565b909155506116fc9050565b6001600160a01b038316600090815260208190526040902054818110156116dd5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104e1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661171857600280548290039055611737565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161177c91815260200190565b60405180910390a3505050565b6001600160a01b0383166117ab576117a8600a6108e5611151846115b3565b50505b6001600160a01b0382166117cd576117ca600a6108f1611151846115b3565b50505b6001600160a01b0383811660009081526008602052604080822054858416835291205461090a929182169116836110f1565b600080611613858585611835565b600060ff8216601f81111561046657604051632cd44ac360e21b815260040160405180910390fd5b82546000908190801561192e57600061185387610bd2600185611d0b565b805490915065ffffffffffff80821691600160301b90046001600160d01b031690881682111561189657604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff16036118cf57825465ffffffffffff16600160301b6001600160d01b03891602178355611920565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f5560008f81529190912094519151909216600160301b029216919091179101555b945085935061161892505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611618565b6000815180845260005b818110156119af57602081850181015186830182015201611993565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006108de6020830184611989565b80356001600160a01b03811681146119f957600080fd5b919050565b60008060408385031215611a1157600080fd5b611a1a836119e2565b946020939093013593505050565b600080600060608486031215611a3d57600080fd5b611a46846119e2565b9250611a54602085016119e2565b9150604084013590509250925092565b600060208284031215611a7657600080fd5b6108de826119e2565b60ff60f81b881681526000602060e081840152611a9f60e084018a611989565b8381036040850152611ab1818a611989565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611b0357835183529284019291840191600101611ae7565b50909c9b505050505050505050505050565b600060208284031215611b2757600080fd5b5035919050565b803560ff811681146119f957600080fd5b60008060008060008060c08789031215611b5857600080fd5b611b61876119e2565b95506020870135945060408701359350611b7d60608801611b2e565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611bb257600080fd5b611bbb886119e2565b9650611bc9602089016119e2565b95506040880135945060608801359350611be560808901611b2e565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611c1457600080fd5b611c1d836119e2565b9150611c2b602084016119e2565b90509250929050565b60008060408385031215611c4757600080fd5b611c50836119e2565b9150602083013563ffffffff81168114611c6957600080fd5b809150509250929050565b600181811c90821680611c8857607f821691505b602082108103611ca857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160d01b03818116838216019080821115611ce457611ce4611cae565b5092915050565b6001600160d01b03828116828216039080821115611ce457611ce4611cae565b8181038181111561046657610466611cae565b8082018082111561046657610466611cae565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611d9057634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212202710bd86d3820f10cf66c4074db3f17b8d9b1ae8295c6ce1be2595296d91ea3a64736f6c63430008140033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000006691fd150746f3d7deb5e8be369a3fb9a1235e89000000000000000000000000000000000000000000000000000000000000001274657374696e6720706c732069676e6f72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000649474e4f52450000000000000000000000000000000000000000000000000000