Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x1258D60B224c0C5cD888D37bbF31aa5FCFb7e870
Balance 0 ETH
Nonce 1
Code Size 14253 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

14253 bytes
0x6080604052600436106102345760003560e01c80635eaa82471161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610830578063e6be4a721461086d578063ea2f0b3714610896578063f2fde38b146108bf578063fb235f34146108e85761023b565b8063a9059cbb14610771578063b29ad50a146107ae578063c49b9a80146107c5578063ce831ed5146107ee578063d2d7ad83146108055761023b565b806375f0a874116100f257806375f0a8741461068857806385141a77146106b35780638da5cb5b146106de57806395d89b4114610709578063a457c2d7146107345761023b565b80635eaa8247146105b35780636b67c4df146105de5780636ca60bc61461060957806370a0823114610634578063715018a6146106715761023b565b806339509351116101bc578063470624021161018057806347062402146104cc57806349bd5a5e146104f75780634a74bb02146105225780635342acb41461054d5780635d098b381461058a5761023b565b806339509351146103e75780634076350314610424578063437823ec1461044f5780634447842514610478578063461d9476146104a35761023b565b8063220f669611610203578063220f6696146102fe57806323b872dd146103295780632b14ca5614610366578063313ce5671461039157806336e4ec64146103bc5761023b565b806306fdde0314610240578063095ea7b31461026b5780631694505e146102a857806318160ddd146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610911565b6040516102629190612337565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906123f2565b61094a565b60405161029f919061244d565b60405180910390f35b3480156102b457600080fd5b506102bd610968565b6040516102ca91906124c7565b60405180910390f35b3480156102df57600080fd5b506102e861098c565b6040516102f591906124f1565b60405180910390f35b34801561030a57600080fd5b50610313610996565b604051610320919061244d565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b919061250c565b6109a9565b60405161035d919061244d565b60405180910390f35b34801561037257600080fd5b5061037b610aa9565b60405161038891906124f1565b60405180910390f35b34801561039d57600080fd5b506103a6610aaf565b6040516103b3919061257b565b60405180910390f35b3480156103c857600080fd5b506103d1610ab4565b6040516103de91906124f1565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906123f2565b610aba565b60405161041b919061244d565b60405180910390f35b34801561043057600080fd5b50610439610b66565b60405161044691906124f1565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612596565b610b6c565b005b34801561048457600080fd5b5061048d610c06565b60405161049a91906125e4565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906125ff565b610c2c565b005b3480156104d857600080fd5b506104e1610cc3565b6040516104ee91906124f1565b60405180910390f35b34801561050357600080fd5b5061050c610cc9565b604051610519919061263b565b60405180910390f35b34801561052e57600080fd5b50610537610ced565b604051610544919061244d565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190612596565b610d00565b604051610581919061244d565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190612596565b610d56565b005b3480156105bf57600080fd5b506105c8610e6a565b6040516105d591906124f1565b60405180910390f35b3480156105ea57600080fd5b506105f3610e70565b60405161060091906124f1565b60405180910390f35b34801561061557600080fd5b5061061e610e76565b60405161062b91906124f1565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190612596565b610e7c565b60405161066891906124f1565b60405180910390f35b34801561067d57600080fd5b50610686610ec5565b005b34801561069457600080fd5b5061069d610ed9565b6040516106aa91906125e4565b60405180910390f35b3480156106bf57600080fd5b506106c8610eff565b6040516106d5919061263b565b60405180910390f35b3480156106ea57600080fd5b506106f3610f05565b604051610700919061263b565b60405180910390f35b34801561071557600080fd5b5061071e610f2e565b60405161072b9190612337565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906123f2565b610f67565b604051610768919061244d565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906123f2565b611013565b6040516107a5919061244d565b60405180910390f35b3480156107ba57600080fd5b506107c3611031565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612682565b611134565b005b3480156107fa57600080fd5b506108036111e5565b005b34801561081157600080fd5b5061081a61131d565b60405161082791906124f1565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906126af565b611323565b60405161086491906124f1565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f91906123f2565b6113aa565b005b3480156108a257600080fd5b506108bd60048036038101906108b89190612596565b611540565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190612596565b6115da565b005b3480156108f457600080fd5b5061090f600480360381019061090a9190612596565b61165d565b005b6040518060400160405280600681526020017f4e6f64654149000000000000000000000000000000000000000000000000000081525081565b600061095e610957611771565b8484611779565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b601060009054906101000a900460ff1681565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109f5611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90612761565b60405180910390fd5b610a80858585611942565b610a9d85610a8c611771565b8584610a9891906127b0565b611779565b60019150509392505050565b60095481565b601281565b600a5481565b6000610b5c610ac7611771565b848460026000610ad5611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b5791906127e4565b611779565b6001905092915050565b600d5481565b610b74611d8c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610bfb919061288a565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c34611d8c565b68056bc75e2d63100000811015610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c779061292a565b60405180910390fd5b80600e819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600e54604051610cb891906129bc565b60405180910390a150565b60085481565b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f81565b601060019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d5e611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490612a36565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610e5f9190612ae9565b60405180910390a150565b600f5481565b600b5481565b600c5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecd611d8c565b610ed76000611e0a565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600381526020017f475055000000000000000000000000000000000000000000000000000000000081525081565b6000611009610f74611771565b848460026000610f82611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100491906127b0565b611779565b6001905092915050565b6000611027611020611771565b8484611942565b6001905092915050565b6001601060006101000a81548160ff021916908315150217905550600061105730610e7c565b905061106281611ece565b60004790506000600b54600a5461107991906127e4565b90506000810361108857600190505b600081600a54846110999190612b17565b6110a39190612b88565b905080836110b191906127b0565b92506110df600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826120d6565b61110b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120d6565b6000600c81905550505050506000601060006101000a81548160ff021916908315150217905550565b61113c611d8c565b801515601060019054906101000a900460ff16151503611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890612c05565b60405180910390fd5b80601060016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516111da919061244d565b60405180910390a150565b6111ed611d8c565b60004790506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161123a90612c56565b60006040518083038185875af1925050503d8060008114611277576040519150601f19603f3d011682016040523d82523d6000602084013e61127c565b606091505b50509050806112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b790612cb7565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113119190612d49565b60405180910390a15050565b600e5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113b2611d8c565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612de9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161147f929190612e09565b6020604051808303816000875af115801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c29190612e47565b905080611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90612cb7565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516115339190612ee6565b60405180910390a1505050565b611548611d8c565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516115cf9190612f86565b60405180910390a150565b6115e2611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613026565b60405180910390fd5b61165a81611e0a565b50565b611665611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90613092565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117669190613124565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df906131c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90613256565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161193591906124f1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a8906132e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a179061337a565b60405180910390fd5b60008111611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a9061340c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061349e565b60405180910390fd5b6000611af030610e7c565b90506000600e5482101590506000601060009054906101000a900460ff16158015611b6757507f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611b705750815b8015611b885750601060019054906101000a900460ff165b15611b9657611b95611031565b5b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611c3b5750600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c5d57606484600954611c509190612b17565b611c5a9190612b88565b90505b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611d025750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2457606484600854611d179190612b17565b611d219190612b88565b90505b8084611d3091906127b0565b93506000811115611d7957611d46863083612191565b80600c6000828254611d5891906127e4565b9250508190555080600d6000828254611d7191906127e4565b925050819055505b611d84868686612191565b505050505050565b611d94611771565b73ffffffffffffffffffffffffffffffffffffffff16611db2610f05565b73ffffffffffffffffffffffffffffffffffffffff1614611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061350a565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115611eeb57611eea61352a565b5b604051908082528060200260200182016040528015611f195781602001602082028036833780820191505090505b5090503081600081518110611f3157611f30613559565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611fa057611f9f613559565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612005307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611779565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612067959493929190613681565b600060405180830381600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516120ca9291906136db565b60405180910390a15050565b600081031561218d5760008273ffffffffffffffffffffffffffffffffffffffff168260405161210590612c56565b60006040518083038185875af1925050503d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b505090508061218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613757565b60405180910390fd5b505b5050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e091906127b0565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223691906127e4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161229a91906124f1565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122e15780820151818401526020810190506122c6565b60008484015250505050565b6000601f19601f8301169050919050565b6000612309826122a7565b61231381856122b2565b93506123238185602086016122c3565b61232c816122ed565b840191505092915050565b6000602082019050818103600083015261235181846122fe565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123898261235e565b9050919050565b6123998161237e565b81146123a457600080fd5b50565b6000813590506123b681612390565b92915050565b6000819050919050565b6123cf816123bc565b81146123da57600080fd5b50565b6000813590506123ec816123c6565b92915050565b6000806040838503121561240957612408612359565b5b6000612417858286016123a7565b9250506020612428858286016123dd565b9150509250929050565b60008115159050919050565b61244781612432565b82525050565b6000602082019050612462600083018461243e565b92915050565b6000819050919050565b600061248d6124886124838461235e565b612468565b61235e565b9050919050565b600061249f82612472565b9050919050565b60006124b182612494565b9050919050565b6124c1816124a6565b82525050565b60006020820190506124dc60008301846124b8565b92915050565b6124eb816123bc565b82525050565b600060208201905061250660008301846124e2565b92915050565b60008060006060848603121561252557612524612359565b5b6000612533868287016123a7565b9350506020612544868287016123a7565b9250506040612555868287016123dd565b9150509250925092565b600060ff82169050919050565b6125758161255f565b82525050565b6000602082019050612590600083018461256c565b92915050565b6000602082840312156125ac576125ab612359565b5b60006125ba848285016123a7565b91505092915050565b60006125ce8261235e565b9050919050565b6125de816125c3565b82525050565b60006020820190506125f960008301846125d5565b92915050565b60006020828403121561261557612614612359565b5b6000612623848285016123dd565b91505092915050565b6126358161237e565b82525050565b6000602082019050612650600083018461262c565b92915050565b61265f81612432565b811461266a57600080fd5b50565b60008135905061267c81612656565b92915050565b60006020828403121561269857612697612359565b5b60006126a68482850161266d565b91505092915050565b600080604083850312156126c6576126c5612359565b5b60006126d4858286016123a7565b92505060206126e5858286016123a7565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061274b6028836122b2565b9150612756826126ef565b604082019050919050565b6000602082019050818103600083015261277a8161273e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127bb826123bc565b91506127c6836123bc565b92508282039050818111156127de576127dd612781565b5b92915050565b60006127ef826123bc565b91506127fa836123bc565b925082820190508082111561281257612811612781565b5b92915050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612874602e836122b2565b915061287f82612818565b604082019050919050565b600060408201905081810360008301526128a381612867565b90506128b2602083018461262c565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b60006129146027836122b2565b915061291f826128b8565b604082019050919050565b6000602082019050818103600083015261294381612907565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b60006129a6602b836122b2565b91506129b18261294a565b604082019050919050565b600060408201905081810360008301526129d581612999565b90506129e460208301846124e2565b92915050565b7f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612a206018836122b2565b9150612a2b826129ea565b602082019050919050565b60006020820190508181036000830152612a4f81612a13565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612ab26024836122b2565b9150612abd82612a56565b604082019050919050565b6000612ad382612494565b9050919050565b612ae381612ac8565b82525050565b60006040820190508181036000830152612b0281612aa5565b9050612b116020830184612ada565b92915050565b6000612b22826123bc565b9150612b2d836123bc565b9250828202612b3b816123bc565b91508282048414831517612b5257612b51612781565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b93826123bc565b9150612b9e836123bc565b925082612bae57612bad612b59565b5b828204905092915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612bef6011836122b2565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b600081905092915050565b50565b6000612c40600083612c25565b9150612c4b82612c30565b600082019050919050565b6000612c6182612c33565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612ca1600f836122b2565b9150612cac82612c6b565b602082019050919050565b60006020820190508181036000830152612cd081612c94565b9050919050565b7f57652068617665207265636f766572207468652073746f636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000612d33602c836122b2565b9150612d3e82612cd7565b604082019050919050565b60006040820190508181036000830152612d6281612d26565b9050612d716020830184612ada565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000612dd36036836122b2565b9150612dde82612d77565b604082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b6000604082019050612e1e6000830185612ada565b612e2b60208301846124e2565b9392505050565b600081519050612e4181612656565b92915050565b600060208284031215612e5d57612e5c612359565b5b6000612e6b84828501612e32565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b6000612ed06027836122b2565b9150612edb82612e74565b604082019050919050565b60006040820190508181036000830152612eff81612ec3565b9050612f0e60208301846124e2565b92915050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b6000612f70602f836122b2565b9150612f7b82612f14565b604082019050919050565b60006040820190508181036000830152612f9f81612f63565b9050612fae602083018461262c565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130106026836122b2565b915061301b82612fb4565b604082019050919050565b6000602082019050818103600083015261303f81613003565b9050919050565b7f736574526576656e756557616c6c65743a205a45524f00000000000000000000600082015250565b600061307c6016836122b2565b915061308782613046565b602082019050919050565b600060208201905081810360008301526130ab8161306f565b9050919050565b7f57652068617665205570646174656420746865205261726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b600061310e6024836122b2565b9150613119826130b2565b604082019050919050565b6000604082019050818103600083015261313d81613101565b905061314c6020830184612ada565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131ae6024836122b2565b91506131b982613152565b604082019050919050565b600060208201905081810360008301526131dd816131a1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132406022836122b2565b915061324b826131e4565b604082019050919050565b6000602082019050818103600083015261326f81613233565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132d26025836122b2565b91506132dd82613276565b604082019050919050565b60006020820190508181036000830152613301816132c5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133646023836122b2565b915061336f82613308565b604082019050919050565b6000602082019050818103600083015261339381613357565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006133f66029836122b2565b91506134018261339a565b604082019050919050565b60006020820190508181036000830152613425816133e9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134886026836122b2565b91506134938261342c565b604082019050919050565b600060208201905081810360008301526134b78161347b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134f46020836122b2565b91506134ff826134be565b602082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006135ad6135a86135a384613588565b612468565b6123bc565b9050919050565b6135bd81613592565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135f88161237e565b82525050565b600061360a83836135ef565b60208301905092915050565b6000602082019050919050565b600061362e826135c3565b61363881856135ce565b9350613643836135df565b8060005b8381101561367457815161365b88826135fe565b975061366683613616565b925050600181019050613647565b5085935050505092915050565b600060a08201905061369660008301886124e2565b6136a360208301876135b4565b81810360408301526136b58186613623565b90506136c4606083018561262c565b6136d160808301846124e2565b9695505050505050565b60006040820190506136f060008301856124e2565b81810360208301526137028184613623565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006137416010836122b2565b915061374c8261370b565b602082019050919050565b6000602082019050818103600083015261377081613734565b905091905056fea2646970667358221220d27eecf47fd26e1a172780e5093d395abe48026a3c958d00d71fe3f1ec7d277b64736f6c63430008130033

