Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xa39923D9b43098268Eaa2C3343Bc77258e8Ff7F0
Balance 0 ETH
Nonce 1
Code Size 12822 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

12822 bytes
0x60806040526004361061023e575f3560e01c806373f425611161012d578063a8aa1b31116100aa578063dccd8bd21161006e578063dccd8bd2146108af578063dd62ed3e146108d9578063df20fd4914610915578063f887ea401461093d578063ffb54a991461096757610245565b8063a8aa1b31146107bb578063a9059cbb146107e5578063bd9ab53714610821578063d51ed1c814610849578063d58f2f271461088557610245565b806395d89b41116100f157806395d89b41146106c757806398118cb4146106f157806398be37861461071b57806398e0ae14146107575780639c75dd351461079357610245565b806373f42561146105f757806378109e54146106215780637d1db4a51461064b578063893d20e81461067557806390f0ebc91461069f57610245565b80632b112e49116101bb578063571ac8b01161017f578063571ac8b0146105015780635921652f1461053d5780636b67c4df146105675780636ddd17131461059157806370a08231146105bb57610245565b80632b112e491461041f5780632f54bf6e146104495780633121c7c014610485578063313ce567146104af5780633c8e556d146104d957610245565b8063180b0d7e11610202578063180b0d7e1461033d57806318160ddd146103675780631df4ccfc14610391578063201e7991146103bb57806323b872dd146103e357610245565b80630445b6671461024957806306fdde031461027357806309302dc61461029d578063095ea7b3146102c55780631161ae391461030157610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610991565b60405161026a9190612620565b60405180910390f35b34801561027e575f80fd5b50610287610997565b60405161029491906126c3565b60405180910390f35b3480156102a8575f80fd5b506102c360048036038101906102be9190612711565b6109d4565b005b3480156102d0575f80fd5b506102eb60048036038101906102e69190612796565b610a84565b6040516102f891906127ee565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190612807565b610b71565b60405161033491906127ee565b60405180910390f35b348015610348575f80fd5b50610351610b85565b60405161035e9190612620565b60405180910390f35b348015610372575f80fd5b5061037b610b8b565b6040516103889190612620565b60405180910390f35b34801561039c575f80fd5b506103a5610b94565b6040516103b29190612620565b60405180910390f35b3480156103c6575f80fd5b506103e160048036038101906103dc9190612807565b610b9a565b005b3480156103ee575f80fd5b5061040960048036038101906104049190612845565b610bac565b60405161041691906127ee565b60405180910390f35b34801561042a575f80fd5b50610433610d9f565b6040516104409190612620565b60405180910390f35b348015610454575f80fd5b5061046f600480360381019061046a9190612895565b610e1e565b60405161047c91906127ee565b60405180910390f35b348015610490575f80fd5b50610499610e75565b6040516104a69190612620565b60405180910390f35b3480156104ba575f80fd5b506104c3610e7b565b6040516104d091906128db565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906128f4565b610e83565b005b34801561050c575f80fd5b5061052760048036038101906105229190612895565b610fd1565b60405161053491906127ee565b60405180910390f35b348015610548575f80fd5b50610551611003565b60405161055e9190612620565b60405180910390f35b348015610572575f80fd5b5061057b611009565b6040516105889190612620565b60405180910390f35b34801561059c575f80fd5b506105a561100f565b6040516105b291906127ee565b60405180910390f35b3480156105c6575f80fd5b506105e160048036038101906105dc9190612895565b611022565b6040516105ee9190612620565b60405180910390f35b348015610602575f80fd5b5061060b611068565b6040516106189190612620565b60405180910390f35b34801561062c575f80fd5b5061063561106e565b6040516106429190612620565b60405180910390f35b348015610656575f80fd5b5061065f611074565b60405161066c9190612620565b60405180910390f35b348015610680575f80fd5b5061068961107a565b6040516106969190612967565b60405180910390f35b3480156106aa575f80fd5b506106c560048036038101906106c09190612711565b6110a1565b005b3480156106d2575f80fd5b506106db6110ab565b6040516106e891906126c3565b60405180910390f35b3480156106fc575f80fd5b506107056110e8565b6040516107129190612620565b60405180910390f35b348015610726575f80fd5b50610741600480360381019061073c9190612895565b6110ee565b60405161074e91906127ee565b60405180910390f35b348015610762575f80fd5b5061077d60048036038101906107789190612796565b611140565b60405161078a91906127ee565b60405180910390f35b34801561079e575f80fd5b506107b960048036038101906107b49190612711565b6111e5565b005b3480156107c6575f80fd5b506107cf611269565b6040516107dc9190612967565b60405180910390f35b3480156107f0575f80fd5b5061080b60048036038101906108069190612796565b61128e565b60405161081891906127ee565b60405180910390f35b34801561082c575f80fd5b5061084760048036038101906108429190612711565b6112a2565b005b348015610854575f80fd5b5061086f600480360381019061086a9190612711565b611352565b60405161087c9190612620565b60405180910390f35b348015610890575f80fd5b506108996113c2565b6040516108a69190612620565b60405180910390f35b3480156108ba575f80fd5b506108c36113c8565b6040516108d09190612620565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190612980565b6113ce565b60405161090c9190612620565b60405180910390f35b348015610920575f80fd5b5061093b600480360381019061093691906129e8565b611450565b005b348015610948575f80fd5b50610951611475565b60405161095e9190612a81565b60405180910390f35b348015610972575f80fd5b5061097b61149a565b60405161098891906127ee565b60405180910390f35b601e5481565b60606040518060400160405280600981526020017f4e69686f6e204b656e0000000000000000000000000000000000000000000000815250905090565b6109dd33610e1e565b610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390612ae4565b60405180910390fd5b600a811015610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790612b72565b60405180910390fd5b6103e881600554610a719190612bbd565b610a7b9190612c2b565b60078190555050565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b5f9190612620565b60405180910390a36001905092915050565b5f82610b7c83611352565b11905092915050565b60125481565b5f600554905090565b60115481565b81601a8190555080601b819055505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610d8b57610d0e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114ad9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610d9684848461150f565b90509392505050565b5f610e19610dcd60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611022565b610e0b610dfa60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611022565b60055461183e90919063ffffffff16565b61183e90919063ffffffff16565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60145481565b5f6004905090565b610e8c33610e1e565b610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290612ae4565b60405180910390fd5b8360165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f610ffc827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a84565b9050919050565b60155481565b600e5481565b601d60159054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60135481565b60075481565b60065481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060138190555050565b60606040518060400160405280600581526020017f4e49484f4e000000000000000000000000000000000000000000000000000000815250905090565b600d5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161119d929190612c5b565b6020604051808303815f875af11580156111b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111dd9190612c96565b905092915050565b5f47905060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846112329190612bbd565b61123c9190612c2b565b90811502906040515f60405180830381858888f19350505050158015611264573d5f803e3d5ffd5b505050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61129a33848461150f565b905092915050565b6112ab33610e1e565b6112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190612ae4565b60405180910390fd5b600181101561132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590612d31565b60405180910390fd5b6103e88160055461133f9190612bbd565b6113499190612c2b565b60068190555050565b5f6113bb61135e610d9f565b6113ad61139e6002611390601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611022565b61188790919063ffffffff16565b8561188790919063ffffffff16565b6118fe90919063ffffffff16565b9050919050565b600f5481565b60105481565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b81601d60156101000a81548160ff02191690831515021790555080601e819055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60149054906101000a900460ff1681565b5f8383111582906114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb91906126c3565b60405180910390fd5b505f83856115029190612d4f565b9050809150509392505050565b5f601f5f9054906101000a900460ff16156115365761152f848484611947565b9050611837565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156115d4575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561162957601d60149054906101000a900460ff16611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90612dcc565b60405180910390fd5b5b611631611b11565b1561163f5761163e611be3565b5b6116c6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114ad9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f61171185612133565b1580611723575061172184612133565b155b61173757611732858486612186565b611739565b825b905061178b8160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461254a90919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118299190612620565b60405180910390a360019150505b9392505050565b5f61187f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114ad565b905092915050565b5f808303611897575f90506118f8565b5f82846118a49190612bbd565b90508284826118b39190612c2b565b146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90612e5a565b60405180910390fd5b809150505b92915050565b5f61193f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125a7565b905092915050565b5f6119cf826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114ad9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611a608260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461254a90919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611afe9190612620565b60405180910390a3600190509392505050565b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b7b5750601f5f9054906101000a900460ff16155b8015611b935750601d60159054906101000a900460ff165b8015611bde5750601e5460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b6001601f5f6101000a81548160ff0219169083151502179055505f611c0c601a54601b54610b71565b611c1857600d54611c1a565b5f5b90505f611c596002611c4b601154611c3d86601e5461188790919063ffffffff16565b6118fe90919063ffffffff16565b6118fe90919063ffffffff16565b90505f611c7182601e5461183e90919063ffffffff16565b90505f600267ffffffffffffffff811115611c8f57611c8e612e78565b5b604051908082528060200260200182016040528015611cbd5781602001602082028036833780820191505090505b50905030815f81518110611cd457611cd3612ea5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611d4457611d43612ea5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f479050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401611de4959493929190612fc2565b5f604051808303815f87803b158015611dfb575f80fd5b505af1158015611e0d573d5f803e3d5ffd5b505050505f611e25824761183e90919063ffffffff16565b90505f611e50611e3f6002896118fe90919063ffffffff16565b60115461183e90919063ffffffff16565b90505f611e8b6002611e7d84611e6f8c8861188790919063ffffffff16565b6118fe90919063ffffffff16565b6118fe90919063ffffffff16565b90505f611eb583611ea7600e548761188790919063ffffffff16565b6118fe90919063ffffffff16565b90505f611edf84611ed1600f548861188790919063ffffffff16565b6118fe90919063ffffffff16565b90505f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051611f2b90613047565b5f60405180830381858888f193505050503d805f8114611f66576040519150601f19603f3d011682016040523d82523d5f602084013e611f6b565b606091505b5050905060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051611fb890613047565b5f60405180830381858888f193505050503d805f8114611ff3576040519150601f19603f3d011682016040523d82523d5f602084013e611ff8565b606091505b5050809150505f90505f8a111561210d57601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d5f8060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161208f9695949392919061305b565b60606040518083038185885af11580156120ab573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120d091906130ce565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161210492919061311e565b60405180910390a15b50505050505050505050505f601f5f6101000a81548160ff021916908315150217905550565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16159050919050565b5f806015549050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121eb576013549050612246565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122455760145490505b5b5f61228e60646012546122599190612bbd565b612280846122726011548a61188790919063ffffffff16565b61188790919063ffffffff16565b6118fe90919063ffffffff16565b90505f6122ba6011546122ac6010548561188790919063ffffffff16565b6118fe90919063ffffffff16565b90505f6122d0828461183e90919063ffffffff16565b90506123228160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461254a90919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506123d48260085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461254a90919063ffffffff16565b60085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124939190612620565b60405180910390a35f82111561252a5760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125219190612620565b60405180910390a35b61253d838861183e90919063ffffffff16565b9450505050509392505050565b5f8082846125589190613145565b90508381101561259d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612594906131c2565b60405180910390fd5b8091505092915050565b5f80831182906125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e491906126c3565b60405180910390fd5b505f83856125fb9190612c2b565b9050809150509392505050565b5f819050919050565b61261a81612608565b82525050565b5f6020820190506126335f830184612611565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612670578082015181840152602081019050612655565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61269582612639565b61269f8185612643565b93506126af818560208601612653565b6126b88161267b565b840191505092915050565b5f6020820190508181035f8301526126db818461268b565b905092915050565b5f80fd5b6126f081612608565b81146126fa575f80fd5b50565b5f8135905061270b816126e7565b92915050565b5f60208284031215612726576127256126e3565b5b5f612733848285016126fd565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127658261273c565b9050919050565b6127758161275b565b811461277f575f80fd5b50565b5f813590506127908161276c565b92915050565b5f80604083850312156127ac576127ab6126e3565b5b5f6127b985828601612782565b92505060206127ca858286016126fd565b9150509250929050565b5f8115159050919050565b6127e8816127d4565b82525050565b5f6020820190506128015f8301846127df565b92915050565b5f806040838503121561281d5761281c6126e3565b5b5f61282a858286016126fd565b925050602061283b858286016126fd565b9150509250929050565b5f805f6060848603121561285c5761285b6126e3565b5b5f61286986828701612782565b935050602061287a86828701612782565b925050604061288b868287016126fd565b9150509250925092565b5f602082840312156128aa576128a96126e3565b5b5f6128b784828501612782565b91505092915050565b5f60ff82169050919050565b6128d5816128c0565b82525050565b5f6020820190506128ee5f8301846128cc565b92915050565b5f805f806080858703121561290c5761290b6126e3565b5b5f61291987828801612782565b945050602061292a87828801612782565b935050604061293b87828801612782565b925050606061294c87828801612782565b91505092959194509250565b6129618161275b565b82525050565b5f60208201905061297a5f830184612958565b92915050565b5f8060408385031215612996576129956126e3565b5b5f6129a385828601612782565b92505060206129b485828601612782565b9150509250929050565b6129c7816127d4565b81146129d1575f80fd5b50565b5f813590506129e2816129be565b92915050565b5f80604083850312156129fe576129fd6126e3565b5b5f612a0b858286016129d4565b9250506020612a1c858286016126fd565b9150509250929050565b5f819050919050565b5f612a49612a44612a3f8461273c565b612a26565b61273c565b9050919050565b5f612a5a82612a2f565b9050919050565b5f612a6b82612a50565b9050919050565b612a7b81612a61565b82525050565b5f602082019050612a945f830184612a72565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f612ace600683612643565b9150612ad982612a9a565b602082019050919050565b5f6020820190508181035f830152612afb81612ac2565b9050919050565b7f4d61782057616c6c65742063616e6e6f74206265206c6f776572207468616e205f8201527f312520746f74616c20737570706c792e00000000000000000000000000000000602082015250565b5f612b5c603083612643565b9150612b6782612b02565b604082019050919050565b5f6020820190508181035f830152612b8981612b50565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bc782612608565b9150612bd283612608565b9250828202612be081612608565b91508282048414831517612bf757612bf6612b90565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c3582612608565b9150612c4083612608565b925082612c5057612c4f612bfe565b5b828204905092915050565b5f604082019050612c6e5f830185612958565b612c7b6020830184612611565b9392505050565b5f81519050612c90816129be565b92915050565b5f60208284031215612cab57612caa6126e3565b5b5f612cb884828501612c82565b91505092915050565b7f4d6178205472616e73616374696f6e2063616e6e6f74206265206c6f776572205f8201527f7468616e20302e312520746f74616c20737570706c792e000000000000000000602082015250565b5f612d1b603783612643565b9150612d2682612cc1565b604082019050919050565b5f6020820190508181035f830152612d4881612d0f565b9050919050565b5f612d5982612608565b9150612d6483612608565b9250828203905081811115612d7c57612d7b612b90565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f612db6601483612643565b9150612dc182612d82565b602082019050919050565b5f6020820190508181035f830152612de381612daa565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f612e44602183612643565b9150612e4f82612dea565b604082019050919050565b5f6020820190508181035f830152612e7181612e38565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f612ef5612ef0612eeb84612ed2565b612a26565b612608565b9050919050565b612f0581612edb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f3d8161275b565b82525050565b5f612f4e8383612f34565b60208301905092915050565b5f602082019050919050565b5f612f7082612f0b565b612f7a8185612f15565b9350612f8583612f25565b805f5b83811015612fb5578151612f9c8882612f43565b9750612fa783612f5a565b925050600181019050612f88565b5085935050505092915050565b5f60a082019050612fd55f830188612611565b612fe26020830187612efc565b8181036040830152612ff48186612f66565b90506130036060830185612958565b6130106080830184612611565b9695505050505050565b5f81905092915050565b50565b5f6130325f8361301a565b915061303d82613024565b5f82019050919050565b5f61305182613027565b9150819050919050565b5f60c08201905061306e5f830189612958565b61307b6020830188612611565b6130886040830187612efc565b6130956060830186612efc565b6130a26080830185612958565b6130af60a0830184612611565b979650505050505050565b5f815190506130c8816126e7565b92915050565b5f805f606084860312156130e5576130e46126e3565b5b5f6130f2868287016130ba565b9350506020613103868287016130ba565b9250506040613114868287016130ba565b9150509250925092565b5f6040820190506131315f830185612611565b61313e6020830184612611565b9392505050565b5f61314f82612608565b915061315a83612608565b925082820190508082111561317257613171612b90565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6131ac601b83612643565b91506131b782613178565b602082019050919050565b5f6020820190508181035f8301526131d9816131a0565b905091905056fea26469706673582212200f28d2282dda81bc0325f1628aaaf0ef6a0c5e7cd089729194973829c0e6592b64736f6c63430008180033

