Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
10,000,000,000.00 AIPR

Holders:
5
Profile Summary
Blockchain:
Base (8453)


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

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No

Created At:
Sat, 06 Apr 2024 11:27:45 GMT
Ownable.sol
@openzeppelin
contracts
access
Ownable.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "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": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "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": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "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": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "distributionWallet",
        "type": "address"
      }
    ],
    "name": "distributeTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "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"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
608060405234801561001057600080fd5b50604051611d9f380380611d9f833981810160405281019061003291906105e4565b3382828160039081610044919061087d565b508060049081610054919061087d565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c09190610990565b60405180910390fd5b6100d8816100fc60201b60201c565b506100f5336b204fce5e3e250261100000006101c260201b60201c565b5050610a6f565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102345760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161022b9190610990565b60405180910390fd5b6102466000838361024a60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361029c57806002600082825461029091906109da565b9250508190555061036f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610328578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161031f93929190610a1d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103b85780600260008282540392505081905550610405565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104629190610a54565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104d68261048d565b810181811067ffffffffffffffff821117156104f5576104f461049e565b5b80604052505050565b600061050861046f565b905061051482826104cd565b919050565b600067ffffffffffffffff8211156105345761053361049e565b5b61053d8261048d565b9050602081019050919050565b60005b8381101561056857808201518184015260208101905061054d565b60008484015250505050565b600061058761058284610519565b6104fe565b9050828152602081018484840111156105a3576105a2610488565b5b6105ae84828561054a565b509392505050565b600082601f8301126105cb576105ca610483565b5b81516105db848260208601610574565b91505092915050565b600080604083850312156105fb576105fa610479565b5b600083015167ffffffffffffffff8111156106195761061861047e565b5b610625858286016105b6565b925050602083015167ffffffffffffffff8111156106465761064561047e565b5b610652858286016105b6565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806106ae57607f821691505b6020821081036106c1576106c0610667565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026107297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106ec565b61073386836106ec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061077a6107756107708461074b565b610755565b61074b565b9050919050565b6000819050919050565b6107948361075f565b6107a86107a082610781565b8484546106f9565b825550505050565b600090565b6107bd6107b0565b6107c881848461078b565b505050565b5b818110156107ec576107e16000826107b5565b6001810190506107ce565b5050565b601f82111561083157610802816106c7565b61080b846106dc565b8101602085101561081a578190505b61082e610826856106dc565b8301826107cd565b50505b505050565b600082821c905092915050565b600061085460001984600802610836565b1980831691505092915050565b600061086d8383610843565b9150826002028217905092915050565b6108868261065c565b67ffffffffffffffff81111561089f5761089e61049e565b5b6108a98254610696565b6108b48282856107f0565b600060209050601f8311600181146108e757600084156108d5578287015190505b6108df8582610861565b865550610947565b601f1984166108f5866106c7565b60005b8281101561091d578489015182556001820191506020850194506020810190506108f8565b8683101561093a5784890151610936601f891682610843565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061097a8261094f565b9050919050565b61098a8161096f565b82525050565b60006020820190506109a56000830184610981565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006109e58261074b565b91506109f08361074b565b9250828201905080821115610a0857610a076109ab565b5b92915050565b610a178161074b565b82525050565b6000606082019050610a326000830186610981565b610a3f6020830185610a0e565b610a4c6040830184610a0e565b949350505050565b6000602082019050610a696000830184610a0e565b92915050565b61132180610a7e6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063a9059cbb11610066578063a9059cbb14610262578063b1d17c9814610292578063dd62ed3e146102ae578063f2fde38b146102de576100f5565b8063715018a61461020057806379cc67901461020a5780638da5cb5b1461022657806395d89b4114610244576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806342966c68146101b457806370a08231146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b6101026102fa565b60405161010f9190610edc565b60405180910390f35b610132600480360381019061012d9190610f97565b61038c565b60405161013f9190610ff2565b60405180910390f35b6101506103af565b60405161015d919061101c565b60405180910390f35b610180600480360381019061017b9190611037565b6103b9565b60405161018d9190610ff2565b60405180910390f35b61019e6103e8565b6040516101ab91906110a6565b60405180910390f35b6101ce60048036038101906101c991906110c1565b6103f1565b005b6101ea60048036038101906101e591906110ee565b610405565b6040516101f7919061101c565b60405180910390f35b61020861044d565b005b610224600480360381019061021f9190610f97565b610461565b005b61022e610481565b60405161023b919061112a565b60405180910390f35b61024c6104ab565b6040516102599190610edc565b60405180910390f35b61027c60048036038101906102779190610f97565b61053d565b6040516102899190610ff2565b60405180910390f35b6102ac60048036038101906102a791906110ee565b610560565b005b6102c860048036038101906102c39190611145565b6105d2565b6040516102d5919061101c565b60405180910390f35b6102f860048036038101906102f391906110ee565b610659565b005b606060038054610309906111b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610335906111b4565b80156103825780601f1061035757610100808354040283529160200191610382565b820191906000526020600020905b81548152906001019060200180831161036557829003601f168201915b5050505050905090565b6000806103976106df565b90506103a48185856106e7565b600191505092915050565b6000600254905090565b6000806103c46106df565b90506103d18582856106f9565b6103dc85858561078d565b60019150509392505050565b60006012905090565b6104026103fc6106df565b82610881565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610455610903565b61045f600061098a565b565b6104738261046d6106df565b836106f9565b61047d8282610881565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104ba906111b4565b80601f01602080910402602001604051908101604052809291908181526020018280546104e6906111b4565b80156105335780601f1061050857610100808354040283529160200191610533565b820191906000526020600020905b81548152906001019060200180831161051657829003601f168201915b5050505050905090565b6000806105486106df565b905061055581858561078d565b600191505092915050565b610568610903565b600061057333610405565b90506b204fce5e3e2502611000000081146105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611231565b60405180910390fd5b6105ce33838361078d565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610661610903565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d35760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106ca919061112a565b60405180910390fd5b6106dc8161098a565b50565b600033905090565b6106f48383836001610a50565b505050565b600061070584846105d2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107875781811015610777578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161076e93929190611251565b60405180910390fd5b61078684848484036000610a50565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107ff5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107f6919061112a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108715760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610868919061112a565b60405180910390fd5b61087c838383610c27565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108f35760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108ea919061112a565b60405180910390fd5b6108ff82600083610c27565b5050565b61090b6106df565b73ffffffffffffffffffffffffffffffffffffffff16610929610481565b73ffffffffffffffffffffffffffffffffffffffff16146109885761094c6106df565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161097f919061112a565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ac25760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ab9919061112a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b345760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b2b919061112a565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610c21578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c18919061101c565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c79578060026000828254610c6d91906112b7565b92505081905550610d4c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d05578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610cfc93929190611251565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d955780600260008282540392505081905550610de2565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3f919061101c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e86578082015181840152602081019050610e6b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610eae82610e4c565b610eb88185610e57565b9350610ec8818560208601610e68565b610ed181610e92565b840191505092915050565b60006020820190508181036000830152610ef68184610ea3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f2e82610f03565b9050919050565b610f3e81610f23565b8114610f4957600080fd5b50565b600081359050610f5b81610f35565b92915050565b6000819050919050565b610f7481610f61565b8114610f7f57600080fd5b50565b600081359050610f9181610f6b565b92915050565b60008060408385031215610fae57610fad610efe565b5b6000610fbc85828601610f4c565b9250506020610fcd85828601610f82565b9150509250929050565b60008115159050919050565b610fec81610fd7565b82525050565b60006020820190506110076000830184610fe3565b92915050565b61101681610f61565b82525050565b6000602082019050611031600083018461100d565b92915050565b6000806000606084860312156110505761104f610efe565b5b600061105e86828701610f4c565b935050602061106f86828701610f4c565b925050604061108086828701610f82565b9150509250925092565b600060ff82169050919050565b6110a08161108a565b82525050565b60006020820190506110bb6000830184611097565b92915050565b6000602082840312156110d7576110d6610efe565b5b60006110e584828501610f82565b91505092915050565b60006020828403121561110457611103610efe565b5b600061111284828501610f4c565b91505092915050565b61112481610f23565b82525050565b600060208201905061113f600083018461111b565b92915050565b6000806040838503121561115c5761115b610efe565b5b600061116a85828601610f4c565b925050602061117b85828601610f4c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111cc57607f821691505b6020821081036111df576111de611185565b5b50919050565b7f546f6b656e7320616c7265616479206469737472696275746564000000000000600082015250565b600061121b601a83610e57565b9150611226826111e5565b602082019050919050565b6000602082019050818103600083015261124a8161120e565b9050919050565b6000606082019050611266600083018661111b565b611273602083018561100d565b611280604083018461100d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006112c282610f61565b91506112cd83610f61565b92508282019050808211156112e5576112e4611288565b5b9291505056fea2646970667358221220192c8f16106a6aa9a538752ae8b060d65d976878c5d75be02a5b5cbe16f7840164736f6c63430008190033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005414950726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044149505200000000000000000000000000000000000000000000000000000000