Verified Source Code Partial Match

Compiler: v0.8.19+commit.7dd6d404 EVM: paris Optimization: No
NODEAI.sol 1174 lines
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

/*

    /$$$$$$  /$$$$$$$  /$$   /$$
    /$$__  $$| $$__  $$| $$  | $$
    | $$  \__/| $$  \ $$| $$  | $$
    | $$ /$$$$| $$$$$$$/| $$  | $$
    | $$|_  $$| $$____/ | $$  | $$
    | $$  \ $$| $$      | $$  | $$
    |  $$$$$$/| $$      |  $$$$$$/
    \______/ |__/       \______/ 
                                                         
                        
    Website:    https://nodeai.app
    Twitter:    https://twitter.com/NodeAIETH
    Telegram:   https://t.me/nodeaieth

    Rent or lend GPU power, and earn rewards with $GPU.

    We generate revenue by powering AI with GPUs.
*/

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    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
    );
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract NODEAI is Context, IERC20, Ownable {
    using Address for address;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 100_000_000 ether;
    uint256 private _tFeeTotal;
    //Token Definition.
    string public constant name = "NodeAI";
    string public constant symbol = "GPU";
    uint8 public constant decimals = 18;
    //Definition of Wallets for Marketing or team.
    address payable public marketingWallet =
        payable(0xD335c5E36F1B19AECE98b78e9827a9DF76eE29E6);
    address payable public revenueWallet =
        payable(0xE4eEc0C7e825f988aEEe7d05BE579519532E94E5);
    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;

    //Taxes Definition.
    uint public buyFee = 4;

    uint256 public sellFee = 4;
    uint public revenueFee = 1;
    uint public marketingFee = 3;

    uint256 public marketingTokensCollected = 0;

    uint256 public totalMarketingTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 10_000 ether;

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _tOwned[_msgSender()] = _tTotal;
        address currentRouter;
        //Adding Variables for all the routers for easier deployment for our customers.
        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
        } else if (block.chainid == 137) {
            currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten
        } else if (block.chainid == 6066) {
            currentRouter = 0x4169Db906fcBFB8b12DbD20d98850Aee05B7D889; //Tres Leches Chain
        } else if (block.chainid == 250) {
            currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM
        } else if (block.chainid == 42161) {
            currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi
        } else if (
            block.chainid == 1 || block.chainid == 4 || block.chainid == 5
        ) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
        } else {
            revert("You're not Blade");
        }

        //End of Router Variables.
        //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    //ERC 20 Standard increase Allowance
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    //Approve Function
    function _approve(address _owner, address spender, uint256 amount) private {
        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);
    }

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;
        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            marketingTokensCollected += fee;
            totalMarketingTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    //Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual.
    //Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred.
    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;
        uint totalFees = revenueFee + marketingFee;
        if (totalFees == 0) totalFees = 1;
        uint revenueAmount = (ethBalance * revenueFee) / totalFees;
        ethBalance -= revenueAmount;
        transferToAddressETH(revenueWallet, revenueAmount);
        transferToAddressETH(marketingWallet, ethBalance);

        marketingTokensCollected = 0;
    }

    //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
    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] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new marketing wallet.
    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "setMarketingWallet: ZERO");
        marketingWallet = payable(_marketingWallet);
        emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
    }

    //set a new team wallet.
    function setRevenueWallet(address _revenueWallet) external onlyOwner {
        require(_revenueWallet != address(0), "setRevenueWallet: ZERO");
        revenueWallet = payable(_revenueWallet);
        emit AuditLog("We have Updated the RarketingWallet:", revenueWallet);
    }



    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        if (amount == 0) return;
        (bool succ, ) = recipient.call{value: amount}("");
        require(succ, "Transfer failed.");
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stock eth from contract.",
            marketingWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }

    //Final Dev notes, this code has been tested and audited, last update to code was done to re-add swapandliquify function to the transfer as option, is recommended to be used manually instead of automatic.
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
buyFee 0x47062402 → uint256
deadWallet 0x85141a77 → address
decimals 0x313ce567 → uint8
inSwapAndLiquify 0x220f6696 → bool
isExcludedFromFee 0x5342acb4 → bool
marketingFee 0x6b67c4df → uint256
marketingTokensCollected 0x6ca60bc6 → uint256
marketingWallet 0x75f0a874 → address
minimumTokensBeforeSwap 0xd2d7ad83 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
revenueFee 0x36e4ec64 → uint256
revenueWallet 0x44478425 → address
sellFee 0x2b14ca56 → uint256
swapAndLiquifyEnabled 0x4a74bb02 → bool
swapOutput 0x5eaa8247 → uint256
symbol 0x95d89b41 → string
totalMarketingTokensCollected 0x40763503 → uint256
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 16 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
excludeFromFee 0x437823ec
address account
includeInFee 0xea2f0b37
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
recoverETHfromContract 0xce831ed5
No parameters
recoverTokensFromContract 0xe6be4a72
address _tokenAddress
uint256 _amount
renounceOwnership 0x715018a6
No parameters
setMarketingWallet 0x5d098b38
address _marketingWallet
setRevenueWallet 0xfb235f34
address _revenueWallet
setSwapAndLiquifyEnabled 0xc49b9a80
bool _enabled
setTokensToSwap 0x461d9476
uint256 _minimumTokensBeforeSwap
swapAndLiquify 0xb29ad50a
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address