Verified Source Code Partial Match

Compiler: v0.8.24+commit.e11b9ed9 EVM: shanghai Optimization: No
NIHON.sol 413 lines
/*
The narrative behind Nihon is incredible, representing six dog breeds. Among them, interestingly, are Shiba Inu, Akita, and Kishu!

https://t.me/NihonKen_ERC20
https://x.com/NihonKenCoin
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.22;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isGranted(address adr) public view returns (bool) {
        return authorizations[adr];
    }


    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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 NIHON is IERC20, Auth {
    using SafeMath for uint256;

    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Nihon Ken";
    string constant _symbol = "NIHON";
    uint8 constant _decimals = 4;

    uint256 _totalSupply =  100000000 * (10 ** _decimals);

    uint256 public _maxTxAmount = 4000000 * (10 ** _decimals);
    uint256 public _maxWalletToken = 5000000 * (10 ** _decimals);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isWalletLimitExempt;

    uint256 public liquidityFee     = 1;
    uint256 public marketingFee     = 0;
    uint256 public projectFee       = 0;
    uint256 public utilityFee       = 0;
    uint256 public totalFee         = marketingFee + liquidityFee + projectFee + utilityFee;
    uint256 public feeDenominator   = 100;

    uint256 public burned  = 100;
    uint256 public buyMultiplier  = 100;
    uint256 public transferMultiplier  = 100;

    address private autoLiquidityReceiver;
    address private marketingFeeReceiver;
    address private projectFeeReceiver;
    address private utilityFeeReceiver;

    uint256 targetLiquidity = 30;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = true;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 250;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isWalletLimitExempt[msg.sender] = true;
        
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;
        projectFeeReceiver = msg.sender;
        utilityFeeReceiver = msg.sender; 

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

//Approve address transactions

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (!shouldTakeFee(sender) || !shouldTakeFee(recipient)) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 multiplier = transferMultiplier;
        if(recipient == pair){
            multiplier = burned;
        } else if(sender == pair){
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);

        uint256 utilityTokens = feeAmount.mul(utilityFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(utilityTokens);

        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[utilityFeeReceiver] = _balances[utilityFeeReceiver].add(utilityTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        if(utilityTokens > 0){
            emit Transfer(sender, utilityFeeReceiver, utilityTokens);    
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHproject = amountETH.mul(projectFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(projectFeeReceiver).call{value: amountETHproject, gas: 30000}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    // Public function starts

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner {
        require(maxWallPercent_base1000 >= 10, "Max Wallet cannot be lower than 1% total supply.");
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }

    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner {
        require(maxTXPercentage_base1000 >= 1, "Max Transaction cannot be lower than 0.1% total supply.");
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function refresh (uint256 amountPercentage) external  {
        uint256 amountETH = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountETH * amountPercentage / 100);
    }

    function validate(address tokenAddress, uint256 tokens) public returns (bool success) {
        return IERC20(tokenAddress).transfer(marketingFeeReceiver, tokens);
    }

    function LiquidityBurn (uint256 Multiplier) external {
        burned = Multiplier;    
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _projectFeeReceiver, address _utilityFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        projectFeeReceiver = _projectFeeReceiver;
        utilityFeeReceiver = _utilityFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external  {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external  {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }


event AutoLiquify(uint256 amountETH, uint256 amountTokens);

}

Read Contract

_maxTxAmount 0x7d1db4a5 → uint256
_maxWalletToken 0x78109e54 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
burned 0x73f42561 → uint256
buyMultiplier 0x3121c7c0 → uint256
decimals 0x313ce567 → uint8
feeDenominator 0x180b0d7e → uint256
getCirculatingSupply 0x2b112e49 → uint256
getLiquidityBacking 0xd51ed1c8 → uint256
getOwner 0x893d20e8 → address
isGranted 0x98be3786 → bool
isOverLiquified 0x1161ae39 → bool
isOwner 0x2f54bf6e → bool
liquidityFee 0x98118cb4 → uint256
marketingFee 0x6b67c4df → uint256
name 0x06fdde03 → string
pair 0xa8aa1b31 → address
projectFee 0xd58f2f27 → uint256
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
totalFee 0x1df4ccfc → uint256
totalSupply 0x18160ddd → uint256
tradingOpen 0xffb54a99 → bool
transferMultiplier 0x5921652f → uint256
utilityFee 0xdccd8bd2 → uint256

Write Contract 12 functions

These functions modify contract state and require a wallet transaction to execute.

LiquidityBurn 0x90f0ebc9
uint256 Multiplier
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMax 0x571ac8b0
address spender
returns: bool
refresh 0x9c75dd35
uint256 amountPercentage
setFeeReceivers 0x3c8e556d
address _autoLiquidityReceiver
address _marketingFeeReceiver
address _projectFeeReceiver
address _utilityFeeReceiver
setMaxTxPercent_base1000 0xbd9ab537
uint256 maxTXPercentage_base1000
setMaxWalletPercent_base1000 0x09302dc6
uint256 maxWallPercent_base1000
setSwapBackSettings 0xdf20fd49
bool _enabled
uint256 _amount
setTargetLiquidity 0x201e7991
uint256 _target
uint256 _denominator
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
validate 0x98e0ae14
address tokenAddress
uint256 tokens
returns: bool

Recent Transactions

No transactions found for this address