{"abi":[{"type":"constructor","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"symbol","type":"string","internalType":"string"},{"name":"initialDecimals","type":"uint8","internalType":"uint8"},{"name":"initialSupply","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenDecimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x608060405234801561000f575f5ffd5b50604051610d9d380380610d9d83398101604081905261002e9161026e565b8383600361003c8382610380565b5060046100498282610380565b50506005805460ff191660ff851617905550610065338261006e565b50505050610463565b6001600160a01b03821661009c5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6100a75f83836100ab565b5050565b6001600160a01b0383166100d5578060025f8282546100ca919061043e565b909155506101459050565b6001600160a01b0383165f90815260208190526040902054818110156101275760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610093565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166101615760028054829003905561017f565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101c491815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101f4575f5ffd5b81516001600160401b0381111561020d5761020d6101d1565b604051601f8201601f19908116603f011681016001600160401b038111828210171561023b5761023b6101d1565b604052818152838201602001851015610252575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610281575f5ffd5b84516001600160401b03811115610296575f5ffd5b6102a2878288016101e5565b602087015190955090506001600160401b038111156102bf575f5ffd5b6102cb878288016101e5565b935050604085015160ff811681146102e1575f5ffd5b6060959095015193969295505050565b600181811c9082168061030557607f821691505b60208210810361032357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561037b578282111561037b57805f5260205f20601f840160051c602085101561035457505f5b90810190601f840160051c035f5b81811015610377575f83820155600101610362565b5050505b505050565b81516001600160401b03811115610399576103996101d1565b6103ad816103a784546102f1565b84610329565b6020601f8211600181146103df575f83156103c85750848201515b5f19600385901b1c1916600184901b178455610437565b5f84815260208120601f198516915b8281101561040e57878501518255602094850194600190920191016103ee565b508482101561042b57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b8082018082111561045d57634e487b7160e01b5f52601160045260245ffd5b92915050565b61092d806104705f395ff3fe608060405234801561000f575f5ffd5b50600436106100b9575f3560e01c80633b97e8561161007257806395d89b411161005857806395d89b411461017e578063a9059cbb14610186578063dd62ed3e14610199575f5ffd5b80633b97e8561461013c57806370a0823114610149575f5ffd5b806318160ddd116100a257806318160ddd146100fe57806323b872dd14610110578063313ce56714610123575f5ffd5b806306fdde03146100bd578063095ea7b3146100db575b5f5ffd5b6100c56101de565b6040516100d29190610740565b60405180910390f35b6100ee6100e93660046107bb565b61026e565b60405190151581526020016100d2565b6002545b6040519081526020016100d2565b6100ee61011e3660046107e3565b610287565b60055460ff165b60405160ff90911681526020016100d2565b60055461012a9060ff1681565b61010261015736600461081d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100c56102aa565b6100ee6101943660046107bb565b6102b9565b6101026101a736600461083d565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101ed9061086e565b80601f01602080910402602001604051908101604052809291908181526020018280546102199061086e565b80156102645780601f1061023b57610100808354040283529160200191610264565b820191905f5260205f20905b81548152906001019060200180831161024757829003601f168201915b5050505050905090565b5f3361027b8185856102c6565b60019150505b92915050565b5f336102948582856102d8565b61029f8585856103ab565b506001949350505050565b6060600480546101ed9061086e565b5f3361027b8185856103ab565b6102d38383836001610454565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156103a55781811015610397576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103a584848484035f610454565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103fa576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff8216610449576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b6102d3838383610599565b73ffffffffffffffffffffffffffffffffffffffff84166104a3576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff83166104f2576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020908152604080832093871683529290522082905580156103a5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058b91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105d0578060025f8282546105c591906108bf565b909155506106809050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610655576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161038e565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166106a9576002805482900390556106d4565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161073391815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107b6575f5ffd5b919050565b5f5f604083850312156107cc575f5ffd5b6107d583610793565b946020939093013593505050565b5f5f5f606084860312156107f5575f5ffd5b6107fe84610793565b925061080c60208501610793565b929592945050506040919091013590565b5f6020828403121561082d575f5ffd5b61083682610793565b9392505050565b5f5f6040838503121561084e575f5ffd5b61085783610793565b915061086560208401610793565b90509250929050565b600181811c9082168061088257607f821691505b6020821081036108b9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610281577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffdfea26469706673582212204d3d470a5d1227ce22ae556b371dfc30b5fb37ceb47c9cce5179b4e2905f959264736f6c63430008210033","sourceMap":"129:399:6:-:0;;;196:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;310:4;316:6;1648:5:46;:13;310:4:6;1648:5:46;:13;:::i;:::-;-1:-1:-1;1671:7:46;:17;1681:7;1671;:17;:::i;:::-;-1:-1:-1;;338:13:6::1;:31:::0;;-1:-1:-1;;338:31:6::1;;::::0;::::1;;::::0;;-1:-1:-1;379:32:6::1;385:10;397:13:::0;379:5:::1;:32::i;:::-;196:222:::0;;;;129:399;;7362:208:46;-1:-1:-1;;;;;7432:21:46;;7428:91;;7476:32;;-1:-1:-1;;;7476:32:46;;7505:1;7476:32;;;4477:51:57;4450:18;;7476:32:46;;;;;;;;7428:91;7528:35;7544:1;7548:7;7557:5;7528:7;:35::i;:::-;7362:208;;:::o;5912:1107::-;-1:-1:-1;;;;;6001:18:46;;5997:540;;6153:5;6137:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;5997:540:46;;-1:-1:-1;5997:540:46;;-1:-1:-1;;;;;6211:15:46;;6189:19;6211:15;;;;;;;;;;;6244:19;;;6240:115;;;6290:50;;-1:-1:-1;;;6290:50:46;;-1:-1:-1;;;;;4986:32:57;;6290:50:46;;;4968:51:57;5035:18;;;5028:34;;;5078:18;;;5071:34;;;4941:18;;6290:50:46;4766:345:57;6240:115:46;-1:-1:-1;;;;;6475:15:46;;:9;:15;;;;;;;;;;6493:19;;;;6475:37;;5997:540;-1:-1:-1;;;;;6551:16:46;;6547:425;;6714:12;:21;;;;;;;6547:425;;;-1:-1:-1;;;;;6925:13:46;;:9;:13;;;;;;;;;;:22;;;;;;6547:425;7002:2;-1:-1:-1;;;;;6987:25:46;6996:4;-1:-1:-1;;;;;6987:25:46;;7006:5;6987:25;;;;5262::57;;5250:2;5235:18;;5116:177;6987:25:46;;;;;;;;5912:1107;;;:::o;14:127:57:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:723;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:57;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:57;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:57;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:57;;;725:1;722;715:12;670:59;782:6;775:4;767:6;763:17;756:4;748:6;744:17;738:51;837:1;809:19;;;830:4;805:30;798:41;;;;813:6;146:723;-1:-1:-1;;;146:723:57:o;874:769::-;989:6;997;1005;1013;1066:3;1054:9;1045:7;1041:23;1037:33;1034:53;;;1083:1;1080;1073:12;1034:53;1110:16;;-1:-1:-1;;;;;1138:30:57;;1135:50;;;1181:1;1178;1171:12;1135:50;1204:61;1257:7;1248:6;1237:9;1233:22;1204:61;:::i;:::-;1311:2;1296:18;;1290:25;1194:71;;-1:-1:-1;1290:25:57;-1:-1:-1;;;;;;1327:32:57;;1324:52;;;1372:1;1369;1362:12;1324:52;1395:63;1450:7;1439:8;1428:9;1424:24;1395:63;:::i;:::-;1385:73;;;1501:2;1490:9;1486:18;1480:25;1545:4;1538:5;1534:16;1527:5;1524:27;1514:55;;1565:1;1562;1555:12;1514:55;1633:2;1618:18;;;;1612:25;874:769;;;;-1:-1:-1;;;874:769:57:o;1648:380::-;1727:1;1723:12;;;;1770;;;1791:61;;1845:4;1837:6;1833:17;1823:27;;1791:61;1898:2;1890:6;1887:14;1867:18;1864:38;1861:161;;1944:10;1939:3;1935:20;1932:1;1925:31;1979:4;1976:1;1969:15;2007:4;2004:1;1997:15;1861:161;;1648:380;;;:::o;2159:692::-;2261:2;2256:3;2253:11;2250:595;;;2298:10;2293:3;2290:19;2287:548;;;2350:5;2347:1;2340:16;2398:4;2395:1;2385:18;2463:2;2451:10;2447:19;2444:1;2440:27;2502:4;2490:10;2487:20;2484:45;;;-1:-1:-1;2526:1:57;2484:45;2565:23;;;;2635:2;2626:12;;2623:1;2619:20;2615:39;2680:1;2698:123;2712:2;2709:1;2706:9;2698:123;;;2801:1;2780:19;;;2773:30;2730:1;2723:9;2698:123;;;2702:3;;;2287:548;2159:692;;;:::o;3027:1299::-;3147:10;;-1:-1:-1;;;;;3169:30:57;;3166:56;;;3202:18;;:::i;:::-;3231:97;3321:6;3281:38;3313:4;3307:11;3281:38;:::i;:::-;3275:4;3231:97;:::i;:::-;3377:4;3408:2;3397:14;;3425:1;3420:649;;;;4113:1;4130:6;4127:89;;;-1:-1:-1;4182:19:57;;;4176:26;4127:89;-1:-1:-1;;2984:1:57;2980:11;;;2976:24;2972:29;2962:40;3008:1;3004:11;;;2959:57;4229:81;;3390:930;;3420:649;2106:1;2099:14;;;2143:4;2130:18;;-1:-1:-1;;3456:20:57;;;3574:222;3588:7;3585:1;3582:14;3574:222;;;3670:19;;;3664:26;3649:42;;3777:4;3762:20;;;;3730:1;3718:14;;;;3604:12;3574:222;;;3578:3;3824:6;3815:7;3812:19;3809:201;;;3885:19;;;3879:26;-1:-1:-1;;3968:1:57;3964:14;;;3980:3;3960:24;3956:37;3952:42;3937:58;3922:74;;3809:201;;;4056:1;4047:6;4044:1;4040:14;4036:22;4030:4;4023:36;3390:930;;;;3027:1299;;:::o;4539:222::-;4604:9;;;4625:10;;;4622:133;;;4677:10;4672:3;4668:20;4665:1;4658:31;4712:4;4709:1;4702:15;4740:4;4737:1;4730:15;4622:133;4539:222;;;;:::o;5116:177::-;129:399:6;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f5ffd5b50600436106100b9575f3560e01c80633b97e8561161007257806395d89b411161005857806395d89b411461017e578063a9059cbb14610186578063dd62ed3e14610199575f5ffd5b80633b97e8561461013c57806370a0823114610149575f5ffd5b806318160ddd116100a257806318160ddd146100fe57806323b872dd14610110578063313ce56714610123575f5ffd5b806306fdde03146100bd578063095ea7b3146100db575b5f5ffd5b6100c56101de565b6040516100d29190610740565b60405180910390f35b6100ee6100e93660046107bb565b61026e565b60405190151581526020016100d2565b6002545b6040519081526020016100d2565b6100ee61011e3660046107e3565b610287565b60055460ff165b60405160ff90911681526020016100d2565b60055461012a9060ff1681565b61010261015736600461081d565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100c56102aa565b6100ee6101943660046107bb565b6102b9565b6101026101a736600461083d565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101ed9061086e565b80601f01602080910402602001604051908101604052809291908181526020018280546102199061086e565b80156102645780601f1061023b57610100808354040283529160200191610264565b820191905f5260205f20905b81548152906001019060200180831161024757829003601f168201915b5050505050905090565b5f3361027b8185856102c6565b60019150505b92915050565b5f336102948582856102d8565b61029f8585856103ab565b506001949350505050565b6060600480546101ed9061086e565b5f3361027b8185856103ab565b6102d38383836001610454565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156103a55781811015610397576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103a584848484035f610454565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103fa576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff8216610449576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b6102d3838383610599565b73ffffffffffffffffffffffffffffffffffffffff84166104a3576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff83166104f2576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161038e565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020908152604080832093871683529290522082905580156103a5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161058b91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105d0578060025f8282546105c591906108bf565b909155506106809050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610655576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161038e565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166106a9576002805482900390556106d4565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161073391815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107b6575f5ffd5b919050565b5f5f604083850312156107cc575f5ffd5b6107d583610793565b946020939093013593505050565b5f5f5f606084860312156107f5575f5ffd5b6107fe84610793565b925061080c60208501610793565b929592945050506040919091013590565b5f6020828403121561082d575f5ffd5b61083682610793565b9392505050565b5f5f6040838503121561084e575f5ffd5b61085783610793565b915061086560208401610793565b90509250929050565b600181811c9082168061088257607f821691505b6020821081036108b9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610281577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffdfea26469706673582212204d3d470a5d1227ce22ae556b371dfc30b5fb37ceb47c9cce5179b4e2905f959264736f6c63430008210033","sourceMap":"129:399:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3902:186;;;;;;:::i;:::-;;:::i;:::-;;;1167:14:57;;1160:22;1142:41;;1130:2;1115:18;3902:186:46;1002:187:57;2803:97:46;2881:12;;2803:97;;;1340:25:57;;;1328:2;1313:18;2803:97:46;1194:177:57;4680:244:46;;;;;;:::i;:::-;;:::i;424:102:6:-;506:13;;;;424:102;;;1927:4:57;1915:17;;;1897:36;;1885:2;1870:18;424:102:6;1755:184:57;163:26:6;;;;;;;;;2933:116:46;;;;;;:::i;:::-;3024:18;;2998:7;3024:18;;;;;;;;;;;;2933:116;1962:93;;;:::i;3244:178::-;;;;;;:::i;:::-;;:::i;3455:140::-;;;;;;:::i;:::-;3561:18;;;;3535:7;3561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3455:140;1760:89;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3902:186::-;3975:4;735:10:50;4029:31:46;735:10:50;4045:7:46;4054:5;4029:8;:31::i;:::-;4077:4;4070:11;;;3902:186;;;;;:::o;4680:244::-;4767:4;735:10:50;4823:37:46;4839:4;735:10:50;4854:5:46;4823:15;:37::i;:::-;4870:26;4880:4;4886:2;4890:5;4870:9;:26::i;:::-;-1:-1:-1;4913:4:46;;4680:244;-1:-1:-1;;;;4680:244:46:o;1962:93::-;2009:13;2041:7;2034:14;;;;;:::i;3244:178::-;3313:4;735:10:50;3367:27:46;735:10:50;3384:2:46;3388:5;3367:9;:27::i;8630:128::-;8714:37;8723:5;8730:7;8739:5;8746:4;8714:8;:37::i;:::-;8630:128;;;:::o;10321:476::-;3561:18;;;;10420:24;3561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;10505:17;10486:36;;10482:309;;;10561:5;10542:16;:24;10538:130;;;10593:60;;;;;3074:42:57;3062:55;;10593:60:46;;;3044:74:57;3134:18;;;3127:34;;;3177:18;;;3170:34;;;3017:18;;10593:60:46;;;;;;;;10538:130;10709:57;10718:5;10725:7;10753:5;10734:16;:24;10760:5;10709:8;:57::i;:::-;10410:387;10321:476;;;:::o;5297:300::-;5380:18;;;5376:86;;5421:30;;;;;5448:1;5421:30;;;3361:74:57;3334:18;;5421:30:46;3215:226:57;5376:86:46;5475:16;;;5471:86;;5514:32;;;;;5543:1;5514:32;;;3361:74:57;3334:18;;5514:32:46;3215:226:57;5471:86:46;5566:24;5574:4;5580:2;5584:5;5566:7;:24::i;9607:432::-;9719:19;;;9715:89;;9761:32;;;;;9790:1;9761:32;;;3361:74:57;3334:18;;9761:32:46;3215:226:57;9715:89:46;9817:21;;;9813:90;;9861:31;;;;;9889:1;9861:31;;;3361:74:57;3334:18;;9861:31:46;3215:226:57;9813:90:46;9912:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;9957:76;;;;10007:7;9991:31;;10000:5;9991:31;;;10016:5;9991:31;;;;1340:25:57;;1328:2;1313:18;;1194:177;9991:31:46;;;;;;;;9607:432;;;;:::o;5912:1107::-;6001:18;;;5997:540;;6153:5;6137:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;5997:540:46;;-1:-1:-1;5997:540:46;;6211:15;;;6189:19;6211:15;;;;;;;;;;;6244:19;;;6240:115;;;6290:50;;;;;3074:42:57;3062:55;;6290:50:46;;;3044:74:57;3134:18;;;3127:34;;;3177:18;;;3170:34;;;3017:18;;6290:50:46;2842:368:57;6240:115:46;6475:15;;;:9;:15;;;;;;;;;;6493:19;;;;6475:37;;5997:540;6551:16;;;6547:425;;6714:12;:21;;;;;;;6547:425;;;6925:13;;;:9;:13;;;;;;;;;;:22;;;;;;6547:425;7002:2;6987:25;;6996:4;6987:25;;;7006:5;6987:25;;;;1340::57;;1328:2;1313:18;;1194:177;6987:25:46;;;;;;;;5912:1107;;;:::o;14:477:57:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;482:2;412:66;407:2;399:6;395:15;391:88;380:9;376:104;372:113;364:121;;;14:477;;;;:::o;496:196::-;564:20;;624:42;613:54;;603:65;;593:93;;682:1;679;672:12;593:93;496:196;;;:::o;697:300::-;765:6;773;826:2;814:9;805:7;801:23;797:32;794:52;;;842:1;839;832:12;794:52;865:29;884:9;865:29;:::i;:::-;855:39;963:2;948:18;;;;935:32;;-1:-1:-1;;;697:300:57:o;1376:374::-;1453:6;1461;1469;1522:2;1510:9;1501:7;1497:23;1493:32;1490:52;;;1538:1;1535;1528:12;1490:52;1561:29;1580:9;1561:29;:::i;:::-;1551:39;;1609:38;1643:2;1632:9;1628:18;1609:38;:::i;:::-;1376:374;;1599:48;;-1:-1:-1;;;1716:2:57;1701:18;;;;1688:32;;1376:374::o;1944:186::-;2003:6;2056:2;2044:9;2035:7;2031:23;2027:32;2024:52;;;2072:1;2069;2062:12;2024:52;2095:29;2114:9;2095:29;:::i;:::-;2085:39;1944:186;-1:-1:-1;;;1944:186:57:o;2135:260::-;2203:6;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2303:29;2322:9;2303:29;:::i;:::-;2293:39;;2351:38;2385:2;2374:9;2370:18;2351:38;:::i;:::-;2341:48;;2135:260;;;;;:::o;2400:437::-;2479:1;2475:12;;;;2522;;;2543:61;;2597:4;2589:6;2585:17;2575:27;;2543:61;2650:2;2642:6;2639:14;2619:18;2616:38;2613:218;;2687:77;2684:1;2677:88;2788:4;2785:1;2778:15;2816:4;2813:1;2806:15;2613:218;;2400:437;;;:::o;3446:279::-;3511:9;;;3532:10;;;3529:190;;;3575:77;3572:1;3565:88;3676:4;3673:1;3666:15;3704:4;3701:1;3694:15","linkReferences":{}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","tokenDecimals()":"3b97e856","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.33+commit.64118f21\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"initialDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000000},\"remappings\":[\":@openzeppelin/contracts/=solidity-lib/openzeppelin-contracts/contracts/\",\":ds-test/=solidity-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=solidity-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=solidity-lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=solidity-lib/forge-std/src/\",\":halmos-cheatcodes/=solidity-lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=solidity-lib/openzeppelin-contracts/\",\":permit2/=solidity-lib/permit2/src/\",\":solmate/=solidity-lib/permit2/lib/solmate/\"]},\"sources\":{\"contracts/TestERC20.sol\":{\"keccak256\":\"0xee2d0844e1f8970d368a246501bf1064869df4e58e766bef24b2781694ae21a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://31af879bb45a3e7d54e49546fc1398fc262fb8c77ac62f59455416440a91f4ab\",\"dweb:/ipfs/QmPr2WMBFGJHboEmXddNqc8UHvAuHLS9SYNdK67rt9acaE\"]},\"solidity-lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195\",\"dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH\"]},\"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"solidity-lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.33+commit.64118f21"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"initialDecimals","type":"uint8"},{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tokenDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=solidity-lib/openzeppelin-contracts/contracts/","ds-test/=solidity-lib/forge-std/lib/ds-test/src/","erc4626-tests/=solidity-lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=solidity-lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=solidity-lib/forge-std/src/","halmos-cheatcodes/=solidity-lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=solidity-lib/openzeppelin-contracts/","permit2/=solidity-lib/permit2/src/","solmate/=solidity-lib/permit2/lib/solmate/"],"optimizer":{"enabled":true,"runs":10000000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/TestERC20.sol":"TestERC20"},"evmVersion":"prague","libraries":{}},"sources":{"contracts/TestERC20.sol":{"keccak256":"0xee2d0844e1f8970d368a246501bf1064869df4e58e766bef24b2781694ae21a6","urls":["bzz-raw://31af879bb45a3e7d54e49546fc1398fc262fb8c77ac62f59455416440a91f4ab","dweb:/ipfs/QmPr2WMBFGJHboEmXddNqc8UHvAuHLS9SYNdK67rt9acaE"],"license":"MIT"},"solidity-lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998","urls":["bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c","dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"],"license":"MIT"},"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29","urls":["bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195","dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH"],"license":"MIT"},"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"],"license":"MIT"},"solidity-lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"],"license":"MIT"},"solidity-lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"}},"version":1},"id":6}