diff --git a/broadcast/DeployStrategy.s.sol/1/run-1787527737485.json b/broadcast/DeployStrategy.s.sol/1/run-1787527737485.json new file mode 100644 index 0000000..ab66d59 --- /dev/null +++ b/broadcast/DeployStrategy.s.sol/1/run-1787527737485.json @@ -0,0 +1,497 @@ +{ + "transactions": [ + { + "hash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "function": "deploy(address,address,address,address,address,string)", + "arguments": [ + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "0xc1f281A3643F219636F97F6E687A33704950eC84", + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "0x604e586F17cE106B64185A7a0d2c1Da5bAce711E", + "0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69", + "Flex yvcrvUSD-2/USDC Lender" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "gas": "0x3d7fea", + "value": "0x0", + "input": "0x26a10871000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c1f281a3643f219636f97f6e687a33704950ec84000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde6900000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001b466c65782079766372765553442d322f55534443204c656e6465720000000000", + "nonce": "0xba", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "contractName": "FlexLenderStrategy", + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "initCode": "0x61014060405260015f5f6101000a81548160ff02191690831515021790555061271060025f6101000a81548161ffff021916908361ffff160217905550348015610047575f5ffd5b506040516140ab3803806140ab83398181016040528101906100699190610bb6565b838181818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061014182823333336040516024016100f1959493929190610c97565b6040516020818303038152906040526397073ae660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506104f160201b60201c565b5073d377919fa87120584b21279a491f82d5265a139c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505050508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660e05173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610213573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102379190610cef565b73ffffffffffffffffffffffffffffffffffffffff161461028d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028490610d64565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663a96e874d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103309190610dbd565b73ffffffffffffffffffffffffffffffffffffffff166399bb33336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039c9190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250506101005173ffffffffffffffffffffffffffffffffffffffff16637d9f6db56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104409190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003819055506104e8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60805173ffffffffffffffffffffffffffffffffffffffff1661058b60201b9092919060201c565b505050506110fa565b60605f5f73d377919fa87120584b21279a491f82d5265a139c73ffffffffffffffffffffffffffffffffffffffff168460405161052e9190610e2c565b5f60405180830381855af49150503d805f8114610566576040519150601f19603f3d011682016040523d82523d5f602084013e61056b565b606091505b509150915081610581576040513d805f833e8082fd5b8092505050919050565b5f63095ea7b360e01b83836040516024016105a7929190610e5a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061061684826106b860201b60201c565b6106b2576106a18463095ea7b360e01b855f604051602401610639929190610ecf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061076c60201b60201c565b6106b1848261076c60201b60201c565b5b50505050565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516106e09190610e2c565b5f604051808303815f865af19150503d805f8114610719576040519150601f19603f3d011682016040523d82523d5f602084013e61071e565b606091505b509150915081801561074b57505f8151148061074a5750808060200190518101906107499190610f2b565b5b5b801561076257506107618561083260201b60201c565b5b9250505092915050565b5f6107cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661085460201b9092919060201c565b90505f815114806107ee5750808060200190518101906107ed9190610f2b565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490610fc6565b60405180910390fd5b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061086884845f8561087160201b60201c565b90509392505050565b6060824710156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90611054565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516108de9190610e2c565b5f6040518083038185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b50915091506109348783838761094060201b60201c565b92505050949350505050565b606083156109a7575f83510361099f5761095f8561083260201b60201c565b61099e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610995906110bc565b60405180910390fd5b5b8290506109b8565b6109b783836109c060201b60201c565b5b949350505050565b5f825111156109d25781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0691906110da565b60405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a4982610a20565b9050919050565b610a5981610a3f565b8114610a63575f5ffd5b50565b5f81519050610a7481610a50565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ac882610a82565b810181811067ffffffffffffffff82111715610ae757610ae6610a92565b5b80604052505050565b5f610af9610a0f565b9050610b058282610abf565b919050565b5f67ffffffffffffffff821115610b2457610b23610a92565b5b610b2d82610a82565b9050602081019050919050565b8281835e5f83830152505050565b5f610b5a610b5584610b0a565b610af0565b905082815260208101848484011115610b7657610b75610a7e565b5b610b81848285610b3a565b509392505050565b5f82601f830112610b9d57610b9c610a7a565b5b8151610bad848260208601610b48565b91505092915050565b5f5f5f5f60808587031215610bce57610bcd610a18565b5b5f610bdb87828801610a66565b9450506020610bec87828801610a66565b9350506040610bfd87828801610a66565b925050606085015167ffffffffffffffff811115610c1e57610c1d610a1c565b5b610c2a87828801610b89565b91505092959194509250565b610c3f81610a3f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610c6982610c45565b610c738185610c4f565b9350610c83818560208601610b3a565b610c8c81610a82565b840191505092915050565b5f60a082019050610caa5f830188610c36565b8181036020830152610cbc8187610c5f565b9050610ccb6040830186610c36565b610cd86060830185610c36565b610ce56080830184610c36565b9695505050505050565b5f60208284031215610d0457610d03610a18565b5b5f610d1184828501610a66565b91505092915050565b7f21617373657400000000000000000000000000000000000000000000000000005f82015250565b5f610d4e600683610c4f565b9150610d5982610d1a565b602082019050919050565b5f6020820190508181035f830152610d7b81610d42565b9050919050565b5f610d8c82610a3f565b9050919050565b610d9c81610d82565b8114610da6575f5ffd5b50565b5f81519050610db781610d93565b92915050565b5f60208284031215610dd257610dd1610a18565b5b5f610ddf84828501610da9565b91505092915050565b5f81519050919050565b5f81905092915050565b5f610e0682610de8565b610e108185610df2565b9350610e20818560208601610b3a565b80840191505092915050565b5f610e378284610dfc565b915081905092915050565b5f819050919050565b610e5481610e42565b82525050565b5f604082019050610e6d5f830185610c36565b610e7a6020830184610e4b565b9392505050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f610eb9610eb4610eaf84610e81565b610e96565b610e8a565b9050919050565b610ec981610e9f565b82525050565b5f604082019050610ee25f830185610c36565b610eef6020830184610ec0565b9392505050565b5f8115159050919050565b610f0a81610ef6565b8114610f14575f5ffd5b50565b5f81519050610f2581610f01565b92915050565b5f60208284031215610f4057610f3f610a18565b5b5f610f4d84828501610f17565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f610fb0602a83610c4f565b9150610fbb82610f56565b604082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f61103e602683610c4f565b915061104982610fe4565b604082019050919050565b5f6020820190508181035f83015261106b81611032565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6110a6601d83610c4f565b91506110b182611072565b602082019050919050565b5f6020820190508181035f8301526110d38161109a565b9050919050565b5f6020820190508181035f8301526110f28184610c5f565b905092915050565b60805160a05160c05160e0516101005161012051612e8a6112215f395f8181610cdf015281816112390152611a3301525f8181610c3d01528181611318015261169801525f818161060e015281816107340152818161089c01528181610aa601528181610b4d015281816113d20152818161146a0152818161150c015281816115b4015281816117e50152818161182101528181611b1101528181611b4d01528181611eb4015281816120930152818161212b015281816121cd015261226801525f8181610ea2015261103201525f818161076c0152818161097a01528181610d1401528181610dfd01528181610ec601528181610fa1015281816111b30152611d1801525f81816105d20152818161068a01528181610a020152611c400152612e8a5ff3fe608060405234801561000f575f5ffd5b50600436106101ab575f3560e01c80636fdca5e0116100f7578063d19a3bb811610095578063f85907051161006f578063f8590705146104ce578063fcfff16f146104ea578063fde813a814610508578063ff6e5cda14610524576101ac565b8063d19a3bb814610464578063d63a8e1114610482578063d6968601146104b2576101ac565b80639d7fb70c116100d15780639d7fb70c146103f0578063a16dac311461040c578063ac00ff261461042a578063cf09e08d14610446576101ac565b80636fdca5e01461039a5780637d969932146103b6578063950b3d73146103d4576101ac565b80634a5d0943116101645780635c8741641161013e5780635c874164146103215780635d265d3f1461033f57806363779c741461035e5780636718835f1461037c576101ac565b80634a5d0943146102b75780634d7d201a146102d5578063503160d914610305576101ac565b806304bd4629146101e357806338a1046d146102135780633d6cb575146102315780634697f05d1461024d57806346aa2f121461026957806349317f1d14610299576101ac565b5b5f73d377919fa87120584b21279a491f82d5265a139c9050365f5f375f5f365f845af43d5f5f3e805f81146101df573d5ff35b3d5ffd5b6101fd60048036038101906101f89190612398565b610554565b60405161020a91906123db565b60405180910390f35b61021b610732565b604051610228919061244f565b60405180910390f35b61024b60048036038101906102469190612492565b610756565b005b610267600480360381019061026291906124f2565b61076a565b005b610283600480360381019061027e9190612398565b61088d565b60405161029091906123db565b60405180910390f35b6102a161093e565b6040516102ae91906123db565b60405180910390f35b6102bf61095d565b6040516102cc91906123db565b60405180910390f35b6102ef60048036038101906102ea9190612492565b610977565b6040516102fc91906123db565b60405180910390f35b61031f600480360381019061031a9190612492565b610c27565b005b610329610c3b565b6040516103369190612550565b60405180910390f35b610347610c5f565b6040516103559291906125e8565b60405180910390f35b610366610cdd565b6040516103739190612636565b60405180910390f35b610384610d01565b604051610391919061264f565b60405180910390f35b6103b460048036038101906103af9190612668565b610d12565b005b6103be610de2565b6040516103cb91906123db565b60405180910390f35b6103ee60048036038101906103e99190612492565b610dfb565b005b61040a60048036038101906104059190612492565b610e8c565b005b610414610ea0565b60405161042191906126a2565b60405180910390f35b610444600480360381019061043f9190612668565b610ec4565b005b61044e610f64565b60405161045b91906123db565b60405180910390f35b61046c610f6a565b60405161047991906126a2565b60405180910390f35b61049c60048036038101906104979190612398565b610f82565b6040516104a9919061264f565b60405180910390f35b6104cc60048036038101906104c79190612492565b610f9f565b005b6104e860048036038101906104e391906126bb565b611030565b005b6104f261118a565b6040516104ff919061264f565b60405180910390f35b610522600480360381019061051d9190612492565b61119c565b005b61053e600480360381019061053991906126f9565b6111b0565b60405161054b91906123db565b60405180910390f35b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061072d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161064991906126a2565b602060405180830381865afa158015610664573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610688919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106e191906126a2565b602060405180830381865afa1580156106fc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610720919061274b565b61072a91906127a3565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61075e611773565b610767816117e3565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016107c391906126a2565b5f6040518083038186803b1580156107d9575f5ffd5b505afa1580156107eb573d5f5f3e3d5ffd5b505050508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd60405160405180910390a35050565b5f61093761089a83611995565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b81526004016108f391906126a2565b602060405180830381865afa15801561090e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610932919061274b565b611a17565b9050919050565b5f610947611773565b61094f611a2f565b905061095a81611ce5565b90565b5f60025f9054906101000a900461ffff1661ffff16905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016109d191906126a2565b5f6040518083038186803b1580156109e7575f5ffd5b505afa1580156109f9573d5f5f3e3d5ffd5b50505050610a9e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5991906126a2565b602060405180830381865afa158015610a74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a98919061274b565b83611a17565b9150610b41827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b8152600401610afd91906126a2565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c919061274b565b611a17565b91505f821115610be8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6583306040518363ffffffff1660e01b8152600401610ba69291906127d6565b6020604051808303815f875af1158015610bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be6919061274b565b505b7fb132a8d05ebbb41f8ae24a31b6b9f3a4335e6335cb994744dd8d6fa724eb86fe82604051610c1791906123db565b60405180910390a1819050919050565b610c2f611773565b610c3881611eb2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6060610c6a611f51565b63440368a360e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610d6b91906126a2565b5f6040518083038186803b158015610d81575f5ffd5b505afa158015610d93573d5f5f3e3d5ffd5b50505050805f60016101000a81548160ff0219169083151502179055508015157f50ea4db57628851a1970ad4a3cc76cab7eb7e50b8526f7786e429df90f099d3d60405160405180910390a250565b5f60028054906101000a900461ffff1661ffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610e5491906126a2565b5f6040518083038186803b158015610e6a575f5ffd5b505afa158015610e7c573d5f5f3e3d5ffd5b50505050610e8981611f58565b50565b610e94611773565b610e9d81612000565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610f1d91906126a2565b5f6040518083038186803b158015610f33575f5ffd5b505afa158015610f45573d5f5f3e3d5ffd5b50505050805f5f6101000a81548160ff02191690831515021790555050565b60035481565b73d377919fa87120584b21279a491f82d5265a139c81565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610ff891906126a2565b5f6040518083038186803b15801561100e575f5ffd5b505afa158015611020573d5f5f3e3d5ffd5b5050505061102d81612003565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612857565b60405180910390fd5b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906128bf565b60405180910390fd5b815f5f6101000a815c8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905d505050565b5f60019054906101000a900460ff1681565b6111a4611773565b6111ad81612066565b50565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b815260040161120a91906126a2565b5f6040518083038186803b158015611220575f5ffd5b505afa158015611232573d5f5f3e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b815260040161129291906123db565b61012060405180830381865afa1580156112ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d29190612a4a565b5f015114611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612ac0565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a3919061274b565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851461150a576115057f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477876040518263ffffffff1660e01b815260040161142991906123db565b602060405180830381865afa158015611444573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611468919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b81526004016114c191906126a2565b602060405180830381865afa1580156114dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611500919061274b565b611a17565b6115a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161156391906126a2565b602060405180830381865afa15801561157e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a2919061274b565b5b90505f81116115b2575f611650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b815260040161160f93929190612ade565b6020604051808303815f875af115801561162b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f919061274b565b5b945083851015611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90612b5d565b60405180910390fd5b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611723919061274b565b111561173157816003819055505b7f482b7c2b0c0288809bb58a2f99f7c1323bd9365d9ecf0c6c446f1b63151507c98560405161176091906123db565b60405180910390a1849250505092915050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612bc5565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161187891906123db565b602060405180830381865afa158015611893573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b7919061274b565b5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611930575f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932565b305b306040518463ffffffff1660e01b815260040161195193929190612ade565b6020604051808303815f875af115801561196d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611991919061274b565b5050565b5f5f60019054906101000a900460ff161580156119f9575060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a06575f9050611a12565b611a0f82612308565b90505b919050565b5f818310611a255781611a27565b825b905092915050565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b8152600401611a8c91906123db565b61012060405180830381865afa158015611aa8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acc9190612a4a565b5f015114611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690612ac0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307a2d13a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba491906126a2565b602060405180830381865afa158015611bbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be3919061274b565b6040518263ffffffff1660e01b8152600401611bff91906123db565b602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3e919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c9791906126a2565b602060405180830381865afa158015611cb2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd6919061274b565b611ce091906127a3565b905090565b5f5f9054906101000a900460ff16611d155760015f5f6101000a81548160ff021916908315150217905550611eaf565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da3919061274b565b905080821115611e2b5761271060025f9054906101000a900461ffff1661ffff1682611dcf9190612be3565b611dd99190612c51565b8183611de59190612c81565b1115611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90612cfe565b60405180910390fd5b611ead565b81811115611eac5761271060028054906101000a900461ffff1661ffff1682611e549190612be3565b611e5e9190612c51565b8282611e6a9190612c81565b1115611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290612cfe565b60405180910390fd5b5b5b505b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401611f0d9291906127d6565b6020604051808303815f875af1158015611f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4d919061274b565b5050565b5f5f905090565b5f8111611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190612d66565b60405180910390fd5b61ffff8016811115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890612dce565b60405180910390fd5b8060025f6101000a81548161ffff021916908361ffff16021790555050565b50565b6127108110612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90612e36565b60405180910390fd5b806002806101000a81548161ffff021916908361ffff16021790555050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82146121cb576121c67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477846040518263ffffffff1660e01b81526004016120ea91906123db565b602060405180830381865afa158015612105573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612129919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161218291906126a2565b602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c1919061274b565b611a17565b612264565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161222491906126a2565b602060405180830381865afa15801561223f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612263919061274b565b5b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b81526004016122c393929190612ade565b6020604051808303815f875af11580156122df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612303919061274b565b505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b5f604051905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123678261233e565b9050919050565b6123778161235d565b8114612381575f5ffd5b50565b5f813590506123928161236e565b92915050565b5f602082840312156123ad576123ac61233a565b5b5f6123ba84828501612384565b91505092915050565b5f819050919050565b6123d5816123c3565b82525050565b5f6020820190506123ee5f8301846123cc565b92915050565b5f819050919050565b5f61241761241261240d8461233e565b6123f4565b61233e565b9050919050565b5f612428826123fd565b9050919050565b5f6124398261241e565b9050919050565b6124498161242f565b82525050565b5f6020820190506124625f830184612440565b92915050565b612471816123c3565b811461247b575f5ffd5b50565b5f8135905061248c81612468565b92915050565b5f602082840312156124a7576124a661233a565b5b5f6124b48482850161247e565b91505092915050565b5f8115159050919050565b6124d1816124bd565b81146124db575f5ffd5b50565b5f813590506124ec816124c8565b92915050565b5f5f604083850312156125085761250761233a565b5b5f61251585828601612384565b9250506020612526858286016124de565b9150509250929050565b5f61253a8261241e565b9050919050565b61254a81612530565b82525050565b5f6020820190506125635f830184612541565b92915050565b612572816124bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6125ba82612578565b6125c48185612582565b93506125d4818560208601612592565b6125dd816125a0565b840191505092915050565b5f6040820190506125fb5f830185612569565b818103602083015261260d81846125b0565b90509392505050565b5f6126208261241e565b9050919050565b61263081612616565b82525050565b5f6020820190506126495f830184612627565b92915050565b5f6020820190506126625f830184612569565b92915050565b5f6020828403121561267d5761267c61233a565b5b5f61268a848285016124de565b91505092915050565b61269c8161235d565b82525050565b5f6020820190506126b55f830184612693565b92915050565b5f5f604083850312156126d1576126d061233a565b5b5f6126de85828601612384565b92505060206126ef85828601612384565b9150509250929050565b5f5f6040838503121561270f5761270e61233a565b5b5f61271c8582860161247e565b925050602061272d8582860161247e565b9150509250929050565b5f8151905061274581612468565b92915050565b5f602082840312156127605761275f61233a565b5b5f61276d84828501612737565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ad826123c3565b91506127b8836123c3565b92508282019050808211156127d0576127cf612776565b5b92915050565b5f6040820190506127e95f8301856123cc565b6127f66020830184612693565b9392505050565b5f82825260208201905092915050565b7f2165786974526f757465720000000000000000000000000000000000000000005f82015250565b5f612841600b836127fd565b915061284c8261280d565b602082019050919050565b5f6020820190508181035f83015261286e81612835565b9050919050565b7f217661756c7400000000000000000000000000000000000000000000000000005f82015250565b5f6128a96006836127fd565b91506128b482612875565b602082019050919050565b5f6020820190508181035f8301526128d68161289d565b9050919050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612917826125a0565b810181811067ffffffffffffffff82111715612936576129356128e1565b5b80604052505050565b5f612948612331565b9050612954828261290e565b919050565b5f815190506129678161236e565b92915050565b5f6101208284031215612983576129826128dd565b5b61298e61012061293f565b90505f61299d84828501612737565b5f8301525060206129b084828501612737565b60208301525060406129c484828501612737565b60408301525060606129d884828501612737565b60608301525060806129ec84828501612737565b60808301525060a0612a0084828501612737565b60a08301525060c0612a1484828501612737565b60c08301525060e0612a2884828501612959565b60e083015250610100612a3d84828501612959565b6101008301525092915050565b5f6101208284031215612a6057612a5f61233a565b5b5f612a6d8482850161296d565b91505092915050565b7f2161756374696f6e0000000000000000000000000000000000000000000000005f82015250565b5f612aaa6008836127fd565b9150612ab582612a76565b602082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b5f606082019050612af15f8301866123cc565b612afe6020830185612693565b612b0b6040830184612693565b949350505050565b7f736872656b7400000000000000000000000000000000000000000000000000005f82015250565b5f612b476006836127fd565b9150612b5282612b13565b602082019050919050565b5f6020820190508181035f830152612b7481612b3b565b9050919050565b7f2173656c660000000000000000000000000000000000000000000000000000005f82015250565b5f612baf6005836127fd565b9150612bba82612b7b565b602082019050919050565b5f6020820190508181035f830152612bdc81612ba3565b9050919050565b5f612bed826123c3565b9150612bf8836123c3565b9250828202612c06816123c3565b91508282048414831517612c1d57612c1c612776565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5b826123c3565b9150612c66836123c3565b925082612c7657612c75612c24565b5b828204905092915050565b5f612c8b826123c3565b9150612c96836123c3565b9250828203905081811115612cae57612cad612776565b5b92915050565b7f6865616c7468436865636b0000000000000000000000000000000000000000005f82015250565b5f612ce8600b836127fd565b9150612cf382612cb4565b602082019050919050565b5f6020820190508181035f830152612d1581612cdc565b9050919050565b7f217a65726f2070726f66697400000000000000000000000000000000000000005f82015250565b5f612d50600c836127fd565b9150612d5b82612d1c565b602082019050919050565b5f6020820190508181035f830152612d7d81612d44565b9050919050565b7f21746f6f206869676800000000000000000000000000000000000000000000005f82015250565b5f612db86009836127fd565b9150612dc382612d84565b602082019050919050565b5f6020820190508181035f830152612de581612dac565b9050919050565b7f216c6f7373206c696d69740000000000000000000000000000000000000000005f82015250565b5f612e20600b836127fd565b9150612e2b82612dec565b602082019050919050565b5f6020820190508181035f830152612e4d81612e14565b905091905056fea2646970667358221220a24e0838ffa1f1851d0fc3c9cb91488c31b64d5b4659e42c5f994cea0935ad6964736f6c634300081e0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c1f281a3643f219636f97f6e687a33704950ec84000000000000000000000000e8a511403b0c83e7b85513e00ed39996b48c2aed0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001b466c65782079766372765553442d322f55534443204c656e6465720000000000" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x8aebd6b4ebece17e6a2d53a1334d4395fd935a34a10f72c559307de5b61e59e6", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "function": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "gas": "0xb0b2", + "value": "0x0", + "input": "0xc8c2fe6c", + "nonce": "0xbb", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x38d5a88d0186c94a72116a1e201241e572088941a61169ed3aea91d06a26e810", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "function": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "gas": "0xe23d", + "value": "0x0", + "input": "0xdf69b22a0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xbc", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x269779c2391d6df5d29f0aa5ea21e3672f05a98c910679b08e777d0654769a15", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "function": "setAllowed(address,bool)", + "arguments": [ + "0x863687e4E9751b57F38b4B0ebA04744C72d0f7B8", + "true" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "gas": "0x11a0f", + "value": "0x0", + "input": "0x4697f05d000000000000000000000000863687e4e9751b57f38b4b0eba04744c72d0f7b80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xbd", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4ed1d9a32fad80bf1f4e48e8e1e82c89c35e7025ea0a53d41c27f6f02077fede", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "function": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "gas": "0xb256", + "value": "0x0", + "input": "0xaa290e6d0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xbe", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8d95f825ed3281a6b94be62232a279c4c73a31cac24ba6acddb068a171b13fb1", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "function": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "gas": "0x120b6", + "value": "0x0", + "input": "0xf629b79000000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "nonce": "0xbf", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x941a1f2ac83cdad223be60b18b6f1d4a941fe9583b1eb36b4a57bfa510a76800", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "function": "setOracle(address,address)", + "arguments": [ + "0xC818A0Be1BB2cE820CfdefAD5f890667e885f39d", + "0xcB5A60AB76F3741204C87744ECFe0445C74Eb171" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "gas": "0x12940", + "value": "0x0", + "input": "0x5c38eb3a000000000000000000000000c818a0be1bb2ce820cfdefad5f890667e885f39d000000000000000000000000cb5a60ab76f3741204c87744ecfe0445c74eb171", + "nonce": "0xc0", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb0cf02e610e7008bfcf0dc6bc80135c6658cde0e49db7e38105266d7b771d135", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "function": "setCustomStrategyTrigger(address,address)", + "arguments": [ + "0xC818A0Be1BB2cE820CfdefAD5f890667e885f39d", + "0xb9F57B62Cbe9463da16E5b75e3B809321a0eA871" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "gas": "0x13735", + "value": "0x0", + "input": "0xdc7cc1ef000000000000000000000000c818a0be1bb2ce820cfdefad5f890667e885f39d000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871", + "nonce": "0xc1", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x1a7b509", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xfb1616746b8474b6b7c67f2fe5ada156ed24774d0efe8bfe529cf537ba173330", + "0x000000000000000000000000c818a0be1bb2ce820cfdefad5f890667e885f39d", + "0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005332e302e34000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "blockTimestamp": "0x6a8b8187", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "logIndex": "0x3c0", + "removed": false + }, + { + "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x000000000000000000000000c818a0be1bb2ce820cfdefad5f890667e885f39d", + "0x000000000000000000000000c1f281a3643f219636f97f6e687a33704950ec84" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "blockTimestamp": "0x6a8b8187", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "logIndex": "0x3c1", + "removed": false + }, + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xd7f49e282c36d417b290d4181a56943f6d670aaa2987c0d40e60d39919c68882", + "0x000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e" + ], + "data": "0x", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "blockTimestamp": "0x6a8b8187", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "logIndex": "0x3c2", + "removed": false + }, + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" + ], + "data": "0x", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "blockTimestamp": "0x6a8b8187", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "logIndex": "0x3c3", + "removed": false + }, + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0x9ebbf695dd251e855d9d15a146a72f5f654dc6f8630fbc11212f27e0c88ba11a", + "0x0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde69" + ], + "data": "0x", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "blockTimestamp": "0x6a8b8187", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "logIndex": "0x3c4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000001000400000000000000000200000000800000010000000000000000000002000000000008400000000000000800000000200000000104000000000008000000000000000000000200000000080200000001000000000000000020000000010000101022000000000020000000000000000004000000000800000000000000000000000200000100010000000000000000000000020000000000200080000440000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000004000000001000000008000000000000", + "transactionHash": "0xcb83e1a58eeab341fcbbbbc7ad4abe9cf42ed16f18a9d1cb82578cfadea4c6d6", + "transactionIndex": "0xac", + "blockHash": "0xf0922de41a99e4f5b9574d42d16d67eebb90f01bf70936a5c79ed395e6667b2c", + "blockNumber": "0x189ffcf", + "gasUsed": "0x2a0d12", + "effectiveGasPrice": "0x28566d5", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x137a5ce", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xff54978127edd34aec0f9061fb3b155fbe0ededdfa881ee3e0d541d3a1eef438", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" + ], + "data": "0x", + "blockHash": "0x387b652de0de2279c142daf43dadbd613a1c0eb073b99d036cc3d1b3ebe59ee6", + "blockNumber": "0x189ffd1", + "blockTimestamp": "0x6a8b819f", + "transactionHash": "0x8aebd6b4ebece17e6a2d53a1334d4395fd935a34a10f72c559307de5b61e59e6", + "transactionIndex": "0x66", + "logIndex": "0xce", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000004000000000000000000000200000000000000000000000000000000000000000000000008000000000000000000000000000000000100000000000000000000000000000000000000000000080000000001000000000000000000000000000000000000000000000000000000800000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x8aebd6b4ebece17e6a2d53a1334d4395fd935a34a10f72c559307de5b61e59e6", + "transactionIndex": "0x66", + "blockHash": "0x387b652de0de2279c142daf43dadbd613a1c0eb073b99d036cc3d1b3ebe59ee6", + "blockNumber": "0x189ffd1", + "gasUsed": "0x78d2", + "effectiveGasPrice": "0x29ae9c4", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x6696da", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xf361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x33f0fec0bb9daf0298867046106782601627291d9ebb57d01d7760c4226ef889", + "blockNumber": "0x189ffd2", + "blockTimestamp": "0x6a8b81ab", + "transactionHash": "0x38d5a88d0186c94a72116a1e201241e572088941a61169ed3aea91d06a26e810", + "transactionIndex": "0x8e", + "logIndex": "0x8d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000200000000000020000000000000000000000000000000000000000000000000000000000000000000000100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x38d5a88d0186c94a72116a1e201241e572088941a61169ed3aea91d06a26e810", + "transactionIndex": "0x8e", + "blockHash": "0x33f0fec0bb9daf0298867046106782601627291d9ebb57d01d7760c4226ef889", + "blockNumber": "0x189ffd2", + "gasUsed": "0x9ab2", + "effectiveGasPrice": "0x2c05819", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x34bf8ed", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd", + "0x000000000000000000000000863687e4e9751b57f38b4b0eba04744c72d0f7b8", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0xcbcc36cef41a50f9e5fbfb2dc817781af5c6b619d8da6b866923bf258c3dad5b", + "blockNumber": "0x189ffd8", + "blockTimestamp": "0x6a8b81f3", + "transactionHash": "0x269779c2391d6df5d29f0aa5ea21e3672f05a98c910679b08e777d0654769a15", + "transactionIndex": "0x13f", + "logIndex": "0x5bb", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000100200000000000000000000000000000000000000000000000000000000000000000000000000040000000100200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000040004000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x269779c2391d6df5d29f0aa5ea21e3672f05a98c910679b08e777d0654769a15", + "transactionIndex": "0x13f", + "blockHash": "0xcbcc36cef41a50f9e5fbfb2dc817781af5c6b619d8da6b866923bf258c3dad5b", + "blockNumber": "0x189ffd8", + "gasUsed": "0xcc35", + "effectiveGasPrice": "0x2b21eda", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x33224c7", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xdc843735e683348ec21c302ffff45462399c5c46f75f67b0a1a5395c53599753" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xacd9e6f602d77a0d7895af500c9f3273c3b8669f469c5529ea2b274f2e6b2636", + "blockNumber": "0x189ffd9", + "blockTimestamp": "0x6a8b81ff", + "transactionHash": "0x4ed1d9a32fad80bf1f4e48e8e1e82c89c35e7025ea0a53d41c27f6f02077fede", + "transactionIndex": "0x99", + "logIndex": "0x3b8", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000008000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x4ed1d9a32fad80bf1f4e48e8e1e82c89c35e7025ea0a53d41c27f6f02077fede", + "transactionIndex": "0x99", + "blockHash": "0xacd9e6f602d77a0d7895af500c9f3273c3b8669f469c5529ea2b274f2e6b2636", + "blockNumber": "0x189ffd9", + "gasUsed": "0x811e", + "effectiveGasPrice": "0x30745a9", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x2400bef", + "logs": [ + { + "address": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "topics": [ + "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7" + ], + "data": "0x", + "blockHash": "0x9b37583d3019a66a88e4dffe66978bfad5fe1726f13f264edd614bb81ce887e0", + "blockNumber": "0x189ffda", + "blockTimestamp": "0x6a8b820b", + "transactionHash": "0x8d95f825ed3281a6b94be62232a279c4c73a31cac24ba6acddb068a171b13fb1", + "transactionIndex": "0xa9", + "logIndex": "0x38d", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000400000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000104000000000000000000000000000000000084000000000200000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x8d95f825ed3281a6b94be62232a279c4c73a31cac24ba6acddb068a171b13fb1", + "transactionIndex": "0xa9", + "blockHash": "0x9b37583d3019a66a88e4dffe66978bfad5fe1726f13f264edd614bb81ce887e0", + "blockNumber": "0x189ffda", + "gasUsed": "0xc569", + "effectiveGasPrice": "0x35eda9f", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xc818a0be1bb2ce820cfdefad5f890667e885f39d", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x17c413b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x941a1f2ac83cdad223be60b18b6f1d4a941fe9583b1eb36b4a57bfa510a76800", + "transactionIndex": "0xa4", + "blockHash": "0x83ab07478e3d0806b3d44d407e980bb5666bb9c78553e5dcc3e3c3bbdf2d3765", + "blockNumber": "0x189ffdb", + "gasUsed": "0xd735", + "effectiveGasPrice": "0x3826084", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x1f12010", + "logs": [ + { + "address": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "topics": [ + "0x73377b61b22fc875803de44d9946a61753ba80d2539c51f226d765946eb642f2", + "0x000000000000000000000000c818a0be1bb2ce820cfdefad5f890667e885f39d", + "0x000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871" + ], + "data": "0x", + "blockHash": "0x2546b6234c7e987f21ae0f383791ac2746c52f09dabdcdb995572f527485052c", + "blockNumber": "0x189ffdc", + "blockTimestamp": "0x6a8b8223", + "transactionHash": "0xb0cf02e610e7008bfcf0dc6bc80135c6658cde0e49db7e38105266d7b771d135", + "transactionIndex": "0xcc", + "logIndex": "0x317", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000100000000000000000800000000080000000000000000000000000000000000002000000200000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000080000000000000000820000000000000000000000000000000000000000000", + "transactionHash": "0xb0cf02e610e7008bfcf0dc6bc80135c6658cde0e49db7e38105266d7b771d135", + "transactionIndex": "0xcc", + "blockHash": "0x2546b6234c7e987f21ae0f383791ac2746c52f09dabdcdb995572f527485052c", + "blockNumber": "0x189ffdc", + "gasUsed": "0xd4cb", + "effectiveGasPrice": "0x37262df", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1787527737485, + "chain": 1, + "commit": "e0ac875" +} \ No newline at end of file diff --git a/broadcast/DeployStrategy.s.sol/1/run-1789572435382.json b/broadcast/DeployStrategy.s.sol/1/run-1789572435382.json new file mode 100644 index 0000000..eaf51c0 --- /dev/null +++ b/broadcast/DeployStrategy.s.sol/1/run-1789572435382.json @@ -0,0 +1,508 @@ +{ + "transactions": [ + { + "hash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "function": "deploy(address,address,address,address,address,string)", + "functionAbi": "function deploy(address _asset, address _lender, address _management, address _keeper, address _performanceFeeRecipient, string _name) returns (address)", + "arguments": [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x0d57098e501D68905fC4B0A3397f7D4Aa4889E36", + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "0x604e586F17cE106B64185A7a0d2c1Da5bAce711E", + "0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69", + "Flex yvWETH-2/WETH Lender" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "gas": "0x39ddc1", + "value": "0x0", + "input": "0x26a10871000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde6900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000019466c6578207976574554482d322f57455448204c656e64657200000000000000", + "nonce": "0xcf", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "contractName": "FlexLenderStrategy", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "initCode": "0x61014060405260015f5f6101000a81548160ff02191690831515021790555061271060025f6101000a81548161ffff021916908361ffff160217905550348015610047575f5ffd5b506040516140ab3803806140ab83398181016040528101906100699190610bb6565b838181818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061014182823333336040516024016100f1959493929190610c97565b6040516020818303038152906040526397073ae660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506104f160201b60201c565b5073d377919fa87120584b21279a491f82d5265a139c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505050508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660e05173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610213573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102379190610cef565b73ffffffffffffffffffffffffffffffffffffffff161461028d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028490610d64565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663a96e874d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103309190610dbd565b73ffffffffffffffffffffffffffffffffffffffff166399bb33336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039c9190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250506101005173ffffffffffffffffffffffffffffffffffffffff16637d9f6db56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104409190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003819055506104e8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60805173ffffffffffffffffffffffffffffffffffffffff1661058b60201b9092919060201c565b505050506110fa565b60605f5f73d377919fa87120584b21279a491f82d5265a139c73ffffffffffffffffffffffffffffffffffffffff168460405161052e9190610e2c565b5f60405180830381855af49150503d805f8114610566576040519150601f19603f3d011682016040523d82523d5f602084013e61056b565b606091505b509150915081610581576040513d805f833e8082fd5b8092505050919050565b5f63095ea7b360e01b83836040516024016105a7929190610e5a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061061684826106b860201b60201c565b6106b2576106a18463095ea7b360e01b855f604051602401610639929190610ecf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061076c60201b60201c565b6106b1848261076c60201b60201c565b5b50505050565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516106e09190610e2c565b5f604051808303815f865af19150503d805f8114610719576040519150601f19603f3d011682016040523d82523d5f602084013e61071e565b606091505b509150915081801561074b57505f8151148061074a5750808060200190518101906107499190610f2b565b5b5b801561076257506107618561083260201b60201c565b5b9250505092915050565b5f6107cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661085460201b9092919060201c565b90505f815114806107ee5750808060200190518101906107ed9190610f2b565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490610fc6565b60405180910390fd5b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061086884845f8561087160201b60201c565b90509392505050565b6060824710156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90611054565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516108de9190610e2c565b5f6040518083038185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b50915091506109348783838761094060201b60201c565b92505050949350505050565b606083156109a7575f83510361099f5761095f8561083260201b60201c565b61099e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610995906110bc565b60405180910390fd5b5b8290506109b8565b6109b783836109c060201b60201c565b5b949350505050565b5f825111156109d25781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0691906110da565b60405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a4982610a20565b9050919050565b610a5981610a3f565b8114610a63575f5ffd5b50565b5f81519050610a7481610a50565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ac882610a82565b810181811067ffffffffffffffff82111715610ae757610ae6610a92565b5b80604052505050565b5f610af9610a0f565b9050610b058282610abf565b919050565b5f67ffffffffffffffff821115610b2457610b23610a92565b5b610b2d82610a82565b9050602081019050919050565b8281835e5f83830152505050565b5f610b5a610b5584610b0a565b610af0565b905082815260208101848484011115610b7657610b75610a7e565b5b610b81848285610b3a565b509392505050565b5f82601f830112610b9d57610b9c610a7a565b5b8151610bad848260208601610b48565b91505092915050565b5f5f5f5f60808587031215610bce57610bcd610a18565b5b5f610bdb87828801610a66565b9450506020610bec87828801610a66565b9350506040610bfd87828801610a66565b925050606085015167ffffffffffffffff811115610c1e57610c1d610a1c565b5b610c2a87828801610b89565b91505092959194509250565b610c3f81610a3f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610c6982610c45565b610c738185610c4f565b9350610c83818560208601610b3a565b610c8c81610a82565b840191505092915050565b5f60a082019050610caa5f830188610c36565b8181036020830152610cbc8187610c5f565b9050610ccb6040830186610c36565b610cd86060830185610c36565b610ce56080830184610c36565b9695505050505050565b5f60208284031215610d0457610d03610a18565b5b5f610d1184828501610a66565b91505092915050565b7f21617373657400000000000000000000000000000000000000000000000000005f82015250565b5f610d4e600683610c4f565b9150610d5982610d1a565b602082019050919050565b5f6020820190508181035f830152610d7b81610d42565b9050919050565b5f610d8c82610a3f565b9050919050565b610d9c81610d82565b8114610da6575f5ffd5b50565b5f81519050610db781610d93565b92915050565b5f60208284031215610dd257610dd1610a18565b5b5f610ddf84828501610da9565b91505092915050565b5f81519050919050565b5f81905092915050565b5f610e0682610de8565b610e108185610df2565b9350610e20818560208601610b3a565b80840191505092915050565b5f610e378284610dfc565b915081905092915050565b5f819050919050565b610e5481610e42565b82525050565b5f604082019050610e6d5f830185610c36565b610e7a6020830184610e4b565b9392505050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f610eb9610eb4610eaf84610e81565b610e96565b610e8a565b9050919050565b610ec981610e9f565b82525050565b5f604082019050610ee25f830185610c36565b610eef6020830184610ec0565b9392505050565b5f8115159050919050565b610f0a81610ef6565b8114610f14575f5ffd5b50565b5f81519050610f2581610f01565b92915050565b5f60208284031215610f4057610f3f610a18565b5b5f610f4d84828501610f17565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f610fb0602a83610c4f565b9150610fbb82610f56565b604082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f61103e602683610c4f565b915061104982610fe4565b604082019050919050565b5f6020820190508181035f83015261106b81611032565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6110a6601d83610c4f565b91506110b182611072565b602082019050919050565b5f6020820190508181035f8301526110d38161109a565b9050919050565b5f6020820190508181035f8301526110f28184610c5f565b905092915050565b60805160a05160c05160e0516101005161012051612e8a6112215f395f8181610cdf015281816112390152611a3301525f8181610c3d01528181611318015261169801525f818161060e015281816107340152818161089c01528181610aa601528181610b4d015281816113d20152818161146a0152818161150c015281816115b4015281816117e50152818161182101528181611b1101528181611b4d01528181611eb4015281816120930152818161212b015281816121cd015261226801525f8181610ea2015261103201525f818161076c0152818161097a01528181610d1401528181610dfd01528181610ec601528181610fa1015281816111b30152611d1801525f81816105d20152818161068a01528181610a020152611c400152612e8a5ff3fe608060405234801561000f575f5ffd5b50600436106101ab575f3560e01c80636fdca5e0116100f7578063d19a3bb811610095578063f85907051161006f578063f8590705146104ce578063fcfff16f146104ea578063fde813a814610508578063ff6e5cda14610524576101ac565b8063d19a3bb814610464578063d63a8e1114610482578063d6968601146104b2576101ac565b80639d7fb70c116100d15780639d7fb70c146103f0578063a16dac311461040c578063ac00ff261461042a578063cf09e08d14610446576101ac565b80636fdca5e01461039a5780637d969932146103b6578063950b3d73146103d4576101ac565b80634a5d0943116101645780635c8741641161013e5780635c874164146103215780635d265d3f1461033f57806363779c741461035e5780636718835f1461037c576101ac565b80634a5d0943146102b75780634d7d201a146102d5578063503160d914610305576101ac565b806304bd4629146101e357806338a1046d146102135780633d6cb575146102315780634697f05d1461024d57806346aa2f121461026957806349317f1d14610299576101ac565b5b5f73d377919fa87120584b21279a491f82d5265a139c9050365f5f375f5f365f845af43d5f5f3e805f81146101df573d5ff35b3d5ffd5b6101fd60048036038101906101f89190612398565b610554565b60405161020a91906123db565b60405180910390f35b61021b610732565b604051610228919061244f565b60405180910390f35b61024b60048036038101906102469190612492565b610756565b005b610267600480360381019061026291906124f2565b61076a565b005b610283600480360381019061027e9190612398565b61088d565b60405161029091906123db565b60405180910390f35b6102a161093e565b6040516102ae91906123db565b60405180910390f35b6102bf61095d565b6040516102cc91906123db565b60405180910390f35b6102ef60048036038101906102ea9190612492565b610977565b6040516102fc91906123db565b60405180910390f35b61031f600480360381019061031a9190612492565b610c27565b005b610329610c3b565b6040516103369190612550565b60405180910390f35b610347610c5f565b6040516103559291906125e8565b60405180910390f35b610366610cdd565b6040516103739190612636565b60405180910390f35b610384610d01565b604051610391919061264f565b60405180910390f35b6103b460048036038101906103af9190612668565b610d12565b005b6103be610de2565b6040516103cb91906123db565b60405180910390f35b6103ee60048036038101906103e99190612492565b610dfb565b005b61040a60048036038101906104059190612492565b610e8c565b005b610414610ea0565b60405161042191906126a2565b60405180910390f35b610444600480360381019061043f9190612668565b610ec4565b005b61044e610f64565b60405161045b91906123db565b60405180910390f35b61046c610f6a565b60405161047991906126a2565b60405180910390f35b61049c60048036038101906104979190612398565b610f82565b6040516104a9919061264f565b60405180910390f35b6104cc60048036038101906104c79190612492565b610f9f565b005b6104e860048036038101906104e391906126bb565b611030565b005b6104f261118a565b6040516104ff919061264f565b60405180910390f35b610522600480360381019061051d9190612492565b61119c565b005b61053e600480360381019061053991906126f9565b6111b0565b60405161054b91906123db565b60405180910390f35b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061072d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161064991906126a2565b602060405180830381865afa158015610664573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610688919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106e191906126a2565b602060405180830381865afa1580156106fc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610720919061274b565b61072a91906127a3565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61075e611773565b610767816117e3565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016107c391906126a2565b5f6040518083038186803b1580156107d9575f5ffd5b505afa1580156107eb573d5f5f3e3d5ffd5b505050508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd60405160405180910390a35050565b5f61093761089a83611995565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b81526004016108f391906126a2565b602060405180830381865afa15801561090e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610932919061274b565b611a17565b9050919050565b5f610947611773565b61094f611a2f565b905061095a81611ce5565b90565b5f60025f9054906101000a900461ffff1661ffff16905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016109d191906126a2565b5f6040518083038186803b1580156109e7575f5ffd5b505afa1580156109f9573d5f5f3e3d5ffd5b50505050610a9e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5991906126a2565b602060405180830381865afa158015610a74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a98919061274b565b83611a17565b9150610b41827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b8152600401610afd91906126a2565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c919061274b565b611a17565b91505f821115610be8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6583306040518363ffffffff1660e01b8152600401610ba69291906127d6565b6020604051808303815f875af1158015610bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be6919061274b565b505b7fb132a8d05ebbb41f8ae24a31b6b9f3a4335e6335cb994744dd8d6fa724eb86fe82604051610c1791906123db565b60405180910390a1819050919050565b610c2f611773565b610c3881611eb2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6060610c6a611f51565b63440368a360e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610d6b91906126a2565b5f6040518083038186803b158015610d81575f5ffd5b505afa158015610d93573d5f5f3e3d5ffd5b50505050805f60016101000a81548160ff0219169083151502179055508015157f50ea4db57628851a1970ad4a3cc76cab7eb7e50b8526f7786e429df90f099d3d60405160405180910390a250565b5f60028054906101000a900461ffff1661ffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610e5491906126a2565b5f6040518083038186803b158015610e6a575f5ffd5b505afa158015610e7c573d5f5f3e3d5ffd5b50505050610e8981611f58565b50565b610e94611773565b610e9d81612000565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610f1d91906126a2565b5f6040518083038186803b158015610f33575f5ffd5b505afa158015610f45573d5f5f3e3d5ffd5b50505050805f5f6101000a81548160ff02191690831515021790555050565b60035481565b73d377919fa87120584b21279a491f82d5265a139c81565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610ff891906126a2565b5f6040518083038186803b15801561100e575f5ffd5b505afa158015611020573d5f5f3e3d5ffd5b5050505061102d81612003565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612857565b60405180910390fd5b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906128bf565b60405180910390fd5b815f5f6101000a815c8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905d505050565b5f60019054906101000a900460ff1681565b6111a4611773565b6111ad81612066565b50565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b815260040161120a91906126a2565b5f6040518083038186803b158015611220575f5ffd5b505afa158015611232573d5f5f3e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b815260040161129291906123db565b61012060405180830381865afa1580156112ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d29190612a4a565b5f015114611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612ac0565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a3919061274b565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851461150a576115057f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477876040518263ffffffff1660e01b815260040161142991906123db565b602060405180830381865afa158015611444573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611468919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b81526004016114c191906126a2565b602060405180830381865afa1580156114dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611500919061274b565b611a17565b6115a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161156391906126a2565b602060405180830381865afa15801561157e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a2919061274b565b5b90505f81116115b2575f611650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b815260040161160f93929190612ade565b6020604051808303815f875af115801561162b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f919061274b565b5b945083851015611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90612b5d565b60405180910390fd5b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611723919061274b565b111561173157816003819055505b7f482b7c2b0c0288809bb58a2f99f7c1323bd9365d9ecf0c6c446f1b63151507c98560405161176091906123db565b60405180910390a1849250505092915050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612bc5565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161187891906123db565b602060405180830381865afa158015611893573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b7919061274b565b5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611930575f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932565b305b306040518463ffffffff1660e01b815260040161195193929190612ade565b6020604051808303815f875af115801561196d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611991919061274b565b5050565b5f5f60019054906101000a900460ff161580156119f9575060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a06575f9050611a12565b611a0f82612308565b90505b919050565b5f818310611a255781611a27565b825b905092915050565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b8152600401611a8c91906123db565b61012060405180830381865afa158015611aa8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acc9190612a4a565b5f015114611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690612ac0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307a2d13a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba491906126a2565b602060405180830381865afa158015611bbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be3919061274b565b6040518263ffffffff1660e01b8152600401611bff91906123db565b602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3e919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c9791906126a2565b602060405180830381865afa158015611cb2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd6919061274b565b611ce091906127a3565b905090565b5f5f9054906101000a900460ff16611d155760015f5f6101000a81548160ff021916908315150217905550611eaf565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da3919061274b565b905080821115611e2b5761271060025f9054906101000a900461ffff1661ffff1682611dcf9190612be3565b611dd99190612c51565b8183611de59190612c81565b1115611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90612cfe565b60405180910390fd5b611ead565b81811115611eac5761271060028054906101000a900461ffff1661ffff1682611e549190612be3565b611e5e9190612c51565b8282611e6a9190612c81565b1115611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290612cfe565b60405180910390fd5b5b5b505b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401611f0d9291906127d6565b6020604051808303815f875af1158015611f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4d919061274b565b5050565b5f5f905090565b5f8111611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190612d66565b60405180910390fd5b61ffff8016811115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890612dce565b60405180910390fd5b8060025f6101000a81548161ffff021916908361ffff16021790555050565b50565b6127108110612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90612e36565b60405180910390fd5b806002806101000a81548161ffff021916908361ffff16021790555050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82146121cb576121c67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477846040518263ffffffff1660e01b81526004016120ea91906123db565b602060405180830381865afa158015612105573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612129919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161218291906126a2565b602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c1919061274b565b611a17565b612264565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161222491906126a2565b602060405180830381865afa15801561223f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612263919061274b565b5b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b81526004016122c393929190612ade565b6020604051808303815f875af11580156122df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612303919061274b565b505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b5f604051905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123678261233e565b9050919050565b6123778161235d565b8114612381575f5ffd5b50565b5f813590506123928161236e565b92915050565b5f602082840312156123ad576123ac61233a565b5b5f6123ba84828501612384565b91505092915050565b5f819050919050565b6123d5816123c3565b82525050565b5f6020820190506123ee5f8301846123cc565b92915050565b5f819050919050565b5f61241761241261240d8461233e565b6123f4565b61233e565b9050919050565b5f612428826123fd565b9050919050565b5f6124398261241e565b9050919050565b6124498161242f565b82525050565b5f6020820190506124625f830184612440565b92915050565b612471816123c3565b811461247b575f5ffd5b50565b5f8135905061248c81612468565b92915050565b5f602082840312156124a7576124a661233a565b5b5f6124b48482850161247e565b91505092915050565b5f8115159050919050565b6124d1816124bd565b81146124db575f5ffd5b50565b5f813590506124ec816124c8565b92915050565b5f5f604083850312156125085761250761233a565b5b5f61251585828601612384565b9250506020612526858286016124de565b9150509250929050565b5f61253a8261241e565b9050919050565b61254a81612530565b82525050565b5f6020820190506125635f830184612541565b92915050565b612572816124bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6125ba82612578565b6125c48185612582565b93506125d4818560208601612592565b6125dd816125a0565b840191505092915050565b5f6040820190506125fb5f830185612569565b818103602083015261260d81846125b0565b90509392505050565b5f6126208261241e565b9050919050565b61263081612616565b82525050565b5f6020820190506126495f830184612627565b92915050565b5f6020820190506126625f830184612569565b92915050565b5f6020828403121561267d5761267c61233a565b5b5f61268a848285016124de565b91505092915050565b61269c8161235d565b82525050565b5f6020820190506126b55f830184612693565b92915050565b5f5f604083850312156126d1576126d061233a565b5b5f6126de85828601612384565b92505060206126ef85828601612384565b9150509250929050565b5f5f6040838503121561270f5761270e61233a565b5b5f61271c8582860161247e565b925050602061272d8582860161247e565b9150509250929050565b5f8151905061274581612468565b92915050565b5f602082840312156127605761275f61233a565b5b5f61276d84828501612737565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ad826123c3565b91506127b8836123c3565b92508282019050808211156127d0576127cf612776565b5b92915050565b5f6040820190506127e95f8301856123cc565b6127f66020830184612693565b9392505050565b5f82825260208201905092915050565b7f2165786974526f757465720000000000000000000000000000000000000000005f82015250565b5f612841600b836127fd565b915061284c8261280d565b602082019050919050565b5f6020820190508181035f83015261286e81612835565b9050919050565b7f217661756c7400000000000000000000000000000000000000000000000000005f82015250565b5f6128a96006836127fd565b91506128b482612875565b602082019050919050565b5f6020820190508181035f8301526128d68161289d565b9050919050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612917826125a0565b810181811067ffffffffffffffff82111715612936576129356128e1565b5b80604052505050565b5f612948612331565b9050612954828261290e565b919050565b5f815190506129678161236e565b92915050565b5f6101208284031215612983576129826128dd565b5b61298e61012061293f565b90505f61299d84828501612737565b5f8301525060206129b084828501612737565b60208301525060406129c484828501612737565b60408301525060606129d884828501612737565b60608301525060806129ec84828501612737565b60808301525060a0612a0084828501612737565b60a08301525060c0612a1484828501612737565b60c08301525060e0612a2884828501612959565b60e083015250610100612a3d84828501612959565b6101008301525092915050565b5f6101208284031215612a6057612a5f61233a565b5b5f612a6d8482850161296d565b91505092915050565b7f2161756374696f6e0000000000000000000000000000000000000000000000005f82015250565b5f612aaa6008836127fd565b9150612ab582612a76565b602082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b5f606082019050612af15f8301866123cc565b612afe6020830185612693565b612b0b6040830184612693565b949350505050565b7f736872656b7400000000000000000000000000000000000000000000000000005f82015250565b5f612b476006836127fd565b9150612b5282612b13565b602082019050919050565b5f6020820190508181035f830152612b7481612b3b565b9050919050565b7f2173656c660000000000000000000000000000000000000000000000000000005f82015250565b5f612baf6005836127fd565b9150612bba82612b7b565b602082019050919050565b5f6020820190508181035f830152612bdc81612ba3565b9050919050565b5f612bed826123c3565b9150612bf8836123c3565b9250828202612c06816123c3565b91508282048414831517612c1d57612c1c612776565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5b826123c3565b9150612c66836123c3565b925082612c7657612c75612c24565b5b828204905092915050565b5f612c8b826123c3565b9150612c96836123c3565b9250828203905081811115612cae57612cad612776565b5b92915050565b7f6865616c7468436865636b0000000000000000000000000000000000000000005f82015250565b5f612ce8600b836127fd565b9150612cf382612cb4565b602082019050919050565b5f6020820190508181035f830152612d1581612cdc565b9050919050565b7f217a65726f2070726f66697400000000000000000000000000000000000000005f82015250565b5f612d50600c836127fd565b9150612d5b82612d1c565b602082019050919050565b5f6020820190508181035f830152612d7d81612d44565b9050919050565b7f21746f6f206869676800000000000000000000000000000000000000000000005f82015250565b5f612db86009836127fd565b9150612dc382612d84565b602082019050919050565b5f6020820190508181035f830152612de581612dac565b9050919050565b7f216c6f7373206c696d69740000000000000000000000000000000000000000005f82015250565b5f612e20600b836127fd565b9150612e2b82612dec565b602082019050919050565b5f6020820190508181035f830152612e4d81612e14565b905091905056fea2646970667358221220a24e0838ffa1f1851d0fc3c9cb91488c31b64d5b4659e42c5f994cea0935ad6964736f6c634300081e0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36000000000000000000000000e8a511403b0c83e7b85513e00ed39996b48c2aed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000019466c6578207976574554482d322f57455448204c656e64657200000000000000", + "creatorCodeAddresses": [ + "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252" + ] + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "function": null, + "functionAbi": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "gas": "0xb0b2", + "value": "0x0", + "input": "0xc8c2fe6c", + "nonce": "0xd0", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "function": null, + "functionAbi": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "gas": "0xe23d", + "value": "0x0", + "input": "0xdf69b22a0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xd1", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "function": "setAllowed(address,bool)", + "functionAbi": "function setAllowed(address _depositor, bool _allowed)", + "arguments": [ + "0xfaC55fAFD0b55BFb8dD41F735EfCc195adA9891F", + "true" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "gas": "0x11a0f", + "value": "0x0", + "input": "0x4697f05d000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xd2", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "function": null, + "functionAbi": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "gas": "0xb256", + "value": "0x0", + "input": "0xaa290e6d0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xd3", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", + "transactionType": "CALL", + "contractName": "FlexLenderStrategy", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "function": null, + "functionAbi": null, + "arguments": null, + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "gas": "0x120b6", + "value": "0x0", + "input": "0xf629b79000000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "nonce": "0xd4", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x152e2c63bd203818de60ff97d3f761ccf3a5d3f05f8b0a526ad2de932e6e677d", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "function": "setOracle(address,address)", + "functionAbi": "function setOracle(address _strategy, address _oracle)", + "arguments": [ + "0x7E4a6A89583e117C641aB3ce8897209800A3F2E3", + "0xcB5A60AB76F3741204C87744ECFe0445C74Eb171" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "gas": "0x13aab", + "value": "0x0", + "input": "0x5c38eb3a0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3000000000000000000000000cb5a60ab76f3741204c87744ecfe0445c74eb171", + "nonce": "0xd5", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "function": "setCustomStrategyTrigger(address,address)", + "functionAbi": "function setCustomStrategyTrigger(address _strategy, address _trigger)", + "arguments": [ + "0x7E4a6A89583e117C641aB3ce8897209800A3F2E3", + "0xb9F57B62Cbe9463da16E5b75e3B809321a0eA871" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "gas": "0x125d9", + "value": "0x0", + "input": "0xdc7cc1ef0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871", + "nonce": "0xd6", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x1b999f8", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xfb1616746b8474b6b7c67f2fe5ada156ed24774d0efe8bfe529cf537ba173330", + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", + "0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005332e302e34000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x276", + "removed": false + }, + { + "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", + "0x0000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x277", + "removed": false + }, + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xd7f49e282c36d417b290d4181a56943f6d670aaa2987c0d40e60d39919c68882", + "0x000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e" + ], + "data": "0x", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x278", + "removed": false + }, + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" + ], + "data": "0x", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x279", + "removed": false + }, + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0x9ebbf695dd251e855d9d15a146a72f5f654dc6f8630fbc11212f27e0c88ba11a", + "0x0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde69" + ], + "data": "0x", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x27a", + "removed": false + } + ], + "logsBloom": "0x0000000000000000000000000500040000000000000000000000000000000001000000010000000800000000000000000a400000080000000000000000200000000004000000000000000000000000800000200000000000080200000001000000000000000020000000000000101022000000000020000004000000000000002000000800000000000000400000000000000000000000000000000000000000020000000000000080000440000000000000008000010000000000000000000000000400000000000000000000080000000000000000000000000000000000000010200000000400000000000000000000000000001000000000000000000000", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "gasUsed": "0x29e4e4", + "effectiveGasPrice": "0xccb5b95", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x13925c3", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xff54978127edd34aec0f9061fb3b155fbe0ededdfa881ee3e0d541d3a1eef438", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" + ], + "data": "0x", + "blockHash": "0x6e23220a5c63b70c98f99d7801844935de51b6c9173a438f93aa4fd2d4ceeb1e", + "blockNumber": "0x18c970a", + "blockTimestamp": "0x6aaab4fb", + "transactionHash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", + "transactionIndex": "0xc6", + "logIndex": "0x225", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000100000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080000000001000000000000000000000000000000000000000000000000000000800000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000", + "transactionHash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", + "transactionIndex": "0xc6", + "blockHash": "0x6e23220a5c63b70c98f99d7801844935de51b6c9173a438f93aa4fd2d4ceeb1e", + "blockNumber": "0x18c970a", + "gasUsed": "0x78d2", + "effectiveGasPrice": "0xceca71d", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0xf2a173", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xf361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x016e553e5c7fb31feea751649aa011cb9e43f17327bda2038a0c216029f5b8fc", + "blockNumber": "0x18c970b", + "blockTimestamp": "0x6aaab507", + "transactionHash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", + "transactionIndex": "0xe2", + "logIndex": "0x19c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", + "transactionIndex": "0xe2", + "blockHash": "0x016e553e5c7fb31feea751649aa011cb9e43f17327bda2038a0c216029f5b8fc", + "blockNumber": "0x18c970b", + "gasUsed": "0x9ab2", + "effectiveGasPrice": "0xcf43698", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x13ae10b", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd", + "0x000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0xd819c7fbb70fd4264188fa8666f61a8f436f6eab1dd5f92a75ac567c077eddcc", + "blockNumber": "0x18c970c", + "blockTimestamp": "0x6aaab513", + "transactionHash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", + "transactionIndex": "0xbc", + "logIndex": "0x22a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000100000000000000000000000000100000000000020000000000000000000000000000000000000040000040000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000040000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000", + "transactionHash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", + "transactionIndex": "0xbc", + "blockHash": "0xd819c7fbb70fd4264188fa8666f61a8f436f6eab1dd5f92a75ac567c077eddcc", + "blockNumber": "0x18c970c", + "gasUsed": "0xcc35", + "effectiveGasPrice": "0xc8d2d79", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x47eda4", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xdc843735e683348ec21c302ffff45462399c5c46f75f67b0a1a5395c53599753" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe5b7dc24c97af88423fb200c69812f204a6004f3c52ecd5f609ee6905090234b", + "blockNumber": "0x18c970d", + "blockTimestamp": "0x6aaab51f", + "transactionHash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", + "transactionIndex": "0x5b", + "logIndex": "0x3d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", + "transactionIndex": "0x5b", + "blockHash": "0xe5b7dc24c97af88423fb200c69812f204a6004f3c52ecd5f609ee6905090234b", + "blockNumber": "0x18c970d", + "gasUsed": "0x811e", + "effectiveGasPrice": "0xc7905aa", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0xb6be37", + "logs": [ + { + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "topics": [ + "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7" + ], + "data": "0x", + "blockHash": "0x1851828fb537510bea9f72a8a33688f85f704b530ef8f2c13ffa74be926656c7", + "blockNumber": "0x18c970e", + "blockTimestamp": "0x6aaab52b", + "transactionHash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", + "transactionIndex": "0x85", + "logIndex": "0xea", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000400000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000084000000000200000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", + "transactionIndex": "0x85", + "blockHash": "0x1851828fb537510bea9f72a8a33688f85f704b530ef8f2c13ffa74be926656c7", + "blockNumber": "0x18c970e", + "gasUsed": "0xc569", + "effectiveGasPrice": "0xb2f7122", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x2624ca0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x152e2c63bd203818de60ff97d3f761ccf3a5d3f05f8b0a526ad2de932e6e677d", + "transactionIndex": "0x13b", + "blockHash": "0xc1e21b7c4caf16a9340dfeaf19bfc1f7b46dcadfc83d7a5ce0f2b5ff7a8a1a09", + "blockNumber": "0x18c9710", + "gasUsed": "0xd729", + "effectiveGasPrice": "0xa859da9", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x1ae3653", + "logs": [ + { + "address": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "topics": [ + "0x73377b61b22fc875803de44d9946a61753ba80d2539c51f226d765946eb642f2", + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", + "0x000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871" + ], + "data": "0x", + "blockHash": "0x2289425560809c049fbc482d64c9d8d65bf444a6bf6275aa3f2fe00e19ad2768", + "blockNumber": "0x18c9711", + "blockTimestamp": "0x6aaab54f", + "transactionHash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", + "transactionIndex": "0x191", + "logIndex": "0x2e9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000000000008000000000000000100000000000000000000000000080000000000000000000000000000000000002000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000080000000000000000820000000000000000000000000000000000000000000", + "transactionHash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", + "transactionIndex": "0x191", + "blockHash": "0x2289425560809c049fbc482d64c9d8d65bf444a6bf6275aa3f2fe00e19ad2768", + "blockNumber": "0x18c9711", + "gasUsed": "0xd4bf", + "effectiveGasPrice": "0xbbeaa84", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789572435382, + "chain": 1, + "commit": "55be023" +} \ No newline at end of file diff --git a/broadcast/DeployStrategy.s.sol/1/run-latest.json b/broadcast/DeployStrategy.s.sol/1/run-latest.json index 724e507..eaf51c0 100644 --- a/broadcast/DeployStrategy.s.sol/1/run-latest.json +++ b/broadcast/DeployStrategy.s.sol/1/run-latest.json @@ -1,175 +1,186 @@ { "transactions": [ { - "hash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", + "hash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", "transactionType": "CALL", "contractName": null, "contractAddress": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", "function": "deploy(address,address,address,address,address,string)", + "functionAbi": "function deploy(address _asset, address _lender, address _management, address _keeper, address _performanceFeeRecipient, string _name) returns (address)", "arguments": [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "0xf4996Ca4190A1a3e7CF19AbE2F6eb712abd4a03C", + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x0d57098e501D68905fC4B0A3397f7D4Aa4889E36", "0x000005281a2b04A182085D37cC9E6dD552795caa", "0x604e586F17cE106B64185A7a0d2c1Da5bAce711E", "0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69", - "Flex ysyBOLD/USDC Lender" + "Flex yvWETH-2/WETH Lender" ], "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", - "gas": "0x3a150e", + "gas": "0x39ddc1", "value": "0x0", - "input": "0x26a10871000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000f4996ca4190a1a3e7cf19abe2f6eb712abd4a03c000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde6900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000018466c657820797379424f4c442f55534443204c656e6465720000000000000000", - "nonce": "0xab", + "input": "0x26a10871000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde6900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000019466c6578207976574554482d322f57455448204c656e64657200000000000000", + "nonce": "0xcf", "chainId": "0x1" }, "additionalContracts": [ { "transactionType": "CREATE", "contractName": "FlexLenderStrategy", - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", - "initCode": "0x61014060405260015f5f6101000a81548160ff02191690831515021790555061271060025f6101000a81548161ffff021916908361ffff160217905550348015610047575f5ffd5b506040516140ab3803806140ab83398181016040528101906100699190610bb6565b838181818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061014182823333336040516024016100f1959493929190610c97565b6040516020818303038152906040526397073ae660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506104f160201b60201c565b5073d377919fa87120584b21279a491f82d5265a139c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505050508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660e05173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610213573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102379190610cef565b73ffffffffffffffffffffffffffffffffffffffff161461028d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028490610d64565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663a96e874d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103309190610dbd565b73ffffffffffffffffffffffffffffffffffffffff166399bb33336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039c9190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250506101005173ffffffffffffffffffffffffffffffffffffffff16637d9f6db56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104409190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003819055506104e8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60805173ffffffffffffffffffffffffffffffffffffffff1661058b60201b9092919060201c565b505050506110fa565b60605f5f73d377919fa87120584b21279a491f82d5265a139c73ffffffffffffffffffffffffffffffffffffffff168460405161052e9190610e2c565b5f60405180830381855af49150503d805f8114610566576040519150601f19603f3d011682016040523d82523d5f602084013e61056b565b606091505b509150915081610581576040513d805f833e8082fd5b8092505050919050565b5f63095ea7b360e01b83836040516024016105a7929190610e5a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061061684826106b860201b60201c565b6106b2576106a18463095ea7b360e01b855f604051602401610639929190610ecf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061076c60201b60201c565b6106b1848261076c60201b60201c565b5b50505050565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516106e09190610e2c565b5f604051808303815f865af19150503d805f8114610719576040519150601f19603f3d011682016040523d82523d5f602084013e61071e565b606091505b509150915081801561074b57505f8151148061074a5750808060200190518101906107499190610f2b565b5b5b801561076257506107618561083260201b60201c565b5b9250505092915050565b5f6107cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661085460201b9092919060201c565b90505f815114806107ee5750808060200190518101906107ed9190610f2b565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490610fc6565b60405180910390fd5b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061086884845f8561087160201b60201c565b90509392505050565b6060824710156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90611054565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516108de9190610e2c565b5f6040518083038185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b50915091506109348783838761094060201b60201c565b92505050949350505050565b606083156109a7575f83510361099f5761095f8561083260201b60201c565b61099e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610995906110bc565b60405180910390fd5b5b8290506109b8565b6109b783836109c060201b60201c565b5b949350505050565b5f825111156109d25781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0691906110da565b60405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a4982610a20565b9050919050565b610a5981610a3f565b8114610a63575f5ffd5b50565b5f81519050610a7481610a50565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ac882610a82565b810181811067ffffffffffffffff82111715610ae757610ae6610a92565b5b80604052505050565b5f610af9610a0f565b9050610b058282610abf565b919050565b5f67ffffffffffffffff821115610b2457610b23610a92565b5b610b2d82610a82565b9050602081019050919050565b8281835e5f83830152505050565b5f610b5a610b5584610b0a565b610af0565b905082815260208101848484011115610b7657610b75610a7e565b5b610b81848285610b3a565b509392505050565b5f82601f830112610b9d57610b9c610a7a565b5b8151610bad848260208601610b48565b91505092915050565b5f5f5f5f60808587031215610bce57610bcd610a18565b5b5f610bdb87828801610a66565b9450506020610bec87828801610a66565b9350506040610bfd87828801610a66565b925050606085015167ffffffffffffffff811115610c1e57610c1d610a1c565b5b610c2a87828801610b89565b91505092959194509250565b610c3f81610a3f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610c6982610c45565b610c738185610c4f565b9350610c83818560208601610b3a565b610c8c81610a82565b840191505092915050565b5f60a082019050610caa5f830188610c36565b8181036020830152610cbc8187610c5f565b9050610ccb6040830186610c36565b610cd86060830185610c36565b610ce56080830184610c36565b9695505050505050565b5f60208284031215610d0457610d03610a18565b5b5f610d1184828501610a66565b91505092915050565b7f21617373657400000000000000000000000000000000000000000000000000005f82015250565b5f610d4e600683610c4f565b9150610d5982610d1a565b602082019050919050565b5f6020820190508181035f830152610d7b81610d42565b9050919050565b5f610d8c82610a3f565b9050919050565b610d9c81610d82565b8114610da6575f5ffd5b50565b5f81519050610db781610d93565b92915050565b5f60208284031215610dd257610dd1610a18565b5b5f610ddf84828501610da9565b91505092915050565b5f81519050919050565b5f81905092915050565b5f610e0682610de8565b610e108185610df2565b9350610e20818560208601610b3a565b80840191505092915050565b5f610e378284610dfc565b915081905092915050565b5f819050919050565b610e5481610e42565b82525050565b5f604082019050610e6d5f830185610c36565b610e7a6020830184610e4b565b9392505050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f610eb9610eb4610eaf84610e81565b610e96565b610e8a565b9050919050565b610ec981610e9f565b82525050565b5f604082019050610ee25f830185610c36565b610eef6020830184610ec0565b9392505050565b5f8115159050919050565b610f0a81610ef6565b8114610f14575f5ffd5b50565b5f81519050610f2581610f01565b92915050565b5f60208284031215610f4057610f3f610a18565b5b5f610f4d84828501610f17565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f610fb0602a83610c4f565b9150610fbb82610f56565b604082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f61103e602683610c4f565b915061104982610fe4565b604082019050919050565b5f6020820190508181035f83015261106b81611032565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6110a6601d83610c4f565b91506110b182611072565b602082019050919050565b5f6020820190508181035f8301526110d38161109a565b9050919050565b5f6020820190508181035f8301526110f28184610c5f565b905092915050565b60805160a05160c05160e0516101005161012051612e8a6112215f395f8181610cdf015281816112390152611a3301525f8181610c3d01528181611318015261169801525f818161060e015281816107340152818161089c01528181610aa601528181610b4d015281816113d20152818161146a0152818161150c015281816115b4015281816117e50152818161182101528181611b1101528181611b4d01528181611eb4015281816120930152818161212b015281816121cd015261226801525f8181610ea2015261103201525f818161076c0152818161097a01528181610d1401528181610dfd01528181610ec601528181610fa1015281816111b30152611d1801525f81816105d20152818161068a01528181610a020152611c400152612e8a5ff3fe608060405234801561000f575f5ffd5b50600436106101ab575f3560e01c80636fdca5e0116100f7578063d19a3bb811610095578063f85907051161006f578063f8590705146104ce578063fcfff16f146104ea578063fde813a814610508578063ff6e5cda14610524576101ac565b8063d19a3bb814610464578063d63a8e1114610482578063d6968601146104b2576101ac565b80639d7fb70c116100d15780639d7fb70c146103f0578063a16dac311461040c578063ac00ff261461042a578063cf09e08d14610446576101ac565b80636fdca5e01461039a5780637d969932146103b6578063950b3d73146103d4576101ac565b80634a5d0943116101645780635c8741641161013e5780635c874164146103215780635d265d3f1461033f57806363779c741461035e5780636718835f1461037c576101ac565b80634a5d0943146102b75780634d7d201a146102d5578063503160d914610305576101ac565b806304bd4629146101e357806338a1046d146102135780633d6cb575146102315780634697f05d1461024d57806346aa2f121461026957806349317f1d14610299576101ac565b5b5f73d377919fa87120584b21279a491f82d5265a139c9050365f5f375f5f365f845af43d5f5f3e805f81146101df573d5ff35b3d5ffd5b6101fd60048036038101906101f89190612398565b610554565b60405161020a91906123db565b60405180910390f35b61021b610732565b604051610228919061244f565b60405180910390f35b61024b60048036038101906102469190612492565b610756565b005b610267600480360381019061026291906124f2565b61076a565b005b610283600480360381019061027e9190612398565b61088d565b60405161029091906123db565b60405180910390f35b6102a161093e565b6040516102ae91906123db565b60405180910390f35b6102bf61095d565b6040516102cc91906123db565b60405180910390f35b6102ef60048036038101906102ea9190612492565b610977565b6040516102fc91906123db565b60405180910390f35b61031f600480360381019061031a9190612492565b610c27565b005b610329610c3b565b6040516103369190612550565b60405180910390f35b610347610c5f565b6040516103559291906125e8565b60405180910390f35b610366610cdd565b6040516103739190612636565b60405180910390f35b610384610d01565b604051610391919061264f565b60405180910390f35b6103b460048036038101906103af9190612668565b610d12565b005b6103be610de2565b6040516103cb91906123db565b60405180910390f35b6103ee60048036038101906103e99190612492565b610dfb565b005b61040a60048036038101906104059190612492565b610e8c565b005b610414610ea0565b60405161042191906126a2565b60405180910390f35b610444600480360381019061043f9190612668565b610ec4565b005b61044e610f64565b60405161045b91906123db565b60405180910390f35b61046c610f6a565b60405161047991906126a2565b60405180910390f35b61049c60048036038101906104979190612398565b610f82565b6040516104a9919061264f565b60405180910390f35b6104cc60048036038101906104c79190612492565b610f9f565b005b6104e860048036038101906104e391906126bb565b611030565b005b6104f261118a565b6040516104ff919061264f565b60405180910390f35b610522600480360381019061051d9190612492565b61119c565b005b61053e600480360381019061053991906126f9565b6111b0565b60405161054b91906123db565b60405180910390f35b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061072d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161064991906126a2565b602060405180830381865afa158015610664573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610688919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106e191906126a2565b602060405180830381865afa1580156106fc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610720919061274b565b61072a91906127a3565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61075e611773565b610767816117e3565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016107c391906126a2565b5f6040518083038186803b1580156107d9575f5ffd5b505afa1580156107eb573d5f5f3e3d5ffd5b505050508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd60405160405180910390a35050565b5f61093761089a83611995565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b81526004016108f391906126a2565b602060405180830381865afa15801561090e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610932919061274b565b611a17565b9050919050565b5f610947611773565b61094f611a2f565b905061095a81611ce5565b90565b5f60025f9054906101000a900461ffff1661ffff16905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016109d191906126a2565b5f6040518083038186803b1580156109e7575f5ffd5b505afa1580156109f9573d5f5f3e3d5ffd5b50505050610a9e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5991906126a2565b602060405180830381865afa158015610a74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a98919061274b565b83611a17565b9150610b41827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b8152600401610afd91906126a2565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c919061274b565b611a17565b91505f821115610be8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6583306040518363ffffffff1660e01b8152600401610ba69291906127d6565b6020604051808303815f875af1158015610bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be6919061274b565b505b7fb132a8d05ebbb41f8ae24a31b6b9f3a4335e6335cb994744dd8d6fa724eb86fe82604051610c1791906123db565b60405180910390a1819050919050565b610c2f611773565b610c3881611eb2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6060610c6a611f51565b63440368a360e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610d6b91906126a2565b5f6040518083038186803b158015610d81575f5ffd5b505afa158015610d93573d5f5f3e3d5ffd5b50505050805f60016101000a81548160ff0219169083151502179055508015157f50ea4db57628851a1970ad4a3cc76cab7eb7e50b8526f7786e429df90f099d3d60405160405180910390a250565b5f60028054906101000a900461ffff1661ffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610e5491906126a2565b5f6040518083038186803b158015610e6a575f5ffd5b505afa158015610e7c573d5f5f3e3d5ffd5b50505050610e8981611f58565b50565b610e94611773565b610e9d81612000565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610f1d91906126a2565b5f6040518083038186803b158015610f33575f5ffd5b505afa158015610f45573d5f5f3e3d5ffd5b50505050805f5f6101000a81548160ff02191690831515021790555050565b60035481565b73d377919fa87120584b21279a491f82d5265a139c81565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610ff891906126a2565b5f6040518083038186803b15801561100e575f5ffd5b505afa158015611020573d5f5f3e3d5ffd5b5050505061102d81612003565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612857565b60405180910390fd5b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906128bf565b60405180910390fd5b815f5f6101000a815c8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905d505050565b5f60019054906101000a900460ff1681565b6111a4611773565b6111ad81612066565b50565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b815260040161120a91906126a2565b5f6040518083038186803b158015611220575f5ffd5b505afa158015611232573d5f5f3e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b815260040161129291906123db565b61012060405180830381865afa1580156112ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d29190612a4a565b5f015114611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612ac0565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a3919061274b565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851461150a576115057f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477876040518263ffffffff1660e01b815260040161142991906123db565b602060405180830381865afa158015611444573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611468919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b81526004016114c191906126a2565b602060405180830381865afa1580156114dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611500919061274b565b611a17565b6115a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161156391906126a2565b602060405180830381865afa15801561157e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a2919061274b565b5b90505f81116115b2575f611650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b815260040161160f93929190612ade565b6020604051808303815f875af115801561162b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f919061274b565b5b945083851015611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90612b5d565b60405180910390fd5b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611723919061274b565b111561173157816003819055505b7f482b7c2b0c0288809bb58a2f99f7c1323bd9365d9ecf0c6c446f1b63151507c98560405161176091906123db565b60405180910390a1849250505092915050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612bc5565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161187891906123db565b602060405180830381865afa158015611893573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b7919061274b565b5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611930575f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932565b305b306040518463ffffffff1660e01b815260040161195193929190612ade565b6020604051808303815f875af115801561196d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611991919061274b565b5050565b5f5f60019054906101000a900460ff161580156119f9575060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a06575f9050611a12565b611a0f82612308565b90505b919050565b5f818310611a255781611a27565b825b905092915050565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b8152600401611a8c91906123db565b61012060405180830381865afa158015611aa8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acc9190612a4a565b5f015114611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690612ac0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307a2d13a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba491906126a2565b602060405180830381865afa158015611bbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be3919061274b565b6040518263ffffffff1660e01b8152600401611bff91906123db565b602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3e919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c9791906126a2565b602060405180830381865afa158015611cb2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd6919061274b565b611ce091906127a3565b905090565b5f5f9054906101000a900460ff16611d155760015f5f6101000a81548160ff021916908315150217905550611eaf565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da3919061274b565b905080821115611e2b5761271060025f9054906101000a900461ffff1661ffff1682611dcf9190612be3565b611dd99190612c51565b8183611de59190612c81565b1115611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90612cfe565b60405180910390fd5b611ead565b81811115611eac5761271060028054906101000a900461ffff1661ffff1682611e549190612be3565b611e5e9190612c51565b8282611e6a9190612c81565b1115611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290612cfe565b60405180910390fd5b5b5b505b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401611f0d9291906127d6565b6020604051808303815f875af1158015611f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4d919061274b565b5050565b5f5f905090565b5f8111611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190612d66565b60405180910390fd5b61ffff8016811115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890612dce565b60405180910390fd5b8060025f6101000a81548161ffff021916908361ffff16021790555050565b50565b6127108110612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90612e36565b60405180910390fd5b806002806101000a81548161ffff021916908361ffff16021790555050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82146121cb576121c67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477846040518263ffffffff1660e01b81526004016120ea91906123db565b602060405180830381865afa158015612105573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612129919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161218291906126a2565b602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c1919061274b565b611a17565b612264565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161222491906126a2565b602060405180830381865afa15801561223f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612263919061274b565b5b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b81526004016122c393929190612ade565b6020604051808303815f875af11580156122df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612303919061274b565b505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b5f604051905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123678261233e565b9050919050565b6123778161235d565b8114612381575f5ffd5b50565b5f813590506123928161236e565b92915050565b5f602082840312156123ad576123ac61233a565b5b5f6123ba84828501612384565b91505092915050565b5f819050919050565b6123d5816123c3565b82525050565b5f6020820190506123ee5f8301846123cc565b92915050565b5f819050919050565b5f61241761241261240d8461233e565b6123f4565b61233e565b9050919050565b5f612428826123fd565b9050919050565b5f6124398261241e565b9050919050565b6124498161242f565b82525050565b5f6020820190506124625f830184612440565b92915050565b612471816123c3565b811461247b575f5ffd5b50565b5f8135905061248c81612468565b92915050565b5f602082840312156124a7576124a661233a565b5b5f6124b48482850161247e565b91505092915050565b5f8115159050919050565b6124d1816124bd565b81146124db575f5ffd5b50565b5f813590506124ec816124c8565b92915050565b5f5f604083850312156125085761250761233a565b5b5f61251585828601612384565b9250506020612526858286016124de565b9150509250929050565b5f61253a8261241e565b9050919050565b61254a81612530565b82525050565b5f6020820190506125635f830184612541565b92915050565b612572816124bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6125ba82612578565b6125c48185612582565b93506125d4818560208601612592565b6125dd816125a0565b840191505092915050565b5f6040820190506125fb5f830185612569565b818103602083015261260d81846125b0565b90509392505050565b5f6126208261241e565b9050919050565b61263081612616565b82525050565b5f6020820190506126495f830184612627565b92915050565b5f6020820190506126625f830184612569565b92915050565b5f6020828403121561267d5761267c61233a565b5b5f61268a848285016124de565b91505092915050565b61269c8161235d565b82525050565b5f6020820190506126b55f830184612693565b92915050565b5f5f604083850312156126d1576126d061233a565b5b5f6126de85828601612384565b92505060206126ef85828601612384565b9150509250929050565b5f5f6040838503121561270f5761270e61233a565b5b5f61271c8582860161247e565b925050602061272d8582860161247e565b9150509250929050565b5f8151905061274581612468565b92915050565b5f602082840312156127605761275f61233a565b5b5f61276d84828501612737565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ad826123c3565b91506127b8836123c3565b92508282019050808211156127d0576127cf612776565b5b92915050565b5f6040820190506127e95f8301856123cc565b6127f66020830184612693565b9392505050565b5f82825260208201905092915050565b7f2165786974526f757465720000000000000000000000000000000000000000005f82015250565b5f612841600b836127fd565b915061284c8261280d565b602082019050919050565b5f6020820190508181035f83015261286e81612835565b9050919050565b7f217661756c7400000000000000000000000000000000000000000000000000005f82015250565b5f6128a96006836127fd565b91506128b482612875565b602082019050919050565b5f6020820190508181035f8301526128d68161289d565b9050919050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612917826125a0565b810181811067ffffffffffffffff82111715612936576129356128e1565b5b80604052505050565b5f612948612331565b9050612954828261290e565b919050565b5f815190506129678161236e565b92915050565b5f6101208284031215612983576129826128dd565b5b61298e61012061293f565b90505f61299d84828501612737565b5f8301525060206129b084828501612737565b60208301525060406129c484828501612737565b60408301525060606129d884828501612737565b60608301525060806129ec84828501612737565b60808301525060a0612a0084828501612737565b60a08301525060c0612a1484828501612737565b60c08301525060e0612a2884828501612959565b60e083015250610100612a3d84828501612959565b6101008301525092915050565b5f6101208284031215612a6057612a5f61233a565b5b5f612a6d8482850161296d565b91505092915050565b7f2161756374696f6e0000000000000000000000000000000000000000000000005f82015250565b5f612aaa6008836127fd565b9150612ab582612a76565b602082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b5f606082019050612af15f8301866123cc565b612afe6020830185612693565b612b0b6040830184612693565b949350505050565b7f736872656b7400000000000000000000000000000000000000000000000000005f82015250565b5f612b476006836127fd565b9150612b5282612b13565b602082019050919050565b5f6020820190508181035f830152612b7481612b3b565b9050919050565b7f2173656c660000000000000000000000000000000000000000000000000000005f82015250565b5f612baf6005836127fd565b9150612bba82612b7b565b602082019050919050565b5f6020820190508181035f830152612bdc81612ba3565b9050919050565b5f612bed826123c3565b9150612bf8836123c3565b9250828202612c06816123c3565b91508282048414831517612c1d57612c1c612776565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5b826123c3565b9150612c66836123c3565b925082612c7657612c75612c24565b5b828204905092915050565b5f612c8b826123c3565b9150612c96836123c3565b9250828203905081811115612cae57612cad612776565b5b92915050565b7f6865616c7468436865636b0000000000000000000000000000000000000000005f82015250565b5f612ce8600b836127fd565b9150612cf382612cb4565b602082019050919050565b5f6020820190508181035f830152612d1581612cdc565b9050919050565b7f217a65726f2070726f66697400000000000000000000000000000000000000005f82015250565b5f612d50600c836127fd565b9150612d5b82612d1c565b602082019050919050565b5f6020820190508181035f830152612d7d81612d44565b9050919050565b7f21746f6f206869676800000000000000000000000000000000000000000000005f82015250565b5f612db86009836127fd565b9150612dc382612d84565b602082019050919050565b5f6020820190508181035f830152612de581612dac565b9050919050565b7f216c6f7373206c696d69740000000000000000000000000000000000000000005f82015250565b5f612e20600b836127fd565b9150612e2b82612dec565b602082019050919050565b5f6020820190508181035f830152612e4d81612e14565b905091905056fea2646970667358221220a24e0838ffa1f1851d0fc3c9cb91488c31b64d5b4659e42c5f994cea0935ad6964736f6c634300081e0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000f4996ca4190a1a3e7cf19abe2f6eb712abd4a03c000000000000000000000000e8a511403b0c83e7b85513e00ed39996b48c2aed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000018466c657820797379424f4c442f55534443204c656e6465720000000000000000" + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", + "initCode": "0x61014060405260015f5f6101000a81548160ff02191690831515021790555061271060025f6101000a81548161ffff021916908361ffff160217905550348015610047575f5ffd5b506040516140ab3803806140ab83398181016040528101906100699190610bb6565b838181818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061014182823333336040516024016100f1959493929190610c97565b6040516020818303038152906040526397073ae660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506104f160201b60201c565b5073d377919fa87120584b21279a491f82d5265a139c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55505050508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660e05173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610213573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102379190610cef565b73ffffffffffffffffffffffffffffffffffffffff161461028d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028490610d64565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663a96e874d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103309190610dbd565b73ffffffffffffffffffffffffffffffffffffffff166399bb33336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039c9190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250506101005173ffffffffffffffffffffffffffffffffffffffff16637d9f6db56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104409190610cef565b73ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003819055506104e8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60805173ffffffffffffffffffffffffffffffffffffffff1661058b60201b9092919060201c565b505050506110fa565b60605f5f73d377919fa87120584b21279a491f82d5265a139c73ffffffffffffffffffffffffffffffffffffffff168460405161052e9190610e2c565b5f60405180830381855af49150503d805f8114610566576040519150601f19603f3d011682016040523d82523d5f602084013e61056b565b606091505b509150915081610581576040513d805f833e8082fd5b8092505050919050565b5f63095ea7b360e01b83836040516024016105a7929190610e5a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061061684826106b860201b60201c565b6106b2576106a18463095ea7b360e01b855f604051602401610639929190610ecf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061076c60201b60201c565b6106b1848261076c60201b60201c565b5b50505050565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516106e09190610e2c565b5f604051808303815f865af19150503d805f8114610719576040519150601f19603f3d011682016040523d82523d5f602084013e61071e565b606091505b509150915081801561074b57505f8151148061074a5750808060200190518101906107499190610f2b565b5b5b801561076257506107618561083260201b60201c565b5b9250505092915050565b5f6107cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661085460201b9092919060201c565b90505f815114806107ee5750808060200190518101906107ed9190610f2b565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490610fc6565b60405180910390fd5b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606061086884845f8561087160201b60201c565b90509392505050565b6060824710156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90611054565b60405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516108de9190610e2c565b5f6040518083038185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b50915091506109348783838761094060201b60201c565b92505050949350505050565b606083156109a7575f83510361099f5761095f8561083260201b60201c565b61099e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610995906110bc565b60405180910390fd5b5b8290506109b8565b6109b783836109c060201b60201c565b5b949350505050565b5f825111156109d25781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0691906110da565b60405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a4982610a20565b9050919050565b610a5981610a3f565b8114610a63575f5ffd5b50565b5f81519050610a7481610a50565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ac882610a82565b810181811067ffffffffffffffff82111715610ae757610ae6610a92565b5b80604052505050565b5f610af9610a0f565b9050610b058282610abf565b919050565b5f67ffffffffffffffff821115610b2457610b23610a92565b5b610b2d82610a82565b9050602081019050919050565b8281835e5f83830152505050565b5f610b5a610b5584610b0a565b610af0565b905082815260208101848484011115610b7657610b75610a7e565b5b610b81848285610b3a565b509392505050565b5f82601f830112610b9d57610b9c610a7a565b5b8151610bad848260208601610b48565b91505092915050565b5f5f5f5f60808587031215610bce57610bcd610a18565b5b5f610bdb87828801610a66565b9450506020610bec87828801610a66565b9350506040610bfd87828801610a66565b925050606085015167ffffffffffffffff811115610c1e57610c1d610a1c565b5b610c2a87828801610b89565b91505092959194509250565b610c3f81610a3f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610c6982610c45565b610c738185610c4f565b9350610c83818560208601610b3a565b610c8c81610a82565b840191505092915050565b5f60a082019050610caa5f830188610c36565b8181036020830152610cbc8187610c5f565b9050610ccb6040830186610c36565b610cd86060830185610c36565b610ce56080830184610c36565b9695505050505050565b5f60208284031215610d0457610d03610a18565b5b5f610d1184828501610a66565b91505092915050565b7f21617373657400000000000000000000000000000000000000000000000000005f82015250565b5f610d4e600683610c4f565b9150610d5982610d1a565b602082019050919050565b5f6020820190508181035f830152610d7b81610d42565b9050919050565b5f610d8c82610a3f565b9050919050565b610d9c81610d82565b8114610da6575f5ffd5b50565b5f81519050610db781610d93565b92915050565b5f60208284031215610dd257610dd1610a18565b5b5f610ddf84828501610da9565b91505092915050565b5f81519050919050565b5f81905092915050565b5f610e0682610de8565b610e108185610df2565b9350610e20818560208601610b3a565b80840191505092915050565b5f610e378284610dfc565b915081905092915050565b5f819050919050565b610e5481610e42565b82525050565b5f604082019050610e6d5f830185610c36565b610e7a6020830184610e4b565b9392505050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f610eb9610eb4610eaf84610e81565b610e96565b610e8a565b9050919050565b610ec981610e9f565b82525050565b5f604082019050610ee25f830185610c36565b610eef6020830184610ec0565b9392505050565b5f8115159050919050565b610f0a81610ef6565b8114610f14575f5ffd5b50565b5f81519050610f2581610f01565b92915050565b5f60208284031215610f4057610f3f610a18565b5b5f610f4d84828501610f17565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f610fb0602a83610c4f565b9150610fbb82610f56565b604082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f61103e602683610c4f565b915061104982610fe4565b604082019050919050565b5f6020820190508181035f83015261106b81611032565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6110a6601d83610c4f565b91506110b182611072565b602082019050919050565b5f6020820190508181035f8301526110d38161109a565b9050919050565b5f6020820190508181035f8301526110f28184610c5f565b905092915050565b60805160a05160c05160e0516101005161012051612e8a6112215f395f8181610cdf015281816112390152611a3301525f8181610c3d01528181611318015261169801525f818161060e015281816107340152818161089c01528181610aa601528181610b4d015281816113d20152818161146a0152818161150c015281816115b4015281816117e50152818161182101528181611b1101528181611b4d01528181611eb4015281816120930152818161212b015281816121cd015261226801525f8181610ea2015261103201525f818161076c0152818161097a01528181610d1401528181610dfd01528181610ec601528181610fa1015281816111b30152611d1801525f81816105d20152818161068a01528181610a020152611c400152612e8a5ff3fe608060405234801561000f575f5ffd5b50600436106101ab575f3560e01c80636fdca5e0116100f7578063d19a3bb811610095578063f85907051161006f578063f8590705146104ce578063fcfff16f146104ea578063fde813a814610508578063ff6e5cda14610524576101ac565b8063d19a3bb814610464578063d63a8e1114610482578063d6968601146104b2576101ac565b80639d7fb70c116100d15780639d7fb70c146103f0578063a16dac311461040c578063ac00ff261461042a578063cf09e08d14610446576101ac565b80636fdca5e01461039a5780637d969932146103b6578063950b3d73146103d4576101ac565b80634a5d0943116101645780635c8741641161013e5780635c874164146103215780635d265d3f1461033f57806363779c741461035e5780636718835f1461037c576101ac565b80634a5d0943146102b75780634d7d201a146102d5578063503160d914610305576101ac565b806304bd4629146101e357806338a1046d146102135780633d6cb575146102315780634697f05d1461024d57806346aa2f121461026957806349317f1d14610299576101ac565b5b5f73d377919fa87120584b21279a491f82d5265a139c9050365f5f375f5f365f845af43d5f5f3e805f81146101df573d5ff35b3d5ffd5b6101fd60048036038101906101f89190612398565b610554565b60405161020a91906123db565b60405180910390f35b61021b610732565b604051610228919061244f565b60405180910390f35b61024b60048036038101906102469190612492565b610756565b005b610267600480360381019061026291906124f2565b61076a565b005b610283600480360381019061027e9190612398565b61088d565b60405161029091906123db565b60405180910390f35b6102a161093e565b6040516102ae91906123db565b60405180910390f35b6102bf61095d565b6040516102cc91906123db565b60405180910390f35b6102ef60048036038101906102ea9190612492565b610977565b6040516102fc91906123db565b60405180910390f35b61031f600480360381019061031a9190612492565b610c27565b005b610329610c3b565b6040516103369190612550565b60405180910390f35b610347610c5f565b6040516103559291906125e8565b60405180910390f35b610366610cdd565b6040516103739190612636565b60405180910390f35b610384610d01565b604051610391919061264f565b60405180910390f35b6103b460048036038101906103af9190612668565b610d12565b005b6103be610de2565b6040516103cb91906123db565b60405180910390f35b6103ee60048036038101906103e99190612492565b610dfb565b005b61040a60048036038101906104059190612492565b610e8c565b005b610414610ea0565b60405161042191906126a2565b60405180910390f35b610444600480360381019061043f9190612668565b610ec4565b005b61044e610f64565b60405161045b91906123db565b60405180910390f35b61046c610f6a565b60405161047991906126a2565b60405180910390f35b61049c60048036038101906104979190612398565b610f82565b6040516104a9919061264f565b60405180910390f35b6104cc60048036038101906104c79190612492565b610f9f565b005b6104e860048036038101906104e391906126bb565b611030565b005b6104f261118a565b6040516104ff919061264f565b60405180910390f35b610522600480360381019061051d9190612492565b61119c565b005b61053e600480360381019061053991906126f9565b6111b0565b60405161054b91906123db565b60405180910390f35b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061072d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161064991906126a2565b602060405180830381865afa158015610664573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610688919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106e191906126a2565b602060405180830381865afa1580156106fc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610720919061274b565b61072a91906127a3565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61075e611773565b610767816117e3565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016107c391906126a2565b5f6040518083038186803b1580156107d9575f5ffd5b505afa1580156107eb573d5f5f3e3d5ffd5b505050508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd60405160405180910390a35050565b5f61093761089a83611995565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b81526004016108f391906126a2565b602060405180830381865afa15801561090e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610932919061274b565b611a17565b9050919050565b5f610947611773565b61094f611a2f565b905061095a81611ce5565b90565b5f60025f9054906101000a900461ffff1661ffff16905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b81526004016109d191906126a2565b5f6040518083038186803b1580156109e7575f5ffd5b505afa1580156109f9573d5f5f3e3d5ffd5b50505050610a9e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5991906126a2565b602060405180830381865afa158015610a74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a98919061274b565b83611a17565b9150610b41827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663402d267d306040518263ffffffff1660e01b8152600401610afd91906126a2565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c919061274b565b611a17565b91505f821115610be8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6583306040518363ffffffff1660e01b8152600401610ba69291906127d6565b6020604051808303815f875af1158015610bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be6919061274b565b505b7fb132a8d05ebbb41f8ae24a31b6b9f3a4335e6335cb994744dd8d6fa724eb86fe82604051610c1791906123db565b60405180910390a1819050919050565b610c2f611773565b610c3881611eb2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6060610c6a611f51565b63440368a360e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610d6b91906126a2565b5f6040518083038186803b158015610d81575f5ffd5b505afa158015610d93573d5f5f3e3d5ffd5b50505050805f60016101000a81548160ff0219169083151502179055508015157f50ea4db57628851a1970ad4a3cc76cab7eb7e50b8526f7786e429df90f099d3d60405160405180910390a250565b5f60028054906101000a900461ffff1661ffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610e5491906126a2565b5f6040518083038186803b158015610e6a575f5ffd5b505afa158015610e7c573d5f5f3e3d5ffd5b50505050610e8981611f58565b50565b610e94611773565b610e9d81612000565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610f1d91906126a2565b5f6040518083038186803b158015610f33575f5ffd5b505afa158015610f45573d5f5f3e3d5ffd5b50505050805f5f6101000a81548160ff02191690831515021790555050565b60035481565b73d377919fa87120584b21279a491f82d5265a139c81565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b8152600401610ff891906126a2565b5f6040518083038186803b15801561100e575f5ffd5b505afa158015611020573d5f5f3e3d5ffd5b5050505061102d81612003565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590612857565b60405180910390fd5b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906128bf565b60405180910390fd5b815f5f6101000a815c8173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905d505050565b5f60019054906101000a900460ff1681565b6111a4611773565b6111ad81612066565b50565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348e4a649336040518263ffffffff1660e01b815260040161120a91906126a2565b5f6040518083038186803b158015611220575f5ffd5b505afa158015611232573d5f5f3e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b815260040161129291906123db565b61012060405180830381865afa1580156112ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d29190612a4a565b5f015114611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612ac0565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a3919061274b565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851461150a576115057f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477876040518263ffffffff1660e01b815260040161142991906123db565b602060405180830381865afa158015611444573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611468919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b81526004016114c191906126a2565b602060405180830381865afa1580156114dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611500919061274b565b611a17565b6115a3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161156391906126a2565b602060405180830381865afa15801561157e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a2919061274b565b5b90505f81116115b2575f611650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b815260040161160f93929190612ade565b6020604051808303815f875af115801561162b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f919061274b565b5b945083851015611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90612b5d565b60405180910390fd5b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611723919061274b565b111561173157816003819055505b7f482b7c2b0c0288809bb58a2f99f7c1323bd9365d9ecf0c6c446f1b63151507c98560405161176091906123db565b60405180910390a1849250505092915050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612bc5565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161187891906123db565b602060405180830381865afa158015611893573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b7919061274b565b5f73ffffffffffffffffffffffffffffffffffffffff165f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611930575f5f905c906101000a900473ffffffffffffffffffffffffffffffffffffffff16611932565b305b306040518463ffffffff1660e01b815260040161195193929190612ade565b6020604051808303815f875af115801561196d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611991919061274b565b5050565b5f5f60019054906101000a900460ff161580156119f9575060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a06575f9050611a12565b611a0f82612308565b90505b919050565b5f818310611a255781611a27565b825b905092915050565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663571a26a06003546040518263ffffffff1660e01b8152600401611a8c91906123db565b61012060405180830381865afa158015611aa8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acc9190612a4a565b5f015114611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690612ac0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307a2d13a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba491906126a2565b602060405180830381865afa158015611bbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be3919061274b565b6040518263ffffffff1660e01b8152600401611bff91906123db565b602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3e919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c9791906126a2565b602060405180830381865afa158015611cb2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd6919061274b565b611ce091906127a3565b905090565b5f5f9054906101000a900460ff16611d155760015f5f6101000a81548160ff021916908315150217905550611eaf565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da3919061274b565b905080821115611e2b5761271060025f9054906101000a900461ffff1661ffff1682611dcf9190612be3565b611dd99190612c51565b8183611de59190612c81565b1115611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90612cfe565b60405180910390fd5b611ead565b81811115611eac5761271060028054906101000a900461ffff1661ffff1682611e549190612be3565b611e5e9190612c51565b8282611e6a9190612c81565b1115611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290612cfe565b60405180910390fd5b5b5b505b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401611f0d9291906127d6565b6020604051808303815f875af1158015611f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4d919061274b565b5050565b5f5f905090565b5f8111611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190612d66565b60405180910390fd5b61ffff8016811115611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890612dce565b60405180910390fd5b8060025f6101000a81548161ffff021916908361ffff16021790555050565b50565b6127108110612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90612e36565b60405180910390fd5b806002806101000a81548161ffff021916908361ffff16021790555050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82146121cb576121c67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630a28a477846040518263ffffffff1660e01b81526004016120ea91906123db565b602060405180830381865afa158015612105573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612129919061274b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161218291906126a2565b602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c1919061274b565b611a17565b612264565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d905777e306040518263ffffffff1660e01b815260040161222491906126a2565b602060405180830381865afa15801561223f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612263919061274b565b5b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ba0876528230306040518463ffffffff1660e01b81526004016122c393929190612ade565b6020604051808303815f875af11580156122df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612303919061274b565b505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b5f604051905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123678261233e565b9050919050565b6123778161235d565b8114612381575f5ffd5b50565b5f813590506123928161236e565b92915050565b5f602082840312156123ad576123ac61233a565b5b5f6123ba84828501612384565b91505092915050565b5f819050919050565b6123d5816123c3565b82525050565b5f6020820190506123ee5f8301846123cc565b92915050565b5f819050919050565b5f61241761241261240d8461233e565b6123f4565b61233e565b9050919050565b5f612428826123fd565b9050919050565b5f6124398261241e565b9050919050565b6124498161242f565b82525050565b5f6020820190506124625f830184612440565b92915050565b612471816123c3565b811461247b575f5ffd5b50565b5f8135905061248c81612468565b92915050565b5f602082840312156124a7576124a661233a565b5b5f6124b48482850161247e565b91505092915050565b5f8115159050919050565b6124d1816124bd565b81146124db575f5ffd5b50565b5f813590506124ec816124c8565b92915050565b5f5f604083850312156125085761250761233a565b5b5f61251585828601612384565b9250506020612526858286016124de565b9150509250929050565b5f61253a8261241e565b9050919050565b61254a81612530565b82525050565b5f6020820190506125635f830184612541565b92915050565b612572816124bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6125ba82612578565b6125c48185612582565b93506125d4818560208601612592565b6125dd816125a0565b840191505092915050565b5f6040820190506125fb5f830185612569565b818103602083015261260d81846125b0565b90509392505050565b5f6126208261241e565b9050919050565b61263081612616565b82525050565b5f6020820190506126495f830184612627565b92915050565b5f6020820190506126625f830184612569565b92915050565b5f6020828403121561267d5761267c61233a565b5b5f61268a848285016124de565b91505092915050565b61269c8161235d565b82525050565b5f6020820190506126b55f830184612693565b92915050565b5f5f604083850312156126d1576126d061233a565b5b5f6126de85828601612384565b92505060206126ef85828601612384565b9150509250929050565b5f5f6040838503121561270f5761270e61233a565b5b5f61271c8582860161247e565b925050602061272d8582860161247e565b9150509250929050565b5f8151905061274581612468565b92915050565b5f602082840312156127605761275f61233a565b5b5f61276d84828501612737565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127ad826123c3565b91506127b8836123c3565b92508282019050808211156127d0576127cf612776565b5b92915050565b5f6040820190506127e95f8301856123cc565b6127f66020830184612693565b9392505050565b5f82825260208201905092915050565b7f2165786974526f757465720000000000000000000000000000000000000000005f82015250565b5f612841600b836127fd565b915061284c8261280d565b602082019050919050565b5f6020820190508181035f83015261286e81612835565b9050919050565b7f217661756c7400000000000000000000000000000000000000000000000000005f82015250565b5f6128a96006836127fd565b91506128b482612875565b602082019050919050565b5f6020820190508181035f8301526128d68161289d565b9050919050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612917826125a0565b810181811067ffffffffffffffff82111715612936576129356128e1565b5b80604052505050565b5f612948612331565b9050612954828261290e565b919050565b5f815190506129678161236e565b92915050565b5f6101208284031215612983576129826128dd565b5b61298e61012061293f565b90505f61299d84828501612737565b5f8301525060206129b084828501612737565b60208301525060406129c484828501612737565b60408301525060606129d884828501612737565b60608301525060806129ec84828501612737565b60808301525060a0612a0084828501612737565b60a08301525060c0612a1484828501612737565b60c08301525060e0612a2884828501612959565b60e083015250610100612a3d84828501612959565b6101008301525092915050565b5f6101208284031215612a6057612a5f61233a565b5b5f612a6d8482850161296d565b91505092915050565b7f2161756374696f6e0000000000000000000000000000000000000000000000005f82015250565b5f612aaa6008836127fd565b9150612ab582612a76565b602082019050919050565b5f6020820190508181035f830152612ad781612a9e565b9050919050565b5f606082019050612af15f8301866123cc565b612afe6020830185612693565b612b0b6040830184612693565b949350505050565b7f736872656b7400000000000000000000000000000000000000000000000000005f82015250565b5f612b476006836127fd565b9150612b5282612b13565b602082019050919050565b5f6020820190508181035f830152612b7481612b3b565b9050919050565b7f2173656c660000000000000000000000000000000000000000000000000000005f82015250565b5f612baf6005836127fd565b9150612bba82612b7b565b602082019050919050565b5f6020820190508181035f830152612bdc81612ba3565b9050919050565b5f612bed826123c3565b9150612bf8836123c3565b9250828202612c06816123c3565b91508282048414831517612c1d57612c1c612776565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5b826123c3565b9150612c66836123c3565b925082612c7657612c75612c24565b5b828204905092915050565b5f612c8b826123c3565b9150612c96836123c3565b9250828203905081811115612cae57612cad612776565b5b92915050565b7f6865616c7468436865636b0000000000000000000000000000000000000000005f82015250565b5f612ce8600b836127fd565b9150612cf382612cb4565b602082019050919050565b5f6020820190508181035f830152612d1581612cdc565b9050919050565b7f217a65726f2070726f66697400000000000000000000000000000000000000005f82015250565b5f612d50600c836127fd565b9150612d5b82612d1c565b602082019050919050565b5f6020820190508181035f830152612d7d81612d44565b9050919050565b7f21746f6f206869676800000000000000000000000000000000000000000000005f82015250565b5f612db86009836127fd565b9150612dc382612d84565b602082019050919050565b5f6020820190508181035f830152612de581612dac565b9050919050565b7f216c6f7373206c696d69740000000000000000000000000000000000000000005f82015250565b5f612e20600b836127fd565b9150612e2b82612dec565b602082019050919050565b5f6020820190508181035f830152612e4d81612e14565b905091905056fea2646970667358221220a24e0838ffa1f1851d0fc3c9cb91488c31b64d5b4659e42c5f994cea0935ad6964736f6c634300081e0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36000000000000000000000000e8a511403b0c83e7b85513e00ed39996b48c2aed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000019466c6578207976574554482d322f57455448204c656e64657200000000000000", + "creatorCodeAddresses": [ + "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252" + ] } ], "isFixedGasLimit": false }, { - "hash": "0x5260b6565d7b8d88b7919220bfbd3fe4214ef5183d80e2272e407227841b916d", + "hash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", "transactionType": "CALL", "contractName": "FlexLenderStrategy", - "contractAddress": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "function": null, + "functionAbi": null, "arguments": null, "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "gas": "0xb0b2", "value": "0x0", "input": "0xc8c2fe6c", - "nonce": "0xac", + "nonce": "0xd0", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xe1d9d2d14e2a1aa0b3f4ae4a79ce923d8564d46994f763350bc52da1efb3be96", + "hash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", "transactionType": "CALL", "contractName": "FlexLenderStrategy", - "contractAddress": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "function": null, + "functionAbi": null, "arguments": null, "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "gas": "0xe23d", "value": "0x0", "input": "0xdf69b22a0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0xad", + "nonce": "0xd1", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xcf69a6e1288a511b1816cfebd022c39190cfef524efa3bf25dce23bccae9a788", + "hash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", "transactionType": "CALL", "contractName": "FlexLenderStrategy", - "contractAddress": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "function": "setAllowed(address,bool)", + "functionAbi": "function setAllowed(address _depositor, bool _allowed)", "arguments": [ - "0x863687e4E9751b57F38b4B0ebA04744C72d0f7B8", + "0xfaC55fAFD0b55BFb8dD41F735EfCc195adA9891F", "true" ], "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "gas": "0x11a0f", "value": "0x0", - "input": "0x4697f05d000000000000000000000000863687e4e9751b57f38b4b0eba04744c72d0f7b80000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0xae", + "input": "0x4697f05d000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xd2", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x6e1b37eda15c6da9bd640976cd9b4791b4db109093a687e33543e004947ef71d", + "hash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", "transactionType": "CALL", "contractName": "FlexLenderStrategy", - "contractAddress": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "function": null, + "functionAbi": null, "arguments": null, "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "gas": "0xb256", "value": "0x0", "input": "0xaa290e6d0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0xaf", + "nonce": "0xd3", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x51d43cd5d06bee7cc5a3b610efce6747b8ad8b0e675c5e3df91fc663415ad2c2", + "hash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", "transactionType": "CALL", "contractName": "FlexLenderStrategy", - "contractAddress": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "contractAddress": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "function": null, + "functionAbi": null, "arguments": null, "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "gas": "0x120b6", "value": "0x0", "input": "0xf629b79000000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", - "nonce": "0xb0", + "nonce": "0xd4", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x1fc71e6fe567b43b56b72877aae78bf2fca15ada882ef8b1acafa8a56e98b224", + "hash": "0x152e2c63bd203818de60ff97d3f761ccf3a5d3f05f8b0a526ad2de932e6e677d", "transactionType": "CALL", "contractName": null, "contractAddress": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", "function": "setOracle(address,address)", + "functionAbi": "function setOracle(address _strategy, address _oracle)", "arguments": [ - "0xDd58AeFE74585DA2C7Ad3D3dF0F3aeEAb05b5176", + "0x7E4a6A89583e117C641aB3ce8897209800A3F2E3", "0xcB5A60AB76F3741204C87744ECFe0445C74Eb171" ], "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", - "gas": "0x12940", + "gas": "0x13aab", "value": "0x0", - "input": "0x5c38eb3a000000000000000000000000dd58aefe74585da2c7ad3d3df0f3aeeab05b5176000000000000000000000000cb5a60ab76f3741204c87744ecfe0445c74eb171", - "nonce": "0xb1", + "input": "0x5c38eb3a0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3000000000000000000000000cb5a60ab76f3741204c87744ecfe0445c74eb171", + "nonce": "0xd5", "chainId": "0x1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x0c04cae2a340b8c47dc835ef74265adce25b3ad840af1ee11777d7573040d107", + "hash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", "transactionType": "CALL", "contractName": null, "contractAddress": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", "function": "setCustomStrategyTrigger(address,address)", + "functionAbi": "function setCustomStrategyTrigger(address _strategy, address _trigger)", "arguments": [ - "0xDd58AeFE74585DA2C7Ad3D3dF0F3aeEAb05b5176", + "0x7E4a6A89583e117C641aB3ce8897209800A3F2E3", "0xb9F57B62Cbe9463da16E5b75e3B809321a0eA871" ], "transaction": { "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", - "gas": "0x13735", + "gas": "0x125d9", "value": "0x0", - "input": "0xdc7cc1ef000000000000000000000000dd58aefe74585da2c7ad3d3df0f3aeeab05b5176000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871", - "nonce": "0xb2", + "input": "0xdc7cc1ef0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871", + "nonce": "0xd6", "chainId": "0x1" }, "additionalContracts": [], @@ -180,93 +191,93 @@ { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x1795245", + "cumulativeGasUsed": "0x1b999f8", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xfb1616746b8474b6b7c67f2fe5ada156ed24774d0efe8bfe529cf537ba173330", - "0x000000000000000000000000dd58aefe74585da2c7ad3d3df0f3aeeab05b5176", - "0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", + "0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005332e302e34000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "blockTimestamp": "0x6a7ddd6f", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "logIndex": "0x3b6", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x276", "removed": false }, { - "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "topics": [ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x000000000000000000000000dd58aefe74585da2c7ad3d3df0f3aeeab05b5176", - "0x000000000000000000000000f4996ca4190a1a3e7cf19abe2f6eb712abd4a03c" + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", + "0x0000000000000000000000000d57098e501d68905fc4b0a3397f7d4aa4889e36" ], "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "blockTimestamp": "0x6a7ddd6f", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "logIndex": "0x3b7", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x277", "removed": false }, { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xd7f49e282c36d417b290d4181a56943f6d670aaa2987c0d40e60d39919c68882", "0x000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e" ], "data": "0x", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "blockTimestamp": "0x6a7ddd6f", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "logIndex": "0x3b8", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x278", "removed": false }, { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" ], "data": "0x", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "blockTimestamp": "0x6a7ddd6f", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "logIndex": "0x3b9", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x279", "removed": false }, { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0x9ebbf695dd251e855d9d15a146a72f5f654dc6f8630fbc11212f27e0c88ba11a", "0x0000000000000000000000005a74cb32d36f2f517db6f7b0a0591e09b22cde69" ], "data": "0x", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "blockTimestamp": "0x6a7ddd6f", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "logIndex": "0x3ba", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "blockTimestamp": "0x6aaab4ef", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "logIndex": "0x27a", "removed": false } ], - "logsBloom": "0x00000000000000000000000001000400000000000000000100000000000000010000000000000000000002000000000008400000000000020000000000200000000004000000040008000000000000000000400000000000080200000001000000000000000020000000000000101022000000000020000000000004004000000000000800000000000000000000000200000000010000000000000000200000020000000000200080000440000000000000000000000000000000000000004000000400000001000000000000000000000000000000000000000000000000000010000000000000000000000000000004000000001000000000000000000000", - "transactionHash": "0x371987338836fb16065b3b812ab65fd1a5bca98fd5cb5c728e5dc440b89e82f7", - "transactionIndex": "0x8b", - "blockHash": "0xa81ff91d0fe762b03effe8b7ad97b06284029ae6a5ffded11fc199849a8205f1", - "blockNumber": "0x188ddc7", - "gasUsed": "0x2a0cee", - "effectiveGasPrice": "0x729e0ec", + "logsBloom": "0x0000000000000000000000000500040000000000000000000000000000000001000000010000000800000000000000000a400000080000000000000000200000000004000000000000000000000000800000200000000000080200000001000000000000000020000000000000101022000000000020000004000000000000002000000800000000000000400000000000000000000000000000000000000000020000000000000080000440000000000000008000010000000000000000000000000400000000000000000000080000000000000000000000000000000000000010200000000400000000000000000000000000001000000000000000000000", + "transactionHash": "0x8cd4426fae448e4813b87cfa97c0f357a649ab78adff4c08c1a23e23dce51018", + "transactionIndex": "0x127", + "blockHash": "0x3a75dc4fba2934445d0f8733e9cbd21a832866eeb8f6907c0fee7992d257fb72", + "blockNumber": "0x18c9709", + "gasUsed": "0x29e4e4", + "effectiveGasPrice": "0xccb5b95", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0x1792348fe3ebddc0c6bb123ac24c094ac9d78252", @@ -275,179 +286,179 @@ { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x1688135", + "cumulativeGasUsed": "0x13925c3", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xff54978127edd34aec0f9061fb3b155fbe0ededdfa881ee3e0d541d3a1eef438", "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa" ], "data": "0x", - "blockHash": "0xe24221cc2aaa0de03077e2483dfb7312589d23555e1a73d2c52ff103a02644bc", - "blockNumber": "0x188ddc8", - "blockTimestamp": "0x6a7ddd7b", - "transactionHash": "0x5260b6565d7b8d88b7919220bfbd3fe4214ef5183d80e2272e407227841b916d", - "transactionIndex": "0xd3", - "logIndex": "0x223", + "blockHash": "0x6e23220a5c63b70c98f99d7801844935de51b6c9173a438f93aa4fd2d4ceeb1e", + "blockNumber": "0x18c970a", + "blockTimestamp": "0x6aaab4fb", + "transactionHash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", + "transactionIndex": "0xc6", + "logIndex": "0x225", "removed": false } ], - "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000400000000000080000000001000000000000000000000000000000000000000000000000000000800004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x5260b6565d7b8d88b7919220bfbd3fe4214ef5183d80e2272e407227841b916d", - "transactionIndex": "0xd3", - "blockHash": "0xe24221cc2aaa0de03077e2483dfb7312589d23555e1a73d2c52ff103a02644bc", - "blockNumber": "0x188ddc8", + "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000100000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080000000001000000000000000000000000000000000000000000000000000000800000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000", + "transactionHash": "0xb6d73aa48dea6520e9e342bc1e436a7b8d062e2ea01bf07512ba0f982530d3d2", + "transactionIndex": "0xc6", + "blockHash": "0x6e23220a5c63b70c98f99d7801844935de51b6c9173a438f93aa4fd2d4ceeb1e", + "blockNumber": "0x18c970a", "gasUsed": "0x78d2", - "effectiveGasPrice": "0x79f1f51", + "effectiveGasPrice": "0xceca71d", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "contractAddress": null }, { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x15fe9c9", + "cumulativeGasUsed": "0xf2a173", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xf361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4a87c51612d24e32f61199710e92660d351f8de28b7c6447879301d84d064101", - "blockNumber": "0x188ddc9", - "blockTimestamp": "0x6a7ddd87", - "transactionHash": "0xe1d9d2d14e2a1aa0b3f4ae4a79ce923d8564d46994f763350bc52da1efb3be96", - "transactionIndex": "0xb3", - "logIndex": "0x2fa", + "blockHash": "0x016e553e5c7fb31feea751649aa011cb9e43f17327bda2038a0c216029f5b8fc", + "blockNumber": "0x18c970b", + "blockTimestamp": "0x6aaab507", + "transactionHash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", + "transactionIndex": "0xe2", + "logIndex": "0x19c", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000020004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0xe1d9d2d14e2a1aa0b3f4ae4a79ce923d8564d46994f763350bc52da1efb3be96", - "transactionIndex": "0xb3", - "blockHash": "0x4a87c51612d24e32f61199710e92660d351f8de28b7c6447879301d84d064101", - "blockNumber": "0x188ddc9", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x23f7786a55655ad66b1d36a691ec4b9993cf4240f33f7257cbf3898057af0311", + "transactionIndex": "0xe2", + "blockHash": "0x016e553e5c7fb31feea751649aa011cb9e43f17327bda2038a0c216029f5b8fc", + "blockNumber": "0x18c970b", "gasUsed": "0x9ab2", - "effectiveGasPrice": "0x7774cad", + "effectiveGasPrice": "0xcf43698", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "contractAddress": null }, { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x103fb8f", + "cumulativeGasUsed": "0x13ae10b", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xc5217903bd71390e046be1c1ee589f3af533c8fe5b67ee0a7dade2f8a853badd", - "0x000000000000000000000000863687e4e9751b57f38b4b0eba04744c72d0f7b8", + "0x000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f", "0x0000000000000000000000000000000000000000000000000000000000000001" ], "data": "0x", - "blockHash": "0xdec9d6d34bb2fe5c9d619f4f32f37d2372498615f8e335480f04bb0d77899723", - "blockNumber": "0x188ddcb", - "blockTimestamp": "0x6a7ddd9f", - "transactionHash": "0xcf69a6e1288a511b1816cfebd022c39190cfef524efa3bf25dce23bccae9a788", - "transactionIndex": "0xba", - "logIndex": "0x173", + "blockHash": "0xd819c7fbb70fd4264188fa8666f61a8f436f6eab1dd5f92a75ac567c077eddcc", + "blockNumber": "0x18c970c", + "blockTimestamp": "0x6aaab513", + "transactionHash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", + "transactionIndex": "0xbc", + "logIndex": "0x22a", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000040000000000200000000000000000000000000000400000040000000000000000000000000000000000000000000000000000000000000000000000000004040000000800000000000000000000000000000000000000000000000000000400200000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0xcf69a6e1288a511b1816cfebd022c39190cfef524efa3bf25dce23bccae9a788", - "transactionIndex": "0xba", - "blockHash": "0xdec9d6d34bb2fe5c9d619f4f32f37d2372498615f8e335480f04bb0d77899723", - "blockNumber": "0x188ddcb", + "logsBloom": "0x00000000000000000000000000000000000000000000100000000000000000000000000100000000000020000000000000000000000000000000000000040000040000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000040000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000", + "transactionHash": "0xa1fe673cedba12149c6e5649fee88a88ef040f8e55394b7e8f1da679f4f64a68", + "transactionIndex": "0xbc", + "blockHash": "0xd819c7fbb70fd4264188fa8666f61a8f436f6eab1dd5f92a75ac567c077eddcc", + "blockNumber": "0x18c970c", "gasUsed": "0xcc35", - "effectiveGasPrice": "0x73a8278", + "effectiveGasPrice": "0xc8d2d79", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "contractAddress": null }, { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x74ae9e", + "cumulativeGasUsed": "0x47eda4", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xdc843735e683348ec21c302ffff45462399c5c46f75f67b0a1a5395c53599753" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x03b6a5a75bb48a7196351e050294d737c0ec6816f7a7c28d4f7154e1c1ddb2fa", - "blockNumber": "0x188ddcd", - "blockTimestamp": "0x6a7dddb7", - "transactionHash": "0x6e1b37eda15c6da9bd640976cd9b4791b4db109093a687e33543e004947ef71d", - "transactionIndex": "0x60", - "logIndex": "0x51", + "blockHash": "0xe5b7dc24c97af88423fb200c69812f204a6004f3c52ecd5f609ee6905090234b", + "blockNumber": "0x18c970d", + "blockTimestamp": "0x6aaab51f", + "transactionHash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", + "transactionIndex": "0x5b", + "logIndex": "0x3d", "removed": false } ], - "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000020000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x6e1b37eda15c6da9bd640976cd9b4791b4db109093a687e33543e004947ef71d", - "transactionIndex": "0x60", - "blockHash": "0x03b6a5a75bb48a7196351e050294d737c0ec6816f7a7c28d4f7154e1c1ddb2fa", - "blockNumber": "0x188ddcd", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x97f48e71932b21d00dabf25bbcc8036e8bb51c1d930c96ea20743fc35ee0d60e", + "transactionIndex": "0x5b", + "blockHash": "0xe5b7dc24c97af88423fb200c69812f204a6004f3c52ecd5f609ee6905090234b", + "blockNumber": "0x18c970d", "gasUsed": "0x811e", - "effectiveGasPrice": "0x6fed29e", + "effectiveGasPrice": "0xc7905aa", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "contractAddress": null }, { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x2654637", + "cumulativeGasUsed": "0xb6be37", "logs": [ { - "address": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "address": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "topics": [ "0xd74668a8c80a07cc56d7c3318a06439eaa815e740d97dcd83487e1fc75076b8b", "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7" ], "data": "0x", - "blockHash": "0x614c879a1eaf0a7420bd8c2b9dfd2e8a7fa61411a1b6da2c2a59de4d780da599", - "blockNumber": "0x188ddce", - "blockTimestamp": "0x6a7dddc3", - "transactionHash": "0x51d43cd5d06bee7cc5a3b610efce6747b8ad8b0e675c5e3df91fc663415ad2c2", - "transactionIndex": "0x14f", - "logIndex": "0x485", + "blockHash": "0x1851828fb537510bea9f72a8a33688f85f704b530ef8f2c13ffa74be926656c7", + "blockNumber": "0x18c970e", + "blockTimestamp": "0x6aaab52b", + "transactionHash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", + "transactionIndex": "0x85", + "logIndex": "0xea", "removed": false } ], - "logsBloom": "0x00000000080000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000400084000000000200000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x51d43cd5d06bee7cc5a3b610efce6747b8ad8b0e675c5e3df91fc663415ad2c2", - "transactionIndex": "0x14f", - "blockHash": "0x614c879a1eaf0a7420bd8c2b9dfd2e8a7fa61411a1b6da2c2a59de4d780da599", - "blockNumber": "0x188ddce", + "logsBloom": "0x00000000080000000000000000000400000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000084000000000200000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionHash": "0x3cb3bc2e14d4f49e3135c5c5709adecf0ee629487725f9e46926d652a9cd161b", + "transactionIndex": "0x85", + "blockHash": "0x1851828fb537510bea9f72a8a33688f85f704b530ef8f2c13ffa74be926656c7", + "blockNumber": "0x18c970e", "gasUsed": "0xc569", - "effectiveGasPrice": "0x65d0ba7", + "effectiveGasPrice": "0xb2f7122", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", - "to": "0xdd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "to": "0x7e4a6a89583e117c641ab3ce8897209800a3f2e3", "contractAddress": null }, { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x819e5c", + "cumulativeGasUsed": "0x2624ca0", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "transactionHash": "0x1fc71e6fe567b43b56b72877aae78bf2fca15ada882ef8b1acafa8a56e98b224", - "transactionIndex": "0x66", - "blockHash": "0xd1297d4aec425c7f1a4dce3e23d2f5b530b25b67b52e373b4c071b78e0b65626", - "blockNumber": "0x188ddcf", - "gasUsed": "0xd735", - "effectiveGasPrice": "0x6e74366", + "transactionHash": "0x152e2c63bd203818de60ff97d3f761ccf3a5d3f05f8b0a526ad2de932e6e677d", + "transactionIndex": "0x13b", + "blockHash": "0xc1e21b7c4caf16a9340dfeaf19bfc1f7b46dcadfc83d7a5ce0f2b5ff7a8a1a09", + "blockNumber": "0x18c9710", + "gasUsed": "0xd729", + "effectiveGasPrice": "0xa859da9", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0x1981ad9f44f2ea9add2dc4ad7d075c102c70af92", @@ -456,32 +467,32 @@ { "type": "0x2", "status": "0x1", - "cumulativeGasUsed": "0x1e3088e", + "cumulativeGasUsed": "0x1ae3653", "logs": [ { "address": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", "topics": [ "0x73377b61b22fc875803de44d9946a61753ba80d2539c51f226d765946eb642f2", - "0x000000000000000000000000dd58aefe74585da2c7ad3d3df0f3aeeab05b5176", + "0x0000000000000000000000007e4a6a89583e117c641ab3ce8897209800a3f2e3", "0x000000000000000000000000b9f57b62cbe9463da16e5b75e3b809321a0ea871" ], "data": "0x", - "blockHash": "0xedaaeb862009157e910081aaaf5647d3a57b31f01a5ff787b3d3f5cbead0a8ae", - "blockNumber": "0x188ddd0", - "blockTimestamp": "0x6a7ddddb", - "transactionHash": "0x0c04cae2a340b8c47dc835ef74265adce25b3ad840af1ee11777d7573040d107", - "transactionIndex": "0x110", - "logIndex": "0x38c", + "blockHash": "0x2289425560809c049fbc482d64c9d8d65bf444a6bf6275aa3f2fe00e19ad2768", + "blockNumber": "0x18c9711", + "blockTimestamp": "0x6aaab54f", + "transactionHash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", + "transactionIndex": "0x191", + "logIndex": "0x2e9", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000080000000000000000040000000000000000002000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000004000000080000000000000000820000000000000000000000000000000000000000000", - "transactionHash": "0x0c04cae2a340b8c47dc835ef74265adce25b3ad840af1ee11777d7573040d107", - "transactionIndex": "0x110", - "blockHash": "0xedaaeb862009157e910081aaaf5647d3a57b31f01a5ff787b3d3f5cbead0a8ae", - "blockNumber": "0x188ddd0", - "gasUsed": "0xd4cb", - "effectiveGasPrice": "0x6fe6f37", + "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000000000008000000000000000100000000000000000000000000080000000000000000000000000000000000002000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000080000000000000000820000000000000000000000000000000000000000000", + "transactionHash": "0x8cd16ceb01c0ffbc6789ea8bf66f1bf826f6404970b08c4f1deef6ad5acdb236", + "transactionIndex": "0x191", + "blockHash": "0x2289425560809c049fbc482d64c9d8d65bf444a6bf6275aa3f2fe00e19ad2768", + "blockNumber": "0x18c9711", + "gasUsed": "0xd4bf", + "effectiveGasPrice": "0xbbeaa84", "blobGasUsed": "0x0", "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", "to": "0xf8df17a35c88abb25e83c92f9d293b4368b9d52d", @@ -491,7 +502,7 @@ "libraries": [], "pending": [], "returns": {}, - "timestamp": 1786633700324, + "timestamp": 1789572435382, "chain": 1, - "commit": "8262cdb" + "commit": "55be023" } \ No newline at end of file diff --git a/broadcast/DeployVault.s.sol/1/run-1789572134483.json b/broadcast/DeployVault.s.sol/1/run-1789572134483.json new file mode 100644 index 0000000..e441c3c --- /dev/null +++ b/broadcast/DeployVault.s.sol/1/run-1789572134483.json @@ -0,0 +1,473 @@ +{ + "transactions": [ + { + "hash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "function": "deploy_new_vault(address,string,string,address,uint256)", + "functionAbi": "function deploy_new_vault(address asset, string name, string symbol, address role_manager, uint256 profit_max_unlock_time) returns (address)", + "arguments": [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "Flex WETH yVault", + "yvFlexWETH", + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "345600" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "gas": "0x62eee", + "value": "0x0", + "input": "0xb4aeee77000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa00000000000000000000000000000000000000000000000000000000000546000000000000000000000000000000000000000000000000000000000000000010466c6578205745544820795661756c7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7976466c65785745544800000000000000000000000000000000000000000000", + "nonce": "0xc7", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "contractName": null, + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "initCode": "0x602d3d8160093d39f3363d3d373d3d3d363d73dd3fa86409658d207a9be0141ee560c8db5578245af43d82803e903d91602b57fd5bf3", + "creatorCodeAddresses": [ + "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac" + ] + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "16383" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10fd2", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa0000000000000000000000000000000000000000000000000000000000003fff", + "nonce": "0xc8", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7", + "16383" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10ff4", + "value": "0x0", + "input": "0x2cf7fd8500000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff70000000000000000000000000000000000000000000000000000000000003fff", + "nonce": "0xc9", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x604e586F17cE106B64185A7a0d2c1Da5bAce711E", + "32" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10fe3", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000000000000000000000000000000000000000000020", + "nonce": "0xca", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_deposit_limit(uint256)", + "functionAbi": "function set_deposit_limit(uint256 deposit_limit)", + "arguments": [ + "100000000000000000000000000000" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x133e9", + "value": "0x0", + "input": "0x6fe01d1e0000000000000000000000000000000000000001431e0fae6d7217caa0000000", + "nonce": "0xcb", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_auto_allocate(bool)", + "functionAbi": "function set_auto_allocate(bool)", + "arguments": [ + "true" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10b55", + "value": "0x0", + "input": "0x6f71047d0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xcc", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "transfer_role_manager(address)", + "functionAbi": "function transfer_role_manager(address role_manager)", + "arguments": [ + "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x11c48", + "value": "0x0", + "input": "0xef54cefd00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "nonce": "0xcd", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "0" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x9988", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xce", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0xcd6516", + "logs": [ + { + "address": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "topics": [ + "0x4241302c393c713e690702c4a45a57e93cef59aa8c6e2358495853b3420551d8", + "0x000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f", + "0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + ], + "data": "0x", + "blockHash": "0x1181118bde32b3aade5cc001dfa154137b88fb9aa4d7f548b76c387f3e9747e3", + "blockNumber": "0x18c96f1", + "blockTimestamp": "0x6aaab3cf", + "transactionHash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionIndex": "0xe8", + "logIndex": "0xea", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000200000000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000040000000000000000000000000000800000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000080000000000000000001000000000000000000000000000020000000000000000000000000000000000000000004000000000", + "transactionHash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionIndex": "0xe8", + "blockHash": "0x1181118bde32b3aade5cc001dfa154137b88fb9aa4d7f548b76c387f3e9747e3", + "blockNumber": "0x18c96f1", + "gasUsed": "0x43a59", + "effectiveGasPrice": "0xed0eb84", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x2e77618", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa", + "0x0000000000000000000000000000000000000000000000000000000000003fff" + ], + "data": "0x", + "blockHash": "0xcd54591e0b5763ea610a273a3bacf1d90261315565690d50763499f2e66f708a", + "blockNumber": "0x18c96f2", + "blockTimestamp": "0x6aaab3db", + "transactionHash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionIndex": "0x2b4", + "logIndex": "0x400", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080040000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000010000000000000000000000200000000000000000", + "transactionHash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionIndex": "0x2b4", + "blockHash": "0xcd54591e0b5763ea610a273a3bacf1d90261315565690d50763499f2e66f708a", + "blockNumber": "0x18c96f2", + "gasUsed": "0xc4cc", + "effectiveGasPrice": "0xe355b0b", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x19db65e", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "0x0000000000000000000000000000000000000000000000000000000000003fff" + ], + "data": "0x", + "blockHash": "0x5c934d7ee76b9c57bc86ecfe422f52047e02beaf991fcdbfcf87ad567d7cbf27", + "blockNumber": "0x18c96f3", + "blockTimestamp": "0x6aaab3e7", + "transactionHash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionIndex": "0x14e", + "logIndex": "0x2ab", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000010000000000000000000000200000000000000000", + "transactionHash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionIndex": "0x14e", + "blockHash": "0x5c934d7ee76b9c57bc86ecfe422f52047e02beaf991fcdbfcf87ad567d7cbf27", + "blockNumber": "0x18c96f3", + "gasUsed": "0xc4e4", + "effectiveGasPrice": "0xf978592", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x4b8f24", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e", + "0x0000000000000000000000000000000000000000000000000000000000000020" + ], + "data": "0x", + "blockHash": "0xdafde8fa94f8dc7ae0419d461a851353d2e28017bc486d072da9a93204c689a3", + "blockNumber": "0x18c96f4", + "blockTimestamp": "0x6aaab3f3", + "transactionHash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionIndex": "0x62", + "logIndex": "0x54", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000002000000000020000000000000000000000000000000000000000000100000000000000000000000000000000000000000000400000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000080000000002000000000000000000000000400000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionIndex": "0x62", + "blockHash": "0xdafde8fa94f8dc7ae0419d461a851353d2e28017bc486d072da9a93204c689a3", + "blockNumber": "0x18c96f4", + "gasUsed": "0xc4d8", + "effectiveGasPrice": "0xff3d327", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14e8841", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0xae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62" + ], + "data": "0x0000000000000000000000000000000000000001431e0fae6d7217caa0000000", + "blockHash": "0x4d24bd97ffec129639d194203119f503a487575673d199c928c996b09b00b8c1", + "blockNumber": "0x18c96f5", + "blockTimestamp": "0x6aaab3ff", + "transactionHash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionIndex": "0xdf", + "logIndex": "0x237", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000800000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionIndex": "0xdf", + "blockHash": "0x4d24bd97ffec129639d194203119f503a487575673d199c928c996b09b00b8c1", + "blockNumber": "0x18c96f5", + "gasUsed": "0xd28a", + "effectiveGasPrice": "0xe773b56", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14e0c73", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x68d2a9e78bb2679fce38ced936827f483b51ff64f0776fc33fc39b2881f237f8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xb704f31b6e9ae226757ad633d0aab05c829e8aefae0ca53f00380c61966355e4", + "blockNumber": "0x18c96f6", + "blockTimestamp": "0x6aaab40b", + "transactionHash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionIndex": "0xb7", + "logIndex": "0x1e5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000", + "transactionHash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionIndex": "0xb7", + "blockHash": "0xb704f31b6e9ae226757ad633d0aab05c829e8aefae0ca53f00380c61966355e4", + "blockNumber": "0x18c96f6", + "gasUsed": "0xc18c", + "effectiveGasPrice": "0xf094a50", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14d5152", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x364d2f5fdafcc5778c92c031ccf715352535731482158c029793bd034198f571", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7" + ], + "data": "0x", + "blockHash": "0x2fe5cf3e1bdf82879f0c7dd03de14f276e305e9d9650eaf1d590d4ff3e7a9ea5", + "blockNumber": "0x18c96f7", + "blockTimestamp": "0x6aaab417", + "transactionHash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionIndex": "0x103", + "logIndex": "0x21d", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000040000000000000000000000000000000002000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionIndex": "0x103", + "blockHash": "0x2fe5cf3e1bdf82879f0c7dd03de14f276e305e9d9650eaf1d590d4ff3e7a9ea5", + "blockNumber": "0x18c96f7", + "gasUsed": "0xc262", + "effectiveGasPrice": "0xf43e5d3", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x16fb930", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "blockHash": "0x82e3a0bb482fbccd0757a9b0a90e90b8625e5a7cafbc0a5216b82ac00ac08dc1", + "blockNumber": "0x18c96f8", + "blockTimestamp": "0x6aaab423", + "transactionHash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionIndex": "0xef", + "logIndex": "0x261", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080040000001000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000020000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionIndex": "0xef", + "blockHash": "0x82e3a0bb482fbccd0757a9b0a90e90b8625e5a7cafbc0a5216b82ac00ac08dc1", + "blockNumber": "0x18c96f8", + "gasUsed": "0x6f28", + "effectiveGasPrice": "0xf00ad9c", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789572134483, + "chain": 1, + "commit": "55be023" +} \ No newline at end of file diff --git a/broadcast/DeployVault.s.sol/1/run-latest.json b/broadcast/DeployVault.s.sol/1/run-latest.json new file mode 100644 index 0000000..e441c3c --- /dev/null +++ b/broadcast/DeployVault.s.sol/1/run-latest.json @@ -0,0 +1,473 @@ +{ + "transactions": [ + { + "hash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "function": "deploy_new_vault(address,string,string,address,uint256)", + "functionAbi": "function deploy_new_vault(address asset, string name, string symbol, address role_manager, uint256 profit_max_unlock_time) returns (address)", + "arguments": [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "Flex WETH yVault", + "yvFlexWETH", + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "345600" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "gas": "0x62eee", + "value": "0x0", + "input": "0xb4aeee77000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa00000000000000000000000000000000000000000000000000000000000546000000000000000000000000000000000000000000000000000000000000000010466c6578205745544820795661756c7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7976466c65785745544800000000000000000000000000000000000000000000", + "nonce": "0xc7", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "contractName": null, + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "initCode": "0x602d3d8160093d39f3363d3d373d3d3d363d73dd3fa86409658d207a9be0141ee560c8db5578245af43d82803e903d91602b57fd5bf3", + "creatorCodeAddresses": [ + "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac" + ] + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "16383" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10fd2", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa0000000000000000000000000000000000000000000000000000000000003fff", + "nonce": "0xc8", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7", + "16383" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10ff4", + "value": "0x0", + "input": "0x2cf7fd8500000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff70000000000000000000000000000000000000000000000000000000000003fff", + "nonce": "0xc9", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x604e586F17cE106B64185A7a0d2c1Da5bAce711E", + "32" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10fe3", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e0000000000000000000000000000000000000000000000000000000000000020", + "nonce": "0xca", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_deposit_limit(uint256)", + "functionAbi": "function set_deposit_limit(uint256 deposit_limit)", + "arguments": [ + "100000000000000000000000000000" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x133e9", + "value": "0x0", + "input": "0x6fe01d1e0000000000000000000000000000000000000001431e0fae6d7217caa0000000", + "nonce": "0xcb", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_auto_allocate(bool)", + "functionAbi": "function set_auto_allocate(bool)", + "arguments": [ + "true" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x10b55", + "value": "0x0", + "input": "0x6f71047d0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xcc", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "transfer_role_manager(address)", + "functionAbi": "function transfer_role_manager(address role_manager)", + "arguments": [ + "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x11c48", + "value": "0x0", + "input": "0xef54cefd00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "nonce": "0xcd", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "function": "set_role(address,uint256)", + "functionAbi": "function set_role(address account, uint256 role)", + "arguments": [ + "0x000005281a2b04A182085D37cC9E6dD552795caa", + "0" + ], + "transaction": { + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "gas": "0x9988", + "value": "0x0", + "input": "0x2cf7fd85000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0xce", + "chainId": "0x1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0xcd6516", + "logs": [ + { + "address": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "topics": [ + "0x4241302c393c713e690702c4a45a57e93cef59aa8c6e2358495853b3420551d8", + "0x000000000000000000000000fac55fafd0b55bfb8dd41f735efcc195ada9891f", + "0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + ], + "data": "0x", + "blockHash": "0x1181118bde32b3aade5cc001dfa154137b88fb9aa4d7f548b76c387f3e9747e3", + "blockNumber": "0x18c96f1", + "blockTimestamp": "0x6aaab3cf", + "transactionHash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionIndex": "0xe8", + "logIndex": "0xea", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000200000000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000040000000000000000000000000000800000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000080000000000000000001000000000000000000000000000020000000000000000000000000000000000000000004000000000", + "transactionHash": "0xdf4d1628558780fe6f50c8cfd51899604e841503a67001aaa14e3941b03f60d4", + "transactionIndex": "0xe8", + "blockHash": "0x1181118bde32b3aade5cc001dfa154137b88fb9aa4d7f548b76c387f3e9747e3", + "blockNumber": "0x18c96f1", + "gasUsed": "0x43a59", + "effectiveGasPrice": "0xed0eb84", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0x310ac28acf5e514abdbff9ab25e21f1bfe22bcac", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x2e77618", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa", + "0x0000000000000000000000000000000000000000000000000000000000003fff" + ], + "data": "0x", + "blockHash": "0xcd54591e0b5763ea610a273a3bacf1d90261315565690d50763499f2e66f708a", + "blockNumber": "0x18c96f2", + "blockTimestamp": "0x6aaab3db", + "transactionHash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionIndex": "0x2b4", + "logIndex": "0x400", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080040000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000010000000000000000000000200000000000000000", + "transactionHash": "0x0f590df3cc655a076b9240fc257c441fb29ee0543fd8a272e6cb56324c1237db", + "transactionIndex": "0x2b4", + "blockHash": "0xcd54591e0b5763ea610a273a3bacf1d90261315565690d50763499f2e66f708a", + "blockNumber": "0x18c96f2", + "gasUsed": "0xc4cc", + "effectiveGasPrice": "0xe355b0b", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x19db65e", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7", + "0x0000000000000000000000000000000000000000000000000000000000003fff" + ], + "data": "0x", + "blockHash": "0x5c934d7ee76b9c57bc86ecfe422f52047e02beaf991fcdbfcf87ad567d7cbf27", + "blockNumber": "0x18c96f3", + "blockTimestamp": "0x6aaab3e7", + "transactionHash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionIndex": "0x14e", + "logIndex": "0x2ab", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000010000000000000000000000200000000000000000", + "transactionHash": "0x73b23c9dc882647c8151c53cd18352956f16ee06a5dd912180d7837cca8a5c19", + "transactionIndex": "0x14e", + "blockHash": "0x5c934d7ee76b9c57bc86ecfe422f52047e02beaf991fcdbfcf87ad567d7cbf27", + "blockNumber": "0x18c96f3", + "gasUsed": "0xc4e4", + "effectiveGasPrice": "0xf978592", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x4b8f24", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000604e586f17ce106b64185a7a0d2c1da5bace711e", + "0x0000000000000000000000000000000000000000000000000000000000000020" + ], + "data": "0x", + "blockHash": "0xdafde8fa94f8dc7ae0419d461a851353d2e28017bc486d072da9a93204c689a3", + "blockNumber": "0x18c96f4", + "blockTimestamp": "0x6aaab3f3", + "transactionHash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionIndex": "0x62", + "logIndex": "0x54", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000002000000000020000000000000000000000000000000000000000000100000000000000000000000000000000000000000000400000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000080000000002000000000000000000000000400000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x50ac1823ec9f864c25f9c8facdadc01468f7d2ee7a1826cc2ec61c9ffbed1d9a", + "transactionIndex": "0x62", + "blockHash": "0xdafde8fa94f8dc7ae0419d461a851353d2e28017bc486d072da9a93204c689a3", + "blockNumber": "0x18c96f4", + "gasUsed": "0xc4d8", + "effectiveGasPrice": "0xff3d327", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14e8841", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0xae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62" + ], + "data": "0x0000000000000000000000000000000000000001431e0fae6d7217caa0000000", + "blockHash": "0x4d24bd97ffec129639d194203119f503a487575673d199c928c996b09b00b8c1", + "blockNumber": "0x18c96f5", + "blockTimestamp": "0x6aaab3ff", + "transactionHash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionIndex": "0xdf", + "logIndex": "0x237", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000800000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x10841d50990815ca33d1cf14b03ad17acba05d5d537efa641a774d277496fa27", + "transactionIndex": "0xdf", + "blockHash": "0x4d24bd97ffec129639d194203119f503a487575673d199c928c996b09b00b8c1", + "blockNumber": "0x18c96f5", + "gasUsed": "0xd28a", + "effectiveGasPrice": "0xe773b56", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14e0c73", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x68d2a9e78bb2679fce38ced936827f483b51ff64f0776fc33fc39b2881f237f8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xb704f31b6e9ae226757ad633d0aab05c829e8aefae0ca53f00380c61966355e4", + "blockNumber": "0x18c96f6", + "blockTimestamp": "0x6aaab40b", + "transactionHash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionIndex": "0xb7", + "logIndex": "0x1e5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000", + "transactionHash": "0x5d1fcf5b56265417d0d54f4926020a32f80bc6ee082d8d30ae19bd133d9c3d11", + "transactionIndex": "0xb7", + "blockHash": "0xb704f31b6e9ae226757ad633d0aab05c829e8aefae0ca53f00380c61966355e4", + "blockNumber": "0x18c96f6", + "gasUsed": "0xc18c", + "effectiveGasPrice": "0xf094a50", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x14d5152", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x364d2f5fdafcc5778c92c031ccf715352535731482158c029793bd034198f571", + "0x00000000000000000000000016388463d60ffe0661cf7f1f31a7d658ac790ff7" + ], + "data": "0x", + "blockHash": "0x2fe5cf3e1bdf82879f0c7dd03de14f276e305e9d9650eaf1d590d4ff3e7a9ea5", + "blockNumber": "0x18c96f7", + "blockTimestamp": "0x6aaab417", + "transactionHash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionIndex": "0x103", + "logIndex": "0x21d", + "removed": false + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000040000000000000000000000000000000002000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x4830d2f026465dcb2f2db0b285d42822b676118d0a14ab791e1ca97a60846975", + "transactionIndex": "0x103", + "blockHash": "0x2fe5cf3e1bdf82879f0c7dd03de14f276e305e9d9650eaf1d590d4ff3e7a9ea5", + "blockNumber": "0x18c96f7", + "gasUsed": "0xc262", + "effectiveGasPrice": "0xf43e5d3", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + }, + { + "type": "0x2", + "status": "0x1", + "cumulativeGasUsed": "0x16fb930", + "logs": [ + { + "address": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "topics": [ + "0x78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e", + "0x000000000000000000000000000005281a2b04a182085d37cc9e6dd552795caa", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "blockHash": "0x82e3a0bb482fbccd0757a9b0a90e90b8625e5a7cafbc0a5216b82ac00ac08dc1", + "blockNumber": "0x18c96f8", + "blockTimestamp": "0x6aaab423", + "transactionHash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionIndex": "0xef", + "logIndex": "0x261", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000080040000001000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000400000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000020000000000000000000000000000000000000000000000000200000000000000000", + "transactionHash": "0x33c20e14b2db118ae639ef9946fbf53ec15a6d71429c11697562bc7507bb6eeb", + "transactionIndex": "0xef", + "blockHash": "0x82e3a0bb482fbccd0757a9b0a90e90b8625e5a7cafbc0a5216b82ac00ac08dc1", + "blockNumber": "0x18c96f8", + "gasUsed": "0x6f28", + "effectiveGasPrice": "0xf00ad9c", + "blobGasUsed": "0x0", + "from": "0x000005281a2b04a182085d37cc9e6dd552795caa", + "to": "0xfac55fafd0b55bfb8dd41f735efcc195ada9891f", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1789572134483, + "chain": 1, + "commit": "55be023" +} \ No newline at end of file diff --git a/script/DeployAvantStrategy.s.sol b/script/DeployAvantStrategy.s.sol new file mode 100644 index 0000000..89a8539 --- /dev/null +++ b/script/DeployAvantStrategy.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.30; + +import {IStrategy} from "../src/interfaces/IStrategy.sol"; +import {ICentralAPROracle} from "./interfaces/ICentralAPROracle.sol"; +import {ICommonReportTrigger} from "./interfaces/ICommonReportTrigger.sol"; + +import {AvantFlexLenderStrategy} from "../src/integrations/AvantStrategy.sol"; + +import "forge-std/Script.sol"; + +// ---- Usage ---- + +// deploy: +// forge script script/DeployAvantStrategy.s.sol:DeployAvantStrategy --verify --slow --etherscan-api-key $KEY --rpc-url $RPC_URL --broadcast + +contract DeployAvantStrategy is Script { + + // Market params + string public constant NAME = "Flex savETH/WETH Lender"; + address public constant LENDER = address(0); // TODO: Flex v2 savETH/WETH Lender + + // Yearn addresses + address public constant SMS = 0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7; // sms mainnet + address public constant VAULT = 0xfaC55fAFD0b55BFb8dD41F735EfCc195adA9891F; // yvFlexWETH mainnet + address public constant KEEPER = 0x604e586F17cE106B64185A7a0d2c1Da5bAce711E; // yHaaS mainnet + address public constant ACCOUNTANT = 0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69; // accountant mainnet + + // Deployed contracts + address public constant EXIT_ROUTER = 0xe8a511403B0C83e7b85513e00Ed39996B48c2aeD; + address public constant FIXED_REPORT_TRIGGER = 0xb9F57B62Cbe9463da16E5b75e3B809321a0eA871; + address public constant STRATEGY_APR_ORACLE = 0xcB5A60AB76F3741204C87744ECFe0445C74Eb171; + ICentralAPROracle public constant CENTRAL_APR_ORACLE = ICentralAPROracle(0x1981AD9F44F2EA9aDd2dC4AD7D075c102C70aF92); + ICommonReportTrigger public constant COMMON_REPORT_TRIGGER = ICommonReportTrigger(0xf8dF17a35c88AbB25e83C92f9D293B4368b9D52D); + + function run() public { + uint256 _pk = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + // Derive deployer address from private key + address _deployerAddress = vm.addr(_pk); + + require(_deployerAddress == address(0x000005281a2b04A182085D37cC9E6dD552795caa), "!johnny.flexmeow.eth"); + require(LENDER != address(0), "!lender"); + console.log("Deployer address: %s", _deployerAddress); + + vm.startBroadcast(_pk); + + // Deploy the Strategy. The deployer is management, keeper, and fee recipient until set below + IStrategy _strategy = IStrategy(address(new AvantFlexLenderStrategy(LENDER, EXIT_ROUTER, NAME))); + + // Set up the Strategy + _strategy.setKeeper(KEEPER); + _strategy.setPerformanceFeeRecipient(ACCOUNTANT); + _strategy.setProfitMaxUnlockTime(0 days); + _strategy.setAllowed(VAULT, true); + _strategy.setPerformanceFee(0); + _strategy.setPendingManagement(SMS); + + // Set APR oracle for the strategy + CENTRAL_APR_ORACLE.setOracle(address(_strategy), STRATEGY_APR_ORACLE); + + // Set report trigger for the strategy + COMMON_REPORT_TRIGGER.setCustomStrategyTrigger(address(_strategy), FIXED_REPORT_TRIGGER); + + console2.log("---------------------------------"); + console2.log("Strategy: ", address(_strategy)); + console2.log("---------------------------------"); + + vm.stopBroadcast(); + } + +} diff --git a/script/DeployLockedYvusdStrategy.s.sol b/script/DeployLockedYvusdStrategy.s.sol new file mode 100644 index 0000000..fd02887 --- /dev/null +++ b/script/DeployLockedYvusdStrategy.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.30; + +import {IStrategy} from "../src/interfaces/IStrategy.sol"; +import {ICentralAPROracle} from "./interfaces/ICentralAPROracle.sol"; +import {ICommonReportTrigger} from "./interfaces/ICommonReportTrigger.sol"; + +import {LockedYvusdFlexLenderStrategy} from "../src/integrations/LockedYvusdStrategy.sol"; + +import "forge-std/Script.sol"; + +// ---- Usage ---- + +// deploy: +// forge script script/DeployLockedYvusdStrategy.s.sol:DeployLockedYvusdStrategy --verify --slow --etherscan-api-key $KEY --rpc-url $RPC_URL --broadcast + +contract DeployLockedYvusdStrategy is Script { + + // Market params + string public constant NAME = "Flex Locked yvUSD/USDC Lender"; + address public constant LENDER = address(0); // TODO: Flex v2 Locked yvUSD/USDC Lender + + // Yearn addresses + address public constant SMS = 0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7; // sms mainnet + address public constant VAULT = 0x863687e4E9751b57F38b4B0ebA04744C72d0f7B8; // yvFlexUSDC mainnet + address public constant KEEPER = 0x604e586F17cE106B64185A7a0d2c1Da5bAce711E; // yHaaS mainnet + address public constant ACCOUNTANT = 0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69; // accountant mainnet + + // Deployed contracts + address public constant EXIT_ROUTER = 0xe8a511403B0C83e7b85513e00Ed39996B48c2aeD; + address public constant FIXED_REPORT_TRIGGER = 0xb9F57B62Cbe9463da16E5b75e3B809321a0eA871; + address public constant STRATEGY_APR_ORACLE = 0xcB5A60AB76F3741204C87744ECFe0445C74Eb171; + ICentralAPROracle public constant CENTRAL_APR_ORACLE = ICentralAPROracle(0x1981AD9F44F2EA9aDd2dC4AD7D075c102C70aF92); + ICommonReportTrigger public constant COMMON_REPORT_TRIGGER = ICommonReportTrigger(0xf8dF17a35c88AbB25e83C92f9D293B4368b9D52D); + + function run() public { + uint256 _pk = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + // Derive deployer address from private key + address _deployerAddress = vm.addr(_pk); + + require(_deployerAddress == address(0x000005281a2b04A182085D37cC9E6dD552795caa), "!johnny.flexmeow.eth"); + require(LENDER != address(0), "!lender"); + console.log("Deployer address: %s", _deployerAddress); + + vm.startBroadcast(_pk); + + // Deploy the Strategy. The deployer is management, keeper, and fee recipient until set below + IStrategy _strategy = IStrategy(address(new LockedYvusdFlexLenderStrategy(LENDER, EXIT_ROUTER, NAME))); + + // Set up the Strategy + _strategy.setKeeper(KEEPER); + _strategy.setPerformanceFeeRecipient(ACCOUNTANT); + _strategy.setProfitMaxUnlockTime(0 days); + _strategy.setAllowed(VAULT, true); + _strategy.setPerformanceFee(0); + _strategy.setPendingManagement(SMS); + + // Set APR oracle for the strategy + CENTRAL_APR_ORACLE.setOracle(address(_strategy), STRATEGY_APR_ORACLE); + + // Set report trigger for the strategy + COMMON_REPORT_TRIGGER.setCustomStrategyTrigger(address(_strategy), FIXED_REPORT_TRIGGER); + + console2.log("---------------------------------"); + console2.log("Strategy: ", address(_strategy)); + console2.log("---------------------------------"); + + vm.stopBroadcast(); + } + +} diff --git a/script/DeployStrategy.s.sol b/script/DeployStrategy.s.sol index 0741bc3..7dd3916 100644 --- a/script/DeployStrategy.s.sol +++ b/script/DeployStrategy.s.sol @@ -17,13 +17,13 @@ import "forge-std/Script.sol"; contract DeployStrategy is Script { // Market params - string public constant NAME = "Flex ysyBOLD/USDC Lender"; - address public constant ASSET = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC - address public constant LENDER = 0xf4996Ca4190A1a3e7CF19AbE2F6eb712abd4a03C; // Flex v2 ysyBOLD/USDC Lender + string public constant NAME = "Flex yvWETH-2/WETH Lender"; + address public constant ASSET = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH + address public constant LENDER = 0x0d57098e501D68905fC4B0A3397f7D4Aa4889E36; // Flex v2 yvWETH-2/WETH Lender // Yearn addresses address public constant SMS = 0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7; // sms mainnet - address public constant VAULT = 0x863687e4E9751b57F38b4B0ebA04744C72d0f7B8; // yvFlexUSDC mainnet + address public constant VAULT = 0xfaC55fAFD0b55BFb8dD41F735EfCc195adA9891F; // yvFlexWETH mainnet address public constant KEEPER = 0x604e586F17cE106B64185A7a0d2c1Da5bAce711E; // yHaaS mainnet address public constant ACCOUNTANT = 0x5A74Cb32D36f2f517DB6f7b0A0591e09b22cDE69; // accountant mainnet diff --git a/script/DeployVault.s.sol b/script/DeployVault.s.sol index c668118..4e2efc5 100644 --- a/script/DeployVault.s.sol +++ b/script/DeployVault.s.sol @@ -13,15 +13,15 @@ import "forge-std/Script.sol"; contract DeployVault is Script { - string private constant NAME = "Flex USDC yVault"; - string private constant SYMBOL = "yvFlexUSDC"; - address private constant ASSET = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; + string private constant NAME = "Flex WETH yVault"; + string private constant SYMBOL = "yvFlexWETH"; + address private constant ASSET = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH address private constant SMS = 0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7; // sms mainnet address private constant KEEPER = 0x604e586F17cE106B64185A7a0d2c1Da5bAce711E; // yHaaS mainnet address private constant ROLE_MANAGER = 0xb3bd6B2E61753C311EFbCF0111f75D29706D9a41; - // 3.0.4 Vault Factory - IVaultFactory private constant VAULT_FACTORY = IVaultFactory(0x770D0d1Fb036483Ed4AbB6d53c1C88fb277D812F); + // 3.1.0 Vault Factory + IVaultFactory private constant VAULT_FACTORY = IVaultFactory(0x310aC28ACF5E514abDbFF9Ab25e21f1bfe22bcAC); function run() public { uint256 _pk = vm.envUint("DEPLOYER_PRIVATE_KEY"); @@ -34,7 +34,7 @@ contract DeployVault is Script { vm.startBroadcast(_pk); - IVault _vault = IVault(VAULT_FACTORY.deploy_new_vault(ASSET, NAME, SYMBOL, _deployerAddress, 7 days)); + IVault _vault = IVault(VAULT_FACTORY.deploy_new_vault(ASSET, NAME, SYMBOL, _deployerAddress, 4 days)); _vault.set_role(_deployerAddress, 16383); // ADD_STRATEGY_MANAGER/DEPOSIT_LIMIT_MANAGER/MAX_DEBT_MANAGER/DEBT_MANAGER _vault.set_role(SMS, 16383); // ADD_STRATEGY_MANAGER/DEPOSIT_LIMIT_MANAGER/MAX_DEBT_MANAGER/DEBT_MANAGER _vault.set_role(KEEPER, 32); // REPORTING_MANAGER diff --git a/script/README.md b/script/README.md index 58e3edc..a67d7ef 100644 --- a/script/README.md +++ b/script/README.md @@ -2,14 +2,17 @@ - Allocator Strategy APR Oracle (v1): 0x84D1AeC938D4b9F492c50A1b5218E77195899471 - Allocator Strategy Factory (v1): 0x7A3B96E84156d22Cdb53CbfC0B035Ddd61805266 -- Allocator Strategy APR Oracle (v2): 0xcB5A60AB76F3741204C87744ECFe0445C74Eb171 -- Allocator Strategy Factory (v2): 0x1792348Fe3ebDdc0C6bB123aC24c094ac9D78252 +- Allocator Strategy APR Oracle: 0xcB5A60AB76F3741204C87744ECFe0445C74Eb171 +- Allocator Strategy Factory: 0x1792348Fe3ebDdc0C6bB123aC24c094ac9D78252 - Exit Router: 0xe8a511403B0C83e7b85513e00Ed39996B48c2aeD ** Yearn Allocator ** - yvFlexUSDC: 0x863687e4E9751b57F38b4B0ebA04744C72d0f7B8 +- yvFlexWETH: 0xfaC55fAFD0b55BFb8dD41F735EfCc195adA9891F - yvUSD/USDC Strategy (v1): 0x467Ce10870747372968ba98463A1d9af9Fb27751 - siUSD/USDC Strategy (v1): 0x1231310e5F68398dfE929Cc43ce65c1B871eb2C8 -- yvUSD/USDC Strategy (v2): 0x7501EAE6b5C2Cb0A6EDAC908E3A679B20eDd737b -- ysyBOLD/USDC Strategy (v2): 0xDd58AeFE74585DA2C7Ad3D3dF0F3aeEAb05b5176 \ No newline at end of file +- yvUSD/USDC Strategy: 0x7501EAE6b5C2Cb0A6EDAC908E3A679B20eDd737b +- ysyBOLD/USDC Strategy: 0xDd58AeFE74585DA2C7Ad3D3dF0F3aeEAb05b5176 +- yvcrvUSD-2/USDC Strategy: 0xC818A0Be1BB2cE820CfdefAD5f890667e885f39d +- yvWETH-2/WETH Strategy: 0x7E4a6A89583e117C641aB3ce8897209800A3F2E3 \ No newline at end of file diff --git a/src/integrations/AvantStrategy.sol b/src/integrations/AvantStrategy.sol new file mode 100644 index 0000000..244e717 --- /dev/null +++ b/src/integrations/AvantStrategy.sol @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.30; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import {IAvantMinting} from "../interfaces/IAvantMinting.sol"; +import {IStakedAvant} from "../interfaces/IStakedAvant.sol"; + +import {CooldownFlexLenderStrategy, ERC20, Math} from "./CooldownStrategy.sol"; + +/// @title Avant Flex Lender Strategy +/// @author Flex +/// @notice Flex Lender Strategy for savETH collateral markets. Collateral taken in kind from redemption +/// auctions is unstaked to avETH through savETH's cooldown, then redeemed for the asset by Avant +/// off-chain, against orders signed on this strategy's behalf by a delegated signer +contract AvantFlexLenderStrategy is CooldownFlexLenderStrategy { + + using SafeERC20 for ERC20; + + // ============================================================================================ + // Constants + // ============================================================================================ + + /// @notice WETH token + address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; + + /// @notice avETH token, 1:1 with the asset + ERC20 public constant AVETH = ERC20(0x9469470C9878bf3d6d0604831d9A3A366156f7EE); + + /// @notice Avant minting contract, redeems avETH for the asset + IAvantMinting public constant AVANT_MINTING = IAvantMinting(0x09becF6E5e297825D19aA14eD6081A03524532D7); + + // ============================================================================================ + // Constructor + // ============================================================================================ + + /// @notice Constructor + /// @param _lender The address of the Lender contract + /// @param _exitRouter The address of the exit router + /// @param _name The name of the strategy + constructor( + address _lender, + address _exitRouter, + string memory _name + ) CooldownFlexLenderStrategy(WETH, _lender, _exitRouter, _name) { + // Make sure the collateral (savETH) unstakes to avETH + require(COLLATERAL.asset() == address(AVETH), "!aveth"); + + // Max approve the minting contract to pull the avETH being redeemed + AVETH.forceApprove(address(AVANT_MINTING), type(uint256).max); + } + + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @inheritdoc CooldownFlexLenderStrategy + function pendingRedemptions() public view override returns (uint256 _pending) { + // savETH taken in kind, and what is cooling in the silo. savETH --> avETH + (, uint152 _cooling) = IStakedAvant(address(COLLATERAL)).cooldowns(address(this)); + _pending = COLLATERAL.convertToAssets(takenInKind) + _cooling; + + // Loose avETH, waiting to be redeemed + _pending += AVETH.balanceOf(address(this)); + } + + // ============================================================================================ + // Management functions + // ============================================================================================ + + /// @notice Delegate the signing of Avant redemption orders on this strategy's behalf + /// @dev Only callable by management + /// @dev The signer must confirm the delegation on the minting contract. Orders must have this + /// strategy as both benefactor and beneficiary + /// @param _signer The address to delegate to + function setDelegatedSigner( + address _signer + ) external onlyManagement { + AVANT_MINTING.setDelegatedSigner(_signer); + } + + // ============================================================================================ + // Cooldown + // ============================================================================================ + + /// @notice Start the cooldown on loose savETH + /// @dev Only callable by management + /// @dev Calling while a cooldown is in progress adds to it and restarts its timer + /// @param _shares The amount of savETH to unwind, capped by the loose balance + /// @return The amount of avETH cooling + function initiateCooldown( + uint256 _shares + ) external onlyManagement returns (uint256) { + // Cap the shares by the loose collateral balance + _shares = _capToBalance(COLLATERAL, _shares); + + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + + // savETH --> avETH, into the silo + return IStakedAvant(address(COLLATERAL)).cooldownShares(_shares); + } + + /// @notice Unstake the cooled avETH from the silo once the cooldown passed + /// @dev Only callable by management + /// @dev The avETH is then redeemed for the asset by Avant, see `setDelegatedSigner` + /// @return _avethOut The amount of avETH received + function claimCooldown() external onlyManagement returns (uint256 _avethOut) { + // Make sure there is something cooled + IStakedAvant _savETH = IStakedAvant(address(COLLATERAL)); + (uint104 _cooldownEnd, uint152 _cooling) = _savETH.cooldowns(address(this)); + require(_cooling > 0 && block.timestamp >= _cooldownEnd, "!claim"); + + // Silo --> avETH + uint256 _preBalance = AVETH.balanceOf(address(this)); + _savETH.unstake(address(this)); + _avethOut = AVETH.balanceOf(address(this)) - _preBalance; + } + +} diff --git a/src/integrations/CooldownStrategy.sol b/src/integrations/CooldownStrategy.sol index a058881..1e0fcf8 100644 --- a/src/integrations/CooldownStrategy.sol +++ b/src/integrations/CooldownStrategy.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.30; import {IERC20, IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {BaseStrategy, ERC20, FlexLenderStrategy} from "../Strategy.sol"; @@ -18,6 +19,9 @@ abstract contract CooldownFlexLenderStrategy is FlexLenderStrategy { /// @notice WAD constant uint256 internal constant _WAD = 1e18; + /// @notice Pending amount below which reports are not blocked, for rounding dust the protocol leaves behind + uint256 public immutable PENDING_DUST; + /// @notice Collateral token IERC4626 public immutable COLLATERAL; @@ -25,8 +29,11 @@ abstract contract CooldownFlexLenderStrategy is FlexLenderStrategy { // Storage // ============================================================================================ - /// @notice Asset amount queued for redemption in the collateral's protocol - uint256 public pendingRedemptions; + /// @notice Whether reports ignore the pending redemptions, an escape hatch for management + bool public ignorePending; + + /// @notice Collateral taken in kind and not unwound yet. Storage var and not `balanceOf()` to avoid donations issues + uint256 public takenInKind; // ============================================================================================ // Constructor @@ -48,6 +55,30 @@ abstract contract CooldownFlexLenderStrategy is FlexLenderStrategy { // Make sure the auction starting price buffer is 0 require(DUTCH_DESK.starting_price_buffer_percentage() == _WAD, "!buffer"); + + // Set the dust to half the asset's decimals, e.g. 0.001 USDC or 1e9 ETH + PENDING_DUST = 10 ** (asset.decimals() / 2); + } + + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @notice Asset value taken in kind that is not back yet, loose collateral plus whatever is + /// queued in the collateral's protocol, read live + function pendingRedemptions() public view virtual returns (uint256); + + // ============================================================================================ + // Management functions + // ============================================================================================ + + /// @notice Set whether reports ignore the pending redemptions + /// @dev Only callable by management + /// @param _ignorePending Whether to ignore the pending redemptions + function setIgnorePending( + bool _ignorePending + ) external onlyManagement { + ignorePending = _ignorePending; } // ============================================================================================ @@ -70,13 +101,7 @@ abstract contract CooldownFlexLenderStrategy is FlexLenderStrategy { // Take the kicked auction, receiving the collateral in kind uint256 _auctionId = pendingAuctionId; - if (AUCTION.is_active(_auctionId)) AUCTION.take(_auctionId); - } - - /// @notice Zero out the pending redemptions accounting - /// @dev Only callable by management - function zeroPendingRedemptions() external onlyManagement { - pendingRedemptions = 0; + if (AUCTION.is_active(_auctionId)) takenInKind += AUCTION.take(_auctionId); } // ============================================================================================ @@ -100,8 +125,8 @@ abstract contract CooldownFlexLenderStrategy is FlexLenderStrategy { /// @inheritdoc BaseStrategy function _harvestAndReport() internal view override returns (uint256) { - // Block reports until in-flight cooldowns are claimed - require(pendingRedemptions == 0, "!cooldown"); + // Block reports until everything taken in kind is back as asset, unless management says otherwise + require(ignorePending || pendingRedemptions() <= PENDING_DUST, "!cooldown"); return super._harvestAndReport(); } diff --git a/src/integrations/FxSaveStrategy.sol b/src/integrations/FxSaveStrategy.sol index 9415f80..87225c3 100644 --- a/src/integrations/FxSaveStrategy.sol +++ b/src/integrations/FxSaveStrategy.sol @@ -7,7 +7,7 @@ import {ICurveStableSwap} from "../interfaces/ICurveStableSwap.sol"; import {IFxSave} from "../interfaces/IFxSave.sol"; import {IFxUSDBasePool} from "../interfaces/IFxUSDBasePool.sol"; -import {CooldownFlexLenderStrategy, ERC20} from "./CooldownStrategy.sol"; +import {CooldownFlexLenderStrategy, ERC20, Math} from "./CooldownStrategy.sol"; /// @title fxSAVE Flex Lender Strategy /// @author Flex @@ -29,6 +29,9 @@ contract FxSaveFlexLenderStrategy is CooldownFlexLenderStrategy { /// @notice Scales an 18-decimals fxBASE amount valued by the 18-decimals nav to 6-decimals asset terms uint256 internal constant _NAV_TO_ASSET_SCALE = 1e30; + /// @notice Scales an 18-decimals fxUSD amount to 6-decimals asset terms + uint256 internal constant _FXUSD_TO_ASSET_SCALE = 1e12; + /// @notice USDC token address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; @@ -41,6 +44,13 @@ contract FxSaveFlexLenderStrategy is CooldownFlexLenderStrategy { /// @notice Curve USDC/fxUSD pool ICurveStableSwap public constant CURVE_POOL = ICurveStableSwap(0x5018BE882DccE5E3F2f3B0913AE2096B9b3fB61f); + // ============================================================================================ + // Storage + // ============================================================================================ + + /// @notice fxBASE assets queued in fxBASE's redemption queue + uint256 public queuedBaseAssets; + // ============================================================================================ // Constructor // ============================================================================================ @@ -61,6 +71,20 @@ contract FxSaveFlexLenderStrategy is CooldownFlexLenderStrategy { FXUSD.forceApprove(address(CURVE_POOL), type(uint256).max); } + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @inheritdoc CooldownFlexLenderStrategy + function pendingRedemptions() public view override returns (uint256 _pending) { + // Loose fxUSD, 1:1 with the asset + _pending = FXUSD.balanceOf(address(this)) / _FXUSD_TO_ASSET_SCALE; + + // fxSAVE taken in kind and the queued fxBASE assets, valued via fxBASE's nav + uint256 _baseAssets = COLLATERAL.convertToAssets(takenInKind) + queuedBaseAssets; + if (_baseAssets > 0) _pending += _baseAssets * FXBASE.nav() / _NAV_TO_ASSET_SCALE; + } + // ============================================================================================ // Cooldown // ============================================================================================ @@ -69,19 +93,22 @@ contract FxSaveFlexLenderStrategy is CooldownFlexLenderStrategy { /// @dev Only callable by management /// @dev Requests accumulate, but every request resets the unlock clock for the whole queued amount /// @param _shares The amount of fxSAVE to unwind, capped by the loose balance - /// @return _pendingAssets The amount of asset queued in fxBASE's redemption queue + /// @return The amount of asset queued in fxBASE's redemption queue function initiateCooldown( uint256 _shares - ) external onlyManagement returns (uint256 _pendingAssets) { + ) external onlyManagement returns (uint256) { // Cap the shares by the loose collateral balance _shares = _capToBalance(COLLATERAL, _shares); + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + // fxSAVE --> fxBASE, queued for redemption uint256 _baseAssets = IFxSave(address(COLLATERAL)).requestRedeem(_shares); + queuedBaseAssets += _baseAssets; - // Record the queued amount, valued in asset terms via fxBASE's nav - _pendingAssets = _baseAssets * FXBASE.nav() / _NAV_TO_ASSET_SCALE; - pendingRedemptions += _pendingAssets; + // Valued in asset terms via fxBASE's nav + return _baseAssets * FXBASE.nav() / _NAV_TO_ASSET_SCALE; } /// @notice Claim the queued redemption from fxBASE once the cooldown passed @@ -90,10 +117,10 @@ contract FxSaveFlexLenderStrategy is CooldownFlexLenderStrategy { /// @return _assetsOut The amount of asset received /// @return _fxusdOut The amount of fxUSD received function claimCooldown() external onlyManagement returns (uint256 _assetsOut, uint256 _fxusdOut) { - require(pendingRedemptions > 0, "!pending"); + require(queuedBaseAssets > 0, "!pending"); // The claim always empties the queue - pendingRedemptions = 0; + queuedBaseAssets = 0; // Claim the whole queued amount uint256 _preAssetBalance = asset.balanceOf(address(this)); diff --git a/src/integrations/InfinifiStrategy.sol b/src/integrations/InfinifiStrategy.sol index 0df34c5..0dc4094 100644 --- a/src/integrations/InfinifiStrategy.sol +++ b/src/integrations/InfinifiStrategy.sol @@ -6,7 +6,7 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol import {IInfiniFiGatewayV1} from "../interfaces/IInfiniFiGatewayV1.sol"; import {IRedeemController} from "../interfaces/IRedeemController.sol"; -import {CooldownFlexLenderStrategy, ERC20, IERC4626} from "./CooldownStrategy.sol"; +import {CooldownFlexLenderStrategy, ERC20, IERC4626, Math} from "./CooldownStrategy.sol"; /// @title Infinifi Flex Lender Strategy /// @author Flex @@ -30,6 +30,13 @@ contract InfinifiFlexLenderStrategy is CooldownFlexLenderStrategy { /// @notice InfiniFi Gateway IInfiniFiGatewayV1 public constant GATEWAY = IInfiniFiGatewayV1(0x3f04b65Ddbd87f9CE0A2e7Eb24d80e7fb87625b5); + // ============================================================================================ + // Storage + // ============================================================================================ + + /// @notice iUSD queued in InfiniFi's redemption controller + uint256 public queuedReceipts; + // ============================================================================================ // Constructor // ============================================================================================ @@ -52,6 +59,17 @@ contract InfinifiFlexLenderStrategy is CooldownFlexLenderStrategy { IUSD.forceApprove(address(GATEWAY), type(uint256).max); } + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @inheritdoc CooldownFlexLenderStrategy + function pendingRedemptions() public view override returns (uint256) { + // siUSD taken in kind plus the queued iUSD, valued as asset + uint256 _receipts = COLLATERAL.convertToAssets(takenInKind) + queuedReceipts; + return _redeemController().receiptToAsset(_receipts); + } + // ============================================================================================ // Cooldown // ============================================================================================ @@ -67,42 +85,46 @@ contract InfinifiFlexLenderStrategy is CooldownFlexLenderStrategy { uint256 _shares, uint256 _minAssetsOut ) external onlyManagement returns (uint256 _assetsOut, uint256 _pendingAssets) { - require(pendingRedemptions == 0, "!pending"); - // Cap the shares by the loose collateral balance _shares = _capToBalance(COLLATERAL, _shares); + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + // siUSD --> iUSD uint256 _iusdAmount = GATEWAY.unstake(address(this), _shares); - uint256 _expectedAssets = _redeemController().receiptToAsset(_iusdAmount); // iUSD --> asset. Anything not redeemed instantly is queued in the redemption controller + IRedeemController _redeemController_ = _redeemController(); uint256 _preBalance = asset.balanceOf(address(this)); + uint256 _preQueued = _redeemController_.totalEnqueuedRedemptions(); GATEWAY.redeem(address(this), _iusdAmount, 0); _assetsOut = asset.balanceOf(address(this)) - _preBalance; // Make sure we got at least the minimum instant amount requested require(_assetsOut >= _minAssetsOut, "shrekt"); - // Record the queued amount - if (_expectedAssets > _assetsOut) pendingRedemptions = _expectedAssets - _assetsOut; - - return (_assetsOut, pendingRedemptions); + // Record the queued iUSD, the queue only grows within our redemption + uint256 _queued = _redeemController_.totalEnqueuedRedemptions() - _preQueued; + queuedReceipts += _queued; + _pendingAssets = _redeemController_.receiptToAsset(_queued); } /// @notice Claim queued redemptions from InfiniFi /// @dev Only callable by management /// @return _assets The amount of asset claimed function claimCooldown() external onlyManagement returns (uint256 _assets) { - require(_redeemController().userPendingClaims(address(this)) > 0, "!claim"); + IRedeemController _redeemController_ = _redeemController(); + require(_redeemController_.userPendingClaims(address(this)) > 0, "!claim"); uint256 _preBalance = asset.balanceOf(address(this)); GATEWAY.claimRedemption(); _assets = asset.balanceOf(address(this)) - _preBalance; require(_assets > 0, "!assets"); - // Clear the claimed amount - pendingRedemptions = _assets >= pendingRedemptions ? 0 : pendingRedemptions - _assets; + // Settle the claimed iUSD, converted back at the controller's rate + uint256 _receipts = _assets * _WAD / _redeemController_.receiptToAsset(_WAD); + queuedReceipts = _receipts >= queuedReceipts ? 0 : queuedReceipts - _receipts; } // ============================================================================================ diff --git a/src/integrations/LidoStrategy.sol b/src/integrations/LidoStrategy.sol index 3546dab..c6a4650 100644 --- a/src/integrations/LidoStrategy.sol +++ b/src/integrations/LidoStrategy.sol @@ -8,7 +8,7 @@ import {ILidoWithdrawalQueue} from "../interfaces/ILidoWithdrawalQueue.sol"; import {IWETH} from "../interfaces/IWETH.sol"; import {IWstETH} from "../interfaces/IWstETH.sol"; -import {CooldownFlexLenderStrategy, ERC20} from "./CooldownStrategy.sol"; +import {CooldownFlexLenderStrategy, ERC20, Math} from "./CooldownStrategy.sol"; /// @title Lido Flex Lender Strategy /// @author Flex @@ -38,13 +38,6 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { /// @notice Curve ETH/stETH pool ICurveStableSwap public constant CURVE_POOL = ICurveStableSwap(0xDC24316b9AE028F1497c275EB9192a3Ea0f67022); - // ============================================================================================ - // Storage - // ============================================================================================ - - /// @notice Asset amount queued per withdrawal request - mapping(uint256 => uint256) public requestAmounts; - // ============================================================================================ // Constructor // ============================================================================================ @@ -69,6 +62,23 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { /// @notice Needed to receive ETH from the withdrawal queue receive() external payable {} + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @inheritdoc CooldownFlexLenderStrategy + function pendingRedemptions() public view override returns (uint256 _pending) { + // wstETH taken in kind, 1:1 with the asset through stETH + _pending = IWstETH(address(COLLATERAL)).getStETHByWstETH(takenInKind); + + // Unclaimed withdrawal requests + ILidoWithdrawalQueue.WithdrawalRequestStatus[] memory _statuses = + WITHDRAWAL_QUEUE.getWithdrawalStatus(WITHDRAWAL_QUEUE.getWithdrawalRequests(address(this))); + for (uint256 i; i < _statuses.length; ++i) { + if (!_statuses[i].isClaimed) _pending += _statuses[i].amountOfStETH; + } + } + // ============================================================================================ // Cooldown // ============================================================================================ @@ -84,6 +94,9 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { // Cap the shares by the loose collateral balance _shares = _capToBalance(COLLATERAL, _shares); + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + // wstETH --> stETH uint256 _pendingAssets = IWstETH(address(COLLATERAL)).unwrap(_shares); @@ -91,10 +104,6 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { uint256[] memory _amounts = new uint256[](1); _amounts[0] = _pendingAssets; _requestId = WITHDRAWAL_QUEUE.requestWithdrawals(_amounts, address(this))[0]; - - // Record the queued amount - requestAmounts[_requestId] = _pendingAssets; - pendingRedemptions += _pendingAssets; } /// @notice Claim a finalized withdrawal request from Lido @@ -104,14 +113,6 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { function claimCooldown( uint256 _requestId ) external onlyManagement returns (uint256 _assets) { - // Make sure the request is one of ours - uint256 _queued = requestAmounts[_requestId]; - require(_queued > 0, "!request"); - - // Delete the request and settle its queued amount - delete requestAmounts[_requestId]; - pendingRedemptions = _queued >= pendingRedemptions ? 0 : pendingRedemptions - _queued; - // Claim the withdrawal and wrap the received ETH uint256 _preBalance = asset.balanceOf(address(this)); WITHDRAWAL_QUEUE.claimWithdrawal(_requestId); @@ -120,6 +121,23 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { require(_assets > 0, "!assets"); } + /// @notice Claim finalized withdrawal requests from Lido, with checkpoint hints + /// @dev Only callable by management + /// @param _requestIds The withdrawal request ids to claim + /// @param _hints The checkpoint hints, from the queue's `findCheckpointHints` + /// @return _assets The amount of asset claimed + function claimCooldown( + uint256[] calldata _requestIds, + uint256[] calldata _hints + ) external onlyManagement returns (uint256 _assets) { + // Claim the withdrawals and wrap the received ETH + uint256 _preBalance = asset.balanceOf(address(this)); + WITHDRAWAL_QUEUE.claimWithdrawals(_requestIds, _hints); + if (address(this).balance > 0) IWETH(WETH).deposit{value: address(this).balance}(); + _assets = asset.balanceOf(address(this)) - _preBalance; + require(_assets > 0, "!assets"); + } + /// @notice Swap loose wstETH to the asset through Curve, skipping the withdrawal queue /// @dev Only callable by management /// @param _shares The amount of wstETH to swap, capped by the loose balance @@ -132,6 +150,9 @@ contract LidoFlexLenderStrategy is CooldownFlexLenderStrategy { // Cap the shares by the loose collateral balance _shares = _capToBalance(COLLATERAL, _shares); + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + // wstETH --> stETH uint256 _stethAmount = IWstETH(address(COLLATERAL)).unwrap(_shares); diff --git a/src/integrations/LockedYvusdStrategy.sol b/src/integrations/LockedYvusdStrategy.sol new file mode 100644 index 0000000..52b948b --- /dev/null +++ b/src/integrations/LockedYvusdStrategy.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.30; + +import {ILockedVault} from "../interfaces/ILockedVault.sol"; + +import {CooldownFlexLenderStrategy, IERC4626, Math} from "./CooldownStrategy.sol"; + +/// @title Locked yvUSD Flex Lender Strategy +/// @author Flex +/// @notice Flex Lender Strategy for Locked yvUSD collateral markets. Collateral taken in kind from +/// redemption auctions is unwound back to the asset through Locked yvUSD's cooldown +contract LockedYvusdFlexLenderStrategy is CooldownFlexLenderStrategy { + + // ============================================================================================ + // Constants + // ============================================================================================ + + /// @notice USDC token + address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; + + /// @notice yvUSD vault, the collateral's asset + IERC4626 public constant YVUSD = IERC4626(0x696d02Db93291651ED510704c9b286841d506987); + + // ============================================================================================ + // Constructor + // ============================================================================================ + + /// @notice Constructor + /// @param _lender The address of the Lender contract + /// @param _exitRouter The address of the exit router + /// @param _name The name of the strategy + constructor( + address _lender, + address _exitRouter, + string memory _name + ) CooldownFlexLenderStrategy(USDC, _lender, _exitRouter, _name) { + // Make sure the collateral (Locked yvUSD) unwraps to yvUSD + require(COLLATERAL.asset() == address(YVUSD), "!yvusd"); + } + + // ============================================================================================ + // Public view functions + // ============================================================================================ + + /// @inheritdoc CooldownFlexLenderStrategy + function pendingRedemptions() public view override returns (uint256) { + // Locked yvUSD --> yvUSD --> asset + return YVUSD.convertToAssets(COLLATERAL.convertToAssets(takenInKind)); + } + + // ============================================================================================ + // Cooldown + // ============================================================================================ + + /// @notice Start the cooldown on loose Locked yvUSD, replacing any cooldown in progress + /// @dev Only callable by management + /// @dev The withdrawal window opens after `cooldownDuration` and lasts `withdrawalWindow`, + /// missing it means starting over + /// @dev Calling while a cooldown is in progress restarts its timer + /// @param _shares The amount of Locked yvUSD to unwind, capped by the loose balance + /// @return The amount of asset the cooled shares are worth + function initiateCooldown( + uint256 _shares + ) external onlyManagement returns (uint256) { + // Cap the shares by the collateral balance + _shares = _capToBalance(COLLATERAL, _shares); + + // Start the cooldown, replacing any in progress + ILockedVault(address(COLLATERAL)).startCooldown(_shares); + + // Locked yvUSD --> yvUSD --> asset + return YVUSD.convertToAssets(COLLATERAL.convertToAssets(_shares)); + } + + /// @notice Redeem the cooled Locked yvUSD for the asset, within the withdrawal window + /// @dev Only callable by management + /// @param _minOut Minimum amount of asset to receive + /// @return _assets The amount of asset received + function claimCooldown( + uint256 _minOut + ) external onlyManagement returns (uint256 _assets) { + // Only the cooled shares are redeemable, and only within the window + uint256 _shares = COLLATERAL.maxRedeem(address(this)); + + // Consume the collateral taken in kind variable + takenInKind -= Math.min(_shares, takenInKind); + + // Locked yvUSD --> yvUSD --> asset + uint256 _yvusdAmount = COLLATERAL.redeem(_shares, address(this), address(this)); + _assets = YVUSD.redeem(_yvusdAmount, address(this), address(this)); + require(_assets >= _minOut, "shrekt"); + } + +} diff --git a/src/interfaces/IAvantMinting.sol b/src/interfaces/IAvantMinting.sol new file mode 100644 index 0000000..8a5bc2b --- /dev/null +++ b/src/interfaces/IAvantMinting.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.30; + +interface IAvantMinting { + + function setDelegatedSigner( + address _delegateTo + ) external; + +} diff --git a/src/interfaces/ICooldownStrategy.sol b/src/interfaces/ICooldownStrategy.sol index c6642d1..392e48c 100644 --- a/src/interfaces/ICooldownStrategy.sol +++ b/src/interfaces/ICooldownStrategy.sol @@ -11,8 +11,22 @@ interface ICooldownStrategy is IStrategy { function COLLATERAL() external view returns (address); + function PENDING_DUST() external view returns (uint256); + function pendingRedemptions() external view returns (uint256); + function ignorePending() external view returns (bool); + + function takenInKind() external view returns (uint256); + + // ============================================================================================ + // Management functions + // ============================================================================================ + + function setIgnorePending( + bool _ignorePending + ) external; + // ============================================================================================ // Cooldown // ============================================================================================ @@ -22,6 +36,4 @@ interface ICooldownStrategy is IStrategy { uint256 _minOut ) external returns (uint256); - function zeroPendingRedemptions() external; - } diff --git a/src/interfaces/ILidoWithdrawalQueue.sol b/src/interfaces/ILidoWithdrawalQueue.sol index 6a2090f..2a7b8b5 100644 --- a/src/interfaces/ILidoWithdrawalQueue.sol +++ b/src/interfaces/ILidoWithdrawalQueue.sol @@ -3,6 +3,23 @@ pragma solidity 0.8.30; interface ILidoWithdrawalQueue { + struct WithdrawalRequestStatus { + uint256 amountOfStETH; + uint256 amountOfShares; + address owner; + uint256 timestamp; + bool isFinalized; + bool isClaimed; + } + + function getWithdrawalRequests( + address _owner + ) external view returns (uint256[] memory); + + function getWithdrawalStatus( + uint256[] calldata _requestIds + ) external view returns (WithdrawalRequestStatus[] memory); + function requestWithdrawals( uint256[] calldata _amounts, address _owner @@ -12,4 +29,9 @@ interface ILidoWithdrawalQueue { uint256 _requestId ) external; + function claimWithdrawals( + uint256[] calldata _requestIds, + uint256[] calldata _hints + ) external; + } diff --git a/src/interfaces/ILockedVault.sol b/src/interfaces/ILockedVault.sol new file mode 100644 index 0000000..1abd08d --- /dev/null +++ b/src/interfaces/ILockedVault.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.30; + +interface ILockedVault { + + function startCooldown( + uint256 _shares + ) external; + + function getCooldownStatus( + address _user + ) external view returns (uint256 _cooldownEnd, uint256 _windowEnd, uint256 _shares); + + function cooldownDuration() external view returns (uint256); + + function withdrawalWindow() external view returns (uint256); + +} diff --git a/src/interfaces/IRedeemController.sol b/src/interfaces/IRedeemController.sol index e32cc6d..d51832b 100644 --- a/src/interfaces/IRedeemController.sol +++ b/src/interfaces/IRedeemController.sol @@ -11,4 +11,6 @@ interface IRedeemController { address _user ) external view returns (uint256); + function totalEnqueuedRedemptions() external view returns (uint256); + } diff --git a/src/interfaces/IStakedAvant.sol b/src/interfaces/IStakedAvant.sol new file mode 100644 index 0000000..ea8468f --- /dev/null +++ b/src/interfaces/IStakedAvant.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.30; + +interface IStakedAvant { + + function cooldownShares( + uint256 _shares + ) external returns (uint256 _assets); + + function unstake( + address _receiver + ) external; + + function cooldowns( + address _user + ) external view returns (uint104 _cooldownEnd, uint152 _underlyingAmount); + + function cooldownDuration() external view returns (uint24); + +} diff --git a/src/interfaces/IWstETH.sol b/src/interfaces/IWstETH.sol index d8130fc..636a2df 100644 --- a/src/interfaces/IWstETH.sol +++ b/src/interfaces/IWstETH.sol @@ -9,4 +9,8 @@ interface IWstETH { function stETH() external view returns (address); + function getStETHByWstETH( + uint256 _wstETHAmount + ) external view returns (uint256); + } diff --git a/test/Base.sol b/test/Base.sol index 9d70ef0..91a0abb 100644 --- a/test/Base.sol +++ b/test/Base.sol @@ -53,7 +53,7 @@ contract Base is DeployStrategyFactory, Test { isTest = true; // Create fork - uint256 _blockNumber = 25_043_786; // cache state for faster tests + uint256 _blockNumber = 26_010_000; // cache state for faster tests vm.selectFork(vm.createFork(vm.envString("ETH_RPC_URL"), _blockNumber)); // Deploy the StrategyFactory diff --git a/test/integrations/AvantStrategy.t.sol b/test/integrations/AvantStrategy.t.sol new file mode 100644 index 0000000..ea242cd --- /dev/null +++ b/test/integrations/AvantStrategy.t.sol @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.30; + +import {IMorphoOracleFactory} from "../interfaces/IMorphoOracleFactory.sol"; + +import {AvantFlexLenderStrategy} from "../../src/integrations/AvantStrategy.sol"; +import {IStakedAvant} from "../../src/interfaces/IStakedAvant.sol"; + +import "./CooldownBase.sol"; + +contract AvantStrategyTests is CooldownStrategyTests { + + AvantFlexLenderStrategy public avantStrategy; + + // Tokens + address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; + address public constant AVETH = 0x9469470C9878bf3d6d0604831d9A3A366156f7EE; + address public constant SAVETH = 0xDA06eE2dACF9245Aa80072a4407deBDea0D7e341; + + // Avant minting contract + address public constant AVANT_MINTING = 0x09becF6E5e297825D19aA14eD6081A03524532D7; + + // savETH/WETH Morpho oracle factory + address public constant MORPHO_ORACLE_FACTORY = 0x3A7bB36Ee3f3eE32A60e9f2b33c1e5f2E83ad766; + + event DelegatedSignerInitiated(address indexed signer, address indexed delegator); + + function setUp() public override { + Base.setUp(); + + // Stay within savETH's avETH backing + minFuzzAmount = 1 ether; + maxFuzzAmount = 500 ether; + } + + // ============================================================================================ + // Deployment hooks + // ============================================================================================ + + /// @dev Deploy a local v2 savETH/WETH market + function _deployLender() internal override returns (address) { + // savETH/WETH price oracle (vault conversion only, avETH assumed 1:1 with WETH) + address _morphoOracle = IMorphoOracleFactory(MORPHO_ORACLE_FACTORY) + .createMorphoChainlinkOracleV2( + SAVETH, // baseVault: savETH + 1e18, // baseVaultConversionSample + address(0), // baseFeed1 + address(0), // baseFeed2 + 18, // baseTokenDecimals: avETH + address(0), // quoteVault + 1, // quoteVaultConversionSample + address(0), // quoteFeed1 + address(0), // quoteFeed2 + 18, // quoteTokenDecimals: WETH + bytes32(uint256(420)) // salt, a salt 0 oracle already exists + ); + address _priceOracle = deployCode("lib/flex-contracts/out/morpho_oracle.vy/morpho_oracle.json", abi.encode(_morphoOracle, WETH, SAVETH)); + + return deployFlexMarket(WETH, SAVETH, _priceOracle, 0.1e18); // 0.1 WETH minimum debt + } + + /// @dev Deploy the Avant strategy wrapping the local market's Lender + function _deployStrategy() internal override returns (IStrategy) { + avantStrategy = new AvantFlexLenderStrategy(address(LENDER), address(exitRouter), "Flex savETH/WETH Lender"); + cooldownStrategy = ICooldownStrategy(address(avantStrategy)); + IStrategy _strategy = IStrategy(address(avantStrategy)); + _strategy.setKeeper(keeper); + _strategy.setPerformanceFeeRecipient(performanceFeeRecipient); + _strategy.setPendingManagement(management); + return _strategy; + } + + // ============================================================================================ + // Tests + // ============================================================================================ + + function test_setup() public view { + assertEq(address(avantStrategy.COLLATERAL()), SAVETH, "E0"); + assertEq(address(avantStrategy.AVETH()), AVETH, "E1"); + assertEq(avantStrategy.pendingRedemptions(), 0, "E2"); + assertEq(address(asset), WETH, "E3"); + assertEq(address(LENDER.TROVE_MANAGER().collateral_token()), SAVETH, "E4"); + assertEq(ERC20(AVETH).allowance(address(avantStrategy), AVANT_MINTING), type(uint256).max, "E5"); + } + + function test_constructor_wrongCollateral_reverts() public { + // The live yvWETH-2/WETH Lender's collateral does not unstake to avETH + address _yvwethLender = 0x0d57098e501D68905fC4B0A3397f7D4Aa4889E36; + vm.expectRevert("!aveth"); + new AvantFlexLenderStrategy(_yvwethLender, address(exitRouter), "nope"); + } + + function test_constructor_startingPriceBuffer_reverts() public { + // A market with a starting price buffer cannot be wrapped. Reuse the existing oracle, the + // Morpho oracle factory reverts on a same-salt redeploy + startingPriceBuffer = 1e18 + 1e15; // 100.1% + address _oracle = ITroveManager(address(LENDER.TROVE_MANAGER())).price_oracle(); + address _lender = deployFlexMarket(WETH, SAVETH, _oracle, 0.1e18); + vm.expectRevert("!buffer"); + new AvantFlexLenderStrategy(_lender, address(exitRouter), "nope"); + } + + function test_initiateCooldown( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + uint256 _loose = _freeInKind(_amount); + + // Start cooling all the loose savETH + vm.prank(management); + uint256 _cooling = avantStrategy.initiateCooldown(type(uint256).max); + + // The shares are gone into the silo, their avETH value is cooling and pending + assertGt(_loose, 0, "E0"); + assertEq(ERC20(SAVETH).balanceOf(address(strategy)), 0, "E1"); + (uint104 _cooldownEnd, uint152 _siloed) = IStakedAvant(SAVETH).cooldowns(address(strategy)); + assertEq(_siloed, _cooling, "E2"); + assertEq(_cooldownEnd, block.timestamp + IStakedAvant(SAVETH).cooldownDuration(), "E3"); + assertEq(avantStrategy.pendingRedemptions(), _cooling, "E4"); + assertApproxEqRel(_cooling, _amount, 1e16, "E5"); // 1% + + // Reports are blocked until the cooldown is claimed and redeemed + vm.prank(keeper); + vm.expectRevert("!cooldown"); + strategy.report(); + } + + function test_initiateCooldown_restarts( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + uint256 _loose = _freeInKind(_amount); + uint256 _cooldownDuration = IStakedAvant(SAVETH).cooldownDuration(); + + // Cool half, wait half the cooldown, cool the rest. The whole amount restarts the timer + vm.startPrank(management); + uint256 _firstCooling = avantStrategy.initiateCooldown(_loose / 2); + skip(_cooldownDuration / 2); + uint256 _secondCooling = avantStrategy.initiateCooldown(type(uint256).max); + vm.stopPrank(); + + (uint104 _cooldownEnd, uint152 _siloed) = IStakedAvant(SAVETH).cooldowns(address(strategy)); + assertEq(_siloed, _firstCooling + _secondCooling, "E0"); + assertEq(_cooldownEnd, block.timestamp + _cooldownDuration, "E1"); + assertEq(avantStrategy.pendingRedemptions(), _siloed, "E2"); + } + + function test_claimCooldown( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + vm.prank(management); + uint256 _cooling = avantStrategy.initiateCooldown(type(uint256).max); + + // Wait out the cooldown and unstake + skip(IStakedAvant(SAVETH).cooldownDuration() + 1); + vm.prank(management); + uint256 _avethOut = avantStrategy.claimCooldown(); + + // The avETH is loose, still pending until Avant redeems it + assertEq(_avethOut, _cooling, "E0"); + assertEq(ERC20(AVETH).balanceOf(address(strategy)), _avethOut, "E1"); + (, uint152 _siloed) = IStakedAvant(SAVETH).cooldowns(address(strategy)); + assertEq(_siloed, 0, "E2"); + assertEq(avantStrategy.pendingRedemptions(), _avethOut, "E3"); + vm.prank(keeper); + vm.expectRevert("!cooldown"); + strategy.report(); + + // Avant redeems the avETH for the asset 1:1, off-chain + deal(AVETH, address(strategy), 0); + airdrop(asset, address(strategy), _avethOut); + assertEq(avantStrategy.pendingRedemptions(), 0, "E4"); + + // Reporting works again. Allow a loss, since the in-kind take settled below par + vm.prank(management); + strategy.setLossLimitRatio(MAX_BPS - 1); + vm.prank(keeper); + strategy.report(); + } + + function test_claimCooldown_beforeCooldown_reverts( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + vm.startPrank(management); + avantStrategy.initiateCooldown(type(uint256).max); + + // Nothing is claimable before the cooldown ends + vm.expectRevert("!claim"); + avantStrategy.claimCooldown(); + vm.stopPrank(); + } + + function test_claimCooldown_nothingCooling_reverts() public { + vm.prank(management); + vm.expectRevert("!claim"); + avantStrategy.claimCooldown(); + } + + function test_setDelegatedSigner( + address _signer + ) public { + vm.assume(_signer != address(0)); + + // The delegation is initiated on the minting contract, for the signer to confirm + vm.expectEmit(true, true, false, false, AVANT_MINTING); + emit DelegatedSignerInitiated(_signer, address(strategy)); + vm.prank(management); + avantStrategy.setDelegatedSigner(_signer); + } + + function test_setDelegatedSigner_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + avantStrategy.setDelegatedSigner(management); + } + + function test_initiateCooldown_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + avantStrategy.initiateCooldown(1); + } + + function test_claimCooldown_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + avantStrategy.claimCooldown(); + } + +} diff --git a/test/integrations/CooldownBase.sol b/test/integrations/CooldownBase.sol index 7f4f9e8..5b7ab48 100644 --- a/test/integrations/CooldownBase.sol +++ b/test/integrations/CooldownBase.sol @@ -7,8 +7,6 @@ import "../Base.sol"; abstract contract CooldownStrategyTests is Base { - using stdStorage for StdStorage; - // The strategy under test, set in `_deployStrategy` ICooldownStrategy public cooldownStrategy; @@ -59,35 +57,69 @@ abstract contract CooldownStrategyTests is Base { assertEq(LENDER.balanceOf(address(strategy)), 0, "E2"); } + // Collateral taken in kind is pending from the take on, so reports are blocked before any + // cooldown is even started function test_report_blockedWhilePending( - uint256 _pending + uint256 _amount ) public { - _pending = bound(_pending, 1, type(uint128).max); - stdstore.target(address(cooldownStrategy)).sig("pendingRedemptions()").checked_write(_pending); + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + assertApproxEqRel(cooldownStrategy.pendingRedemptions(), _amount, 1e16, "E0"); // 1% + assertEq(cooldownStrategy.takenInKind(), _collateral().balanceOf(address(strategy)), "E1"); vm.prank(keeper); vm.expectRevert("!cooldown"); strategy.report(); } - function test_zeroPendingRedemptions( - uint256 _pending + // Donated collateral was not taken in kind, so it is not pending and cannot block reports + function test_donation_notPending( + uint256 _amount ) public { - _pending = bound(_pending, 1, type(uint128).max); - stdstore.target(address(cooldownStrategy)).sig("pendingRedemptions()").checked_write(_pending); + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); - vm.prank(management); - cooldownStrategy.zeroPendingRedemptions(); - assertEq(cooldownStrategy.pendingRedemptions(), 0, "E0"); + airdrop(_collateral(), address(strategy), _amount); + assertEq(cooldownStrategy.takenInKind(), 0, "E0"); + assertEq(cooldownStrategy.pendingRedemptions(), 0, "E1"); + + vm.prank(keeper); + strategy.report(); + } + + function test_pendingDust() public view { + assertEq(cooldownStrategy.PENDING_DUST(), 10 ** (asset.decimals() / 2), "E0"); + } + + function test_setIgnorePending( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + // Reports are blocked until management ignores the pending redemptions + vm.prank(keeper); + vm.expectRevert("!cooldown"); + strategy.report(); + + vm.startPrank(management); + cooldownStrategy.setIgnorePending(true); + strategy.setDoHealthCheck(false); // the in-kind collateral is not counted, so the report books a loss + vm.stopPrank(); + assertTrue(cooldownStrategy.ignorePending(), "E0"); + + vm.prank(keeper); + strategy.report(); } - function test_zeroPendingRedemptions_wrongCaller( + function test_setIgnorePending_wrongCaller( address _wrongCaller ) public { vm.assume(_wrongCaller != management); vm.prank(_wrongCaller); vm.expectRevert("!management"); - cooldownStrategy.zeroPendingRedemptions(); + cooldownStrategy.setIgnorePending(true); } // ============================================================================================ diff --git a/test/integrations/FxSaveStrategy.t.sol b/test/integrations/FxSaveStrategy.t.sol index 009a3ec..2c377f1 100644 --- a/test/integrations/FxSaveStrategy.t.sol +++ b/test/integrations/FxSaveStrategy.t.sol @@ -112,9 +112,9 @@ contract FxSaveStrategyTests is CooldownStrategyTests { vm.prank(management); (uint256 _assetsOut, uint256 _fxusdOut) = fxSaveStrategy.claimCooldown(); - // The claim is worth ~ the queued amount, valuing fxUSD at $1 + // The claim is worth ~ the queued amount, valuing fxUSD at $1. The fxUSD leg stays pending assertApproxEqRel(_assetsOut + _fxusdOut / 1e12, _pending, 1e16, "E1"); // 1% - assertEq(fxSaveStrategy.pendingRedemptions(), 0, "E2"); + assertEq(fxSaveStrategy.pendingRedemptions(), _fxusdOut / 1e12, "E2"); // Swap any fxUSD leg back to the asset if (_fxusdOut > 0) { @@ -124,6 +124,7 @@ contract FxSaveStrategyTests is CooldownStrategyTests { assertEq(asset.balanceOf(address(strategy)), _balanceBefore + _swapped, "E3"); assertApproxEqRel(_swapped, _fxusdOut / 1e12, 2e16, "E4"); // 2% assertEq(ERC20(FXUSD).balanceOf(address(strategy)), 0, "E5"); + assertEq(fxSaveStrategy.pendingRedemptions(), 0, "E6"); } } diff --git a/test/integrations/InfinifiStrategy.t.sol b/test/integrations/InfinifiStrategy.t.sol index a2fb593..d6db9de 100644 --- a/test/integrations/InfinifiStrategy.t.sol +++ b/test/integrations/InfinifiStrategy.t.sol @@ -11,8 +11,6 @@ import "./CooldownBase.sol"; contract InfinifiStrategyTests is CooldownStrategyTests { - using stdStorage for StdStorage; - InfinifiFlexLenderStrategy public infinifiStrategy; // Tokens @@ -107,17 +105,6 @@ contract InfinifiStrategyTests is CooldownStrategyTests { assertEq(infinifiStrategy.pendingRedemptions(), _pending, "E3"); } - function test_initiateCooldown_revertsWhileAlreadyPending( - uint256 _pending - ) public { - _pending = bound(_pending, 1, type(uint128).max); - stdstore.target(address(infinifiStrategy)).sig("pendingRedemptions()").checked_write(_pending); - - vm.prank(management); - vm.expectRevert("!pending"); - infinifiStrategy.initiateCooldown(type(uint256).max, 0); - } - function test_initiateCooldown_minInstant( uint256 _amount ) public { diff --git a/test/integrations/LidoStrategy.t.sol b/test/integrations/LidoStrategy.t.sol index 180f9d1..b78e2d7 100644 --- a/test/integrations/LidoStrategy.t.sol +++ b/test/integrations/LidoStrategy.t.sol @@ -83,7 +83,7 @@ contract LidoStrategyTests is CooldownStrategyTests { uint256 _loose = _freeInKind(_amount); - // Queue two withdrawal requests, the pending amount accumulates + // Queue two withdrawal requests. The pending amount only moves from loose to queued vm.startPrank(management); uint256 _firstId = lidoStrategy.initiateCooldown(_loose / 2); uint256 _firstPending = lidoStrategy.pendingRedemptions(); @@ -92,7 +92,7 @@ contract LidoStrategyTests is CooldownStrategyTests { assertGt(_firstPending, 0, "E0"); assertGt(_secondId, _firstId, "E1"); - assertGt(lidoStrategy.pendingRedemptions(), _firstPending, "E2"); + assertApproxEqAbs(lidoStrategy.pendingRedemptions(), _firstPending, 10, "E2"); assertEq(ERC20(WSTETH).balanceOf(address(strategy)), 0, "E3"); // The queued stETH is worth ~ the freed amount (1:1 redemption) @@ -123,7 +123,6 @@ contract LidoStrategyTests is CooldownStrategyTests { assertEq(asset.balanceOf(address(strategy)), _balanceBefore + _claimed, "E1"); assertApproxEqRel(_claimed, _pending, 1e15, "E2"); // 0.1% assertEq(lidoStrategy.pendingRedemptions(), 0, "E3"); - assertEq(lidoStrategy.requestAmounts(_requestId), 0, "E4"); } function test_initiateCooldown_wrongCaller( @@ -139,10 +138,51 @@ contract LidoStrategyTests is CooldownStrategyTests { uint256 _requestId ) public { vm.prank(management); - vm.expectRevert("!request"); + vm.expectRevert(); lidoStrategy.claimCooldown(_requestId); } + function test_claimCooldown_withHints( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + // Queue the withdrawal + vm.prank(management); + uint256 _requestId = lidoStrategy.initiateCooldown(type(uint256).max); + uint256 _pending = lidoStrategy.pendingRedemptions(); + assertGt(_pending, 0, "E0"); + + // Finalize the request as Lido + _finalizeLidoRequest(_requestId); + + // Find the checkpoint hints, as an off-chain caller would + ILidoQueue _queue = ILidoQueue(address(lidoStrategy.WITHDRAWAL_QUEUE())); + uint256[] memory _requestIds = new uint256[](1); + _requestIds[0] = _requestId; + uint256[] memory _hints = _queue.findCheckpointHints(_requestIds, 1, _queue.getLastCheckpointIndex()); + + // Claim the withdrawal with the hints + uint256 _balanceBefore = asset.balanceOf(address(strategy)); + vm.prank(management); + uint256 _claimed = lidoStrategy.claimCooldown(_requestIds, _hints); + + assertEq(asset.balanceOf(address(strategy)), _balanceBefore + _claimed, "E1"); + assertApproxEqRel(_claimed, _pending, 1e15, "E2"); // 0.1% + assertEq(lidoStrategy.pendingRedemptions(), 0, "E3"); + } + + function test_claimCooldown_withHints_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + lidoStrategy.claimCooldown(new uint256[](0), new uint256[](0)); + } + function test_claimCooldown_wrongCaller( address _wrongCaller ) public { diff --git a/test/integrations/LockedYvusdStrategy.t.sol b/test/integrations/LockedYvusdStrategy.t.sol new file mode 100644 index 0000000..caf0e0f --- /dev/null +++ b/test/integrations/LockedYvusdStrategy.t.sol @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.30; + +import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; + +import {LockedYvusdFlexLenderStrategy} from "../../src/integrations/LockedYvusdStrategy.sol"; +import {ILockedVault} from "../../src/interfaces/ILockedVault.sol"; + +import "./CooldownBase.sol"; + +contract LockedYvusdStrategyTests is CooldownStrategyTests { + + LockedYvusdFlexLenderStrategy public lockedYvusdStrategy; + + // Tokens + address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; + address public constant YVUSD = 0x696d02Db93291651ED510704c9b286841d506987; + address public constant LOCKED_YVUSD = 0xAaaFEa48472f77563961Cdb53291DEDfB46F9040; + + function setUp() public override { + Base.setUp(); + } + + // ============================================================================================ + // Deployment hooks + // ============================================================================================ + + /// @dev Deploy a local v2 Locked yvUSD/USDC market + function _deployLender() internal override returns (address) { + address _priceOracle = address(new LockedYvusdOracle()); + return deployFlexMarket(USDC, LOCKED_YVUSD, _priceOracle, 500e6); // 500 USDC minimum debt + } + + /// @dev Deploy the Locked yvUSD strategy wrapping the local market's Lender + function _deployStrategy() internal override returns (IStrategy) { + lockedYvusdStrategy = new LockedYvusdFlexLenderStrategy(address(LENDER), address(exitRouter), "Flex Locked yvUSD/USDC Lender"); + cooldownStrategy = ICooldownStrategy(address(lockedYvusdStrategy)); + IStrategy _strategy = IStrategy(address(lockedYvusdStrategy)); + _strategy.setKeeper(keeper); + _strategy.setPerformanceFeeRecipient(performanceFeeRecipient); + _strategy.setPendingManagement(management); + return _strategy; + } + + // ============================================================================================ + // Tests + // ============================================================================================ + + function test_setup() public view { + assertEq(address(lockedYvusdStrategy.COLLATERAL()), LOCKED_YVUSD, "E0"); + assertEq(address(lockedYvusdStrategy.YVUSD()), YVUSD, "E1"); + assertEq(lockedYvusdStrategy.pendingRedemptions(), 0, "E2"); + assertEq(address(asset), USDC, "E3"); + assertEq(address(LENDER.TROVE_MANAGER().collateral_token()), LOCKED_YVUSD, "E4"); + } + + function test_constructor_wrongCollateral_reverts() public { + // The live yvUSD/USDC Lender's collateral does not unwrap to yvUSD + address _yvusdLender = 0xA967FcDb8a2bEF38caaB6131169c9D45be550Db0; + vm.expectRevert("!yvusd"); + new LockedYvusdFlexLenderStrategy(_yvusdLender, address(exitRouter), "nope"); + } + + function test_constructor_startingPriceBuffer_reverts() public { + // A market with a starting price buffer cannot be wrapped + startingPriceBuffer = 1e18 + 1e15; // 100.1% + address _oracle = ITroveManager(address(LENDER.TROVE_MANAGER())).price_oracle(); + address _lender = deployFlexMarket(USDC, LOCKED_YVUSD, _oracle, 500e6); + vm.expectRevert("!buffer"); + new LockedYvusdFlexLenderStrategy(_lender, address(exitRouter), "nope"); + } + + function test_initiateCooldown( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + uint256 _loose = _freeInKind(_amount); + + // Start cooling all the loose Locked yvUSD + vm.prank(management); + uint256 _pending = lockedYvusdStrategy.initiateCooldown(type(uint256).max); + + // The shares stay put while cooling, and their asset value is pending + assertGt(_loose, 0, "E0"); + assertEq(ERC20(LOCKED_YVUSD).balanceOf(address(strategy)), _loose, "E1"); + (,, uint256 _cooling) = ILockedVault(LOCKED_YVUSD).getCooldownStatus(address(strategy)); + assertEq(_cooling, _loose, "E2"); + assertEq(_pending, IERC4626(YVUSD).convertToAssets(IERC4626(LOCKED_YVUSD).convertToAssets(_loose)), "E3"); + assertEq(lockedYvusdStrategy.pendingRedemptions(), _pending, "E4"); + assertApproxEqRel(_pending, _amount, 1e16, "E5"); // 1% + + // Reports are blocked until the cooldown is claimed + vm.prank(keeper); + vm.expectRevert("!cooldown"); + strategy.report(); + } + + function test_initiateCooldown_replaces( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + uint256 _loose = _freeInKind(_amount); + + // A second cooldown replaces the first, on the vault and in the accounting + vm.startPrank(management); + uint256 _firstPending = lockedYvusdStrategy.initiateCooldown(_loose / 2); + uint256 _pending = lockedYvusdStrategy.initiateCooldown(type(uint256).max); + vm.stopPrank(); + + (,, uint256 _cooling) = ILockedVault(LOCKED_YVUSD).getCooldownStatus(address(strategy)); + assertEq(_cooling, _loose, "E0"); + assertGt(_pending, _firstPending, "E1"); + assertEq(lockedYvusdStrategy.pendingRedemptions(), _pending, "E2"); + } + + function test_initiateCooldown_replacesPartial( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + uint256 _loose = _freeInKind(_amount); + uint256 _pendingBefore = lockedYvusdStrategy.pendingRedemptions(); + + // Starting the same partial cooldown twice puts the first half back loose, nothing goes missing + vm.startPrank(management); + lockedYvusdStrategy.initiateCooldown(_loose / 2); + uint256 _pending = lockedYvusdStrategy.initiateCooldown(_loose / 2); + vm.stopPrank(); + + assertEq(lockedYvusdStrategy.pendingRedemptions(), _pendingBefore, "E0"); + + // Wait out the cooldown and claim the cooling half + skip(ILockedVault(LOCKED_YVUSD).cooldownDuration() + 1); + vm.prank(management); + uint256 _claimed = lockedYvusdStrategy.claimCooldown(0); + assertApproxEqRel(_claimed, _pending, 1e15, "E1"); // 0.1% + + // The other half is still pending and blocks reports + assertEq(lockedYvusdStrategy.takenInKind(), ERC20(LOCKED_YVUSD).balanceOf(address(strategy)), "E2"); + assertApproxEqRel(lockedYvusdStrategy.pendingRedemptions(), _pending, 1e15, "E3"); // 0.1% + vm.prank(keeper); + vm.expectRevert("!cooldown"); + strategy.report(); + } + + function test_claimCooldown( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + vm.prank(management); + uint256 _pending = lockedYvusdStrategy.initiateCooldown(type(uint256).max); + + // Wait out the cooldown + skip(ILockedVault(LOCKED_YVUSD).cooldownDuration() + 1); + + // Claim, unwinding all the way to the asset + uint256 _balanceBefore = asset.balanceOf(address(strategy)); + vm.prank(management); + uint256 _claimed = lockedYvusdStrategy.claimCooldown(0); + + assertEq(asset.balanceOf(address(strategy)), _balanceBefore + _claimed, "E0"); + assertApproxEqRel(_claimed, _pending, 1e15, "E1"); // 0.1% + assertLe(ERC20(LOCKED_YVUSD).balanceOf(address(strategy)), 1, "E2"); // `maxRedeem` rounds down a wei + assertEq(ERC20(YVUSD).balanceOf(address(strategy)), 0, "E3"); + assertLe(lockedYvusdStrategy.pendingRedemptions(), 1e3, "E4"); // dust + + // Reporting works again. Allow a loss, since the in-kind take settled below par + vm.prank(management); + strategy.setLossLimitRatio(MAX_BPS - 1); + vm.prank(keeper); + strategy.report(); + } + + function test_claimCooldown_beforeCooldown_reverts( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + vm.startPrank(management); + lockedYvusdStrategy.initiateCooldown(type(uint256).max); + + // Nothing is redeemable before the cooldown ends + vm.expectRevert("ZERO_ASSETS"); + lockedYvusdStrategy.claimCooldown(0); + vm.stopPrank(); + } + + function test_claimCooldown_afterWindow_reverts( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + ILockedVault _lockedYvusd = ILockedVault(LOCKED_YVUSD); + uint256 _cooldownDuration = _lockedYvusd.cooldownDuration(); + uint256 _withdrawalWindow = _lockedYvusd.withdrawalWindow(); + + vm.prank(management); + lockedYvusdStrategy.initiateCooldown(type(uint256).max); + + // Missing the window means nothing is redeemable + skip(_cooldownDuration + _withdrawalWindow + 1); + vm.prank(management); + vm.expectRevert("ZERO_ASSETS"); + lockedYvusdStrategy.claimCooldown(0); + + // Starting over works + vm.prank(management); + lockedYvusdStrategy.initiateCooldown(type(uint256).max); + skip(_cooldownDuration + 1); + vm.prank(management); + uint256 _claimed = lockedYvusdStrategy.claimCooldown(0); + assertGt(_claimed, 0, "E0"); + } + + function test_claimCooldown_slippage_reverts( + uint256 _amount + ) public { + _amount = bound(_amount, minFuzzAmount, maxFuzzAmount); + + _freeInKind(_amount); + + vm.prank(management); + lockedYvusdStrategy.initiateCooldown(type(uint256).max); + skip(ILockedVault(LOCKED_YVUSD).cooldownDuration() + 1); + + vm.prank(management); + vm.expectRevert("shrekt"); + lockedYvusdStrategy.claimCooldown(type(uint256).max); + } + + function test_initiateCooldown_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + lockedYvusdStrategy.initiateCooldown(1); + } + + function test_claimCooldown_wrongCaller( + address _wrongCaller + ) public { + vm.assume(_wrongCaller != management); + vm.prank(_wrongCaller); + vm.expectRevert("!management"); + lockedYvusdStrategy.claimCooldown(0); + } + +} + +/// @dev Prices Locked yvUSD in USDC through both vault exchange rates, in the market's +/// 10^(36 + usdc_decimals - locked_yvusd_decimals) format +contract LockedYvusdOracle { + + IERC4626 internal constant _YVUSD = IERC4626(0x696d02Db93291651ED510704c9b286841d506987); + IERC4626 internal constant _LOCKED_YVUSD = IERC4626(0xAaaFEa48472f77563961Cdb53291DEDfB46F9040); + + function get_price() external view returns (uint256) { + return _price() * 1e30; + } + + function get_price( + bool _scaled + ) external view returns (uint256) { + return _scaled ? _price() * 1e30 : _price() * 1e12; + } + + /// @dev USDC per Locked yvUSD share, both 6 decimals + function _price() internal view returns (uint256) { + return _YVUSD.convertToAssets(_LOCKED_YVUSD.convertToAssets(1e6)); + } + +} diff --git a/test/interfaces/ILidoQueue.sol b/test/interfaces/ILidoQueue.sol index 5145f8b..63e4e4b 100644 --- a/test/interfaces/ILidoQueue.sol +++ b/test/interfaces/ILidoQueue.sol @@ -13,4 +13,12 @@ interface ILidoQueue { uint256 _maxShareRate ) external view returns (uint256 ethToLock, uint256 sharesToBurn); + function findCheckpointHints( + uint256[] calldata _requestIds, + uint256 _firstIndex, + uint256 _lastIndex + ) external view returns (uint256[] memory hintIds); + + function getLastCheckpointIndex() external view returns (uint256); + }