From fbc180dbf366c93269cc7c383bdb34e05b0e1091 Mon Sep 17 00:00:00 2001 From: kopy-kat Date: Tue, 25 Jun 2024 11:37:30 +0100 Subject: [PATCH 1/3] feat: add safe deployment script --- .../Deploy.s.sol/84532/run-1718275951.json | 103 +++++++ broadcast/Deploy.s.sol/84532/run-latest.json | 103 +++++++ .../11155111/run-1716998920.json | 39 +++ .../11155111/run-1716999054.json | 39 +++ .../11155111/run-1717003806.json | 157 +++++++++++ .../11155111/run-1717004299.json | 253 ++++++++++++++++++ .../11155111/run-latest.json | 253 ++++++++++++++++++ script/DeployAccount.s.sol | 169 ++++++++++++ 8 files changed, 1116 insertions(+) create mode 100644 broadcast/Deploy.s.sol/84532/run-1718275951.json create mode 100644 broadcast/Deploy.s.sol/84532/run-latest.json create mode 100644 broadcast/DeployAccount.s.sol/11155111/run-1716998920.json create mode 100644 broadcast/DeployAccount.s.sol/11155111/run-1716999054.json create mode 100644 broadcast/DeployAccount.s.sol/11155111/run-1717003806.json create mode 100644 broadcast/DeployAccount.s.sol/11155111/run-1717004299.json create mode 100644 broadcast/DeployAccount.s.sol/11155111/run-latest.json create mode 100644 script/DeployAccount.s.sol diff --git a/broadcast/Deploy.s.sol/84532/run-1718275951.json b/broadcast/Deploy.s.sol/84532/run-1718275951.json new file mode 100644 index 0000000..d5eca6b --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-1718275951.json @@ -0,0 +1,103 @@ +{ + "transactions": [ + { + "hash": "0x94667d1fd953dd9ddf40815eab25ee5bf22c13eee958590736c19327afe7094e", + "transactionType": "CREATE2", + "contractName": "Safe7579", + "contractAddress": "0x7d12344eafdd4c3f8ed206ef80ee459271488418", + "function": null, + "arguments": null, + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x645962", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600f57600080fd5b50604051601a90605a565b604051809103906000f0801580156035573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169190911790556067565b6109d880614ab783390190565b614a41806100766000396000f3fe6080604052600436106101235760003560e01c8063b0d691fe116100a0578063e9ae5c5311610064578063e9ae5c531461040f578063ea5f61d014610422578063eab77e1714610442578063f2dc691d14610462578063f698da25146104825761012a565b8063b0d691fe14610340578063b875d5d814610363578063d03c7914146103af578063d691c964146103cf578063d828435d146103ef5761012a565b80636a5e1515116100e75780636a5e1515146102b757806385571368146102ca5780639517e29f146102f85780639cfd7cff1461030b578063a71763a81461032d5761012a565b80630a664dba146101d4578063112d3a7d146102185780631626ba7e1461024857806319822f7c14610281578063540fb4f9146102a25761012a565b3661012a57005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561015b57806020526020603cf35b5033600090815260056020908152604080832054600683528184206001600160e01b031985351680865293529083205491926001600160a01b039182169290911690806101a88484610497565b915091506101b68888610555565b95506101c484848484610669565b5050505050915050805190602001f35b3480156101e057600080fd5b50336000908152600560205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004613a06565b6106ec565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004613a61565b610749565b6040516001600160e01b0319909116815260200161020f565b61029461028f366004613aac565b6109de565b60405190815260200161020f565b6102b56102b0366004613b5b565b610af2565b005b6102b56102c5366004613c41565b610b3f565b3480156102d657600080fd5b506102ea6102e5366004613c82565b610ba0565b60405161020f929190613cae565b6102b5610306366004613a06565b610bbc565b34801561031757600080fd5b50610320610d61565b60405161020f9190613d61565b6102b561033b366004613a06565b610df3565b34801561034c57600080fd5b506f71727de22e5e9d8baf0edac6f37da0326101fb565b34801561036f57600080fd5b506101fb61037e366004613d8a565b3360009081526006602090815260408083206001600160e01b0319909416835292905220546001600160a01b031690565b3480156103bb57600080fd5b506102386103ca366004613da7565b610f5f565b6103e26103dd366004613a61565b611007565b60405161020f9190613dc0565b3480156103fb57600080fd5b5061029461040a366004613e24565b6110da565b6102b561041d366004613a61565b61117a565b34801561042e57600080fd5b506102ea61043d366004613c82565b61151f565b34801561044e57600080fd5b506102b561045d366004613e6e565b611549565b34801561046e57600080fd5b5061023861047d366004613da7565b6115b8565b34801561048e57600080fd5b50610294611607565b6060806001600160a01b03841615610517576104fe338560006104b8611660565b346000366040516024016104cf9493929190613efd565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b17905261166c565b9150818060200190518101906105149190613ff1565b91505b6001600160a01b0383161561054e57610535338460006104b8611660565b90508080602001905181019061054b9190613ff1565b90505b9250929050565b3360009081526004602090815260408083206001600160e01b0319843516845290915290208054606091906001600160a01b03811690600160a01b900460f81b816105c657604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6105d481607f60f91b611715565b156106185761060e338388886105e8611660565b6040516020016105fa93929190614025565b604051602081830303815290604052611727565b9350505050610663565b610623816000611715565b1561065f5761060e338360008989610639611660565b60405160200161064b93929190614025565b60405160208183030381529060405261166c565b5050505b92915050565b6001600160a01b038416156106bf576106bf33856000856040516024016106909190613d61565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b1790526117e7565b6001600160a01b038316156106e6576106e633846000846040516024016106909190613d61565b50505050565b600060018503610706576106ff84611886565b9050610741565b60028503610717576106ff84611894565b6003850361072a576106ff8484846118ad565b6004850361073d576106ff8484846118fa565b5060005b949350505050565b600033821580156107c15750604051635ae6bd3760e01b8152600481018690526001600160a01b03821690635ae6bd3790602401602060405180830381865afa15801561079a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be919061404b565b15155b156107d65750630b135d3f60e11b90506109d7565b60006107e56014828688614064565b6107ee9161408e565b60601c9050801580610806575061080481611886565b155b1561095c5760006108d1836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610872919061404b565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca910160408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611935565b805160208201209091506001600160a01b03841663934f3a1182846108f98a6014818e614064565b6040518563ffffffff1660e01b815260040161091894939291906140c3565b60006040518083038186803b15801561093057600080fd5b505afa158015610944573d6000803e3d6000fd5b50630b135d3f60e11b97506109d79650505050505050565b60006109bb338361096b611660565b8a6109798a6014818e614064565b60405160240161098c9493929190613efd565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611727565b9050808060200190518101906109d191906140fa565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da0326109f9611660565b6001600160a01b031614610a2057604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610a3e5750610a3c82611886565b155b15610a5357610a4c866119af565b9250610ab8565b6000610a9e338460008a8a604051602401610a6f92919061415c565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b17905261166c565b905080806020019051810190610ab4919061404b565b9350505b8315610ae957610ae9336f71727de22e5e9d8baf0edac6f37da03286604051806020016040528060008152506117e7565b50509392505050565b610b24610b02602083018361425b565b610b0f6020840184614278565b610b1f60608601604087016142c1565b611a55565b610b348989898989898989611b03565b505050505050505050565b610b4a600233611d46565b8060005b818110156106e65736848483818110610b6957610b696142dc565b9050602002810190610b7b91906142f2565b9050610b9733610b8e602084018461425b565b60029190611dc1565b50600101610b4e565b60606000610bb16002338686611eb6565b915091509250929050565b3360009081526005602090815260408083205460068352818420639517e29f60e01b80865293529083205491926001600160a01b03918216929091169080610c048484610497565b91509150610c1f6f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316610c30611660565b6001600160a01b03161480610c5d5750610c48611660565b6001600160a01b0316336001600160a01b0316145b610c7a57604051635629665f60e11b815260040160405180910390fd5b606060018a03610c9657610c8f89898961207a565b9050610cfb565b60028a03610ca957610c8f8989896120d6565b60038a03610cbc57610c8f898989612140565b60048a03610ccf57610c8f898989612281565b89610cdf57610c8f898989612400565b60405163041c38b360e41b8152600481018b90526024016105bd565b600054604051610d549133916001600160a01b0390911690610d25908e908e908790602401614312565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612588565b50610b3484848484610669565b60606000336001600160a01b031663ffa1ad746040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcb919081019061433c565b905080604051602001610dde9190614384565b60405160208183030381529060405291505090565b33600090815260056020908152604080832054600683528184206314e2ec7560e31b80865293529083205491926001600160a01b03918216929091169080610e3b8484610497565b91509150610e566f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316610e67611660565b6001600160a01b03161480610e945750610e7f611660565b6001600160a01b0316336001600160a01b0316145b610eb157604051635629665f60e11b815260040160405180910390fd5b606060018a03610ecd57610ec6898989612621565b9050610f06565b60028a03610ee057610ec689898961264a565b60038a03610ef357610ec6898989612677565b60048a03610cdf57610ec68989896126c5565b600054604051610d549133916001600160a01b0390911690610f30908e908e908790602401614312565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261277d565b600081600881901b610f7582600160f81b611715565b15610f835760019250610fc6565b610f8e826000611715565b15610f9c5760019250610fc6565b610fae826001600160f81b0319611715565b15610fbc5760019250610fc6565b5060009392505050565b828015610fd95750610fd9816000611715565b15610fe5575050919050565b828015610ffb5750610ffb81600160f81b611715565b15610fbc575050919050565b6060611019611014611660565b611894565b61104a57611025611660565b604051635c93ff2f60e11b81526001600160a01b0390911660048201526024016105bd565b33600090815260056020908152604080832054600683528184206335a4725960e21b80865293529083205491926001600160a01b039182169290911690806110928484610497565b9150915061109e611660565b60026110aa8282612833565b8a600881901b6110bc81838e8e6128be565b9950505050506110ce84848484610669565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa158015611156573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061404b565b336000908152600560209081526040808320546006835281842063e9ae5c5360e01b80865293529083205491926001600160a01b039182169290911690806111c28484610497565b915091506111dd6f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b03166111ee611660565b6001600160a01b0316148061121b5750611206611660565b6001600160a01b0316336001600160a01b0316145b61123857604051635629665f60e11b815260040160405180910390fd5b87600881901b3361124a826000611715565b156113ad5761125d83600160f81b611715565b1561127e5789358a01602081019035611277838383612c7a565b5050611506565b611289836000611715565b156112f15760008036600061129e8e8e612cd1565b93509350935093506112e885858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e792505050565b50505050611506565b611303836001600160f81b0319611715565b156113885760006113176014828c8e614064565b6113209161408e565b60601c90503660008c8c601490809261133b93929190614064565b91509150611380848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061258892505050565b505050611506565b604051632e5bf3f960e21b81526001600160f81b0319841660048201526024016105bd565b6113bb82600160f81b611715565b156114e1576113ce83600160f81b611715565b156113e85789358a01602081019035611277838383612d22565b6113f3836000611715565b15611452576000803660006114088e8e612cd1565b93509350935093506112e885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d7992505050565b611464836001600160f81b0319611715565b156113885760006114786014828c8e614064565b6114819161408e565b60601c90503660008c8c601490809261149c93929190614064565b91509150611380848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277d92505050565b6040516308c3ee0360e11b81526001600160f81b0319831660048201526024016105bd565b50505061151584848484610669565b5050505050505050565b3360009081526003602052604081206060919061153d818686612e2f565b92509250509250929050565b6f71727de22e5e9d8baf0edac6f37da032611562611660565b6001600160a01b0316148061158f575061157a611660565b6001600160a01b0316336001600160a01b0316145b6115ac57604051635629665f60e11b815260040160405180910390fd5b6106e684848484611a55565b6000600182036115ca57506001919050565b600282036115da57506001919050565b600382036115ea57506001919050565b600482036115fa57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b81526004016116a394939291906143ca565b6000604051808303816000875af11580156116c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116ea9190810190614415565b925090508061170c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b60606000838360405160240161173e929190614462565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b1790526000805491519293509161178a916001600160a01b0316908490602401614462565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ae957825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a79061181c9087908790879087906004016143ca565b6020604051808303816000875af115801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190614486565b90508061187f57604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061066360023384612fdb565b3360009081526003602052604081206109d7818461301f565b6000806118bc83850185613d8a565b3360009081526004602090815260408083206001600160e01b0319909416835292905220546001600160a01b03908116908616149150509392505050565b6000808061190a848601866144b0565b91509150600061191a8383613059565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b8585856040516020016119559291906144dc565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b6000806000803660006119c1876130f1565b8451602086012060405163934f3a1160e01b8152959a5093985091965094509250339163934f3a11916119fc918990879087906004016140c3565b60006040518083038186803b158015611a1457600080fd5b505afa925050508015611a25575060015b611a3c57611a3560018486613306565b9550611a4b565b611a4860008486613306565b95505b5050505050919050565b3360008181526001602052604080822080546001600160a01b0319166001600160a01b03891617905551611ac792918791611a9890869089908990602401614502565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b1790526117e7565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0602052604090205487906001600160a01b0316611bb057611b4c600233611d46565b60005b81811015611baa57368a8a83818110611b6a57611b6a6142dc565b9050602002810190611b7c91906142f2565b9050611ba0611b8e602083018361425b565b611b9b602084018461455d565b61207a565b5050600101611b4f565b50611bd1565b8015611bd15760405163d8e3ed1b60e01b81523360048201526024016105bd565b336000908152600360205260409020611be98161333e565b86915060005b82811015611c4a5736898983818110611c0a57611c0a6142dc565b9050602002810190611c1c91906142f2565b9050611c40611c2e602083018361425b565b611c3b602084018461455d565b6120d6565b5050600101611bef565b5084915060005b82811015611cac5736878783818110611c6c57611c6c6142dc565b9050602002810190611c7e91906142f2565b9050611ca2611c90602083018361425b565b611c9d602084018461455d565b612140565b5050600101611c51565b5082915060005b82811015611d0e5736858583818110611cce57611cce6142dc565b9050602002810190611ce091906142f2565b9050611d04611cf2602083018361425b565b611cff602084018461455d565b612281565b5050600101611cb3565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b60016000908152602083815260408083206001600160a01b0380861685529252909120541615611d89576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b0381161580611de057506001600160a01b0381166001145b15611e0957604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b0381811660009081526020858152604080832086851684529091529020541615611e5857604051631034f46960e21b81526001600160a01b03821660048201526024016105bd565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b606060006001600160a01b038416600114801590611edc5750611eda868686612fdb565b155b15611f0557604051637c84ecfb60e01b81526001600160a01b03851660048201526024016105bd565b82600003611f265760405163f725081760e01b815260040160405180910390fd5b826001600160401b03811115611f3e57611f3e613f2f565b604051908082528060200260200182016040528015611f67578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b03821615801590611fb757506001600160a01b038216600114155b8015611fc257508381105b156120275781838281518110611fda57611fda6142dc565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061201f816145b9565b915050611f95565b6001600160a01b0382166001148015906120415750600081115b1561206d57826120526001836145d2565b81518110612062576120626142dc565b602002602001015191505b8083525094509492505050565b60608360016120898282612833565b61209560023388611dc1565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026120e58282612833565b3360009081526003602052604090206120fe818861339b565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929a9950505050505050505050565b606083600361214f8282612833565b6000808061215f87890189614636565b919450925090506001600160e01b031983166306d61fe760e41b148061219557506001600160e01b03198316638a91b0e360e01b145b156121bf576040516379bd117b60e01b81526001600160e01b0319841660048201526024016105bd565b3360009081526004602090815260408083206001600160e01b0319871684529091529020546001600160a01b031615612217576040516374420d1560e01b81526001600160e01b0319841660048201526024016105bd565b3360009081526004602090815260408083206001600160e01b031990961683529490529290922080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b60608360046122908282612833565b600080806122a0878901896146a4565b919450925090506000808460018111156122bc576122bc6146d2565b1480156122d157506001600160e01b03198316155b156123475750336000908152600560205260409020546001600160a01b0316801561231a5760405163741cbe0360e01b81526001600160a01b03821660048201526024016105bd565b33600090815260056020526040902080546001600160a01b0319166001600160a01b038c161790556123f3565b600184600181111561235b5761235b6146d2565b036123da576001600160a01b038116156123935760405163741cbe0360e01b81526001600160a01b03821660048201526024016105bd565b503360009081526006602090815260408083206001600160e01b031986168452909152902080546001600160a01b038b81166001600160a01b0319831617909255166123f3565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b606082358301602081810191359085810135860180820191903590604088013588019081019035848381146124485760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612541576000888883818110612467576124676142dc565b905060200201359050600181036124a6576124a08d88888581811061248e5761248e6142dc565b9050602002810190611b9b919061455d565b50612538565b600281036124d6576124a08d8888858181106124c4576124c46142dc565b9050602002810190611c3b919061455d565b60038103612506576124a08d8888858181106124f4576124f46142dc565b9050602002810190611c9d919061455d565b60048103612538576125368d888885818110612524576125246142dc565b9050602002810190611cff919061455d565b505b5060010161244b565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906125be908690859087906001906004016143ca565b6020604051808303816000875af11580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126019190614486565b9050806106e657604051632b3f6d1160e21b815260040160405180910390fd5b60606000612631838501856146e8565b925090506126426002338388613471565b509392505050565b336000908152600360205260408120606091612668848601866146e8565b93509050610ae9828288613568565b606060006126878385018561472d565b3360009081526004602090815260408083206001600160e01b031990951683529390529190912080546001600160a01b031916905595945050505050565b60606000806126d6848601866146a4565b9450909250905060008260018111156126f1576126f16146d2565b14801561270657506001600160e01b03198116155b1561272d5733600090815260056020526040902080546001600160a01b0319169055610ae9565b6001826001811115612741576127416146d2565b036123da573360009081526006602090815260408083206001600160e01b031985168452909152902080546001600160a01b0319169055610ae9565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906127b3908690859087906001906004016143ca565b6020604051808303816000875af11580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614486565b9050806106e657604080516001600160a01b0386168152600060208201526000805160206149ec833981519152910160405180910390a150505050565b336000908152600160205260409020546001600160a01b031680156128b95760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156128a057600080fd5b505afa1580156128b4573d6000803e3d6000fd5b505050505b505050565b60606128cb856000611715565b15612ac1576128de84600160f81b611715565b1561290157823583016020810190356128f833838361363d565b92505050610741565b61290c846000611715565b156129c0576000803660006129218787612cd1565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161294057905050945061299933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166c92505050565b856000815181106129ac576129ac6142dc565b602002602001018190525050505050610741565b6129d2846001600160f81b0319611715565b15612a9c5760006129e66014828587614064565b6129ef9161408e565b60601c9050366000612a048560148189614064565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081612a1e579050509350612a76338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506136b692505050565b84600081518110612a8957612a896142dc565b6020026020010181905250505050610741565b604051632e5bf3f960e21b81526001600160f81b0319851660048201526024016105bd565b612acf85600160f81b611715565b15612c5557612ae284600160f81b611715565b15612b075782358301602081019035612afc338383613757565b935061074192505050565b612b12846000611715565b15612b9f57600080366000612b278787612cd1565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612b4657905050945061299933858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506137d992505050565b612bb1846001600160f81b0319611715565b15612a9c576000612bc56014828587614064565b612bce9161408e565b60601c9050366000612be38560148189614064565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081612bfd579050509350612a76338484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061389992505050565b6040516308c3ee0360e11b81526001600160f81b0319861660048201526024016105bd565b6000546040516128b99185916001600160a01b0390911690612ca2908690869060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612588565b6000803681612ce36014828789614064565b612cec9161408e565b60601c9350612cff603460148789614064565b612d08916147f6565b9250612d178560348189614064565b949793965094505050565b6000546040516128b99185916001600160a01b0390911690612d4a908690869060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261277d565b60405163468721a760e01b81526000906001600160a01b0386169063468721a790612dae9087908790879087906004016143ca565b6020604051808303816000875af1158015612dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df19190614486565b90508061187f57604080516001600160a01b0387168152600060208201526000805160206149ec833981519152910160405180910390a15050505050565b606060006001600160a01b038416600114801590612e545750612e52858561301f565b155b15612e7d57604051637c84ecfb60e01b81526001600160a01b03851660048201526024016105bd565b82600003612e9e5760405163f725081760e01b815260040160405180910390fd5b826001600160401b03811115612eb657612eb6613f2f565b604051908082528060200260200182016040528015612edf578160200160208202803683370190505b506001600160a01b03808616600090815260208890526040812054929450911691505b6001600160a01b03821615801590612f2457506001600160a01b038216600114155b8015612f2f57508381105b15612f895781838281518110612f4757612f476142dc565b6001600160a01b039283166020918202929092018101919091529281166000908152928790526040909220549091169080612f81816145b9565b915050612f02565b6001600160a01b038216600114801590612fa35750600081115b15612fcf5782612fb46001836145d2565b81518110612fc457612fc46142dc565b602002602001015191505b80835250935093915050565b600060016001600160a01b038316148015906107415750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b600060016001600160a01b038316148015906109d75750506001600160a01b03908116600090815260209290925260409091205416151590565b60008083600181111561306e5761306e6146d2565b14801561308357506001600160e01b03198216155b156130a35750336000908152600560205260409020546001600160a01b03165b60018360018111156130b7576130b76146d2565b0361066357503360009081526006602090815260408083206001600160e01b0319851684529091529020546001600160a01b031692915050565b60606000803681818161310861010089018961455d565b909250905061311b600660008385614064565b61312491614814565b60d01c9550613137600c60068385614064565b61314091614814565b60d01c945061315281600c8185614064565b9350935050506000604051806101c001604052807f84aa190356f56b8c87825f54884392a9907c23ee0f8e1ea86336b763faf021bd60001b8152602001336001600160a01b03168152602001886020013581526020018880604001906131b8919061455d565b6040516131c6929190614842565b60405190819003902081526020016131e160608a018a61455d565b6040516131ef929190614842565b6040518091039020815260200161320589613959565b81526020016132138961396e565b81526020018860a00135815260200161322b8961397e565b815260200161323989613993565b815260200161324b60e08a018a61455d565b604051613259929190614842565b604051809103902081526020018665ffffffffffff1681526020018565ffffffffffff1681526020016132996f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031690526101c08120909150601960f81b600160f81b6132be611607565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529650505091939590929450565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561332e576000613331565b60015b60ff161717949350505050565b60016000908152602082905260409020546001600160a01b031615613376576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b03811615806133ba57506001600160a01b0381166001145b156133e357604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b03818116600090815260208490526040902054161561342757604051631034f46960e21b81526001600160a01b03821660048201526024016105bd565b60016000818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b6001600160a01b038116158061349057506001600160a01b0381166001145b156134b957604051637c84ecfb60e01b81526001600160a01b03831660048201526024016105bd565b6001600160a01b03828116600090815260208681526040808320878516845290915290205481169082161461350c57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b6001600160a01b038116158061358757506001600160a01b0381166001145b156135b057604051637c84ecfb60e01b81526001600160a01b03831660048201526024016105bd565b6001600160a01b038281166000908152602085905260409020548116908216146135f857604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b0390811660008181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60008054604051606092916136979187916001600160a01b031690613668908890889060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526136b6565b9050808060200190518101906136ad91906148ff565b95945050505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b81526004016136ee94939291906143ca565b6000604051808303816000875af115801561370d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137359190810190614415565b925090508061264257604051632b3f6d1160e21b815260040160405180910390fd5b60608060006137b68660008054906101000a90046001600160a01b0316878760405160240161378792919061474b565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613899565b9050808060200190518101906137cc9190614933565b9097909650945050505050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b815260040161381094939291906143ca565b6000604051808303816000875af115801561382f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138579190810190614415565b925090508061170c57604080516001600160a01b0388168152600060208201526000805160206149ec833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b81526004016138d194939291906143ca565b6000604051808303816000875af11580156138f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139189190810190614415565b925090508061264257604080516001600160a01b0387168152600060208201526000805160206149ec833981519152910160405180910390a1509392505050565b60006001600160801b03608083013516610663565b6000610663826080013560801c90565b60006001600160801b0360c083013516610663565b600060c082013560801c610663565b6001600160a01b03811681146139b757600080fd5b50565b8035611602816139a2565b60008083601f8401126139d757600080fd5b5081356001600160401b038111156139ee57600080fd5b60208301915083602082850101111561054e57600080fd5b60008060008060608587031215613a1c57600080fd5b843593506020850135613a2e816139a2565b925060408501356001600160401b03811115613a4957600080fd5b613a55878288016139c5565b95989497509550505050565b600080600060408486031215613a7657600080fd5b8335925060208401356001600160401b03811115613a9357600080fd5b613a9f868287016139c5565b9497909650939450505050565b600080600060608486031215613ac157600080fd5b83356001600160401b03811115613ad757600080fd5b84016101208187031215613aea57600080fd5b95602085013595506040909401359392505050565b60008083601f840112613b1157600080fd5b5081356001600160401b03811115613b2857600080fd5b6020830191508360208260051b850101111561054e57600080fd5b600060608284031215613b5557600080fd5b50919050565b600080600080600080600080600060a08a8c031215613b7957600080fd5b89356001600160401b0380821115613b9057600080fd5b613b9c8d838e01613aff565b909b50995060208c0135915080821115613bb557600080fd5b613bc18d838e01613aff565b909950975060408c0135915080821115613bda57600080fd5b613be68d838e01613aff565b909750955060608c0135915080821115613bff57600080fd5b613c0b8d838e01613aff565b909550935060808c0135915080821115613c2457600080fd5b50613c318c828d01613b43565b9150509295985092959850929598565b60008060208385031215613c5457600080fd5b82356001600160401b03811115613c6a57600080fd5b613c7685828601613aff565b90969095509350505050565b60008060408385031215613c9557600080fd5b8235613ca0816139a2565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613cf05781516001600160a01b031684529284019290840190600101613ccb565b5050506001600160a01b039490941660209390930192909252509092915050565b60005b83811015613d2c578181015183820152602001613d14565b50506000910152565b60008151808452613d4d816020860160208601613d11565b601f01601f19169290920160200192915050565b6020815260006109d76020830184613d35565b6001600160e01b0319811681146139b757600080fd5b600060208284031215613d9c57600080fd5b81356109d781613d74565b600060208284031215613db957600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613e1757603f19888603018452613e05858351613d35565b94509285019290850190600101613de9565b5092979650505050505050565b60008060408385031215613e3757600080fd5b8235613e42816139a2565b91506020830135613e52816139a2565b809150509250929050565b803560ff8116811461160257600080fd5b60008060008060608587031215613e8457600080fd5b8435613e8f816139a2565b935060208501356001600160401b03811115613eaa57600080fd5b613eb687828801613aff565b9094509250613ec9905060408601613e5d565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b0385168152836020820152606060408201526000613f25606083018486613ed4565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613f6d57613f6d613f2f565b604052919050565b60006001600160401b03821115613f8e57613f8e613f2f565b50601f01601f191660200190565b6000613faf613faa84613f75565b613f45565b9050828152838383011115613fc357600080fd5b6109d7836020830184613d11565b600082601f830112613fe257600080fd5b6109d783835160208501613f9c565b60006020828403121561400357600080fd5b81516001600160401b0381111561401957600080fd5b61074184828501613fd1565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561405d57600080fd5b5051919050565b6000808585111561407457600080fd5b8386111561408157600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156140bb5780818660140360031b1b83161692505b505092915050565b8481526060602082015260006140dc6060830186613d35565b82810360408401526140ef818587613ed4565b979650505050505050565b60006020828403121561410c57600080fd5b81516109d781613d74565b6000808335601e1984360301811261412e57600080fd5b83016020810192503590506001600160401b0381111561414d57600080fd5b80360382131561054e57600080fd5b6040815261417d60408201614170856139ba565b6001600160a01b03169052565b6020830135606082015260006141966040850185614117565b6101208060808601526141ae61016086018385613ed4565b92506141bd6060880188614117565b9250603f19808786030160a08801526141d7858584613ed4565b9450608089013560c088015260a089013560e0880152610100935060c08901358488015261420860e08a018a614117565b925081888703018489015261421e868483613ed4565b95505061422d848a018a614117565b9450925080878603016101408801525050614249838383613ed4565b93505050508260208301529392505050565b60006020828403121561426d57600080fd5b81356109d7816139a2565b6000808335601e1984360301811261428f57600080fd5b8301803591506001600160401b038211156142a957600080fd5b6020019150600581901b360382131561054e57600080fd5b6000602082840312156142d357600080fd5b6109d782613e5d565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261430857600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906136ad90830184613d35565b60006020828403121561434e57600080fd5b81516001600160401b0381111561436457600080fd5b8201601f8101841361437557600080fd5b61074184825160208401613f9c565b64736166652d60d81b8152600082516143a4816005850160208701613d11565b6e2e657263373537392e76302e302e3160881b6005939091019283015250601401919050565b60018060a01b03851681528360208201526080604082015260006143f16080830185613d35565b905060ff8316606083015295945050505050565b8051801515811461160257600080fd5b6000806040838503121561442857600080fd5b61443183614405565b915060208301516001600160401b0381111561444c57600080fd5b61445885828601613fd1565b9150509250929050565b6001600160a01b038316815260406020820181905260009061074190830184613d35565b60006020828403121561449857600080fd5b6109d782614405565b80356002811061160257600080fd5b600080604083850312156144c357600080fd5b6144cc836144a1565b91506020830135613e5281613d74565b828152600082516144f4816020850160208701613d11565b919091016020019392505050565b60ff8416815260406020808301829052908201839052600090849060608401835b86811015614551578335614536816139a2565b6001600160a01b031682529282019290820190600101614523565b50979650505050505050565b6000808335601e1984360301811261457457600080fd5b8301803591506001600160401b0382111561458e57600080fd5b60200191503681900382131561054e57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145cb576145cb6145a3565b5060010190565b81810381811115610663576106636145a3565b600082601f8301126145f657600080fd5b8135614604613faa82613f75565b81815284602083860101111561461957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561464b57600080fd5b833561465681613d74565b925060208401356001600160f81b03198116811461467357600080fd5b915060408401356001600160401b0381111561468e57600080fd5b61469a868287016145e5565b9150509250925092565b6000806000606084860312156146b957600080fd5b6146c2846144a1565b9250602084013561467381613d74565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156146fb57600080fd5b8235614706816139a2565b915060208301356001600160401b0381111561472157600080fd5b614458858286016145e5565b6000806040838503121561474057600080fd5b823561470681613d74565b60208082528181018390526000906040808401600586901b850182018785805b898110156147e757888403603f190185528235368c9003605e19018112614790578283fd5b8b016060813561479f816139a2565b6001600160a01b0316865281890135898701526147be88830183614117565b925081898801526147d28288018483613ed4565b978a019796505050928701925060010161476b565b50919998505050505050505050565b8035602083101561066357600019602084900360031b1b1692915050565b6001600160d01b031981358181169160068510156140bb5760069490940360031b84901b1690921692915050565b8183823760009101908152919050565b60006001600160401b0382111561486b5761486b613f2f565b5060051b60200190565b600082601f83011261488657600080fd5b81516020614896613faa83614852565b82815260059290921b840181019181810190868411156148b557600080fd5b8286015b848110156148f45780516001600160401b038111156148d85760008081fd5b6148e68986838b0101613fd1565b8452509183019183016148b9565b509695505050505050565b60006020828403121561491157600080fd5b81516001600160401b0381111561492757600080fd5b61074184828501614875565b6000806040838503121561494657600080fd5b82516001600160401b038082111561495d57600080fd5b818501915085601f83011261497157600080fd5b81516020614981613faa83614852565b82815260059290921b840181019181810190898411156149a057600080fd5b948201945b838610156149c5576149b686614405565b825294820194908201906149a5565b918801519196509093505050808211156149de57600080fd5b506144588582860161487556feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca26469706673582212201b126fb380d966aa2e8064da1d588b6c457017d0bed859933815d89fa094774264736f6c634300081900336080604052348015600f57600080fd5b506109b98061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100df57806378272525146100f25780639517e29f146101055780639abb6e171461011857600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100bf575b600080fd5b6100956100903660046105c9565b610139565b005b6100aa6100a53660046105c9565b6101a3565b60405190151581526020015b60405180910390f35b6100d26100cd3660046105c9565b610212565b6040516100b691906106c6565b6100956100ed366004610712565b6102cc565b6100956101003660046107d4565b6102ef565b6100956101133660046107d4565b610398565b61012b6101263660046105c9565b610437565b6040516100b692919061085b565b8060005b8181101561019d5736848483818110610158576101586108b5565b905060200281019061016a91906108cb565b905061019361017c60208301836108eb565b602083013561018e6040850185610906565b610561565b505060010161013d565b50505050565b600081815b8181101561020a57368585838181106101c3576101c36108b5565b90506020028101906101d591906108cb565b90506101fe6101e760208301836108eb565b60208301356101f96040850185610906565b610597565b509350506001016101a8565b505092915050565b6060818067ffffffffffffffff81111561022e5761022e6106fc565b60405190808252806020026020018201604052801561026157816020015b606081526020019060019003908161024c5790505b50915060005b8181101561020a5736858583818110610282576102826108b5565b905060200281019061029491906108cb565b90506102a661017c60208301836108eb565b8483815181106102b8576102b86108b5565b602090810291909101015250600101610267565b604051600080835160208501865afa3d6000833e80156102ea573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061031d9085908590600401610954565b600060405180830381600087803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103c69085908590600401610954565b600060405180830381600087803b1580156103e057600080fd5b505af11580156103f4573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061038a565b606080828067ffffffffffffffff811115610454576104546106fc565b60405190808252806020026020018201604052801561048757816020015b60608152602001906001900390816104725790505b5091508067ffffffffffffffff8111156104a3576104a36106fc565b6040519080825280602002602001820160405280156104cc578160200160208202803683370190505b50925060005b8181101561055857368686838181106104ed576104ed6108b5565b90506020028101906104ff91906108cb565b90506105116101e760208301836108eb565b868481518110610523576105236108b5565b6020026020010186858151811061053c5761053c6108b5565b60209081029190910101919091529015159052506001016104d2565b50509250929050565b60405181838237600038838387895af161057e573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af11591503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105dc57600080fd5b823567ffffffffffffffff808211156105f457600080fd5b818501915085601f83011261060857600080fd5b81358181111561061757600080fd5b8660208260051b850101111561062c57600080fd5b60209290920196919550909350505050565b600082825180855260208086019550808260051b8401018186016000805b858110156106b857601f1980888603018b5283518051808752845b81811015610692578281018901518882018a01528801610677565b5086810188018590529b87019b601f01909116909401850193509184019160010161065c565b509198975050505050505050565b6020815260006106d9602083018461063e565b9392505050565b80356001600160a01b03811681146106f757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072557600080fd5b61072e836106e0565b9150602083013567ffffffffffffffff8082111561074b57600080fd5b818501915085601f83011261075f57600080fd5b813581811115610771576107716106fc565b604051601f8201601f19908116603f01168101908382118183101715610799576107996106fc565b816040528281528860208487010111156107b257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080606085870312156107ea57600080fd5b843593506107fa602086016106e0565b9250604085013567ffffffffffffffff8082111561081757600080fd5b818701915087601f83011261082b57600080fd5b81358181111561083a57600080fd5b88602082850101111561084c57600080fd5b95989497505060200194505050565b604080825283519082018190526000906020906060840190828701845b82811015610896578151151584529284019290840190600101610878565b50505083810360208501526108ab818661063e565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108e157600080fd5b9190910192915050565b6000602082840312156108fd57600080fd5b6106d9826106e0565b6000808335601e1984360301811261091d57600080fd5b83018035915067ffffffffffffffff82111561093857600080fd5b60200191503681900382131561094d57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212207d2978bdb7955af46c5c825e970f48aee484e6e937032ee1d9af3166b1692bf964736f6c63430008190033", + "nonce": "0x12", + "chainId": "0x14a34" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x11a4677f1aabfb5d428bc75a581c4767c8053f03", + "initCode": "0x6080604052348015600f57600080fd5b506109b98061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100df57806378272525146100f25780639517e29f146101055780639abb6e171461011857600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100bf575b600080fd5b6100956100903660046105c9565b610139565b005b6100aa6100a53660046105c9565b6101a3565b60405190151581526020015b60405180910390f35b6100d26100cd3660046105c9565b610212565b6040516100b691906106c6565b6100956100ed366004610712565b6102cc565b6100956101003660046107d4565b6102ef565b6100956101133660046107d4565b610398565b61012b6101263660046105c9565b610437565b6040516100b692919061085b565b8060005b8181101561019d5736848483818110610158576101586108b5565b905060200281019061016a91906108cb565b905061019361017c60208301836108eb565b602083013561018e6040850185610906565b610561565b505060010161013d565b50505050565b600081815b8181101561020a57368585838181106101c3576101c36108b5565b90506020028101906101d591906108cb565b90506101fe6101e760208301836108eb565b60208301356101f96040850185610906565b610597565b509350506001016101a8565b505092915050565b6060818067ffffffffffffffff81111561022e5761022e6106fc565b60405190808252806020026020018201604052801561026157816020015b606081526020019060019003908161024c5790505b50915060005b8181101561020a5736858583818110610282576102826108b5565b905060200281019061029491906108cb565b90506102a661017c60208301836108eb565b8483815181106102b8576102b86108b5565b602090810291909101015250600101610267565b604051600080835160208501865afa3d6000833e80156102ea573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061031d9085908590600401610954565b600060405180830381600087803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103c69085908590600401610954565b600060405180830381600087803b1580156103e057600080fd5b505af11580156103f4573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061038a565b606080828067ffffffffffffffff811115610454576104546106fc565b60405190808252806020026020018201604052801561048757816020015b60608152602001906001900390816104725790505b5091508067ffffffffffffffff8111156104a3576104a36106fc565b6040519080825280602002602001820160405280156104cc578160200160208202803683370190505b50925060005b8181101561055857368686838181106104ed576104ed6108b5565b90506020028101906104ff91906108cb565b90506105116101e760208301836108eb565b868481518110610523576105236108b5565b6020026020010186858151811061053c5761053c6108b5565b60209081029190910101919091529015159052506001016104d2565b50509250929050565b60405181838237600038838387895af161057e573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af11591503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105dc57600080fd5b823567ffffffffffffffff808211156105f457600080fd5b818501915085601f83011261060857600080fd5b81358181111561061757600080fd5b8660208260051b850101111561062c57600080fd5b60209290920196919550909350505050565b600082825180855260208086019550808260051b8401018186016000805b858110156106b857601f1980888603018b5283518051808752845b81811015610692578281018901518882018a01528801610677565b5086810188018590529b87019b601f01909116909401850193509184019160010161065c565b509198975050505050505050565b6020815260006106d9602083018461063e565b9392505050565b80356001600160a01b03811681146106f757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072557600080fd5b61072e836106e0565b9150602083013567ffffffffffffffff8082111561074b57600080fd5b818501915085601f83011261075f57600080fd5b813581811115610771576107716106fc565b604051601f8201601f19908116603f01168101908382118183101715610799576107996106fc565b816040528281528860208487010111156107b257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080606085870312156107ea57600080fd5b843593506107fa602086016106e0565b9250604085013567ffffffffffffffff8082111561081757600080fd5b818701915087601f83011261082b57600080fd5b81358181111561083a57600080fd5b88602082850101111561084c57600080fd5b95989497505060200194505050565b604080825283519082018190526000906020906060840190828701845b82811015610896578151151584529284019290840190600101610878565b50505083810360208501526108ab818661063e565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108e157600080fd5b9190910192915050565b6000602082840312156108fd57600080fd5b6106d9826106e0565b6000808335601e1984360301811261091d57600080fd5b83018035915067ffffffffffffffff82111561093857600080fd5b60200191503681900382131561094d57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212207d2978bdb7955af46c5c825e970f48aee484e6e937032ee1d9af3166b1692bf964736f6c63430008190033" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2322e8c0866a3b25b9d9b7d1fc2f7e499d42758d1d5b6fa46c024a9502f15323", + "transactionType": "CREATE2", + "contractName": "Safe7579Launchpad", + "contractAddress": "0x4bb6ea91bc1257876301e16424cdd215bb73b225", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1ff83f", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060e060405234801561001057600080fd5b506040516119ec3803806119ec83398101604081905261002f91610089565b6001600160a01b03821661005657604051632039d3c960e01b815260040160405180910390fd5b306080526001600160a01b0391821660a0521660c0526100c3565b6001600160a01b038116811461008657600080fd5b50565b6000806040838503121561009c57600080fd5b82516100a781610071565b60208401519092506100b881610071565b809150509250929050565b60805160a05160c0516118e061010c6000396000818160a801526102e901526000818160f90152818161041701526109850152600081816103c2015261075401526118e06000f3fe60806040526004361061008a5760003560e01c80634fff40e1116100595780634fff40e11461016b578063663c87d81461018b578063928107f9146101ab578063c67e2d2a146101cb578063d9ed0e8f146101ed57600080fd5b806306433b1b14610096578063137e051e146100e757806315cca6381461011b57806319822f7c1461013d57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b34801561012757600080fd5b5061013b610136366004610bdc565b61020d565b005b34801561014957600080fd5b5061015d610158366004610cc0565b6103bc565b6040519081526020016100de565b34801561017757600080fd5b5061013b610186366004610d13565b61074f565b34801561019757600080fd5b506100ca6101a6366004610e9b565b610849565b3480156101b757600080fd5b5061015d6101c6366004611092565b610928565b3480156101d757600080fd5b5060008051602061188b8339815191525461015d565b3480156101f957600080fd5b5061013b6102083660046111a8565b61097a565b33301461022d57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b5050604080516000808252602082019092526001600160a01b038e16935063540fb4f99250906102d5565b6040805180820190915260008152606060208201528152602001906001900390816102ad5790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261037e9897969594939291906004016113f7565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161461040c576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045557604051632039d3c960e01b815260040160405180910390fd5b6104626060850185611497565b610471916004916000916114dd565b61047a91611507565b6001600160e01b03191663d9ed0e8f60e01b146104aa5760405163c3d40f7760e01b815260040160405180910390fd5b60006104b96060860186611497565b6104c79160049082906114dd565b8101906104d49190611092565b90506104ec60008051602061188b8339815191525490565b6104f582610928565b146105135760405163278328b160e21b815260040160405180910390fd5b60a081015160c0820151604051636a5e151560e01b81526020880135606081901c9390926001600160a01b0390911691636a5e15159161055591600401611537565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b50505060c08401515160009150815b818110156106a95760008660c0015182815181106105b2576105b261154a565b6020026020010151600001519050806001600160a01b0316636d61fe708860c0015184815181106105e5576105e561154a565b6020026020010151602001516040518263ffffffff1660e01b815260040161060d9190611560565b600060405180830381600087803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1856001600160a01b0316816001600160a01b0316036106a057600193505b50600101610592565b50816106bd57600195505050505050610748565b604051639700320360e01b81526001600160a01b038516906397003203906106eb908c908c90600401611573565b6020604051808303816000875af115801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e9190611672565b95508615610742576000806000808a335af1505b50505050505b9392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161461079e576040516308e3edd160e41b815260040160405180910390fd5b6107b48460008051602061188b83398151915255565b6001600160a01b03831615610843576000836001600160a01b031683836040516107df92919061168b565b600060405180830381855af49150503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081f565b606091505b505090508061084157604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b600081805190602001208360405160200161086e929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b03166040516020016108a992919061169b565b6040516020818303038152906040528051906020012060405160200161090694939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c0890151945160009861095d9890979691016116bd565b604051602081830303815290604052805190602001209050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109c357604051632039d3c960e01b815260040160405180910390fd5b6109d0602082018261172a565b600080546001600160a01b0319166001600160a01b03929092169190911790553063b63e800d610a036020840184611747565b6040850135610a18608087016060880161172a565b610a256080880188611497565b610a3560c08a0160a08b0161172a565b60008060006040518b63ffffffff1660e01b8152600401610a5f9a99989796959493929190611790565b600060405180830381600087803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b5050600060008051602061188b8339815191525550610aa99050565b600080610abc60c0840160a0850161172a565b6001600160a01b0316610ad260e0850185611497565b30604051602001610ae593929190611848565b60408051601f1981840301815290829052610aff9161186e565b6000604051808303816000865af19150503d8060008114610b3c576040519150601f19603f3d011682016040523d82523d6000602084013e610b41565b606091505b509150915081610b5357805160208201fd5b505050565b6001600160a01b0381168114610b6d57600080fd5b50565b8035610b7b81610b58565b919050565b60008083601f840112610b9257600080fd5b5081356001600160401b03811115610ba957600080fd5b6020830191508360208260051b8501011115610bc457600080fd5b9250929050565b803560ff81168114610b7b57600080fd5b60008060008060008060008060008060c08b8d031215610bfb57600080fd5b610c048b610b70565b995060208b01356001600160401b0380821115610c2057600080fd5b610c2c8e838f01610b80565b909b50995060408d0135915080821115610c4557600080fd5b610c518e838f01610b80565b909950975060608d0135915080821115610c6a57600080fd5b610c768e838f01610b80565b909750955060808d0135915080821115610c8f57600080fd5b50610c9c8d828e01610b80565b9094509250610caf905060a08c01610bcb565b90509295989b9194979a5092959850565b600080600060608486031215610cd557600080fd5b83356001600160401b03811115610ceb57600080fd5b84016101208187031215610cfe57600080fd5b95602085013595506040909401359392505050565b60008060008060608587031215610d2957600080fd5b843593506020850135610d3b81610b58565b925060408501356001600160401b0380821115610d5757600080fd5b818701915087601f830112610d6b57600080fd5b813581811115610d7a57600080fd5b886020828501011115610d8c57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610dd357610dd3610d9b565b60405290565b60405161010081016001600160401b0381118282101715610dd357610dd3610d9b565b604051601f8201601f191681016001600160401b0381118282101715610e2457610e24610d9b565b604052919050565b600082601f830112610e3d57600080fd5b81356001600160401b03811115610e5657610e56610d9b565b610e69601f8201601f1916602001610dfc565b818152846020838601011115610e7e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610eb357600080fd5b8535610ebe81610b58565b94506020860135610ece81610b58565b935060408601356001600160401b0380821115610eea57600080fd5b610ef689838a01610e2c565b9450606088013593506080880135915080821115610f1357600080fd5b50610f2088828901610e2c565b9150509295509295909350565b60006001600160401b03821115610f4657610f46610d9b565b5060051b60200190565b600082601f830112610f6157600080fd5b81356020610f76610f7183610f2d565b610dfc565b8083825260208201915060208460051b870101935086841115610f9857600080fd5b602086015b84811015610fbd578035610fb081610b58565b8352918301918301610f9d565b509695505050505050565b600082601f830112610fd957600080fd5b81356020610fe9610f7183610f2d565b82815260059290921b8401810191818101908684111561100857600080fd5b8286015b84811015610fbd5780356001600160401b038082111561102c5760008081fd5b908801906040828b03601f19018113156110465760008081fd5b61104e610db1565b8784013561105b81610b58565b81529083013590828211156110705760008081fd5b61107e8c8984870101610e2c565b81890152865250505091830191830161100c565b6000602082840312156110a457600080fd5b81356001600160401b03808211156110bb57600080fd5b9083019061010082860312156110d057600080fd5b6110d8610dd9565b6110e183610b70565b81526020830135828111156110f557600080fd5b61110187828601610f50565b6020830152506040830135604082015261111d60608401610b70565b606082015260808301358281111561113457600080fd5b61114087828601610e2c565b60808301525061115260a08401610b70565b60a082015260c08301358281111561116957600080fd5b61117587828601610fc8565b60c08301525060e08301358281111561118d57600080fd5b61119987828601610e2c565b60e08301525095945050505050565b6000602082840312156111ba57600080fd5b81356001600160401b038111156111d057600080fd5b8201610100818503121561074857600080fd5b60005b838110156111fe5781810151838201526020016111e6565b50506000910152565b6000815180845261121f8160208601602086016111e3565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561129b57858303601f19018952815180516001600160a01b03168452840151604085850181905261128781860183611207565b9a86019a9450505090830190600101611250565b5090979650505050505050565b6000808335601e198436030181126112bf57600080fd5b83016020810192503590506001600160401b038111156112de57600080fd5b803603821315610bc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b830101846000805b888110156113a457858403601f19018a52823536899003603e19018112611355578283fd5b88016040813561136481610b58565b6001600160a01b0316865261137b828801836112a8565b9250818888015261138f82880184836112ed565b9c88019c965050509285019250600101611330565b509198975050505050505050565b60008151808452602080850194506020840160005b838110156113ec5781516001600160a01b0316875295820195908201906001016113c7565b509495945050505050565b60a08152600061140a60a083018b611233565b828103602084015261141d818a8c611316565b9050828103604084015261143281888a611316565b90508281036060840152611447818688611316565b9050828103608084015260018060a01b03845116815260208401516060602083015261147660608301826113b2565b905060ff604086015116604083015280925050509998505050505050505050565b6000808335601e198436030181126114ae57600080fd5b8301803591506001600160401b038211156114c857600080fd5b602001915036819003821315610bc457600080fd5b600080858511156114ed57600080fd5b838611156114fa57600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561152f5780818660040360031b1b83161692505b505092915050565b6020815260006107486020830184611233565b634e487b7160e01b600052603260045260246000fd5b6020815260006107486020830184611207565b604081526115946040820161158785610b70565b6001600160a01b03169052565b6020830135606082015260006115ad60408501856112a8565b6101208060808601526115c5610160860183856112ed565b92506115d460608801886112a8565b9250603f19808786030160a08801526115ee8585846112ed565b9450608089013560c088015260a089013560e0880152610100935060c08901358488015261161f60e08a018a6112a8565b92508188870301848901526116358684836112ed565b955050611644848a018a6112a8565b94509250808786030161014088015250506116608383836112ed565b93505050508260208301529392505050565b60006020828403121561168457600080fd5b5051919050565b8183823760009101908152919050565b600083516116ad8184602088016111e3565b9190910191825250602001919050565b600060018060a01b03808a16835260e060208401526116df60e084018a6113b2565b886040850152818816606085015283810360808501526116ff8188611207565b905081861660a085015283810360c085015261171b8186611233565b9b9a5050505050505050505050565b60006020828403121561173c57600080fd5b813561074881610b58565b6000808335601e1984360301811261175e57600080fd5b8301803591506001600160401b0382111561177857600080fd5b6020019150600581901b3603821315610bc457600080fd5b61010080825281018a9052600061012082018c825b8d8110156117d65781356117b881610b58565b6001600160a01b0316835260209283019291909101906001016117a5565b50508a60208401526117f3604084018b6001600160a01b03169052565b828103606084015261180681898b6112ed565b91505061181e60808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c083015261171b60e08301846001600160a01b03169052565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516118808184602087016111e3565b919091019291505056fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220f6c1cebafebd485bfa0ad0ab53b71c7e6c59efc34bc0505b6463e156ed9e1f3864736f6c634300081900330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x13", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x51923b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x94667d1fd953dd9ddf40815eab25ee5bf22c13eee958590736c19327afe7094e", + "transactionIndex": "0x3", + "blockHash": "0xdab6288cf0dcc362126900252b1a20f3509ea2d1d341ba2d9e68ebcbe94ec09f", + "blockNumber": "0xabb82c", + "gasUsed": "0x48ac8f", + "effectiveGasPrice": "0x187ba", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x7d12344eafdd4c3f8ed206ef80ee459271488418", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x98c91f187fd", + "l1GasPrice": "0xcfc569da0", + "l1GasUsed": "0x29be5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x676ff0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2322e8c0866a3b25b9d9b7d1fc2f7e499d42758d1d5b6fa46c024a9502f15323", + "transactionIndex": "0x4", + "blockHash": "0xdab6288cf0dcc362126900252b1a20f3509ea2d1d341ba2d9e68ebcbe94ec09f", + "blockNumber": "0xabb82c", + "gasUsed": "0x15ddb5", + "effectiveGasPrice": "0x187ba", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x4bb6ea91bc1257876301e16424cdd215bb73b225", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x371c74e0f90", + "l1GasPrice": "0xcfc569da0", + "l1GasUsed": "0xf0ea" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718275951, + "chain": 84532, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-latest.json b/broadcast/Deploy.s.sol/84532/run-latest.json new file mode 100644 index 0000000..d5eca6b --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-latest.json @@ -0,0 +1,103 @@ +{ + "transactions": [ + { + "hash": "0x94667d1fd953dd9ddf40815eab25ee5bf22c13eee958590736c19327afe7094e", + "transactionType": "CREATE2", + "contractName": "Safe7579", + "contractAddress": "0x7d12344eafdd4c3f8ed206ef80ee459271488418", + "function": null, + "arguments": null, + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x645962", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080604052348015600f57600080fd5b50604051601a90605a565b604051809103906000f0801580156035573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169190911790556067565b6109d880614ab783390190565b614a41806100766000396000f3fe6080604052600436106101235760003560e01c8063b0d691fe116100a0578063e9ae5c5311610064578063e9ae5c531461040f578063ea5f61d014610422578063eab77e1714610442578063f2dc691d14610462578063f698da25146104825761012a565b8063b0d691fe14610340578063b875d5d814610363578063d03c7914146103af578063d691c964146103cf578063d828435d146103ef5761012a565b80636a5e1515116100e75780636a5e1515146102b757806385571368146102ca5780639517e29f146102f85780639cfd7cff1461030b578063a71763a81461032d5761012a565b80630a664dba146101d4578063112d3a7d146102185780631626ba7e1461024857806319822f7c14610281578063540fb4f9146102a25761012a565b3661012a57005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561015b57806020526020603cf35b5033600090815260056020908152604080832054600683528184206001600160e01b031985351680865293529083205491926001600160a01b039182169290911690806101a88484610497565b915091506101b68888610555565b95506101c484848484610669565b5050505050915050805190602001f35b3480156101e057600080fd5b50336000908152600560205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004613a06565b6106ec565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004613a61565b610749565b6040516001600160e01b0319909116815260200161020f565b61029461028f366004613aac565b6109de565b60405190815260200161020f565b6102b56102b0366004613b5b565b610af2565b005b6102b56102c5366004613c41565b610b3f565b3480156102d657600080fd5b506102ea6102e5366004613c82565b610ba0565b60405161020f929190613cae565b6102b5610306366004613a06565b610bbc565b34801561031757600080fd5b50610320610d61565b60405161020f9190613d61565b6102b561033b366004613a06565b610df3565b34801561034c57600080fd5b506f71727de22e5e9d8baf0edac6f37da0326101fb565b34801561036f57600080fd5b506101fb61037e366004613d8a565b3360009081526006602090815260408083206001600160e01b0319909416835292905220546001600160a01b031690565b3480156103bb57600080fd5b506102386103ca366004613da7565b610f5f565b6103e26103dd366004613a61565b611007565b60405161020f9190613dc0565b3480156103fb57600080fd5b5061029461040a366004613e24565b6110da565b6102b561041d366004613a61565b61117a565b34801561042e57600080fd5b506102ea61043d366004613c82565b61151f565b34801561044e57600080fd5b506102b561045d366004613e6e565b611549565b34801561046e57600080fd5b5061023861047d366004613da7565b6115b8565b34801561048e57600080fd5b50610294611607565b6060806001600160a01b03841615610517576104fe338560006104b8611660565b346000366040516024016104cf9493929190613efd565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b17905261166c565b9150818060200190518101906105149190613ff1565b91505b6001600160a01b0383161561054e57610535338460006104b8611660565b90508080602001905181019061054b9190613ff1565b90505b9250929050565b3360009081526004602090815260408083206001600160e01b0319843516845290915290208054606091906001600160a01b03811690600160a01b900460f81b816105c657604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6105d481607f60f91b611715565b156106185761060e338388886105e8611660565b6040516020016105fa93929190614025565b604051602081830303815290604052611727565b9350505050610663565b610623816000611715565b1561065f5761060e338360008989610639611660565b60405160200161064b93929190614025565b60405160208183030381529060405261166c565b5050505b92915050565b6001600160a01b038416156106bf576106bf33856000856040516024016106909190613d61565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b1790526117e7565b6001600160a01b038316156106e6576106e633846000846040516024016106909190613d61565b50505050565b600060018503610706576106ff84611886565b9050610741565b60028503610717576106ff84611894565b6003850361072a576106ff8484846118ad565b6004850361073d576106ff8484846118fa565b5060005b949350505050565b600033821580156107c15750604051635ae6bd3760e01b8152600481018690526001600160a01b03821690635ae6bd3790602401602060405180830381865afa15801561079a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be919061404b565b15155b156107d65750630b135d3f60e11b90506109d7565b60006107e56014828688614064565b6107ee9161408e565b60601c9050801580610806575061080481611886565b155b1561095c5760006108d1836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610872919061404b565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca910160408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611935565b805160208201209091506001600160a01b03841663934f3a1182846108f98a6014818e614064565b6040518563ffffffff1660e01b815260040161091894939291906140c3565b60006040518083038186803b15801561093057600080fd5b505afa158015610944573d6000803e3d6000fd5b50630b135d3f60e11b97506109d79650505050505050565b60006109bb338361096b611660565b8a6109798a6014818e614064565b60405160240161098c9493929190613efd565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611727565b9050808060200190518101906109d191906140fa565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da0326109f9611660565b6001600160a01b031614610a2057604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610a3e5750610a3c82611886565b155b15610a5357610a4c866119af565b9250610ab8565b6000610a9e338460008a8a604051602401610a6f92919061415c565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b17905261166c565b905080806020019051810190610ab4919061404b565b9350505b8315610ae957610ae9336f71727de22e5e9d8baf0edac6f37da03286604051806020016040528060008152506117e7565b50509392505050565b610b24610b02602083018361425b565b610b0f6020840184614278565b610b1f60608601604087016142c1565b611a55565b610b348989898989898989611b03565b505050505050505050565b610b4a600233611d46565b8060005b818110156106e65736848483818110610b6957610b696142dc565b9050602002810190610b7b91906142f2565b9050610b9733610b8e602084018461425b565b60029190611dc1565b50600101610b4e565b60606000610bb16002338686611eb6565b915091509250929050565b3360009081526005602090815260408083205460068352818420639517e29f60e01b80865293529083205491926001600160a01b03918216929091169080610c048484610497565b91509150610c1f6f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316610c30611660565b6001600160a01b03161480610c5d5750610c48611660565b6001600160a01b0316336001600160a01b0316145b610c7a57604051635629665f60e11b815260040160405180910390fd5b606060018a03610c9657610c8f89898961207a565b9050610cfb565b60028a03610ca957610c8f8989896120d6565b60038a03610cbc57610c8f898989612140565b60048a03610ccf57610c8f898989612281565b89610cdf57610c8f898989612400565b60405163041c38b360e41b8152600481018b90526024016105bd565b600054604051610d549133916001600160a01b0390911690610d25908e908e908790602401614312565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612588565b50610b3484848484610669565b60606000336001600160a01b031663ffa1ad746040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcb919081019061433c565b905080604051602001610dde9190614384565b60405160208183030381529060405291505090565b33600090815260056020908152604080832054600683528184206314e2ec7560e31b80865293529083205491926001600160a01b03918216929091169080610e3b8484610497565b91509150610e566f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316610e67611660565b6001600160a01b03161480610e945750610e7f611660565b6001600160a01b0316336001600160a01b0316145b610eb157604051635629665f60e11b815260040160405180910390fd5b606060018a03610ecd57610ec6898989612621565b9050610f06565b60028a03610ee057610ec689898961264a565b60038a03610ef357610ec6898989612677565b60048a03610cdf57610ec68989896126c5565b600054604051610d549133916001600160a01b0390911690610f30908e908e908790602401614312565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261277d565b600081600881901b610f7582600160f81b611715565b15610f835760019250610fc6565b610f8e826000611715565b15610f9c5760019250610fc6565b610fae826001600160f81b0319611715565b15610fbc5760019250610fc6565b5060009392505050565b828015610fd95750610fd9816000611715565b15610fe5575050919050565b828015610ffb5750610ffb81600160f81b611715565b15610fbc575050919050565b6060611019611014611660565b611894565b61104a57611025611660565b604051635c93ff2f60e11b81526001600160a01b0390911660048201526024016105bd565b33600090815260056020908152604080832054600683528184206335a4725960e21b80865293529083205491926001600160a01b039182169290911690806110928484610497565b9150915061109e611660565b60026110aa8282612833565b8a600881901b6110bc81838e8e6128be565b9950505050506110ce84848484610669565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa158015611156573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061404b565b336000908152600560209081526040808320546006835281842063e9ae5c5360e01b80865293529083205491926001600160a01b039182169290911690806111c28484610497565b915091506111dd6f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b03166111ee611660565b6001600160a01b0316148061121b5750611206611660565b6001600160a01b0316336001600160a01b0316145b61123857604051635629665f60e11b815260040160405180910390fd5b87600881901b3361124a826000611715565b156113ad5761125d83600160f81b611715565b1561127e5789358a01602081019035611277838383612c7a565b5050611506565b611289836000611715565b156112f15760008036600061129e8e8e612cd1565b93509350935093506112e885858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e792505050565b50505050611506565b611303836001600160f81b0319611715565b156113885760006113176014828c8e614064565b6113209161408e565b60601c90503660008c8c601490809261133b93929190614064565b91509150611380848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061258892505050565b505050611506565b604051632e5bf3f960e21b81526001600160f81b0319841660048201526024016105bd565b6113bb82600160f81b611715565b156114e1576113ce83600160f81b611715565b156113e85789358a01602081019035611277838383612d22565b6113f3836000611715565b15611452576000803660006114088e8e612cd1565b93509350935093506112e885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d7992505050565b611464836001600160f81b0319611715565b156113885760006114786014828c8e614064565b6114819161408e565b60601c90503660008c8c601490809261149c93929190614064565b91509150611380848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277d92505050565b6040516308c3ee0360e11b81526001600160f81b0319831660048201526024016105bd565b50505061151584848484610669565b5050505050505050565b3360009081526003602052604081206060919061153d818686612e2f565b92509250509250929050565b6f71727de22e5e9d8baf0edac6f37da032611562611660565b6001600160a01b0316148061158f575061157a611660565b6001600160a01b0316336001600160a01b0316145b6115ac57604051635629665f60e11b815260040160405180910390fd5b6106e684848484611a55565b6000600182036115ca57506001919050565b600282036115da57506001919050565b600382036115ea57506001919050565b600482036115fa57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b81526004016116a394939291906143ca565b6000604051808303816000875af11580156116c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116ea9190810190614415565b925090508061170c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b60606000838360405160240161173e929190614462565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b1790526000805491519293509161178a916001600160a01b0316908490602401614462565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ae957825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a79061181c9087908790879087906004016143ca565b6020604051808303816000875af115801561183b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185f9190614486565b90508061187f57604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061066360023384612fdb565b3360009081526003602052604081206109d7818461301f565b6000806118bc83850185613d8a565b3360009081526004602090815260408083206001600160e01b0319909416835292905220546001600160a01b03908116908616149150509392505050565b6000808061190a848601866144b0565b91509150600061191a8383613059565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b8585856040516020016119559291906144dc565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b6000806000803660006119c1876130f1565b8451602086012060405163934f3a1160e01b8152959a5093985091965094509250339163934f3a11916119fc918990879087906004016140c3565b60006040518083038186803b158015611a1457600080fd5b505afa925050508015611a25575060015b611a3c57611a3560018486613306565b9550611a4b565b611a4860008486613306565b95505b5050505050919050565b3360008181526001602052604080822080546001600160a01b0319166001600160a01b03891617905551611ac792918791611a9890869089908990602401614502565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b1790526117e7565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0602052604090205487906001600160a01b0316611bb057611b4c600233611d46565b60005b81811015611baa57368a8a83818110611b6a57611b6a6142dc565b9050602002810190611b7c91906142f2565b9050611ba0611b8e602083018361425b565b611b9b602084018461455d565b61207a565b5050600101611b4f565b50611bd1565b8015611bd15760405163d8e3ed1b60e01b81523360048201526024016105bd565b336000908152600360205260409020611be98161333e565b86915060005b82811015611c4a5736898983818110611c0a57611c0a6142dc565b9050602002810190611c1c91906142f2565b9050611c40611c2e602083018361425b565b611c3b602084018461455d565b6120d6565b5050600101611bef565b5084915060005b82811015611cac5736878783818110611c6c57611c6c6142dc565b9050602002810190611c7e91906142f2565b9050611ca2611c90602083018361425b565b611c9d602084018461455d565b612140565b5050600101611c51565b5082915060005b82811015611d0e5736858583818110611cce57611cce6142dc565b9050602002810190611ce091906142f2565b9050611d04611cf2602083018361425b565b611cff602084018461455d565b612281565b5050600101611cb3565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b60016000908152602083815260408083206001600160a01b0380861685529252909120541615611d89576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b0381161580611de057506001600160a01b0381166001145b15611e0957604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b0381811660009081526020858152604080832086851684529091529020541615611e5857604051631034f46960e21b81526001600160a01b03821660048201526024016105bd565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b606060006001600160a01b038416600114801590611edc5750611eda868686612fdb565b155b15611f0557604051637c84ecfb60e01b81526001600160a01b03851660048201526024016105bd565b82600003611f265760405163f725081760e01b815260040160405180910390fd5b826001600160401b03811115611f3e57611f3e613f2f565b604051908082528060200260200182016040528015611f67578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b03821615801590611fb757506001600160a01b038216600114155b8015611fc257508381105b156120275781838281518110611fda57611fda6142dc565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061201f816145b9565b915050611f95565b6001600160a01b0382166001148015906120415750600081115b1561206d57826120526001836145d2565b81518110612062576120626142dc565b602002602001015191505b8083525094509492505050565b60608360016120898282612833565b61209560023388611dc1565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026120e58282612833565b3360009081526003602052604090206120fe818861339b565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929a9950505050505050505050565b606083600361214f8282612833565b6000808061215f87890189614636565b919450925090506001600160e01b031983166306d61fe760e41b148061219557506001600160e01b03198316638a91b0e360e01b145b156121bf576040516379bd117b60e01b81526001600160e01b0319841660048201526024016105bd565b3360009081526004602090815260408083206001600160e01b0319871684529091529020546001600160a01b031615612217576040516374420d1560e01b81526001600160e01b0319841660048201526024016105bd565b3360009081526004602090815260408083206001600160e01b031990961683529490529290922080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b60608360046122908282612833565b600080806122a0878901896146a4565b919450925090506000808460018111156122bc576122bc6146d2565b1480156122d157506001600160e01b03198316155b156123475750336000908152600560205260409020546001600160a01b0316801561231a5760405163741cbe0360e01b81526001600160a01b03821660048201526024016105bd565b33600090815260056020526040902080546001600160a01b0319166001600160a01b038c161790556123f3565b600184600181111561235b5761235b6146d2565b036123da576001600160a01b038116156123935760405163741cbe0360e01b81526001600160a01b03821660048201526024016105bd565b503360009081526006602090815260408083206001600160e01b031986168452909152902080546001600160a01b038b81166001600160a01b0319831617909255166123f3565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b606082358301602081810191359085810135860180820191903590604088013588019081019035848381146124485760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612541576000888883818110612467576124676142dc565b905060200201359050600181036124a6576124a08d88888581811061248e5761248e6142dc565b9050602002810190611b9b919061455d565b50612538565b600281036124d6576124a08d8888858181106124c4576124c46142dc565b9050602002810190611c3b919061455d565b60038103612506576124a08d8888858181106124f4576124f46142dc565b9050602002810190611c9d919061455d565b60048103612538576125368d888885818110612524576125246142dc565b9050602002810190611cff919061455d565b505b5060010161244b565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906125be908690859087906001906004016143ca565b6020604051808303816000875af11580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126019190614486565b9050806106e657604051632b3f6d1160e21b815260040160405180910390fd5b60606000612631838501856146e8565b925090506126426002338388613471565b509392505050565b336000908152600360205260408120606091612668848601866146e8565b93509050610ae9828288613568565b606060006126878385018561472d565b3360009081526004602090815260408083206001600160e01b031990951683529390529190912080546001600160a01b031916905595945050505050565b60606000806126d6848601866146a4565b9450909250905060008260018111156126f1576126f16146d2565b14801561270657506001600160e01b03198116155b1561272d5733600090815260056020526040902080546001600160a01b0319169055610ae9565b6001826001811115612741576127416146d2565b036123da573360009081526006602090815260408083206001600160e01b031985168452909152902080546001600160a01b0319169055610ae9565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906127b3908690859087906001906004016143ca565b6020604051808303816000875af11580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614486565b9050806106e657604080516001600160a01b0386168152600060208201526000805160206149ec833981519152910160405180910390a150505050565b336000908152600160205260409020546001600160a01b031680156128b95760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156128a057600080fd5b505afa1580156128b4573d6000803e3d6000fd5b505050505b505050565b60606128cb856000611715565b15612ac1576128de84600160f81b611715565b1561290157823583016020810190356128f833838361363d565b92505050610741565b61290c846000611715565b156129c0576000803660006129218787612cd1565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161294057905050945061299933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166c92505050565b856000815181106129ac576129ac6142dc565b602002602001018190525050505050610741565b6129d2846001600160f81b0319611715565b15612a9c5760006129e66014828587614064565b6129ef9161408e565b60601c9050366000612a048560148189614064565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081612a1e579050509350612a76338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506136b692505050565b84600081518110612a8957612a896142dc565b6020026020010181905250505050610741565b604051632e5bf3f960e21b81526001600160f81b0319851660048201526024016105bd565b612acf85600160f81b611715565b15612c5557612ae284600160f81b611715565b15612b075782358301602081019035612afc338383613757565b935061074192505050565b612b12846000611715565b15612b9f57600080366000612b278787612cd1565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612b4657905050945061299933858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506137d992505050565b612bb1846001600160f81b0319611715565b15612a9c576000612bc56014828587614064565b612bce9161408e565b60601c9050366000612be38560148189614064565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081612bfd579050509350612a76338484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061389992505050565b6040516308c3ee0360e11b81526001600160f81b0319861660048201526024016105bd565b6000546040516128b99185916001600160a01b0390911690612ca2908690869060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612588565b6000803681612ce36014828789614064565b612cec9161408e565b60601c9350612cff603460148789614064565b612d08916147f6565b9250612d178560348189614064565b949793965094505050565b6000546040516128b99185916001600160a01b0390911690612d4a908690869060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261277d565b60405163468721a760e01b81526000906001600160a01b0386169063468721a790612dae9087908790879087906004016143ca565b6020604051808303816000875af1158015612dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df19190614486565b90508061187f57604080516001600160a01b0387168152600060208201526000805160206149ec833981519152910160405180910390a15050505050565b606060006001600160a01b038416600114801590612e545750612e52858561301f565b155b15612e7d57604051637c84ecfb60e01b81526001600160a01b03851660048201526024016105bd565b82600003612e9e5760405163f725081760e01b815260040160405180910390fd5b826001600160401b03811115612eb657612eb6613f2f565b604051908082528060200260200182016040528015612edf578160200160208202803683370190505b506001600160a01b03808616600090815260208890526040812054929450911691505b6001600160a01b03821615801590612f2457506001600160a01b038216600114155b8015612f2f57508381105b15612f895781838281518110612f4757612f476142dc565b6001600160a01b039283166020918202929092018101919091529281166000908152928790526040909220549091169080612f81816145b9565b915050612f02565b6001600160a01b038216600114801590612fa35750600081115b15612fcf5782612fb46001836145d2565b81518110612fc457612fc46142dc565b602002602001015191505b80835250935093915050565b600060016001600160a01b038316148015906107415750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b600060016001600160a01b038316148015906109d75750506001600160a01b03908116600090815260209290925260409091205416151590565b60008083600181111561306e5761306e6146d2565b14801561308357506001600160e01b03198216155b156130a35750336000908152600560205260409020546001600160a01b03165b60018360018111156130b7576130b76146d2565b0361066357503360009081526006602090815260408083206001600160e01b0319851684529091529020546001600160a01b031692915050565b60606000803681818161310861010089018961455d565b909250905061311b600660008385614064565b61312491614814565b60d01c9550613137600c60068385614064565b61314091614814565b60d01c945061315281600c8185614064565b9350935050506000604051806101c001604052807f84aa190356f56b8c87825f54884392a9907c23ee0f8e1ea86336b763faf021bd60001b8152602001336001600160a01b03168152602001886020013581526020018880604001906131b8919061455d565b6040516131c6929190614842565b60405190819003902081526020016131e160608a018a61455d565b6040516131ef929190614842565b6040518091039020815260200161320589613959565b81526020016132138961396e565b81526020018860a00135815260200161322b8961397e565b815260200161323989613993565b815260200161324b60e08a018a61455d565b604051613259929190614842565b604051809103902081526020018665ffffffffffff1681526020018565ffffffffffff1681526020016132996f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031690526101c08120909150601960f81b600160f81b6132be611607565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529650505091939590929450565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561332e576000613331565b60015b60ff161717949350505050565b60016000908152602082905260409020546001600160a01b031615613376576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b03811615806133ba57506001600160a01b0381166001145b156133e357604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b03818116600090815260208490526040902054161561342757604051631034f46960e21b81526001600160a01b03821660048201526024016105bd565b60016000818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b6001600160a01b038116158061349057506001600160a01b0381166001145b156134b957604051637c84ecfb60e01b81526001600160a01b03831660048201526024016105bd565b6001600160a01b03828116600090815260208681526040808320878516845290915290205481169082161461350c57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b6001600160a01b038116158061358757506001600160a01b0381166001145b156135b057604051637c84ecfb60e01b81526001600160a01b03831660048201526024016105bd565b6001600160a01b038281166000908152602085905260409020548116908216146135f857604051637c84ecfb60e01b81526001600160a01b03821660048201526024016105bd565b6001600160a01b0390811660008181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60008054604051606092916136979187916001600160a01b031690613668908890889060240161474b565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526136b6565b9050808060200190518101906136ad91906148ff565b95945050505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b81526004016136ee94939291906143ca565b6000604051808303816000875af115801561370d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137359190810190614415565b925090508061264257604051632b3f6d1160e21b815260040160405180910390fd5b60608060006137b68660008054906101000a90046001600160a01b0316878760405160240161378792919061474b565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613899565b9050808060200190518101906137cc9190614933565b9097909650945050505050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b815260040161381094939291906143ca565b6000604051808303816000875af115801561382f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138579190810190614415565b925090508061170c57604080516001600160a01b0388168152600060208201526000805160206149ec833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b81526004016138d194939291906143ca565b6000604051808303816000875af11580156138f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139189190810190614415565b925090508061264257604080516001600160a01b0387168152600060208201526000805160206149ec833981519152910160405180910390a1509392505050565b60006001600160801b03608083013516610663565b6000610663826080013560801c90565b60006001600160801b0360c083013516610663565b600060c082013560801c610663565b6001600160a01b03811681146139b757600080fd5b50565b8035611602816139a2565b60008083601f8401126139d757600080fd5b5081356001600160401b038111156139ee57600080fd5b60208301915083602082850101111561054e57600080fd5b60008060008060608587031215613a1c57600080fd5b843593506020850135613a2e816139a2565b925060408501356001600160401b03811115613a4957600080fd5b613a55878288016139c5565b95989497509550505050565b600080600060408486031215613a7657600080fd5b8335925060208401356001600160401b03811115613a9357600080fd5b613a9f868287016139c5565b9497909650939450505050565b600080600060608486031215613ac157600080fd5b83356001600160401b03811115613ad757600080fd5b84016101208187031215613aea57600080fd5b95602085013595506040909401359392505050565b60008083601f840112613b1157600080fd5b5081356001600160401b03811115613b2857600080fd5b6020830191508360208260051b850101111561054e57600080fd5b600060608284031215613b5557600080fd5b50919050565b600080600080600080600080600060a08a8c031215613b7957600080fd5b89356001600160401b0380821115613b9057600080fd5b613b9c8d838e01613aff565b909b50995060208c0135915080821115613bb557600080fd5b613bc18d838e01613aff565b909950975060408c0135915080821115613bda57600080fd5b613be68d838e01613aff565b909750955060608c0135915080821115613bff57600080fd5b613c0b8d838e01613aff565b909550935060808c0135915080821115613c2457600080fd5b50613c318c828d01613b43565b9150509295985092959850929598565b60008060208385031215613c5457600080fd5b82356001600160401b03811115613c6a57600080fd5b613c7685828601613aff565b90969095509350505050565b60008060408385031215613c9557600080fd5b8235613ca0816139a2565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613cf05781516001600160a01b031684529284019290840190600101613ccb565b5050506001600160a01b039490941660209390930192909252509092915050565b60005b83811015613d2c578181015183820152602001613d14565b50506000910152565b60008151808452613d4d816020860160208601613d11565b601f01601f19169290920160200192915050565b6020815260006109d76020830184613d35565b6001600160e01b0319811681146139b757600080fd5b600060208284031215613d9c57600080fd5b81356109d781613d74565b600060208284031215613db957600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613e1757603f19888603018452613e05858351613d35565b94509285019290850190600101613de9565b5092979650505050505050565b60008060408385031215613e3757600080fd5b8235613e42816139a2565b91506020830135613e52816139a2565b809150509250929050565b803560ff8116811461160257600080fd5b60008060008060608587031215613e8457600080fd5b8435613e8f816139a2565b935060208501356001600160401b03811115613eaa57600080fd5b613eb687828801613aff565b9094509250613ec9905060408601613e5d565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b0385168152836020820152606060408201526000613f25606083018486613ed4565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613f6d57613f6d613f2f565b604052919050565b60006001600160401b03821115613f8e57613f8e613f2f565b50601f01601f191660200190565b6000613faf613faa84613f75565b613f45565b9050828152838383011115613fc357600080fd5b6109d7836020830184613d11565b600082601f830112613fe257600080fd5b6109d783835160208501613f9c565b60006020828403121561400357600080fd5b81516001600160401b0381111561401957600080fd5b61074184828501613fd1565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561405d57600080fd5b5051919050565b6000808585111561407457600080fd5b8386111561408157600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156140bb5780818660140360031b1b83161692505b505092915050565b8481526060602082015260006140dc6060830186613d35565b82810360408401526140ef818587613ed4565b979650505050505050565b60006020828403121561410c57600080fd5b81516109d781613d74565b6000808335601e1984360301811261412e57600080fd5b83016020810192503590506001600160401b0381111561414d57600080fd5b80360382131561054e57600080fd5b6040815261417d60408201614170856139ba565b6001600160a01b03169052565b6020830135606082015260006141966040850185614117565b6101208060808601526141ae61016086018385613ed4565b92506141bd6060880188614117565b9250603f19808786030160a08801526141d7858584613ed4565b9450608089013560c088015260a089013560e0880152610100935060c08901358488015261420860e08a018a614117565b925081888703018489015261421e868483613ed4565b95505061422d848a018a614117565b9450925080878603016101408801525050614249838383613ed4565b93505050508260208301529392505050565b60006020828403121561426d57600080fd5b81356109d7816139a2565b6000808335601e1984360301811261428f57600080fd5b8301803591506001600160401b038211156142a957600080fd5b6020019150600581901b360382131561054e57600080fd5b6000602082840312156142d357600080fd5b6109d782613e5d565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261430857600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906136ad90830184613d35565b60006020828403121561434e57600080fd5b81516001600160401b0381111561436457600080fd5b8201601f8101841361437557600080fd5b61074184825160208401613f9c565b64736166652d60d81b8152600082516143a4816005850160208701613d11565b6e2e657263373537392e76302e302e3160881b6005939091019283015250601401919050565b60018060a01b03851681528360208201526080604082015260006143f16080830185613d35565b905060ff8316606083015295945050505050565b8051801515811461160257600080fd5b6000806040838503121561442857600080fd5b61443183614405565b915060208301516001600160401b0381111561444c57600080fd5b61445885828601613fd1565b9150509250929050565b6001600160a01b038316815260406020820181905260009061074190830184613d35565b60006020828403121561449857600080fd5b6109d782614405565b80356002811061160257600080fd5b600080604083850312156144c357600080fd5b6144cc836144a1565b91506020830135613e5281613d74565b828152600082516144f4816020850160208701613d11565b919091016020019392505050565b60ff8416815260406020808301829052908201839052600090849060608401835b86811015614551578335614536816139a2565b6001600160a01b031682529282019290820190600101614523565b50979650505050505050565b6000808335601e1984360301811261457457600080fd5b8301803591506001600160401b0382111561458e57600080fd5b60200191503681900382131561054e57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145cb576145cb6145a3565b5060010190565b81810381811115610663576106636145a3565b600082601f8301126145f657600080fd5b8135614604613faa82613f75565b81815284602083860101111561461957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561464b57600080fd5b833561465681613d74565b925060208401356001600160f81b03198116811461467357600080fd5b915060408401356001600160401b0381111561468e57600080fd5b61469a868287016145e5565b9150509250925092565b6000806000606084860312156146b957600080fd5b6146c2846144a1565b9250602084013561467381613d74565b634e487b7160e01b600052602160045260246000fd5b600080604083850312156146fb57600080fd5b8235614706816139a2565b915060208301356001600160401b0381111561472157600080fd5b614458858286016145e5565b6000806040838503121561474057600080fd5b823561470681613d74565b60208082528181018390526000906040808401600586901b850182018785805b898110156147e757888403603f190185528235368c9003605e19018112614790578283fd5b8b016060813561479f816139a2565b6001600160a01b0316865281890135898701526147be88830183614117565b925081898801526147d28288018483613ed4565b978a019796505050928701925060010161476b565b50919998505050505050505050565b8035602083101561066357600019602084900360031b1b1692915050565b6001600160d01b031981358181169160068510156140bb5760069490940360031b84901b1690921692915050565b8183823760009101908152919050565b60006001600160401b0382111561486b5761486b613f2f565b5060051b60200190565b600082601f83011261488657600080fd5b81516020614896613faa83614852565b82815260059290921b840181019181810190868411156148b557600080fd5b8286015b848110156148f45780516001600160401b038111156148d85760008081fd5b6148e68986838b0101613fd1565b8452509183019183016148b9565b509695505050505050565b60006020828403121561491157600080fd5b81516001600160401b0381111561492757600080fd5b61074184828501614875565b6000806040838503121561494657600080fd5b82516001600160401b038082111561495d57600080fd5b818501915085601f83011261497157600080fd5b81516020614981613faa83614852565b82815260059290921b840181019181810190898411156149a057600080fd5b948201945b838610156149c5576149b686614405565b825294820194908201906149a5565b918801519196509093505050808211156149de57600080fd5b506144588582860161487556feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca26469706673582212201b126fb380d966aa2e8064da1d588b6c457017d0bed859933815d89fa094774264736f6c634300081900336080604052348015600f57600080fd5b506109b98061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100df57806378272525146100f25780639517e29f146101055780639abb6e171461011857600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100bf575b600080fd5b6100956100903660046105c9565b610139565b005b6100aa6100a53660046105c9565b6101a3565b60405190151581526020015b60405180910390f35b6100d26100cd3660046105c9565b610212565b6040516100b691906106c6565b6100956100ed366004610712565b6102cc565b6100956101003660046107d4565b6102ef565b6100956101133660046107d4565b610398565b61012b6101263660046105c9565b610437565b6040516100b692919061085b565b8060005b8181101561019d5736848483818110610158576101586108b5565b905060200281019061016a91906108cb565b905061019361017c60208301836108eb565b602083013561018e6040850185610906565b610561565b505060010161013d565b50505050565b600081815b8181101561020a57368585838181106101c3576101c36108b5565b90506020028101906101d591906108cb565b90506101fe6101e760208301836108eb565b60208301356101f96040850185610906565b610597565b509350506001016101a8565b505092915050565b6060818067ffffffffffffffff81111561022e5761022e6106fc565b60405190808252806020026020018201604052801561026157816020015b606081526020019060019003908161024c5790505b50915060005b8181101561020a5736858583818110610282576102826108b5565b905060200281019061029491906108cb565b90506102a661017c60208301836108eb565b8483815181106102b8576102b86108b5565b602090810291909101015250600101610267565b604051600080835160208501865afa3d6000833e80156102ea573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061031d9085908590600401610954565b600060405180830381600087803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103c69085908590600401610954565b600060405180830381600087803b1580156103e057600080fd5b505af11580156103f4573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061038a565b606080828067ffffffffffffffff811115610454576104546106fc565b60405190808252806020026020018201604052801561048757816020015b60608152602001906001900390816104725790505b5091508067ffffffffffffffff8111156104a3576104a36106fc565b6040519080825280602002602001820160405280156104cc578160200160208202803683370190505b50925060005b8181101561055857368686838181106104ed576104ed6108b5565b90506020028101906104ff91906108cb565b90506105116101e760208301836108eb565b868481518110610523576105236108b5565b6020026020010186858151811061053c5761053c6108b5565b60209081029190910101919091529015159052506001016104d2565b50509250929050565b60405181838237600038838387895af161057e573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af11591503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105dc57600080fd5b823567ffffffffffffffff808211156105f457600080fd5b818501915085601f83011261060857600080fd5b81358181111561061757600080fd5b8660208260051b850101111561062c57600080fd5b60209290920196919550909350505050565b600082825180855260208086019550808260051b8401018186016000805b858110156106b857601f1980888603018b5283518051808752845b81811015610692578281018901518882018a01528801610677565b5086810188018590529b87019b601f01909116909401850193509184019160010161065c565b509198975050505050505050565b6020815260006106d9602083018461063e565b9392505050565b80356001600160a01b03811681146106f757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072557600080fd5b61072e836106e0565b9150602083013567ffffffffffffffff8082111561074b57600080fd5b818501915085601f83011261075f57600080fd5b813581811115610771576107716106fc565b604051601f8201601f19908116603f01168101908382118183101715610799576107996106fc565b816040528281528860208487010111156107b257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080606085870312156107ea57600080fd5b843593506107fa602086016106e0565b9250604085013567ffffffffffffffff8082111561081757600080fd5b818701915087601f83011261082b57600080fd5b81358181111561083a57600080fd5b88602082850101111561084c57600080fd5b95989497505060200194505050565b604080825283519082018190526000906020906060840190828701845b82811015610896578151151584529284019290840190600101610878565b50505083810360208501526108ab818661063e565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108e157600080fd5b9190910192915050565b6000602082840312156108fd57600080fd5b6106d9826106e0565b6000808335601e1984360301811261091d57600080fd5b83018035915067ffffffffffffffff82111561093857600080fd5b60200191503681900382131561094d57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212207d2978bdb7955af46c5c825e970f48aee484e6e937032ee1d9af3166b1692bf964736f6c63430008190033", + "nonce": "0x12", + "chainId": "0x14a34" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x11a4677f1aabfb5d428bc75a581c4767c8053f03", + "initCode": "0x6080604052348015600f57600080fd5b506109b98061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100df57806378272525146100f25780639517e29f146101055780639abb6e171461011857600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100bf575b600080fd5b6100956100903660046105c9565b610139565b005b6100aa6100a53660046105c9565b6101a3565b60405190151581526020015b60405180910390f35b6100d26100cd3660046105c9565b610212565b6040516100b691906106c6565b6100956100ed366004610712565b6102cc565b6100956101003660046107d4565b6102ef565b6100956101133660046107d4565b610398565b61012b6101263660046105c9565b610437565b6040516100b692919061085b565b8060005b8181101561019d5736848483818110610158576101586108b5565b905060200281019061016a91906108cb565b905061019361017c60208301836108eb565b602083013561018e6040850185610906565b610561565b505060010161013d565b50505050565b600081815b8181101561020a57368585838181106101c3576101c36108b5565b90506020028101906101d591906108cb565b90506101fe6101e760208301836108eb565b60208301356101f96040850185610906565b610597565b509350506001016101a8565b505092915050565b6060818067ffffffffffffffff81111561022e5761022e6106fc565b60405190808252806020026020018201604052801561026157816020015b606081526020019060019003908161024c5790505b50915060005b8181101561020a5736858583818110610282576102826108b5565b905060200281019061029491906108cb565b90506102a661017c60208301836108eb565b8483815181106102b8576102b86108b5565b602090810291909101015250600101610267565b604051600080835160208501865afa3d6000833e80156102ea573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061031d9085908590600401610954565b600060405180830381600087803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103c69085908590600401610954565b600060405180830381600087803b1580156103e057600080fd5b505af11580156103f4573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061038a565b606080828067ffffffffffffffff811115610454576104546106fc565b60405190808252806020026020018201604052801561048757816020015b60608152602001906001900390816104725790505b5091508067ffffffffffffffff8111156104a3576104a36106fc565b6040519080825280602002602001820160405280156104cc578160200160208202803683370190505b50925060005b8181101561055857368686838181106104ed576104ed6108b5565b90506020028101906104ff91906108cb565b90506105116101e760208301836108eb565b868481518110610523576105236108b5565b6020026020010186858151811061053c5761053c6108b5565b60209081029190910101919091529015159052506001016104d2565b50509250929050565b60405181838237600038838387895af161057e573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af11591503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105dc57600080fd5b823567ffffffffffffffff808211156105f457600080fd5b818501915085601f83011261060857600080fd5b81358181111561061757600080fd5b8660208260051b850101111561062c57600080fd5b60209290920196919550909350505050565b600082825180855260208086019550808260051b8401018186016000805b858110156106b857601f1980888603018b5283518051808752845b81811015610692578281018901518882018a01528801610677565b5086810188018590529b87019b601f01909116909401850193509184019160010161065c565b509198975050505050505050565b6020815260006106d9602083018461063e565b9392505050565b80356001600160a01b03811681146106f757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072557600080fd5b61072e836106e0565b9150602083013567ffffffffffffffff8082111561074b57600080fd5b818501915085601f83011261075f57600080fd5b813581811115610771576107716106fc565b604051601f8201601f19908116603f01168101908382118183101715610799576107996106fc565b816040528281528860208487010111156107b257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080606085870312156107ea57600080fd5b843593506107fa602086016106e0565b9250604085013567ffffffffffffffff8082111561081757600080fd5b818701915087601f83011261082b57600080fd5b81358181111561083a57600080fd5b88602082850101111561084c57600080fd5b95989497505060200194505050565b604080825283519082018190526000906020906060840190828701845b82811015610896578151151584529284019290840190600101610878565b50505083810360208501526108ab818661063e565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108e157600080fd5b9190910192915050565b6000602082840312156108fd57600080fd5b6106d9826106e0565b6000808335601e1984360301811261091d57600080fd5b83018035915067ffffffffffffffff82111561093857600080fd5b60200191503681900382131561094d57600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212207d2978bdb7955af46c5c825e970f48aee484e6e937032ee1d9af3166b1692bf964736f6c63430008190033" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x2322e8c0866a3b25b9d9b7d1fc2f7e499d42758d1d5b6fa46c024a9502f15323", + "transactionType": "CREATE2", + "contractName": "Safe7579Launchpad", + "contractAddress": "0x4bb6ea91bc1257876301e16424cdd215bb73b225", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x0000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1ff83f", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060e060405234801561001057600080fd5b506040516119ec3803806119ec83398101604081905261002f91610089565b6001600160a01b03821661005657604051632039d3c960e01b815260040160405180910390fd5b306080526001600160a01b0391821660a0521660c0526100c3565b6001600160a01b038116811461008657600080fd5b50565b6000806040838503121561009c57600080fd5b82516100a781610071565b60208401519092506100b881610071565b809150509250929050565b60805160a05160c0516118e061010c6000396000818160a801526102e901526000818160f90152818161041701526109850152600081816103c2015261075401526118e06000f3fe60806040526004361061008a5760003560e01c80634fff40e1116100595780634fff40e11461016b578063663c87d81461018b578063928107f9146101ab578063c67e2d2a146101cb578063d9ed0e8f146101ed57600080fd5b806306433b1b14610096578063137e051e146100e757806315cca6381461011b57806319822f7c1461013d57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b34801561012757600080fd5b5061013b610136366004610bdc565b61020d565b005b34801561014957600080fd5b5061015d610158366004610cc0565b6103bc565b6040519081526020016100de565b34801561017757600080fd5b5061013b610186366004610d13565b61074f565b34801561019757600080fd5b506100ca6101a6366004610e9b565b610849565b3480156101b757600080fd5b5061015d6101c6366004611092565b610928565b3480156101d757600080fd5b5060008051602061188b8339815191525461015d565b3480156101f957600080fd5b5061013b6102083660046111a8565b61097a565b33301461022d57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b5050604080516000808252602082019092526001600160a01b038e16935063540fb4f99250906102d5565b6040805180820190915260008152606060208201528152602001906001900390816102ad5790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261037e9897969594939291906004016113f7565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161461040c576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045557604051632039d3c960e01b815260040160405180910390fd5b6104626060850185611497565b610471916004916000916114dd565b61047a91611507565b6001600160e01b03191663d9ed0e8f60e01b146104aa5760405163c3d40f7760e01b815260040160405180910390fd5b60006104b96060860186611497565b6104c79160049082906114dd565b8101906104d49190611092565b90506104ec60008051602061188b8339815191525490565b6104f582610928565b146105135760405163278328b160e21b815260040160405180910390fd5b60a081015160c0820151604051636a5e151560e01b81526020880135606081901c9390926001600160a01b0390911691636a5e15159161055591600401611537565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b50505060c08401515160009150815b818110156106a95760008660c0015182815181106105b2576105b261154a565b6020026020010151600001519050806001600160a01b0316636d61fe708860c0015184815181106105e5576105e561154a565b6020026020010151602001516040518263ffffffff1660e01b815260040161060d9190611560565b600060405180830381600087803b15801561062757600080fd5b505af115801561063b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1856001600160a01b0316816001600160a01b0316036106a057600193505b50600101610592565b50816106bd57600195505050505050610748565b604051639700320360e01b81526001600160a01b038516906397003203906106eb908c908c90600401611573565b6020604051808303816000875af115801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e9190611672565b95508615610742576000806000808a335af1505b50505050505b9392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161461079e576040516308e3edd160e41b815260040160405180910390fd5b6107b48460008051602061188b83398151915255565b6001600160a01b03831615610843576000836001600160a01b031683836040516107df92919061168b565b600060405180830381855af49150503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081f565b606091505b505090508061084157604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b600081805190602001208360405160200161086e929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b03166040516020016108a992919061169b565b6040516020818303038152906040528051906020012060405160200161090694939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c0890151945160009861095d9890979691016116bd565b604051602081830303815290604052805190602001209050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109c357604051632039d3c960e01b815260040160405180910390fd5b6109d0602082018261172a565b600080546001600160a01b0319166001600160a01b03929092169190911790553063b63e800d610a036020840184611747565b6040850135610a18608087016060880161172a565b610a256080880188611497565b610a3560c08a0160a08b0161172a565b60008060006040518b63ffffffff1660e01b8152600401610a5f9a99989796959493929190611790565b600060405180830381600087803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b5050600060008051602061188b8339815191525550610aa99050565b600080610abc60c0840160a0850161172a565b6001600160a01b0316610ad260e0850185611497565b30604051602001610ae593929190611848565b60408051601f1981840301815290829052610aff9161186e565b6000604051808303816000865af19150503d8060008114610b3c576040519150601f19603f3d011682016040523d82523d6000602084013e610b41565b606091505b509150915081610b5357805160208201fd5b505050565b6001600160a01b0381168114610b6d57600080fd5b50565b8035610b7b81610b58565b919050565b60008083601f840112610b9257600080fd5b5081356001600160401b03811115610ba957600080fd5b6020830191508360208260051b8501011115610bc457600080fd5b9250929050565b803560ff81168114610b7b57600080fd5b60008060008060008060008060008060c08b8d031215610bfb57600080fd5b610c048b610b70565b995060208b01356001600160401b0380821115610c2057600080fd5b610c2c8e838f01610b80565b909b50995060408d0135915080821115610c4557600080fd5b610c518e838f01610b80565b909950975060608d0135915080821115610c6a57600080fd5b610c768e838f01610b80565b909750955060808d0135915080821115610c8f57600080fd5b50610c9c8d828e01610b80565b9094509250610caf905060a08c01610bcb565b90509295989b9194979a5092959850565b600080600060608486031215610cd557600080fd5b83356001600160401b03811115610ceb57600080fd5b84016101208187031215610cfe57600080fd5b95602085013595506040909401359392505050565b60008060008060608587031215610d2957600080fd5b843593506020850135610d3b81610b58565b925060408501356001600160401b0380821115610d5757600080fd5b818701915087601f830112610d6b57600080fd5b813581811115610d7a57600080fd5b886020828501011115610d8c57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610dd357610dd3610d9b565b60405290565b60405161010081016001600160401b0381118282101715610dd357610dd3610d9b565b604051601f8201601f191681016001600160401b0381118282101715610e2457610e24610d9b565b604052919050565b600082601f830112610e3d57600080fd5b81356001600160401b03811115610e5657610e56610d9b565b610e69601f8201601f1916602001610dfc565b818152846020838601011115610e7e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610eb357600080fd5b8535610ebe81610b58565b94506020860135610ece81610b58565b935060408601356001600160401b0380821115610eea57600080fd5b610ef689838a01610e2c565b9450606088013593506080880135915080821115610f1357600080fd5b50610f2088828901610e2c565b9150509295509295909350565b60006001600160401b03821115610f4657610f46610d9b565b5060051b60200190565b600082601f830112610f6157600080fd5b81356020610f76610f7183610f2d565b610dfc565b8083825260208201915060208460051b870101935086841115610f9857600080fd5b602086015b84811015610fbd578035610fb081610b58565b8352918301918301610f9d565b509695505050505050565b600082601f830112610fd957600080fd5b81356020610fe9610f7183610f2d565b82815260059290921b8401810191818101908684111561100857600080fd5b8286015b84811015610fbd5780356001600160401b038082111561102c5760008081fd5b908801906040828b03601f19018113156110465760008081fd5b61104e610db1565b8784013561105b81610b58565b81529083013590828211156110705760008081fd5b61107e8c8984870101610e2c565b81890152865250505091830191830161100c565b6000602082840312156110a457600080fd5b81356001600160401b03808211156110bb57600080fd5b9083019061010082860312156110d057600080fd5b6110d8610dd9565b6110e183610b70565b81526020830135828111156110f557600080fd5b61110187828601610f50565b6020830152506040830135604082015261111d60608401610b70565b606082015260808301358281111561113457600080fd5b61114087828601610e2c565b60808301525061115260a08401610b70565b60a082015260c08301358281111561116957600080fd5b61117587828601610fc8565b60c08301525060e08301358281111561118d57600080fd5b61119987828601610e2c565b60e08301525095945050505050565b6000602082840312156111ba57600080fd5b81356001600160401b038111156111d057600080fd5b8201610100818503121561074857600080fd5b60005b838110156111fe5781810151838201526020016111e6565b50506000910152565b6000815180845261121f8160208601602086016111e3565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561129b57858303601f19018952815180516001600160a01b03168452840151604085850181905261128781860183611207565b9a86019a9450505090830190600101611250565b5090979650505050505050565b6000808335601e198436030181126112bf57600080fd5b83016020810192503590506001600160401b038111156112de57600080fd5b803603821315610bc457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b830101846000805b888110156113a457858403601f19018a52823536899003603e19018112611355578283fd5b88016040813561136481610b58565b6001600160a01b0316865261137b828801836112a8565b9250818888015261138f82880184836112ed565b9c88019c965050509285019250600101611330565b509198975050505050505050565b60008151808452602080850194506020840160005b838110156113ec5781516001600160a01b0316875295820195908201906001016113c7565b509495945050505050565b60a08152600061140a60a083018b611233565b828103602084015261141d818a8c611316565b9050828103604084015261143281888a611316565b90508281036060840152611447818688611316565b9050828103608084015260018060a01b03845116815260208401516060602083015261147660608301826113b2565b905060ff604086015116604083015280925050509998505050505050505050565b6000808335601e198436030181126114ae57600080fd5b8301803591506001600160401b038211156114c857600080fd5b602001915036819003821315610bc457600080fd5b600080858511156114ed57600080fd5b838611156114fa57600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561152f5780818660040360031b1b83161692505b505092915050565b6020815260006107486020830184611233565b634e487b7160e01b600052603260045260246000fd5b6020815260006107486020830184611207565b604081526115946040820161158785610b70565b6001600160a01b03169052565b6020830135606082015260006115ad60408501856112a8565b6101208060808601526115c5610160860183856112ed565b92506115d460608801886112a8565b9250603f19808786030160a08801526115ee8585846112ed565b9450608089013560c088015260a089013560e0880152610100935060c08901358488015261161f60e08a018a6112a8565b92508188870301848901526116358684836112ed565b955050611644848a018a6112a8565b94509250808786030161014088015250506116608383836112ed565b93505050508260208301529392505050565b60006020828403121561168457600080fd5b5051919050565b8183823760009101908152919050565b600083516116ad8184602088016111e3565b9190910191825250602001919050565b600060018060a01b03808a16835260e060208401526116df60e084018a6113b2565b886040850152818816606085015283810360808501526116ff8188611207565b905081861660a085015283810360c085015261171b8186611233565b9b9a5050505050505050505050565b60006020828403121561173c57600080fd5b813561074881610b58565b6000808335601e1984360301811261175e57600080fd5b8301803591506001600160401b0382111561177857600080fd5b6020019150600581901b3603821315610bc457600080fd5b61010080825281018a9052600061012082018c825b8d8110156117d65781356117b881610b58565b6001600160a01b0316835260209283019291909101906001016117a5565b50508a60208401526117f3604084018b6001600160a01b03169052565b828103606084015261180681898b6112ed565b91505061181e60808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c083015261171b60e08301846001600160a01b03169052565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516118808184602087016111e3565b919091019291505056fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220f6c1cebafebd485bfa0ad0ab53b71c7e6c59efc34bc0505b6463e156ed9e1f3864736f6c634300081900330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x13", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x51923b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x94667d1fd953dd9ddf40815eab25ee5bf22c13eee958590736c19327afe7094e", + "transactionIndex": "0x3", + "blockHash": "0xdab6288cf0dcc362126900252b1a20f3509ea2d1d341ba2d9e68ebcbe94ec09f", + "blockNumber": "0xabb82c", + "gasUsed": "0x48ac8f", + "effectiveGasPrice": "0x187ba", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x7d12344eafdd4c3f8ed206ef80ee459271488418", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x98c91f187fd", + "l1GasPrice": "0xcfc569da0", + "l1GasUsed": "0x29be5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x676ff0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2322e8c0866a3b25b9d9b7d1fc2f7e499d42758d1d5b6fa46c024a9502f15323", + "transactionIndex": "0x4", + "blockHash": "0xdab6288cf0dcc362126900252b1a20f3509ea2d1d341ba2d9e68ebcbe94ec09f", + "blockNumber": "0xabb82c", + "gasUsed": "0x15ddb5", + "effectiveGasPrice": "0x187ba", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x4bb6ea91bc1257876301e16424cdd215bb73b225", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x371c74e0f90", + "l1GasPrice": "0xcfc569da0", + "l1GasUsed": "0xf0ea" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718275951, + "chain": 84532, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/DeployAccount.s.sol/11155111/run-1716998920.json b/broadcast/DeployAccount.s.sol/11155111/run-1716998920.json new file mode 100644 index 0000000..38cbdda --- /dev/null +++ b/broadcast/DeployAccount.s.sol/11155111/run-1716998920.json @@ -0,0 +1,39 @@ +{ + "transactions": [ + { + "hash": "0x7932b9fe6a7e693118cb732000682f0ea5815171f1d90c9ce96392668f840da4", + "transactionType": "CALL", + "contractName": "EntryPoint", + "contractAddress": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "function": "handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[],address)", + "arguments": [ + "[(0xe0a906aBfC993c9F6f06d88f84012071eeDbbC00, 36289858002883497250370664447681530215120906269012176337949278381808266772480, 0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0xd9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0x000000000000000000000000001e8480000000000000000000000000001e8480, 2000000, 0x000000000000000000000000001e8480000000000000000000000000001e8480, 0x, 0x000000000000ffffffffffff4141414141414141414141414141414141)]", + "0x0000000000000000000000000000000000000069" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "gas": "0xb806f", + "value": "0x0", + "input": "0x765e827f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00503b54ed1e62365f0c9e4caf1479623b08acbe7700000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000001e8480000000000000000000000000001e848000000000000000000000000000000000000000000000000000000000001e8480000000000000000000000000001e8480000000000000000000000000001e8480000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000138e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d000000000000ffffffffffff4141414141414141414141414141414141000000", + "nonce": "0x48", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xe0a906abfc993c9f6f06d88f84012071eedbbc00", + "initCode": "0x6080604052348015600f57600080fd5b5060405161016b38038061016b833981016040819052602c9160b4565b6001600160a01b03811660905760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905560e2565b60006020828403121560c557600080fd5b81516001600160a01b038116811460db57600080fd5b9392505050565b607b806100f06000396000f3fe6080604052600080546001600160a01b0316632cf35bc960e11b823501602757808252602082f35b3682833781823684845af490503d82833e806040573d82fd5b503d81f3fea2646970667358221220384140740989472bb37a5dc002cd4d0f267ec130ea5d9557883ec30fe97f138864736f6c634300081900330000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1716998920, + "chain": 11155111, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/DeployAccount.s.sol/11155111/run-1716999054.json b/broadcast/DeployAccount.s.sol/11155111/run-1716999054.json new file mode 100644 index 0000000..5e7b24c --- /dev/null +++ b/broadcast/DeployAccount.s.sol/11155111/run-1716999054.json @@ -0,0 +1,39 @@ +{ + "transactions": [ + { + "hash": "0x9c9ed9514e893730fceabf3120a31fe3ca747c2daf389d4138727df6d648191a", + "transactionType": "CALL", + "contractName": "EntryPoint", + "contractAddress": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "function": "handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[],address)", + "arguments": [ + "[(0xe0a906aBfC993c9F6f06d88f84012071eeDbbC00, 36289858002883497250370664447681530215120906269012176337949278381808266772480, 0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0xd9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0x000000000000000000000000001e8480000000000000000000000000001e8480, 2000000, 0x000000000000000000000000001e8480000000000000000000000000001e8480, 0x, 0x000000000000ffffffffffff4141414141414141414141414141414141)]", + "0x0000000000000000000000000000000000000069" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "gas": "0xb806f", + "value": "0x0", + "input": "0x765e827f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00503b54ed1e62365f0c9e4caf1479623b08acbe7700000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000001e8480000000000000000000000000001e848000000000000000000000000000000000000000000000000000000000001e8480000000000000000000000000001e8480000000000000000000000000001e8480000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000138e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d000000000000ffffffffffff4141414141414141414141414141414141000000", + "nonce": "0x49", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xe0a906abfc993c9f6f06d88f84012071eedbbc00", + "initCode": "0x6080604052348015600f57600080fd5b5060405161016b38038061016b833981016040819052602c9160b4565b6001600160a01b03811660905760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905560e2565b60006020828403121560c557600080fd5b81516001600160a01b038116811460db57600080fd5b9392505050565b607b806100f06000396000f3fe6080604052600080546001600160a01b0316632cf35bc960e11b823501602757808252602082f35b3682833781823684845af490503d82833e806040573d82fd5b503d81f3fea2646970667358221220384140740989472bb37a5dc002cd4d0f267ec130ea5d9557883ec30fe97f138864736f6c634300081900330000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1716999054, + "chain": 11155111, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/DeployAccount.s.sol/11155111/run-1717003806.json b/broadcast/DeployAccount.s.sol/11155111/run-1717003806.json new file mode 100644 index 0000000..16481bc --- /dev/null +++ b/broadcast/DeployAccount.s.sol/11155111/run-1717003806.json @@ -0,0 +1,157 @@ +{ + "transactions": [ + { + "hash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionType": "CALL", + "contractName": "EntryPoint", + "contractAddress": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "function": "handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[],address)", + "arguments": [ + "[(0xe0a906aBfC993c9F6f06d88f84012071eeDbbC00, 36289858002883497250370664447681530215120906269012176337949278381808266772480, 0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0xd9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000060e7400000000000000000000000000051d3c, 69660, 0x0000000000000000000000005241210000000000000000000000000ca36194f7, 0x, 0x000000000000ffffffffffff4141414141414141414141414141414141)]", + "0x0000000000000000000000000000000000000069" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "gas": "0xc2df6", + "value": "0x0", + "input": "0x765e827f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000060e7400000000000000000000000000051d3c000000000000000000000000000000000000000000000000000000000001101c0000000000000000000000005241210000000000000000000000000ca36194f7000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000138e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4d9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d000000000000ffffffffffff4141414141414141414141414141414141000000", + "nonce": "0x4a", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xe0a906abfc993c9f6f06d88f84012071eedbbc00", + "initCode": "0x6080604052348015600f57600080fd5b5060405161016b38038061016b833981016040819052602c9160b4565b6001600160a01b03811660905760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905560e2565b60006020828403121560c557600080fd5b81516001600160a01b038116811460db57600080fd5b9392505050565b607b806100f06000396000f3fe6080604052600080546001600160a01b0316632cf35bc960e11b823501602757808252602082f35b3682833781823684845af490503d82833e806040573d82fd5b503d81f3fea2646970667358221220384140740989472bb37a5dc002cd4d0f267ec130ea5d9557883ec30fe97f138864736f6c634300081900330000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xc9e8a1", + "logs": [ + { + "address": "0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed6", + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235", + "0x000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00" + ], + "data": "0x0000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x67", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d", + "0x018781ded646bc22910937cc9a737923ce578a325dd8d7b0014b1b329fda3f58", + "0x000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00" + ], + "data": "0x000000000000000000000000e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed60000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x68", + "removed": false + }, + { + "address": "0xe0a906abfc993c9f6f06d88f84012071eedbbc00", + "topics": [ + "0xd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x69", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4", + "0x000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00" + ], + "data": "0x000000000000000000000000000000000000000000000000009a9c4caaaba1d4", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x6a", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972" + ], + "data": "0x", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x6b", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201", + "0x018781ded646bc22910937cc9a737923ce578a325dd8d7b0014b1b329fda3f58", + "0x000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00" + ], + "data": "0x503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002448c9cedae0a906ab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x6c", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f", + "0x018781ded646bc22910937cc9a737923ce578a325dd8d7b0014b1b329fda3f58", + "0x000000000000000000000000e0a906abfc993c9f6f06d88f84012071eedbbc00", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x503b54ed1e62365f0c9e4caf1479623b08acbe7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a7b6ff14ebc0000000000000000000000000000000000000000000000000000000000008b270", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "logIndex": "0x6d", + "removed": false + } + ], + "logsBloom": "0x000004000000000020000000000000000000000000000000000000000000000000080000004000020000000100040000000000000000000000004200000000000000101000000000000004000000000000420000000000000000000000402000000000000a0800000400000000000800000000000000000000000008000200000000000000000000000000000000000000800200000400000000000000000000000000100000000000400000000000000000000000000000000002000000001000000000000000400001000000104000000000000000000000000000000020000040080001000000000000000000000000000200000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2df676fd91a3798f1027a5ea5c51b2999f71bf2165ce747635d769faa0de8af0", + "transactionIndex": "0x2a", + "blockHash": "0xc04d8a8838ff9511491132b498deb4a73e953903a073439deac36b9c26cb798d", + "blockNumber": "0x5b939b", + "gasUsed": "0x8540b", + "effectiveGasPrice": "0x2dce2aee4", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1717003806, + "chain": 11155111, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/DeployAccount.s.sol/11155111/run-1717004299.json b/broadcast/DeployAccount.s.sol/11155111/run-1717004299.json new file mode 100644 index 0000000..bc9683c --- /dev/null +++ b/broadcast/DeployAccount.s.sol/11155111/run-1717004299.json @@ -0,0 +1,253 @@ +{ + "transactions": [ + { + "hash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionType": "CALL", + "contractName": "EntryPoint", + "contractAddress": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "function": "handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[],address)", + "arguments": [ + "[(0xC2b17e73603DCcc195118a36F3203134fd7985F5, 36289858002883497250370664447681530215120906269012176337949278381808266772480, 0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0xd9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000034f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000060e7400000000000000000000000000051d3c, 69660, 0x0000000000000000000000005241210000000000000000000000000ca36194f7, 0x, 0x000000000000ffffffffffff4141414141414141414141414141414141)]", + "0x0000000000000000000000000000000000000069" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "gas": "0xb4e5d", + "value": "0x0", + "input": "0x765e827f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000060e7400000000000000000000000000051d3c000000000000000000000000000000000000000000000000000000000001101c0000000000000000000000005241210000000000000000000000000ca36194f7000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000138e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000034f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d000000000000ffffffffffff4141414141414141414141414141414141000000", + "nonce": "0x4b", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "initCode": "0x6080604052348015600f57600080fd5b5060405161016b38038061016b833981016040819052602c9160b4565b6001600160a01b03811660905760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905560e2565b60006020828403121560c557600080fd5b81516001600160a01b038116811460db57600080fd5b9392505050565b607b806100f06000396000f3fe6080604052600080546001600160a01b0316632cf35bc960e11b823501602757808252602082f35b3682833781823684845af490503d82833e806040573d82fd5b503d81f3fea2646970667358221220384140740989472bb37a5dc002cd4d0f267ec130ea5d9557883ec30fe97f138864736f6c634300081900330000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xa1b1d0", + "logs": [ + { + "address": "0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed6", + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x0000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x75", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d", + "0x46f21483170fbcc71491ad51ad150df0d6aaff32b095ca3f6c2310f8b0e96e49", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed60000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x76", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0xd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x77", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000000000000000000000000000009a9c4caaaba1d4", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x78", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x79", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7a", + "removed": false + }, + { + "address": "0x1d8c40f958fb6998067e9b8b26850d2ae30b7c70", + "topics": [ + "0xb8a00d6d8ca1be30bfec34d8f97e55f0f0fd9eeb7fb46e030516363d4cfe1ad6" + ], + "data": "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7b", + "removed": false + }, + { + "address": "0x1d8c40f958fb6998067e9b8b26850d2ae30b7c70", + "topics": [ + "0xb6d9a72244037f5f1de04d8ff74cd328f1574efc59a02163d0fec05548719746" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7c", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7d", + "removed": false + }, + { + "address": "0xbaca6f74a5549368568f387fd989c279f940f1a5", + "topics": [ + "0x9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e94", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "0x0000000000000000000000001d8c40f958fb6998067e9b8b26850d2ae30b7c70" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7e", + "removed": false + }, + { + "address": "0xbaca6f74a5549368568f387fd989c279f940f1a5", + "topics": [ + "0xf48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c2", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7f", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x80", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x81", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f", + "0x46f21483170fbcc71491ad51ad150df0d6aaff32b095ca3f6c2310f8b0e96e49", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x503b54ed1e62365f0c9e4caf1479623b08acbe7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016131cfd630080000000000000000000000000000000000000000000000000000000000008d370", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x82", + "removed": false + } + ], + "logsBloom": "0x00000400000010000000000000000000800000000000000000000000040000000008000040020020000000010004004020000400000000000000420000000000000010110400000000000400000001000040000020000008004400040000200000000000020800000500010000000800000010000000000000000000000200001000010000000000200000080000000800800200000400000000000000100000000000000000000000400000000000100200000000040000000002200100000000000000000000c00001000000000500000000000000000000001000000020000042880000000080000000000000000220000200000000400000000000000000", + "type": "0x2", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "gasUsed": "0x82f92", + "effectiveGasPrice": "0x269a2bd38", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1717004299, + "chain": 11155111, + "commit": "9365a25" +} \ No newline at end of file diff --git a/broadcast/DeployAccount.s.sol/11155111/run-latest.json b/broadcast/DeployAccount.s.sol/11155111/run-latest.json new file mode 100644 index 0000000..bc9683c --- /dev/null +++ b/broadcast/DeployAccount.s.sol/11155111/run-latest.json @@ -0,0 +1,253 @@ +{ + "transactions": [ + { + "hash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionType": "CALL", + "contractName": "EntryPoint", + "contractAddress": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "function": "handleOps((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes)[],address)", + "arguments": [ + "[(0xC2b17e73603DCcc195118a36F3203134fd7985F5, 36289858002883497250370664447681530215120906269012176337949278381808266772480, 0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0xd9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000034f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000060e7400000000000000000000000000051d3c, 69660, 0x0000000000000000000000005241210000000000000000000000000ca36194f7, 0x, 0x000000000000ffffffffffff4141414141414141414141414141414141)]", + "0x0000000000000000000000000000000000000069" + ], + "transaction": { + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "gas": "0xb4e5d", + "value": "0x0", + "input": "0x765e827f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000060e7400000000000000000000000000051d3c000000000000000000000000000000000000000000000000000000000001101c0000000000000000000000005241210000000000000000000000000ca36194f7000000000000000000000000000000000000000000000000000000000000074000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000138e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed61688f0b90000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000844fff40e10fbcbd24808ab49f2f7b810a39c8ad9adf780a0d65fa6330d7edf0ac2849f2f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000484d9ed0e8f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000008d70ae4ae3fb2a73e78f57da16e6e1edbe9fd3eb000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000016415cca638000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a500000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4e9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000034f7c012789aac54b5e33ea5b88064ca1f1172de05000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d000000000000ffffffffffff4141414141414141414141414141414141000000", + "nonce": "0x4b", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "initCode": "0x6080604052348015600f57600080fd5b5060405161016b38038061016b833981016040819052602c9160b4565b6001600160a01b03811660905760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905560e2565b60006020828403121560c557600080fd5b81516001600160a01b038116811460db57600080fd5b9392505050565b607b806100f06000396000f3fe6080604052600080546001600160a01b0316632cf35bc960e11b823501602757808252602082f35b3682833781823684845af490503d82833e806040573d82fd5b503d81f3fea2646970667358221220384140740989472bb37a5dc002cd4d0f267ec130ea5d9557883ec30fe97f138864736f6c634300081900330000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xa1b1d0", + "logs": [ + { + "address": "0xe89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed6", + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x0000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x75", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d", + "0x46f21483170fbcc71491ad51ad150df0d6aaff32b095ca3f6c2310f8b0e96e49", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000e89e194e5bd3e5a8d40c4cd9c95dd2c56a8a6ed60000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x76", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0xd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000503b54ed1e62365f0c9e4caf1479623b08acbe77", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x77", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000000000000000000000000000009a9c4caaaba1d4", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x78", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x79", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7a", + "removed": false + }, + { + "address": "0x1d8c40f958fb6998067e9b8b26850d2ae30b7c70", + "topics": [ + "0xb8a00d6d8ca1be30bfec34d8f97e55f0f0fd9eeb7fb46e030516363d4cfe1ad6" + ], + "data": "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7b", + "removed": false + }, + { + "address": "0x1d8c40f958fb6998067e9b8b26850d2ae30b7c70", + "topics": [ + "0xb6d9a72244037f5f1de04d8ff74cd328f1574efc59a02163d0fec05548719746" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7c", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7d", + "removed": false + }, + { + "address": "0xbaca6f74a5549368568f387fd989c279f940f1a5", + "topics": [ + "0x9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e94", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "0x0000000000000000000000001d8c40f958fb6998067e9b8b26850d2ae30b7c70" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7e", + "removed": false + }, + { + "address": "0xbaca6f74a5549368568f387fd989c279f940f1a5", + "topics": [ + "0xf48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c2", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x7f", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001ec6a1e000dd440995667e48cb880785c7d6831c000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f7c012789aac54b5e33ea5b88064ca1f1172de05", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x80", + "removed": false + }, + { + "address": "0xc2b17e73603dccc195118a36f3203134fd7985f5", + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000baca6f74a5549368568f387fd989c279f940f1a5" + ], + "data": "0x", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x81", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0x49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f", + "0x46f21483170fbcc71491ad51ad150df0d6aaff32b095ca3f6c2310f8b0e96e49", + "0x000000000000000000000000c2b17e73603dccc195118a36f3203134fd7985f5", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x503b54ed1e62365f0c9e4caf1479623b08acbe7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016131cfd630080000000000000000000000000000000000000000000000000000000000008d370", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "logIndex": "0x82", + "removed": false + } + ], + "logsBloom": "0x00000400000010000000000000000000800000000000000000000000040000000008000040020020000000010004004020000400000000000000420000000000000010110400000000000400000001000040000020000008004400040000200000000000020800000500010000000800000010000000000000000000000200001000010000000000200000080000000800800200000400000000000000100000000000000000000000400000000000100200000000040000000002200100000000000000000000c00001000000000500000000000000000000001000000020000042880000000080000000000000000220000200000000400000000000000000", + "type": "0x2", + "transactionHash": "0xf43285a116cd91cfb8413a83b6d648c3735efd923917da78f16f51810f56e15e", + "transactionIndex": "0x42", + "blockHash": "0x720795117e6d57e03486746e6b33f8216cc55b39cc7244fb5763338e1fec6533", + "blockNumber": "0x5b93c0", + "gasUsed": "0x82f92", + "effectiveGasPrice": "0x269a2bd38", + "from": "0x8749313f626b100b822d573c71dfffdaca383032", + "to": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1717004299, + "chain": 11155111, + "commit": "9365a25" +} \ No newline at end of file diff --git a/script/DeployAccount.s.sol b/script/DeployAccount.s.sol new file mode 100644 index 0000000..10da05b --- /dev/null +++ b/script/DeployAccount.s.sol @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Script } from "forge-std/Script.sol"; +import { Safe7579 } from "src/Safe7579.sol"; +import { Safe7579Launchpad } from "src/Safe7579Launchpad.sol"; +import { IERC7484 } from "src/interfaces/IERC7484.sol"; +import { Safe7579 } from "src/Safe7579.sol"; +import { ISafe7579 } from "src/ISafe7579.sol"; +import { IERC7484 } from "src/interfaces/IERC7484.sol"; +import "src/DataTypes.sol"; +import { ModuleManager } from "src/core/ModuleManager.sol"; +import { MockValidator } from "module-bases/mocks/MockValidator.sol"; +import { MockRegistry } from "test/mocks/MockRegistry.sol"; +import { MockExecutor } from "test/mocks/MockExecutor.sol"; +import { MockFallback } from "test/mocks/MockFallback.sol"; +import { ExecutionLib } from "erc7579/lib/ExecutionLib.sol"; +import { ModeLib } from "erc7579/lib/ModeLib.sol"; +import { IERC7579Account, Execution } from "erc7579/interfaces/IERC7579Account.sol"; +import { MockTarget } from "test/mocks/MockTarget.sol"; + +import { Safe } from "@safe-global/safe-contracts/contracts/Safe.sol"; +import { + SafeProxy, + SafeProxyFactory +} from "@safe-global/safe-contracts/contracts/proxies/SafeProxyFactory.sol"; +import { LibClone } from "solady/utils/LibClone.sol"; +import { Safe7579Launchpad } from "src/Safe7579Launchpad.sol"; + +import { Solarray } from "solarray/Solarray.sol"; +import "test/dependencies/EntryPoint.sol"; + +import "forge-std/console2.sol"; + +/** + * @title DeployAccount + * @author @kopy-kat + */ +contract DeployAccountScript is Script { + function run() public { + IERC7484 registry = IERC7484(0x1D8c40F958Fb6998067e9B8B26850d2ae30b7c70); + address payable safe7579 = payable(address(0xbaCA6f74a5549368568f387FD989C279f940f1A5)); + address singleton = address(0x8d70Ae4aE3fB2A73E78F57DA16e6E1eDbe9fD3eb); + address payable launchpad = payable(address(0x1EC6A1e000dD440995667e48cB880785C7d6831C)); + address validator = address(0x503b54Ed1E62365F0c9e4caF1479623b08acbe77); + address safeProxyFactory = address(0xE89e194E5bD3e5a8d40C4cd9c95Dd2C56a8A6ed6); + + ModuleInit[] memory validators = new ModuleInit[](1); + validators[0] = ModuleInit({ module: validator, initData: bytes("") }); + ModuleInit[] memory executors = new ModuleInit[](0); + ModuleInit[] memory fallbacks = new ModuleInit[](0); + ModuleInit[] memory hooks = new ModuleInit[](0); + + Safe7579Launchpad.InitData memory initData = Safe7579Launchpad.InitData({ + singleton: singleton, + owners: Solarray.addresses(address(0xF7C012789aac54B5E33EA5b88064ca1F1172De05)), + threshold: 1, + setupTo: launchpad, + setupData: abi.encodeCall( + Safe7579Launchpad.initSafe7579, + ( + safe7579, + executors, + fallbacks, + hooks, + Solarray.addresses(address(0xF7C012789aac54B5E33EA5b88064ca1F1172De05)), + 1 + ) + ), + safe7579: ISafe7579(safe7579), + validators: validators, + callData: abi.encodeCall( + IERC7579Account.execute, + ( + ModeLib.encodeSimpleSingle(), + ExecutionLib.encodeSingle({ + target: address(0xF7C012789aac54B5E33EA5b88064ca1F1172De05), + value: 1, + callData: "" + }) + ) + ) + }); + + bytes32 initHash = Safe7579Launchpad(launchpad).hash(initData); + + bytes memory factoryInitializer = + abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, address(0), "")); + + PackedUserOperation memory userOp = + getDefaultUserOp(address(0), validator, Safe7579(safe7579)); + + bytes32 salt = bytes32(uint256(1)); + + userOp.callData = abi.encodeCall(Safe7579Launchpad.setupSafe, (initData)); + userOp.initCode = _initCode(factoryInitializer, salt, safeProxyFactory, launchpad); + + address predict = Safe7579Launchpad(launchpad).predictSafeAddress({ + singleton: launchpad, + safeProxyFactory: safeProxyFactory, + creationCode: SafeProxyFactory(safeProxyFactory).proxyCreationCode(), + salt: salt, + factoryInitializer: factoryInitializer + }); + userOp.sender = predict; + userOp.signature = abi.encodePacked( + uint48(0), uint48(type(uint48).max), hex"4141414141414141414141414141414141" + ); + + IEntryPoint entryPoint = IEntryPoint(address(0x0000000071727De22E5E9d8BAf0edAc6f37da032)); + + bytes32 userOpHash = entryPoint.getUserOpHash(userOp); + PackedUserOperation[] memory userOps = new PackedUserOperation[](1); + userOps[0] = userOp; + + console2.log(predict); + + vm.startBroadcast(vm.envUint("PK")); + + // send eth to userOp sender + + entryPoint.handleOps(userOps, payable(address(0x69))); + + vm.stopBroadcast(); + } + + function _initCode( + bytes memory initializer, + bytes32 salt, + address safeProxyFactory, + address launchpad + ) + internal + view + returns (bytes memory _initCode) + { + _initCode = abi.encodePacked( + address(safeProxyFactory), + abi.encodeCall( + SafeProxyFactory.createProxyWithNonce, + (address(launchpad), initializer, uint256(salt)) + ) + ); + } + + function getDefaultUserOp( + address account, + address validator, + Safe7579 safe7579 + ) + internal + view + returns (PackedUserOperation memory userOp) + { + userOp = PackedUserOperation({ + sender: account, + nonce: safe7579.getNonce(account, validator), + initCode: "", + callData: "", + accountGasLimits: bytes32( + 0x00000000000000000000000000060e7400000000000000000000000000051d3c + ), + preVerificationGas: 69_660, + gasFees: bytes32(0x0000000000000000000000005241210000000000000000000000000ca36194f7), + paymasterAndData: bytes(""), + signature: abi.encodePacked(hex"41414141") + }); + } +} From c82e6a9482dd1ff4d62056ee420abf400cd1729e Mon Sep 17 00:00:00 2001 From: kopy-kat Date: Wed, 24 Jul 2024 18:32:34 +0100 Subject: [PATCH 2/3] fix: add deploy to solhint ignore --- .solhintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.solhintignore b/.solhintignore index dbd17a1..4df1726 100644 --- a/.solhintignore +++ b/.solhintignore @@ -1,2 +1,3 @@ node_modules/ test/ +script/DeployAccount.s.sol \ No newline at end of file From 0314f4d6d8caedc6c8ebee451eb84eccf580cc52 Mon Sep 17 00:00:00 2001 From: kopy-kat Date: Wed, 24 Jul 2024 18:33:44 +0100 Subject: [PATCH 3/3] chore: merge main --- .github/workflows/artifacts.yaml | 12 + .solhintignore | 3 +- artifacts/BatchedExecUtil.json | 287 +++ artifacts/ModuleInstallUtil.json | 235 +++ artifacts/Safe7579.json | 1810 +++++++++++++++++ artifacts/Safe7579DCUtil.json | 443 ++++ artifacts/Safe7579Launchpad.json | 1445 +++++++++++++ artifacts/interfaces/IERC7579Account.json | 528 +++++ .../interfaces/IERC7579AccountEvents.json | 144 ++ artifacts/interfaces/IERC7579AccountView.json | 172 ++ artifacts/interfaces/IExecutor.json | 171 ++ artifacts/interfaces/IFallback.json | 171 ++ artifacts/interfaces/IHook.json | 224 ++ artifacts/interfaces/IMSA.json | 848 ++++++++ artifacts/interfaces/IModule.json | 171 ++ artifacts/interfaces/ISafe.json | 462 +++++ artifacts/interfaces/ISafe7579.json | 1397 +++++++++++++ artifacts/interfaces/ISafeOp.json | 209 ++ artifacts/interfaces/IValidator.json | 319 +++ ...-blockchain-rhinestone-safe7579-report.pdf | Bin 0 -> 1825397 bytes .../Deploy.s.sol/11155111/run-1715275639.json | 91 - .../Deploy.s.sol/11155111/run-latest.json | 91 - .../11155111/run-1719417421.json | 49 + .../11155111/run-latest.json | 49 + package.json | 8 +- pnpm-lock.yaml | 742 ++++--- script/Deploy.s.sol | 13 +- script/DeployBuilder.s.sol | 23 + shell/prepare-artifacts.sh | 43 + src/ISafe7579.sol | 43 +- src/Safe7579.sol | 206 +- src/Safe7579Launchpad.sol | 165 +- src/core/ExecutionHelper.sol | 44 +- src/core/Initializer.sol | 72 +- src/core/ModuleManager.sol | 157 +- src/core/RegistryAdapter.sol | 16 +- src/core/SafeOp.sol | 100 + src/core/SupportViewer.sol | 52 + src/interfaces/IERC7484.sol | 1 - src/interfaces/IERC7579Account.sol | 55 +- src/interfaces/IERC7579Module.sol | 5 - src/interfaces/ISafe.sol | 11 +- src/interfaces/ISafeOp.sol | 67 +- src/lib/ModeLib.sol | 5 + src/utils/DCUtil.sol | 14 +- src/utils/Safe7579UserOperationBuilder.sol | 108 +- test/ERC7579Compliance/Base.t.sol | 2 +- test/ERC7579Compliance/ModuleManagement.t.sol | 18 + test/Launchpad.t.sol | 6 +- test/SafeERC7579.t.sol | 6 +- test/SafeValidation.t.sol | 171 ++ test/flavors/ExistingSafe.t.sol | 97 + test/flavors/NoLaunchpad.t.sol | 57 + test/mocks/MockRegistry.sol | 2 + 54 files changed, 10738 insertions(+), 902 deletions(-) create mode 100644 .github/workflows/artifacts.yaml create mode 100644 artifacts/BatchedExecUtil.json create mode 100644 artifacts/ModuleInstallUtil.json create mode 100644 artifacts/Safe7579.json create mode 100644 artifacts/Safe7579DCUtil.json create mode 100644 artifacts/Safe7579Launchpad.json create mode 100644 artifacts/interfaces/IERC7579Account.json create mode 100644 artifacts/interfaces/IERC7579AccountEvents.json create mode 100644 artifacts/interfaces/IERC7579AccountView.json create mode 100644 artifacts/interfaces/IExecutor.json create mode 100644 artifacts/interfaces/IFallback.json create mode 100644 artifacts/interfaces/IHook.json create mode 100644 artifacts/interfaces/IMSA.json create mode 100644 artifacts/interfaces/IModule.json create mode 100644 artifacts/interfaces/ISafe.json create mode 100644 artifacts/interfaces/ISafe7579.json create mode 100644 artifacts/interfaces/ISafeOp.json create mode 100644 artifacts/interfaces/IValidator.json create mode 100644 audits/ackee-blockchain-rhinestone-safe7579-report.pdf delete mode 100644 broadcast/Deploy.s.sol/11155111/run-1715275639.json delete mode 100644 broadcast/Deploy.s.sol/11155111/run-latest.json create mode 100644 broadcast/DeployBuilder.s.sol/11155111/run-1719417421.json create mode 100644 broadcast/DeployBuilder.s.sol/11155111/run-latest.json create mode 100644 script/DeployBuilder.s.sol create mode 100755 shell/prepare-artifacts.sh create mode 100644 src/core/SafeOp.sol create mode 100644 src/core/SupportViewer.sol create mode 100644 test/SafeValidation.t.sol create mode 100644 test/flavors/ExistingSafe.t.sol create mode 100644 test/flavors/NoLaunchpad.t.sol diff --git a/.github/workflows/artifacts.yaml b/.github/workflows/artifacts.yaml new file mode 100644 index 0000000..b4f3a55 --- /dev/null +++ b/.github/workflows/artifacts.yaml @@ -0,0 +1,12 @@ +on: + workflow_dispatch: + push: + tags: + - "*" + branches: + - "main" + pull_request: + +jobs: + forge-artifacts: + uses: "rhinestonewtf/reusable-workflows/.github/workflows/forge-artifacts.yaml@main" diff --git a/.solhintignore b/.solhintignore index 4df1726..5677ff7 100644 --- a/.solhintignore +++ b/.solhintignore @@ -1,3 +1,4 @@ node_modules/ test/ -script/DeployAccount.s.sol \ No newline at end of file +script/DeployAccount.s.sol +src/utils/Safe7579UserOperationBuilder.sol diff --git a/artifacts/BatchedExecUtil.json b/artifacts/BatchedExecUtil.json new file mode 100644 index 0000000..3e5b5f0 --- /dev/null +++ b/artifacts/BatchedExecUtil.json @@ -0,0 +1,287 @@ +{ + "abi": [ + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecuteReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "success", "type": "bool[]", "internalType": "bool[]" }, + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b5061065c8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633f707e6b1461005157806350c890221461006657806361085573146100795780639abb6e17146100a2575b600080fd5b61006461005f3660046103e5565b6100c3565b005b6100646100743660046103e5565b61012d565b61008c6100873660046103e5565b610192565b60405161009991906104ef565b60405180910390f35b6100b56100b03660046103e5565b610254565b604051610099929190610509565b8060005b8181101561012757368484838181106100e2576100e2610563565b90506020028101906100f49190610579565b905061011d6101066020830183610599565b602083013561011860408501856105c2565b61037e565b50506001016100c7565b50505050565b8060005b81811015610127573684848381811061014c5761014c610563565b905060200281019061015e9190610579565b90506101876101706020830183610599565b602083013561018260408501856105c2565b6103b4565b505050600101610131565b6060818067ffffffffffffffff8111156101ae576101ae610610565b6040519080825280602002602001820160405280156101e157816020015b60608152602001906001900390816101cc5790505b50915060005b8181101561024c573685858381811061020257610202610563565b90506020028101906102149190610579565b90506102266101066020830183610599565b84838151811061023857610238610563565b6020908102919091010152506001016101e7565b505092915050565b606080828067ffffffffffffffff81111561027157610271610610565b6040519080825280602002602001820160405280156102a457816020015b606081526020019060019003908161028f5790505b5091508067ffffffffffffffff8111156102c0576102c0610610565b6040519080825280602002602001820160405280156102e9578160200160208202803683370190505b50925060005b81811015610375573686868381811061030a5761030a610563565b905060200281019061031c9190610579565b905061032e6101706020830183610599565b86848151811061034057610340610563565b6020026020010186858151811061035957610359610563565b60209081029190910101919091529015159052506001016102ef565b50509250929050565b60405181838237600038838387895af161039b573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156103f857600080fd5b823567ffffffffffffffff81111561040f57600080fd5b8301601f8101851361042057600080fd5b803567ffffffffffffffff81111561043757600080fd5b8560208260051b840101111561044c57600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156104e357848303601f190188528151805180855260005b818110156104b157602081840181015187830182015201610495565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061047a565b50909695505050505050565b602081526000610502602083018461045c565b9392505050565b6040808252835190820181905260009060208501906060840190835b818110156105455783511515835260209384019390920191600101610525565b50508381036020850152610559818661045c565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261058f57600080fd5b9190910192915050565b6000602082840312156105ab57600080fd5b81356001600160a01b038116811461050257600080fd5b6000808335601e198436030181126105d957600080fd5b83018035915067ffffffffffffffff8211156105f457600080fd5b60200191503681900382131561060957600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fdfea26469706673582212208f0372ef78adc893daf8a86e7b521b3e1a883b75dc6574ec169092079a52aed664736f6c634300081a0033", + "sourceMap": "863:3150:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80633f707e6b1461005157806350c890221461006657806361085573146100795780639abb6e17146100a2575b600080fd5b61006461005f3660046103e5565b6100c3565b005b6100646100743660046103e5565b61012d565b61008c6100873660046103e5565b610192565b60405161009991906104ef565b60405180910390f35b6100b56100b03660046103e5565b610254565b604051610099929190610509565b8060005b8181101561012757368484838181106100e2576100e2610563565b90506020028101906100f49190610579565b905061011d6101066020830183610599565b602083013561011860408501856105c2565b61037e565b50506001016100c7565b50505050565b8060005b81811015610127573684848381811061014c5761014c610563565b905060200281019061015e9190610579565b90506101876101706020830183610599565b602083013561018260408501856105c2565b6103b4565b505050600101610131565b6060818067ffffffffffffffff8111156101ae576101ae610610565b6040519080825280602002602001820160405280156101e157816020015b60608152602001906001900390816101cc5790505b50915060005b8181101561024c573685858381811061020257610202610563565b90506020028101906102149190610579565b90506102266101066020830183610599565b84838151811061023857610238610563565b6020908102919091010152506001016101e7565b505092915050565b606080828067ffffffffffffffff81111561027157610271610610565b6040519080825280602002602001820160405280156102a457816020015b606081526020019060019003908161028f5790505b5091508067ffffffffffffffff8111156102c0576102c0610610565b6040519080825280602002602001820160405280156102e9578160200160208202803683370190505b50925060005b81811015610375573686868381811061030a5761030a610563565b905060200281019061031c9190610579565b905061032e6101706020830183610599565b86848151811061034057610340610563565b6020026020010186858151811061035957610359610563565b60209081029190910101919091529015159052506001016102ef565b50509250929050565b60405181838237600038838387895af161039b573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156103f857600080fd5b823567ffffffffffffffff81111561040f57600080fd5b8301601f8101851361042057600080fd5b803567ffffffffffffffff81111561043757600080fd5b8560208260051b840101111561044c57600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156104e357848303601f190188528151805180855260005b818110156104b157602081840181015187830182015201610495565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061047a565b50909695505050505050565b602081526000610502602083018461045c565b9392505050565b6040808252835190820181905260009060208501906060840190835b818110156105455783511515835260209384019390920191600101610525565b50508381036020850152610559818661045c565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261058f57600080fd5b9190910192915050565b6000602082840312156105ab57600080fd5b81356001600160a01b038116811461050257600080fd5b6000808335601e198436030181126105d957600080fd5b83018035915067ffffffffffffffff8211156105f457600080fd5b60200191503681900382131561060957600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fdfea26469706673582212208f0372ef78adc893daf8a86e7b521b3e1a883b75dc6574ec169092079a52aed664736f6c634300081a0033", + "sourceMap": "863:3150:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:283;;;;;;:::i;:::-;;:::i;:::-;;894:289;;;;;;:::i;:::-;;:::i;1478:391::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1875:472;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1189:283::-;1275:10;1258:14;1303:163;1323:6;1319:1;:10;1303:163;;;1350:24;1377:10;;1388:1;1377:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1350:40;-1:-1:-1;1404:51:132;1413:12;;;;1350:40;1413:12;:::i;:::-;1427:11;;;;1440:14;;;;1427:5;1440:14;:::i;:::-;1404:8;:51::i;:::-;-1:-1:-1;;1331:3:132;;1303:163;;;;1248:224;1189:283;;:::o;894:289::-;983:10;966:14;1011:166;1031:6;1027:1;:10;1011:166;;;1058:24;1085:10;;1096:1;1085:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1058:40;-1:-1:-1;1112:54:132;1124:12;;;;1058:40;1124:12;:::i;:::-;1138:11;;;;1151:14;;;;1138:5;1151:14;:::i;:::-;1112:11;:54::i;:::-;-1:-1:-1;;;1039:3:132;;1011:166;;1478:391;1568:21;1622:10;;1658:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:28;;1693:9;1688:175;1708:6;1704:1;:10;1688:175;;;1735:24;1762:10;;1773:1;1762:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1735:40;-1:-1:-1;1801:51:132;1810:12;;;;1735:40;1810:12;:::i;1801:51::-;1789:6;1796:1;1789:9;;;;;;;;:::i;:::-;;;;;;;;;;:63;-1:-1:-1;1716:3:132;;1688:175;;;;1595:274;1478:391;;;;:::o;1875:472::-;1968:21;;2045:10;;2081:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:28;;2131:6;2120:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:18:132;;2110:28;;2154:9;2149:192;2169:6;2165:1;:10;2149:192;;;2196:24;2223:10;;2234:1;2223:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2196:40;-1:-1:-1;2276:54:132;2288:12;;;;2196:40;2288:12;:::i;2276:54::-;2251:7;2259:1;2251:10;;;;;;;;:::i;:::-;;;;;;2263:6;2270:1;2263:9;;;;;;;;:::i;:::-;;;;;;;;;;2250:80;;;;;;;;;-1:-1:-1;2177:3:132;;2149:192;;;;2018:329;1875:472;;;;;:::o;2353:912::-;2637:4;2631:11;2693:15;2676;2631:11;2655:54;2796:4;2784:10;2767:15;2759:6;2752:5;2744:6;2737:5;2732:69;2722:269;;2911:16;2905:4;2897:6;2882:46;2960:16;2952:6;2945:32;2722:269;3019:16;3011:6;3004:32;3091:4;3083:6;3079:17;3133:16;3127:4;3124:1;3109:41;3207:16;3200:24;3194:4;3187:38;2353:912;;-1:-1:-1;;;;2353:912:132:o;3271:740::-;3572:4;3566:11;3428:12;;3628:15;3611;3566:11;3590:54;3732:4;3720:10;3703:15;3695:6;3688:5;3680:6;3673:5;3668:69;3657:80;;3765:16;3757:6;3750:32;3837:4;3829:6;3825:17;3879:16;3873:4;3870:1;3855:41;3953:16;3950:1;3946:24;3940:4;3933:38;;3271:740;;;;;;;:::o;14:640:153:-;130:6;138;191:2;179:9;170:7;166:23;162:32;159:52;;;207:1;204;197:12;159:52;247:9;234:23;280:18;272:6;269:30;266:50;;;312:1;309;302:12;266:50;335:22;;388:4;380:13;;376:27;-1:-1:-1;366:55:153;;417:1;414;407:12;366:55;457:2;444:16;483:18;475:6;472:30;469:50;;;515:1;512;505:12;469:50;568:7;563:2;553:6;550:1;546:14;542:2;538:23;534:32;531:45;528:65;;;589:1;586;579:12;528:65;620:2;612:11;;;;;642:6;;-1:-1:-1;14:640:153;-1:-1:-1;;;14:640:153:o;659:955::-;710:3;741;773:5;767:12;800:6;795:3;788:19;832:4;827:3;823:14;816:21;;890:4;880:6;877:1;873:14;866:5;862:26;858:37;929:4;922:5;918:16;952:1;962:626;976:6;973:1;970:13;962:626;;;1041:16;;;-1:-1:-1;;1037:30:153;1025:43;;1091:13;;1133:9;;1155:22;;;1201:1;1215:161;1231:8;1226:3;1223:17;1215:161;;;1355:4;1341:12;;;1337:23;;1331:30;1308:14;;;1304:25;;1297:65;1250:14;1215:161;;;1219:3;1428:1;1421:4;1410:8;1404:4;1400:19;1396:30;1389:41;1499:4;1492:2;1488:7;1483:2;1473:8;1469:17;1465:31;1459:4;1455:42;1451:53;1443:61;;;;1539:4;1531:6;1527:17;1517:27;;1573:4;1568:3;1564:14;1557:21;;998:1;995;991:9;986:14;;962:626;;;-1:-1:-1;1604:4:153;;659:955;-1:-1:-1;;;;;;659:955:153:o;1619:277::-;1816:2;1805:9;1798:21;1779:4;1836:54;1886:2;1875:9;1871:18;1863:6;1836:54;:::i;:::-;1828:62;1619:277;-1:-1:-1;;;1619:277:153:o;1901:817::-;2181:2;2193:21;;;2263:13;;2166:18;;;2285:22;;;2133:4;;2376;2364:17;;;2338:2;2323:18;;;2133:4;2409:189;2423:6;2420:1;2417:13;2409:189;;;2498:13;;2491:21;2484:29;2472:42;;2543:4;2571:17;;;;2534:14;;;;2445:1;2438:9;2409:189;;;2413:3;;2645:9;2640:3;2636:19;2629:4;2618:9;2614:20;2607:49;2673:39;2708:3;2700:6;2673:39;:::i;:::-;2665:47;1901:817;-1:-1:-1;;;;;;1901:817:153:o;2723:127::-;2784:10;2779:3;2775:20;2772:1;2765:31;2815:4;2812:1;2805:15;2839:4;2836:1;2829:15;2855:327;2951:4;3009:11;2996:25;3103:2;3099:7;3088:8;3072:14;3068:29;3064:43;3044:18;3040:68;3030:96;;3122:1;3119;3112:12;3030:96;3143:33;;;;;2855:327;-1:-1:-1;;2855:327:153:o;3187:286::-;3246:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3341:23;;-1:-1:-1;;;;;3393:31:153;;3383:42;;3373:70;;3439:1;3436;3429:12;3478:521;3555:4;3561:6;3621:11;3608:25;3715:2;3711:7;3700:8;3684:14;3680:29;3676:43;3656:18;3652:68;3642:96;;3734:1;3731;3724:12;3642:96;3761:33;;3813:20;;;-1:-1:-1;3856:18:153;3845:30;;3842:50;;;3888:1;3885;3878:12;3842:50;3921:4;3909:17;;-1:-1:-1;3952:14:153;3948:27;;;3938:38;;3935:58;;;3989:1;3986;3979:12;3935:58;3478:521;;;;;:::o;4004:127::-;4065:10;4060:3;4056:20;4053:1;4046:31;4096:4;4093:1;4086:15;4120:4;4117:1;4110:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "execute((address,uint256,bytes)[])": "3f707e6b", + "executeReturn((address,uint256,bytes)[])": "61085573", + "tryExecute((address,uint256,bytes)[])": "50c89022", + "tryExecuteReturn((address,uint256,bytes)[])": "9abb6e17" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"executeReturn\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecuteReturn\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"},{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"BatchedExecUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeReturn", + "outputs": [ + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecuteReturn", + "outputs": [ + { "internalType": "bool[]", "name": "success", "type": "bool[]" }, + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "BatchedExecUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/ModuleInstallUtil.json b/artifacts/ModuleInstallUtil.json new file mode 100644 index 0000000..ce5f815 --- /dev/null +++ b/artifacts/ModuleInstallUtil.json @@ -0,0 +1,235 @@ +{ + "abi": [ + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unInstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b506102a88061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063782725251461003b5780639517e29f14610050575b600080fd5b61004e6100493660046101ab565b610063565b005b61004e61005e3660046101ab565b61010c565b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e3906100919085908590600401610243565b600060405180830381600087803b1580156100ab57600080fd5b505af11580156100bf573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe709061013a9085908590600401610243565b600060405180830381600087803b15801561015457600080fd5b505af1158015610168573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393500190506100fe565b600080600080606085870312156101c157600080fd5b8435935060208501356001600160a01b03811681146101df57600080fd5b9250604085013567ffffffffffffffff8111156101fb57600080fd5b8501601f8101871361020c57600080fd5b803567ffffffffffffffff81111561022357600080fd5b87602082840101111561023557600080fd5b949793965060200194505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122072b28265091e5c9e174375104ba21d188073e5871eac41392a625877f9042d0f64736f6c634300081a0033", + "sourceMap": "275:586:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063782725251461003b5780639517e29f14610050575b600080fd5b61004e6100493660046101ab565b610063565b005b61004e61005e3660046101ab565b61010c565b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e3906100919085908590600401610243565b600060405180830381600087803b1580156100ab57600080fd5b505af11580156100bf573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe709061013a9085908590600401610243565b600060405180830381600087803b15801561015457600080fd5b505af1158015610168573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393500190506100fe565b600080600080606085870312156101c157600080fd5b8435935060208501356001600160a01b03811681146101df57600080fd5b9250604085013567ffffffffffffffff8111156101fb57600080fd5b8501601f8101871361020c57600080fd5b803567ffffffffffffffff81111561022357600080fd5b87602082840101111561023557600080fd5b949793965060200194505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122072b28265091e5c9e174375104ba21d188073e5871eac41392a625877f9042d0f64736f6c634300081a0033", + "sourceMap": "275:586:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:263;;;;;;:::i;:::-;;:::i;:::-;;333:257;;;;;;:::i;:::-;;:::i;596:263::-;745:44;;-1:-1:-1;;;745:44:132;;-1:-1:-1;;;;;745:34:132;;;;;:44;;780:8;;;;745:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;804:48:132;;;1414:25:153;;;-1:-1:-1;;;;;1475:32:153;;1470:2;1455:18;;1448:60;804:48:132;;-1:-1:-1;1387:18:153;;-1:-1:-1;804:48:132;;;;;;;;596:263;;;;:::o;333:257::-;480:42;;-1:-1:-1;;;480:42:132;;-1:-1:-1;;;;;480:32:132;;;;;:42;;513:8;;;;480:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;537:46:132;;;1414:25:153;;;-1:-1:-1;;;;;1475:32:153;;1470:2;1455:18;;1448:60;537:46:132;;-1:-1:-1;1387:18:153;;-1:-1:-1;537:46:132;1240:274:153;14:828;102:6;110;118;126;179:2;167:9;158:7;154:23;150:32;147:52;;;195:1;192;185:12;147:52;218:23;;;-1:-1:-1;291:2:153;276:18;;263:32;-1:-1:-1;;;;;324:31:153;;314:42;;304:70;;370:1;367;360:12;304:70;393:5;-1:-1:-1;449:2:153;434:18;;421:32;476:18;465:30;;462:50;;;508:1;505;498:12;462:50;531:22;;584:4;576:13;;572:27;-1:-1:-1;562:55:153;;613:1;610;603:12;562:55;653:2;640:16;679:18;671:6;668:30;665:50;;;711:1;708;701:12;665:50;756:7;751:2;742:6;738:2;734:15;730:24;727:37;724:57;;;777:1;774;767:12;724:57;14:828;;;;-1:-1:-1;808:2:153;800:11;;-1:-1:-1;;;14:828:153:o;847:388::-;1004:2;993:9;986:21;1043:6;1038:2;1027:9;1023:18;1016:34;1100:6;1092;1087:2;1076:9;1072:18;1059:48;1156:1;1127:22;;;1151:2;1123:31;;;1116:42;;;;1219:2;1198:15;;;-1:-1:-1;;1194:29:153;1179:45;1175:54;;847:388;-1:-1:-1;847:388:153:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "installModule(uint256,address,bytes)": "9517e29f", + "unInstallModule(uint256,address,bytes)": "78272525" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"unInstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"ModuleInstallUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unInstallModule" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "ModuleInstallUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/Safe7579.json b/artifacts/Safe7579.json new file mode 100644 index 0000000..ed18c1b --- /dev/null +++ b/artifacts/Safe7579.json @@ -0,0 +1,1810 @@ +{ + "abi": [ + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "entryPoint", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnDatas", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [ + { "name": "selector", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getExecutorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNonce", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" }, + { "name": "validator", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "nonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "registryInit", + "type": "tuple", + "internalType": "struct RegistryInit", + "components": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeAccountWithValidators", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "magicValue", "type": "bytes4", "internalType": "bytes4" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setRegistry", + "inputs": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [ + { "name": "supported", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validSignature", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ERC7484RegistryConfigured", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "registry", + "type": "address", + "indexed": true, + "internalType": "contract IERC7484" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Safe7579Initialized", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TryExecutionFailed", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": false, + "internalType": "contract ISafe" + }, + { + "name": "numberInBatch", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TryExecutionsFailed", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": false, + "internalType": "contract ISafe" + }, + { + "name": "success", + "type": "bool[]", + "indexed": false, + "internalType": "bool[]" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccountAccessUnauthorized", "inputs": [] }, + { "type": "error", "name": "ExecutionFailed", "inputs": [] }, + { + "type": "error", + "name": "FallbackInstalled", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "HookAlreadyInstalled", + "inputs": [ + { "name": "currentHook", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "InvalidFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { "type": "error", "name": "InvalidHookType", "inputs": [] }, + { + "type": "error", + "name": "InvalidInitData", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "InvalidInput", "inputs": [] }, + { + "type": "error", + "name": "InvalidModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidModuleType", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "moduleType", "type": "uint256", "internalType": "uint256" } + ] + }, + { "type": "error", "name": "LinkedList_AlreadyInitialized", "inputs": [] }, + { + "type": "error", + "name": "LinkedList_EntryAlreadyInList", + "inputs": [ + { "name": "entry", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "LinkedList_InvalidEntry", + "inputs": [ + { "name": "entry", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "LinkedList_InvalidPage", "inputs": [] }, + { + "type": "error", + "name": "NoFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { + "object": "0x60a0604052348015600f57600080fd5b50604051601a906046565b604051809103906000f0801580156035573d6000803e3d6000fd5b506001600160a01b03166080526053565b6109e180614ee983390190565b608051614e2e6100bb600039600081816112230152818161141b0152818161157c01528181611dc501528181612216015281816122f0015281816123870152818161241e0152818161357a015281816136320152818161395a0152613a7a0152614e2e6000f3fe60806040526004361061012e5760003560e01c8063a71763a8116100ab578063d828435d1161006f578063d828435d146104a2578063e9ae5c53146104c2578063ea5f61d0146104e2578063eab77e1714610502578063f2dc691d14610522578063f698da251461054257610135565b8063a71763a8146103c7578063b0d691fe146103e7578063b875d5d81461040a578063d03c791414610455578063d691c9641461047557610135565b806355d559f4116100f257806355d559f4146102dd5780635faac46b1461030d57806379aad60e1461033b5780639517e29f1461035b5780639cfd7cff1461037b57610135565b80630a664dba146101e0578063112d3a7d146102245780631626ba7e1461025457806319822f7c1461028d578063540fb4f9146102bb57610135565b3661013557005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561016657806020526020603cf35b50336000818152600460209081526040808320546001600160e01b031984351680855260058452828520958552949092528220546001600160a01b0391821692911690806101b48484610557565b915091506101c28888610615565b95506101d084848484610728565b5050505050915050805190602001f35b3480156101ec57600080fd5b50336000908152600460205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613d49565b6107ab565b604051901515815260200161021b565b34801561026057600080fd5b5061027461026f366004613da4565b610820565b6040516001600160e01b0319909116815260200161021b565b34801561029957600080fd5b506102ad6102a8366004613e08565b610b96565b60405190815260200161021b565b3480156102c757600080fd5b506102db6102d6366004613eab565b610caa565b005b3480156102e957600080fd5b506102fd6102f8366004613fa7565b610d5a565b60405161021b9493929190614048565b34801561031957600080fd5b5061032d610328366004614094565b610fb7565b60405161021b9291906140c0565b34801561034757600080fd5b506102db610356366004614123565b610fd3565b34801561036757600080fd5b506102db610376366004613d49565b6110c8565b34801561038757600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161021b9190614164565b3480156103d357600080fd5b506102db6103e2366004613d49565b611293565b3480156103f357600080fd5b506f71727de22e5e9d8baf0edac6f37da032610207565b34801561041657600080fd5b5061020761042536600461418d565b6001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b031690565b34801561046157600080fd5b506102446104703660046141aa565b6115ba565b34801561048157600080fd5b50610495610490366004613da4565b611662565b60405161021b91906141c3565b3480156104ae57600080fd5b506102ad6104bd366004614228565b61174b565b3480156104ce57600080fd5b506102db6104dd366004613da4565b6117eb565b3480156104ee57600080fd5b5061032d6104fd366004614094565b611b88565b34801561050e57600080fd5b506102db61051d366004614267565b611b99565b34801561052e57600080fd5b5061024461053d3660046141aa565b611c08565b34801561054e57600080fd5b506102ad611c57565b6060806001600160a01b038416156105d7576105be33856000610578611cb0565b3460003660405160240161058f94939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b179052611cbc565b9150818060200190518101906105d491906143df565b91505b6001600160a01b0383161561060e576105f533846000610578611cb0565b90508080602001905181019061060b91906143df565b90505b9250929050565b600080356001600160e01b031916815260036020908152604080832033845290915290208054606091906001600160a01b03811690600160a01b900460f81b8161068557604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b61069381607f60f91b611d65565b156106d7576106cd338388886106a7611cb0565b6040516020016106b993929190614413565b604051602081830303815290604052611d77565b9350505050610722565b6106e2816000611d65565b1561071e576106cd3383600089896106f8611cb0565b60405160200161070a93929190614413565b604051602081830303815290604052611cbc565b5050505b92915050565b6001600160a01b0384161561077e5761077e338560008560405160240161074f9190614164565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b179052611e4c565b6001600160a01b038316156107a5576107a5338460008460405160240161074f9190614164565b50505050565b6000600185036107dd57336001600160a01b038516036107cd57506001610818565b6107d684611eeb565b9050610818565b600285036107ee576107d684611ef9565b60038503610801576107d6848484611f07565b60048503610814576107d6848484611f53565b5060005b949350505050565b6000338282036109ba5760006108f1826001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190614439565b60408051602081018a90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91015b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611f8e565b8051602090910120604051635ae6bd3760e01b8152600481018290529091506001600160a01b03831690635ae6bd3790602401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190614439565b6000036109a85760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b604482015260640161067c565b50630b135d3f60e11b9150610b8f9050565b60006109c96014828688614452565b6109d29161447c565b60601c90508015806109ea57506109e881611eeb565b155b15610b14576000610a89836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190614439565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91016108c0565b805160208201209091506001600160a01b03841663934f3a118284610ab18a6014818e614452565b6040518563ffffffff1660e01b8152600401610ad094939291906144c9565b60006040518083038186803b158015610ae857600080fd5b505afa158015610afc573d6000803e3d6000fd5b50630b135d3f60e11b9750610b8f9650505050505050565b6000610b733383610b23611cb0565b8a610b318a6014818e614452565b604051602401610b4494939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611d77565b905080806020019051810190610b8991906144f5565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da032610bb1611cb0565b6001600160a01b031614610bd857604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610bf65750610bf482611eeb565b155b15610c0b57610c0486612008565b9250610c70565b6000610c56338460008a8a604051602401610c27929190614557565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b179052611cbc565b905080806020019051810190610c6c9190614439565b9350505b8315610ca157610ca1336f71727de22e5e9d8baf0edac6f37da0328660405180602001604052806000815250611e4c565b50509392505050565b6f71727de22e5e9d8baf0edac6f37da032610cc3611cb0565b6001600160a01b03161480610cf05750610cdb611cb0565b6001600160a01b0316336001600160a01b0316145b610d0d57604051635629665f60e11b815260040160405180910390fd5b610d3f610d1d602083018361465b565b610d2a6020840184614678565b610d3a60608601604087016146c1565b6120b7565b610d4f898989898989898961216e565b505050505050505050565b6060600080823682610d706101008901896146dc565b9092509050610d83600660008385614452565b610d8c91614722565b60d01c9450610d9f600c60068385614452565b610da891614722565b60d01c9350610dba81600c8185614452565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610e3691508a018a61465b565b6001600160a01b0316815260200188602001358152602001888060400190610e5e91906146dc565b604051610e6c929190614758565b6040519081900390208152602001610e8760608a018a6146dc565b604051610e95929190614758565b60405180910390208152602001610eab8961248d565b6001600160801b03168152602001610ec28961249d565b6001600160801b031681526020018860a001358152602001610ee3896124b2565b6001600160801b03168152602001610efa896124c1565b6001600160801b03168152602001610f1560e08a018a6146dc565b604051610f23929190614758565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610f6f611c57565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b60606000610fc860013386866124d6565b915091509250929050565b6f71727de22e5e9d8baf0edac6f37da032610fec611cb0565b6001600160a01b031614806110195750611004611cb0565b6001600160a01b0316336001600160a01b0316145b61103657604051635629665f60e11b815260040160405180910390fd5b61104160013361269a565b8060005b81811015611097573684848381811061106057611060614768565b9050602002810190611072919061477e565b905061108e33611085602084018461465b565b60019190612715565b50600101611045565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a2505050565b336000908152600460209081526040808320547fd00bcad91b775f25eb0aee15808d12dfdaa6dc5a7d6b754e26f9c205d2a3b8df909252822054639517e29f60e01b926001600160a01b039283169290911690806111268484610557565b915091506111416f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611152611cb0565b6001600160a01b0316148061117f575061116a611cb0565b6001600160a01b0316336001600160a01b0316145b61119c57604051635629665f60e11b815260040160405180910390fd5b606060018a036111b8576111b189898961280a565b905061121d565b60028a036111cb576111b1898989612866565b60038a036111de576111b1898989612881565b60048a036111f1576111b1898989612a00565b89611201576111b1898989612ba0565b60405163041c38b360e41b8152600481018b905260240161067c565b611286337f00000000000000000000000000000000000000000000000000000000000000008c8c856040516024016112579392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612d51565b50610d4f84848484610728565b336000908152600460209081526040808320547fc45a7acaba78a7b4c4432b604d301355b314c0a7811768a1ee2563c9d34ca4e09092529091205484916314e2ec7560e31b916001600160a01b0391821691908116908416821480159061130c5750806001600160a01b0316846001600160a01b031614155b156114925760008061131e8484610557565b915091506113396f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031661134a611cb0565b6001600160a01b031614806113775750611362611cb0565b6001600160a01b0316336001600160a01b0316145b61139457604051635629665f60e11b815260040160405180910390fd5b606060018b036113b0576113a98a8a8a612dea565b9050611415565b60028b036113c3576113a98a8a8a612e13565b60038b036113d6576113a98a8a8a612e34565b60048b036113e9576113a98a8a8a612e80565b8a6113f9576113a98a8a8a612f38565b60405163041c38b360e41b8152600481018c905260240161067c565b61147e337f00000000000000000000000000000000000000000000000000000000000000008d8d8560405160240161144f9392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261308b565b5061148b84848484610728565b50506115b0565b6f71727de22e5e9d8baf0edac6f37da0326114ab611cb0565b6001600160a01b031614806114d857506114c3611cb0565b6001600160a01b0316336001600160a01b0316145b6114f557604051635629665f60e11b815260040160405180910390fd5b6060600189036115115761150a888888612dea565b9050611576565b600289036115245761150a888888612e13565b600389036115375761150a888888612e34565b6004890361154a5761150a888888612e80565b8861155a5761150a888888612f38565b60405163041c38b360e41b8152600481018a905260240161067c565b610d4f337f00000000000000000000000000000000000000000000000000000000000000008b8b8560405160240161144f9392919061479e565b5050505050505050565b600081600881901b6115d082600160f81b611d65565b156115de5760019250611621565b6115e9826000611d65565b156115f75760019250611621565b611609826001600160f81b0319611d65565b156116175760019250611621565b5060009392505050565b8280156116345750611634816000611d65565b15611640575050919050565b828015611656575061165681600160f81b611d65565b15611617575050919050565b606061167461166f611cb0565b611ef9565b6116a557611680611cb0565b604051635c93ff2f60e11b81526001600160a01b03909116600482015260240161067c565b336000908152600460209081526040808320547f4162c930ade27880570b0eb31efbc8a626b97e81a40ced27163509dfe16398829092528220546335a4725960e21b926001600160a01b039283169290911690806117038484610557565b9150915061170f611cb0565b600261171b8282613141565b8a600881901b61172d81838e8e6131cc565b99505050505061173f84848484610728565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190614439565b336000908152600460209081526040808320547fccfe1b2bef70acd8e661aeb5430e147f4c75cb320972acba718a28da428e1a3090925282205463e9ae5c5360e01b926001600160a01b039283169290911690806118498484610557565b915091506118646f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611875611cb0565b6001600160a01b031614806118a2575061188d611cb0565b6001600160a01b0316336001600160a01b0316145b6118bf57604051635629665f60e11b815260040160405180910390fd5b87600881901b336118d1826000611d65565b15611a2a576118e483600160f81b611d65565b156119055789358a016020810190356118fe838383613574565b5050611b79565b611910836000611d65565b15611978576000803660006119258e8e6135db565b935093509350935061196f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4c92505050565b50505050611b79565b61198a836001600160f81b0319611d65565b15611a0f57600061199e6014828c8e614452565b6119a79161447c565b60601c90503660008c8c60149080926119c293929190614452565b91509150611a07848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5192505050565b505050611b79565b82604051632e5bf3f960e21b815260040161067c91906147d1565b611a3882600160f81b611d65565b15611b5e57611a4b83600160f81b611d65565b15611a655789358a016020810190356118fe83838361362c565b611a70836000611d65565b15611acf57600080366000611a858e8e6135db565b935093509350935061196f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369392505050565b611ae1836001600160f81b0319611d65565b15611a0f576000611af56014828c8e614452565b611afe9161447c565b60601c90503660008c8c6014908092611b1993929190614452565b91509150611a07848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061308b92505050565b816040516308c3ee0360e11b815260040161067c91906147d1565b5050506115b084848484610728565b60606000610fc860023386866124d6565b6f71727de22e5e9d8baf0edac6f37da032611bb2611cb0565b6001600160a01b03161480611bdf5750611bca611cb0565b6001600160a01b0316336001600160a01b0316145b611bfc57604051635629665f60e11b815260040160405180910390fd5b6107a5848484846120b7565b600060018203611c1a57506001919050565b60028203611c2a57506001919050565b60038203611c3a57506001919050565b60048203611c4a57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401611cf3949392919061481e565b6000604051808303816000875af1158015611d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d3a9190810190614864565b9250905080611d5c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b606060008383604051602401611d8e9291906148b1565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b17905251909150600090611def907f00000000000000000000000000000000000000000000000000000000000000009084906024016148b1565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ca157825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a790611e8190879087908790879060040161481e565b6020604051808303816000875af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec491906148d5565b905080611ee457604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061072260013384613749565b600061072260023384613749565b600080611f168385018561418d565b6001600160e01b03191660009081526003602090815260408083203384529091529020546001600160a01b03908116908616149150509392505050565b60008080611f63848601866148ff565b915091506000611f73838361378d565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b858585604051602001611fae92919061492b565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b600080808080612028866f71727de22e5e9d8baf0edac6f37da032610d5a565b8351602085012060405163934f3a1160e01b81529498509296509094509250339163934f3a119161205f9188908690600401614951565b60006040518083038186803b15801561207757600080fd5b505afa925050508015612088575060015b61209f5761209860018385613823565b94506120ae565b6120ab60008385613823565b94505b50505050919050565b33600090815260208190526040902080546001600160a01b0319166001600160a01b0386169081179091551561213257612132338560008487876040516024016121039392919061497c565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b179052611e4c565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f602052604090205460609088906001600160a01b0316612266576121ba60013361269a565b60005b8181101561226057368b8b838181106121d8576121d8614768565b90506020028101906121ea919061477e565b905061220e6121fc602083018361465b565b61220960208401846146dc565b61280a565b9350612257337f00000000000000000000000000000000000000000000000000000000000000006001612244602086018661465b565b886040516024016112579392919061479e565b506001016121bd565b50612287565b80156122875760405163d8e3ed1b60e01b815233600482015260240161067c565b61229260023361269a565b508560005b8181101561232757368989838181106122b2576122b2614768565b90506020028101906122c4919061477e565b90506122e86122d6602083018361465b565b6122e360208401846146dc565b612866565b935061231e337f00000000000000000000000000000000000000000000000000000000000000006002612244602086018661465b565b50600101612297565b5084905060005b818110156123be573687878381811061234957612349614768565b905060200281019061235b919061477e565b905061237f61236d602083018361465b565b61237a60208401846146dc565b612881565b93506123b5337f00000000000000000000000000000000000000000000000000000000000000006003612244602086018661465b565b5060010161232e565b5082905060005b8181101561245557368585838181106123e0576123e0614768565b90506020028101906123f2919061477e565b9050612416612404602083018361465b565b61241160208401846146dc565b612a00565b935061244c337f00000000000000000000000000000000000000000000000000000000000000006004612244602086018661465b565b506001016123c5565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b6000610722826080013560801c90565b60006001600160801b03608083013516610722565b600060c082013560801c610722565b60006001600160801b0360c083013516610722565b606060006001600160a01b0384166001148015906124fc57506124fa868686613749565b155b1561252557604051637c84ecfb60e01b81526001600160a01b038516600482015260240161067c565b826000036125465760405163f725081760e01b815260040160405180910390fd5b826001600160401b0381111561255e5761255e614328565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b038216158015906125d757506001600160a01b038216600114155b80156125e257508381105b1561264757818382815181106125fa576125fa614768565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061263f816149ea565b9150506125b5565b6001600160a01b0382166001148015906126615750600081115b1561268d5782612672600183614a03565b8151811061268257612682614768565b602002602001015191505b8083525094509492505050565b60016000908152602083815260408083206001600160a01b03808616855292529091205416156126dd576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b038116158061273457506001600160a01b0381166001145b1561275d57604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b03818116600090815260208581526040808320868516845290915290205416156127ac57604051631034f46960e21b81526001600160a01b038216600482015260240161067c565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60608360016128198282613141565b61282560013388612715565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026128758282613141565b61282560023388612715565b60608360036128908282613141565b600080806128a087890189614a67565b919450925090506001600160e01b031983166306d61fe760e41b14806128d657506001600160e01b03198316638a91b0e360e01b145b15612900576040516379bd117b60e01b81526001600160e01b03198416600482015260240161067c565b61290b826000611d65565b8015612920575061292082607f60f91b611d65565b1561294057816040516376087dc160e01b815260040161067c91906147d1565b6001600160e01b0319831660009081526003602090815260408083203384529091529020546001600160a01b031615612998576040516374420d1560e01b81526001600160e01b03198416600482015260240161067c565b6001600160e01b03199092166000908152600360209081526040808320338452909152902080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b6060836004612a0f8282613141565b60008080612a1f87890189614ad5565b91945092509050600080846001811115612a3b57612a3b6147e6565b148015612a5057506001600160e01b03198316155b15612ac65750336000908152600460205260409020546001600160a01b03168015612a995760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b33600090815260046020526040902080546001600160a01b0319166001600160a01b038c16179055612b93565b6001846001811115612ada57612ada6147e6565b03612b7a57506001600160e01b0319821660009081526005602090815260408083203384529091529020546001600160a01b03168015612b385760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b6001600160e01b031983166000908152600560209081526040808320338452909152902080546001600160a01b0319166001600160a01b038c16179055612b93565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612be85760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612c0757612c07614768565b90506020020135905060018103612c4657612c408d888885818110612c2e57612c2e614768565b905060200281019061220991906146dc565b50612d01565b60028103612c7657612c408d888885818110612c6457612c64614768565b90506020028101906122e391906146dc565b60038103612ca657612c408d888885818110612c9457612c94614768565b905060200281019061237a91906146dc565b60048103612cd657612c408d888885818110612cc457612cc4614768565b905060200281019061241191906146dc565b60405163484d218160e01b81526001600160a01b038e1660048201526024810182905260440161067c565b50600101612beb565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a790612d879086908590879060019060040161481e565b6020604051808303816000875af1158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906148d5565b9050806107a557604051632b3f6d1160e21b815260040160405180910390fd5b60606000612dfa83850185614b03565b92509050612e0b600133838861385b565b509392505050565b60606000612e2383850185614b03565b92509050612e0b600233838861385b565b60606000612e4483850185614b48565b6001600160e01b03199091166000908152600360209081526040808320338452909152902080546001600160a01b031916905595945050505050565b6060600080612e9184860186614ad5565b945090925090506000826001811115612eac57612eac6147e6565b148015612ec157506001600160e01b03198116155b15612ee85733600090815260046020526040902080546001600160a01b0319169055610ca1565b6001826001811115612efc57612efc6147e6565b03612b7a576001600160e01b031981166000908152600560209081526040808320338452909152902080546001600160a01b0319169055610ca1565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612f805760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612f9f57612f9f614768565b90506020020135905060018103612fe357612fdd8d888885818110612fc657612fc6614768565b9050602002810190612fd891906146dc565b612dea565b50613082565b6002810361301857612fdd8d88888581811061300157613001614768565b905060200281019061301391906146dc565b612e13565b6003810361304d57612fdd8d88888581811061303657613036614768565b905060200281019061304891906146dc565b612e34565b60048103612cd657612fdd8d88888581811061306b5761306b614768565b905060200281019061307d91906146dc565b612e80565b50600101612f83565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906130c19086908590879060019060040161481e565b6020604051808303816000875af11580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906148d5565b9050806107a557604080516001600160a01b038616815260006020820152600080516020614dd9833981519152910160405180910390a150505050565b336000908152602081905260409020546001600160a01b031680156131c75760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156131ae57600080fd5b505afa1580156131c2573d6000803e3d6000fd5b505050505b505050565b60606131d9856000611d65565b156133c5576131ec84600160f81b611d65565b1561320f5782358301602081019035613206338383613952565b92505050610818565b61321a846000611d65565b156132ce5760008036600061322f87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161324e5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cbc92505050565b856000815181106132ba576132ba614768565b602002602001018190525050505050610818565b6132e0846001600160f81b0319611d65565b156133aa5760006132f46014828587614452565b6132fd9161447c565b60601c90503660006133128560148189614452565b604080516001808252818301909252929450909250816020015b606081526020019060019003908161332c579050509350613384338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139ce92505050565b8460008151811061339757613397614768565b6020026020010181905250505050610818565b83604051632e5bf3f960e21b815260040161067c91906147d1565b6133d385600160f81b611d65565b15613559576133e684600160f81b611d65565b1561340b5782358301602081019035613400338383613a6f565b935061081892505050565b613416846000611d65565b156134a35760008036600061342b87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161344a5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6592505050565b6134b5846001600160f81b0319611d65565b156133aa5760006134c96014828587614452565b6134d29161447c565b60601c90503660006134e78560148189614452565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081613501579050509350613384338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c2592505050565b846040516308c3ee0360e11b815260040161067c91906147d1565b6131c7837f000000000000000000000000000000000000000000000000000000000000000084846040516024016135ac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612d51565b60008036816135ed6014828789614452565b6135f69161447c565b60601c9350613609603460148789614452565b61361291614c18565b92506136218560348189614452565b949793965094505050565b6131c7837f00000000000000000000000000000000000000000000000000000000000000008484604051602401613664929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261308b565b60405163468721a760e01b81526000906001600160a01b0386169063468721a7906136c890879087908790879060040161481e565b6020604051808303816000875af11580156136e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370b91906148d5565b905080611ee457604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a15050505050565b600060016001600160a01b038316148015906108185750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b6000808360018111156137a2576137a26147e6565b1480156137b757506001600160e01b03198216155b156137d75750336000908152600460205260409020546001600160a01b03165b60018360018111156137eb576137eb6147e6565b0361072257506001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b0316919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561384b57600061384e565b60015b60ff161717949350505050565b6001600160a01b038116158061387a57506001600160a01b0381166001145b156138a357604051637c84ecfb60e01b81526001600160a01b038316600482015260240161067c565b6001600160a01b0382811660009081526020868152604080832087851684529091529020548116908216146138f657604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60606139bb847f0000000000000000000000000000000000000000000000000000000000000000858560405160240161398c929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526139ce565b8060200190518101906108189190614ce5565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613a06949392919061481e565b6000604051808303816000875af1158015613a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a4d9190810190614864565b9250905080612e0b57604051632b3f6d1160e21b815260040160405180910390fd5b6060806000613adb867f00000000000000000000000000000000000000000000000000000000000000008787604051602401613aac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613c25565b905080806020019051810190613af19190614d19565b8151919450925060005b81811015613b5a57848181518110613b1557613b15614768565b6020026020010151613b5257604080516001600160a01b038a16815260208101839052600080516020614dd9833981519152910160405180910390a15b600101613afb565b505050935093915050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401613b9c949392919061481e565b6000604051808303816000875af1158015613bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613be39190810190614864565b9250905080611d5c57604080516001600160a01b038816815260006020820152600080516020614dd9833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613c5d949392919061481e565b6000604051808303816000875af1158015613c7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ca49190810190614864565b9250905080612e0b57604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a1509392505050565b6001600160a01b0381168114613cfa57600080fd5b50565b8035611c5281613ce5565b60008083601f840112613d1a57600080fd5b5081356001600160401b03811115613d3157600080fd5b60208301915083602082850101111561060e57600080fd5b60008060008060608587031215613d5f57600080fd5b843593506020850135613d7181613ce5565b925060408501356001600160401b03811115613d8c57600080fd5b613d9887828801613d08565b95989497509550505050565b600080600060408486031215613db957600080fd5b8335925060208401356001600160401b03811115613dd657600080fd5b613de286828701613d08565b9497909650939450505050565b60006101208284031215613e0257600080fd5b50919050565b600080600060608486031215613e1d57600080fd5b83356001600160401b03811115613e3357600080fd5b613e3f86828701613def565b9660208601359650604090950135949350505050565b60008083601f840112613e6757600080fd5b5081356001600160401b03811115613e7e57600080fd5b6020830191508360208260051b850101111561060e57600080fd5b600060608284031215613e0257600080fd5b600080600080600080600080600060a08a8c031215613ec957600080fd5b89356001600160401b03811115613edf57600080fd5b613eeb8c828d01613e55565b909a5098505060208a01356001600160401b03811115613f0a57600080fd5b613f168c828d01613e55565b90985096505060408a01356001600160401b03811115613f3557600080fd5b613f418c828d01613e55565b90965094505060608a01356001600160401b03811115613f6057600080fd5b613f6c8c828d01613e55565b90945092505060808a01356001600160401b03811115613f8b57600080fd5b613f978c828d01613e99565b9150509295985092959850929598565b60008060408385031215613fba57600080fd5b82356001600160401b03811115613fd057600080fd5b613fdc85828601613def565b9250506020830135613fed81613ce5565b809150509250929050565b60005b83811015614013578181015183820152602001613ffb565b50506000910152565b60008151808452614034816020860160208601613ff8565b601f01601f19169290920160200192915050565b60808152600061405b608083018761401c565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152614089818561401c565b979650505050505050565b600080604083850312156140a757600080fd5b82356140b281613ce5565b946020939093013593505050565b6040808252835190820181905260009060208501906060840190835b818110156141035783516001600160a01b03168352602093840193909201916001016140dc565b50506001600160a01b039490941660209390930192909252509092915050565b6000806020838503121561413657600080fd5b82356001600160401b0381111561414c57600080fd5b61415885828601613e55565b90969095509350505050565b602081526000610b8f602083018461401c565b6001600160e01b031981168114613cfa57600080fd5b60006020828403121561419f57600080fd5b8135610b8f81614177565b6000602082840312156141bc57600080fd5b5035919050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561421c57603f1987860301845261420785835161401c565b945060209384019391909101906001016141eb565b50929695505050505050565b6000806040838503121561423b57600080fd5b823561424681613ce5565b91506020830135613fed81613ce5565b803560ff81168114611c5257600080fd5b6000806000806060858703121561427d57600080fd5b843561428881613ce5565b935060208501356001600160401b038111156142a357600080fd5b6142af87828801613e55565b90945092506142c2905060408601614256565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038516815283602082015260606040820152600061431e6060830184866142cd565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561436657614366614328565b604052919050565b60006001600160401b0382111561438757614387614328565b50601f01601f191660200190565b600082601f8301126143a657600080fd5b81516143b96143b48261436e565b61433e565b8181528460208386010111156143ce57600080fd5b610818826020830160208701613ff8565b6000602082840312156143f157600080fd5b81516001600160401b0381111561440757600080fd5b61081884828501614395565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561444b57600080fd5b5051919050565b6000808585111561446257600080fd5b8386111561446f57600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff1981169060148410156144c2576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b8481526060602082015260006144e2606083018661401c565b82810360408401526140898185876142cd565b60006020828403121561450757600080fd5b8151610b8f81614177565b6000808335601e1984360301811261452957600080fd5b83016020810192503590506001600160401b0381111561454857600080fd5b80360382131561060e57600080fd5b604081526145786040820161456b85613cfd565b6001600160a01b03169052565b6020830135606082015260006145916040850185614512565b61012060808501526145a8610160850182846142cd565b9150506145b86060860186614512565b848303603f190160a08601526145cf8382846142cd565b608088013560c08781019190915260a089013560e0808901919091529089013561010088015290935061460792508701905086614512565b848303603f190161012086015261461f8382846142cd565b92505050614631610100860186614512565b848303603f19016101408601526146498382846142cd565b93505050508260208301529392505050565b60006020828403121561466d57600080fd5b8135610b8f81613ce5565b6000808335601e1984360301811261468f57600080fd5b8301803591506001600160401b038211156146a957600080fd5b6020019150600581901b360382131561060e57600080fd5b6000602082840312156146d357600080fd5b610b8f82614256565b6000808335601e198436030181126146f357600080fd5b8301803591506001600160401b0382111561470d57600080fd5b60200191503681900382131561060e57600080fd5b80356001600160d01b031981169060068410156144c2576001600160d01b031960069490940360031b84901b1690921692915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261479457600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906147c89083018461401c565b95945050505050565b6001600160f81b031991909116815260200190565b634e487b7160e01b600052602160045260246000fd5b6002811061481a57634e487b7160e01b600052602160045260246000fd5b9052565b60018060a01b0385168152836020820152608060408201526000614845608083018561401c565b90506147c860608301846147fc565b80518015158114611c5257600080fd5b6000806040838503121561487757600080fd5b61488083614854565b915060208301516001600160401b0381111561489b57600080fd5b6148a785828601614395565b9150509250929050565b6001600160a01b03831681526040602082018190526000906108189083018461401c565b6000602082840312156148e757600080fd5b610b8f82614854565b803560028110611c5257600080fd5b6000806040838503121561491257600080fd5b61491b836148f0565b91506020830135613fed81614177565b82815260008251614943816020850160208701613ff8565b919091016020019392505050565b83815260606020820152600061496a606083018561401c565b828103604084015261431e818561401c565b60ff84168152604060208201819052810182905260008360608301825b858110156149c95782356149ac81613ce5565b6001600160a01b0316825260209283019290910190600101614999565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016149fc576149fc6149d4565b5060010190565b81810381811115610722576107226149d4565b600082601f830112614a2757600080fd5b8135614a356143b48261436e565b818152846020838601011115614a4a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614a7c57600080fd5b8335614a8781614177565b925060208401356001600160f81b031981168114614aa457600080fd5b915060408401356001600160401b03811115614abf57600080fd5b614acb86828701614a16565b9150509250925092565b600080600060608486031215614aea57600080fd5b614af3846148f0565b92506020840135614aa481614177565b60008060408385031215614b1657600080fd5b8235614b2181613ce5565b915060208301356001600160401b03811115614b3c57600080fd5b6148a785828601614a16565b60008060408385031215614b5b57600080fd5b8235614b2181614177565b6020808252810182905260006040600584901b830181019083018583605e1936839003015b87821015614c0b57868503603f190184528235818112614baa57600080fd5b89018035614bb781613ce5565b6001600160a01b0316865260208181013590870152614bd96040820182614512565b915060606040880152614bf06060880183836142cd565b96505050602083019250602084019350600182019150614b8b565b5092979650505050505050565b8035602083101561072257600019602084900360031b1b1692915050565b60006001600160401b03821115614c4f57614c4f614328565b5060051b60200190565b600082601f830112614c6a57600080fd5b8151614c786143b482614c36565b8082825260208201915060208360051b860101925085831115614c9a57600080fd5b602085015b83811015614cdb5780516001600160401b03811115614cbd57600080fd5b614ccc886020838a0101614395565b84525060209283019201614c9f565b5095945050505050565b600060208284031215614cf757600080fd5b81516001600160401b03811115614d0d57600080fd5b61081884828501614c59565b60008060408385031215614d2c57600080fd5b82516001600160401b03811115614d4257600080fd5b8301601f81018513614d5357600080fd5b8051614d616143b482614c36565b8082825260208201915060208360051b850101925087831115614d8357600080fd5b6020840193505b82841015614dac57614d9b84614854565b825260209384019390910190614d8a565b8095505050505060208301516001600160401b03811115614dcc57600080fd5b6148a785828601614c5956feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca2646970667358221220ea7603497be0a0e1ddc106666c75af038c8db18b0f9143f6418b0e8b232c109164736f6c634300081a00336080604052348015600f57600080fd5b506109c28061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "2122:17308:113:-:0;;;;;;;;;;;;;269:20:121;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;254:36:121;;;2122:17308:113;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061012e5760003560e01c8063a71763a8116100ab578063d828435d1161006f578063d828435d146104a2578063e9ae5c53146104c2578063ea5f61d0146104e2578063eab77e1714610502578063f2dc691d14610522578063f698da251461054257610135565b8063a71763a8146103c7578063b0d691fe146103e7578063b875d5d81461040a578063d03c791414610455578063d691c9641461047557610135565b806355d559f4116100f257806355d559f4146102dd5780635faac46b1461030d57806379aad60e1461033b5780639517e29f1461035b5780639cfd7cff1461037b57610135565b80630a664dba146101e0578063112d3a7d146102245780631626ba7e1461025457806319822f7c1461028d578063540fb4f9146102bb57610135565b3661013557005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561016657806020526020603cf35b50336000818152600460209081526040808320546001600160e01b031984351680855260058452828520958552949092528220546001600160a01b0391821692911690806101b48484610557565b915091506101c28888610615565b95506101d084848484610728565b5050505050915050805190602001f35b3480156101ec57600080fd5b50336000908152600460205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613d49565b6107ab565b604051901515815260200161021b565b34801561026057600080fd5b5061027461026f366004613da4565b610820565b6040516001600160e01b0319909116815260200161021b565b34801561029957600080fd5b506102ad6102a8366004613e08565b610b96565b60405190815260200161021b565b3480156102c757600080fd5b506102db6102d6366004613eab565b610caa565b005b3480156102e957600080fd5b506102fd6102f8366004613fa7565b610d5a565b60405161021b9493929190614048565b34801561031957600080fd5b5061032d610328366004614094565b610fb7565b60405161021b9291906140c0565b34801561034757600080fd5b506102db610356366004614123565b610fd3565b34801561036757600080fd5b506102db610376366004613d49565b6110c8565b34801561038757600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161021b9190614164565b3480156103d357600080fd5b506102db6103e2366004613d49565b611293565b3480156103f357600080fd5b506f71727de22e5e9d8baf0edac6f37da032610207565b34801561041657600080fd5b5061020761042536600461418d565b6001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b031690565b34801561046157600080fd5b506102446104703660046141aa565b6115ba565b34801561048157600080fd5b50610495610490366004613da4565b611662565b60405161021b91906141c3565b3480156104ae57600080fd5b506102ad6104bd366004614228565b61174b565b3480156104ce57600080fd5b506102db6104dd366004613da4565b6117eb565b3480156104ee57600080fd5b5061032d6104fd366004614094565b611b88565b34801561050e57600080fd5b506102db61051d366004614267565b611b99565b34801561052e57600080fd5b5061024461053d3660046141aa565b611c08565b34801561054e57600080fd5b506102ad611c57565b6060806001600160a01b038416156105d7576105be33856000610578611cb0565b3460003660405160240161058f94939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b179052611cbc565b9150818060200190518101906105d491906143df565b91505b6001600160a01b0383161561060e576105f533846000610578611cb0565b90508080602001905181019061060b91906143df565b90505b9250929050565b600080356001600160e01b031916815260036020908152604080832033845290915290208054606091906001600160a01b03811690600160a01b900460f81b8161068557604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b61069381607f60f91b611d65565b156106d7576106cd338388886106a7611cb0565b6040516020016106b993929190614413565b604051602081830303815290604052611d77565b9350505050610722565b6106e2816000611d65565b1561071e576106cd3383600089896106f8611cb0565b60405160200161070a93929190614413565b604051602081830303815290604052611cbc565b5050505b92915050565b6001600160a01b0384161561077e5761077e338560008560405160240161074f9190614164565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b179052611e4c565b6001600160a01b038316156107a5576107a5338460008460405160240161074f9190614164565b50505050565b6000600185036107dd57336001600160a01b038516036107cd57506001610818565b6107d684611eeb565b9050610818565b600285036107ee576107d684611ef9565b60038503610801576107d6848484611f07565b60048503610814576107d6848484611f53565b5060005b949350505050565b6000338282036109ba5760006108f1826001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190614439565b60408051602081018a90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91015b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611f8e565b8051602090910120604051635ae6bd3760e01b8152600481018290529091506001600160a01b03831690635ae6bd3790602401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190614439565b6000036109a85760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b604482015260640161067c565b50630b135d3f60e11b9150610b8f9050565b60006109c96014828688614452565b6109d29161447c565b60601c90508015806109ea57506109e881611eeb565b155b15610b14576000610a89836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190614439565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91016108c0565b805160208201209091506001600160a01b03841663934f3a118284610ab18a6014818e614452565b6040518563ffffffff1660e01b8152600401610ad094939291906144c9565b60006040518083038186803b158015610ae857600080fd5b505afa158015610afc573d6000803e3d6000fd5b50630b135d3f60e11b9750610b8f9650505050505050565b6000610b733383610b23611cb0565b8a610b318a6014818e614452565b604051602401610b4494939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611d77565b905080806020019051810190610b8991906144f5565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da032610bb1611cb0565b6001600160a01b031614610bd857604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610bf65750610bf482611eeb565b155b15610c0b57610c0486612008565b9250610c70565b6000610c56338460008a8a604051602401610c27929190614557565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b179052611cbc565b905080806020019051810190610c6c9190614439565b9350505b8315610ca157610ca1336f71727de22e5e9d8baf0edac6f37da0328660405180602001604052806000815250611e4c565b50509392505050565b6f71727de22e5e9d8baf0edac6f37da032610cc3611cb0565b6001600160a01b03161480610cf05750610cdb611cb0565b6001600160a01b0316336001600160a01b0316145b610d0d57604051635629665f60e11b815260040160405180910390fd5b610d3f610d1d602083018361465b565b610d2a6020840184614678565b610d3a60608601604087016146c1565b6120b7565b610d4f898989898989898961216e565b505050505050505050565b6060600080823682610d706101008901896146dc565b9092509050610d83600660008385614452565b610d8c91614722565b60d01c9450610d9f600c60068385614452565b610da891614722565b60d01c9350610dba81600c8185614452565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610e3691508a018a61465b565b6001600160a01b0316815260200188602001358152602001888060400190610e5e91906146dc565b604051610e6c929190614758565b6040519081900390208152602001610e8760608a018a6146dc565b604051610e95929190614758565b60405180910390208152602001610eab8961248d565b6001600160801b03168152602001610ec28961249d565b6001600160801b031681526020018860a001358152602001610ee3896124b2565b6001600160801b03168152602001610efa896124c1565b6001600160801b03168152602001610f1560e08a018a6146dc565b604051610f23929190614758565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610f6f611c57565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b60606000610fc860013386866124d6565b915091509250929050565b6f71727de22e5e9d8baf0edac6f37da032610fec611cb0565b6001600160a01b031614806110195750611004611cb0565b6001600160a01b0316336001600160a01b0316145b61103657604051635629665f60e11b815260040160405180910390fd5b61104160013361269a565b8060005b81811015611097573684848381811061106057611060614768565b9050602002810190611072919061477e565b905061108e33611085602084018461465b565b60019190612715565b50600101611045565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a2505050565b336000908152600460209081526040808320547fd00bcad91b775f25eb0aee15808d12dfdaa6dc5a7d6b754e26f9c205d2a3b8df909252822054639517e29f60e01b926001600160a01b039283169290911690806111268484610557565b915091506111416f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611152611cb0565b6001600160a01b0316148061117f575061116a611cb0565b6001600160a01b0316336001600160a01b0316145b61119c57604051635629665f60e11b815260040160405180910390fd5b606060018a036111b8576111b189898961280a565b905061121d565b60028a036111cb576111b1898989612866565b60038a036111de576111b1898989612881565b60048a036111f1576111b1898989612a00565b89611201576111b1898989612ba0565b60405163041c38b360e41b8152600481018b905260240161067c565b611286337f00000000000000000000000000000000000000000000000000000000000000008c8c856040516024016112579392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612d51565b50610d4f84848484610728565b336000908152600460209081526040808320547fc45a7acaba78a7b4c4432b604d301355b314c0a7811768a1ee2563c9d34ca4e09092529091205484916314e2ec7560e31b916001600160a01b0391821691908116908416821480159061130c5750806001600160a01b0316846001600160a01b031614155b156114925760008061131e8484610557565b915091506113396f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031661134a611cb0565b6001600160a01b031614806113775750611362611cb0565b6001600160a01b0316336001600160a01b0316145b61139457604051635629665f60e11b815260040160405180910390fd5b606060018b036113b0576113a98a8a8a612dea565b9050611415565b60028b036113c3576113a98a8a8a612e13565b60038b036113d6576113a98a8a8a612e34565b60048b036113e9576113a98a8a8a612e80565b8a6113f9576113a98a8a8a612f38565b60405163041c38b360e41b8152600481018c905260240161067c565b61147e337f00000000000000000000000000000000000000000000000000000000000000008d8d8560405160240161144f9392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261308b565b5061148b84848484610728565b50506115b0565b6f71727de22e5e9d8baf0edac6f37da0326114ab611cb0565b6001600160a01b031614806114d857506114c3611cb0565b6001600160a01b0316336001600160a01b0316145b6114f557604051635629665f60e11b815260040160405180910390fd5b6060600189036115115761150a888888612dea565b9050611576565b600289036115245761150a888888612e13565b600389036115375761150a888888612e34565b6004890361154a5761150a888888612e80565b8861155a5761150a888888612f38565b60405163041c38b360e41b8152600481018a905260240161067c565b610d4f337f00000000000000000000000000000000000000000000000000000000000000008b8b8560405160240161144f9392919061479e565b5050505050505050565b600081600881901b6115d082600160f81b611d65565b156115de5760019250611621565b6115e9826000611d65565b156115f75760019250611621565b611609826001600160f81b0319611d65565b156116175760019250611621565b5060009392505050565b8280156116345750611634816000611d65565b15611640575050919050565b828015611656575061165681600160f81b611d65565b15611617575050919050565b606061167461166f611cb0565b611ef9565b6116a557611680611cb0565b604051635c93ff2f60e11b81526001600160a01b03909116600482015260240161067c565b336000908152600460209081526040808320547f4162c930ade27880570b0eb31efbc8a626b97e81a40ced27163509dfe16398829092528220546335a4725960e21b926001600160a01b039283169290911690806117038484610557565b9150915061170f611cb0565b600261171b8282613141565b8a600881901b61172d81838e8e6131cc565b99505050505061173f84848484610728565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190614439565b336000908152600460209081526040808320547fccfe1b2bef70acd8e661aeb5430e147f4c75cb320972acba718a28da428e1a3090925282205463e9ae5c5360e01b926001600160a01b039283169290911690806118498484610557565b915091506118646f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611875611cb0565b6001600160a01b031614806118a2575061188d611cb0565b6001600160a01b0316336001600160a01b0316145b6118bf57604051635629665f60e11b815260040160405180910390fd5b87600881901b336118d1826000611d65565b15611a2a576118e483600160f81b611d65565b156119055789358a016020810190356118fe838383613574565b5050611b79565b611910836000611d65565b15611978576000803660006119258e8e6135db565b935093509350935061196f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4c92505050565b50505050611b79565b61198a836001600160f81b0319611d65565b15611a0f57600061199e6014828c8e614452565b6119a79161447c565b60601c90503660008c8c60149080926119c293929190614452565b91509150611a07848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5192505050565b505050611b79565b82604051632e5bf3f960e21b815260040161067c91906147d1565b611a3882600160f81b611d65565b15611b5e57611a4b83600160f81b611d65565b15611a655789358a016020810190356118fe83838361362c565b611a70836000611d65565b15611acf57600080366000611a858e8e6135db565b935093509350935061196f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369392505050565b611ae1836001600160f81b0319611d65565b15611a0f576000611af56014828c8e614452565b611afe9161447c565b60601c90503660008c8c6014908092611b1993929190614452565b91509150611a07848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061308b92505050565b816040516308c3ee0360e11b815260040161067c91906147d1565b5050506115b084848484610728565b60606000610fc860023386866124d6565b6f71727de22e5e9d8baf0edac6f37da032611bb2611cb0565b6001600160a01b03161480611bdf5750611bca611cb0565b6001600160a01b0316336001600160a01b0316145b611bfc57604051635629665f60e11b815260040160405180910390fd5b6107a5848484846120b7565b600060018203611c1a57506001919050565b60028203611c2a57506001919050565b60038203611c3a57506001919050565b60048203611c4a57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401611cf3949392919061481e565b6000604051808303816000875af1158015611d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d3a9190810190614864565b9250905080611d5c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b606060008383604051602401611d8e9291906148b1565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b17905251909150600090611def907f00000000000000000000000000000000000000000000000000000000000000009084906024016148b1565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ca157825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a790611e8190879087908790879060040161481e565b6020604051808303816000875af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec491906148d5565b905080611ee457604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061072260013384613749565b600061072260023384613749565b600080611f168385018561418d565b6001600160e01b03191660009081526003602090815260408083203384529091529020546001600160a01b03908116908616149150509392505050565b60008080611f63848601866148ff565b915091506000611f73838361378d565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b858585604051602001611fae92919061492b565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b600080808080612028866f71727de22e5e9d8baf0edac6f37da032610d5a565b8351602085012060405163934f3a1160e01b81529498509296509094509250339163934f3a119161205f9188908690600401614951565b60006040518083038186803b15801561207757600080fd5b505afa925050508015612088575060015b61209f5761209860018385613823565b94506120ae565b6120ab60008385613823565b94505b50505050919050565b33600090815260208190526040902080546001600160a01b0319166001600160a01b0386169081179091551561213257612132338560008487876040516024016121039392919061497c565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b179052611e4c565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f602052604090205460609088906001600160a01b0316612266576121ba60013361269a565b60005b8181101561226057368b8b838181106121d8576121d8614768565b90506020028101906121ea919061477e565b905061220e6121fc602083018361465b565b61220960208401846146dc565b61280a565b9350612257337f00000000000000000000000000000000000000000000000000000000000000006001612244602086018661465b565b886040516024016112579392919061479e565b506001016121bd565b50612287565b80156122875760405163d8e3ed1b60e01b815233600482015260240161067c565b61229260023361269a565b508560005b8181101561232757368989838181106122b2576122b2614768565b90506020028101906122c4919061477e565b90506122e86122d6602083018361465b565b6122e360208401846146dc565b612866565b935061231e337f00000000000000000000000000000000000000000000000000000000000000006002612244602086018661465b565b50600101612297565b5084905060005b818110156123be573687878381811061234957612349614768565b905060200281019061235b919061477e565b905061237f61236d602083018361465b565b61237a60208401846146dc565b612881565b93506123b5337f00000000000000000000000000000000000000000000000000000000000000006003612244602086018661465b565b5060010161232e565b5082905060005b8181101561245557368585838181106123e0576123e0614768565b90506020028101906123f2919061477e565b9050612416612404602083018361465b565b61241160208401846146dc565b612a00565b935061244c337f00000000000000000000000000000000000000000000000000000000000000006004612244602086018661465b565b506001016123c5565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b6000610722826080013560801c90565b60006001600160801b03608083013516610722565b600060c082013560801c610722565b60006001600160801b0360c083013516610722565b606060006001600160a01b0384166001148015906124fc57506124fa868686613749565b155b1561252557604051637c84ecfb60e01b81526001600160a01b038516600482015260240161067c565b826000036125465760405163f725081760e01b815260040160405180910390fd5b826001600160401b0381111561255e5761255e614328565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b038216158015906125d757506001600160a01b038216600114155b80156125e257508381105b1561264757818382815181106125fa576125fa614768565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061263f816149ea565b9150506125b5565b6001600160a01b0382166001148015906126615750600081115b1561268d5782612672600183614a03565b8151811061268257612682614768565b602002602001015191505b8083525094509492505050565b60016000908152602083815260408083206001600160a01b03808616855292529091205416156126dd576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b038116158061273457506001600160a01b0381166001145b1561275d57604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b03818116600090815260208581526040808320868516845290915290205416156127ac57604051631034f46960e21b81526001600160a01b038216600482015260240161067c565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60608360016128198282613141565b61282560013388612715565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026128758282613141565b61282560023388612715565b60608360036128908282613141565b600080806128a087890189614a67565b919450925090506001600160e01b031983166306d61fe760e41b14806128d657506001600160e01b03198316638a91b0e360e01b145b15612900576040516379bd117b60e01b81526001600160e01b03198416600482015260240161067c565b61290b826000611d65565b8015612920575061292082607f60f91b611d65565b1561294057816040516376087dc160e01b815260040161067c91906147d1565b6001600160e01b0319831660009081526003602090815260408083203384529091529020546001600160a01b031615612998576040516374420d1560e01b81526001600160e01b03198416600482015260240161067c565b6001600160e01b03199092166000908152600360209081526040808320338452909152902080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b6060836004612a0f8282613141565b60008080612a1f87890189614ad5565b91945092509050600080846001811115612a3b57612a3b6147e6565b148015612a5057506001600160e01b03198316155b15612ac65750336000908152600460205260409020546001600160a01b03168015612a995760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b33600090815260046020526040902080546001600160a01b0319166001600160a01b038c16179055612b93565b6001846001811115612ada57612ada6147e6565b03612b7a57506001600160e01b0319821660009081526005602090815260408083203384529091529020546001600160a01b03168015612b385760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b6001600160e01b031983166000908152600560209081526040808320338452909152902080546001600160a01b0319166001600160a01b038c16179055612b93565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612be85760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612c0757612c07614768565b90506020020135905060018103612c4657612c408d888885818110612c2e57612c2e614768565b905060200281019061220991906146dc565b50612d01565b60028103612c7657612c408d888885818110612c6457612c64614768565b90506020028101906122e391906146dc565b60038103612ca657612c408d888885818110612c9457612c94614768565b905060200281019061237a91906146dc565b60048103612cd657612c408d888885818110612cc457612cc4614768565b905060200281019061241191906146dc565b60405163484d218160e01b81526001600160a01b038e1660048201526024810182905260440161067c565b50600101612beb565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a790612d879086908590879060019060040161481e565b6020604051808303816000875af1158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906148d5565b9050806107a557604051632b3f6d1160e21b815260040160405180910390fd5b60606000612dfa83850185614b03565b92509050612e0b600133838861385b565b509392505050565b60606000612e2383850185614b03565b92509050612e0b600233838861385b565b60606000612e4483850185614b48565b6001600160e01b03199091166000908152600360209081526040808320338452909152902080546001600160a01b031916905595945050505050565b6060600080612e9184860186614ad5565b945090925090506000826001811115612eac57612eac6147e6565b148015612ec157506001600160e01b03198116155b15612ee85733600090815260046020526040902080546001600160a01b0319169055610ca1565b6001826001811115612efc57612efc6147e6565b03612b7a576001600160e01b031981166000908152600560209081526040808320338452909152902080546001600160a01b0319169055610ca1565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612f805760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612f9f57612f9f614768565b90506020020135905060018103612fe357612fdd8d888885818110612fc657612fc6614768565b9050602002810190612fd891906146dc565b612dea565b50613082565b6002810361301857612fdd8d88888581811061300157613001614768565b905060200281019061301391906146dc565b612e13565b6003810361304d57612fdd8d88888581811061303657613036614768565b905060200281019061304891906146dc565b612e34565b60048103612cd657612fdd8d88888581811061306b5761306b614768565b905060200281019061307d91906146dc565b612e80565b50600101612f83565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906130c19086908590879060019060040161481e565b6020604051808303816000875af11580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906148d5565b9050806107a557604080516001600160a01b038616815260006020820152600080516020614dd9833981519152910160405180910390a150505050565b336000908152602081905260409020546001600160a01b031680156131c75760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156131ae57600080fd5b505afa1580156131c2573d6000803e3d6000fd5b505050505b505050565b60606131d9856000611d65565b156133c5576131ec84600160f81b611d65565b1561320f5782358301602081019035613206338383613952565b92505050610818565b61321a846000611d65565b156132ce5760008036600061322f87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161324e5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cbc92505050565b856000815181106132ba576132ba614768565b602002602001018190525050505050610818565b6132e0846001600160f81b0319611d65565b156133aa5760006132f46014828587614452565b6132fd9161447c565b60601c90503660006133128560148189614452565b604080516001808252818301909252929450909250816020015b606081526020019060019003908161332c579050509350613384338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139ce92505050565b8460008151811061339757613397614768565b6020026020010181905250505050610818565b83604051632e5bf3f960e21b815260040161067c91906147d1565b6133d385600160f81b611d65565b15613559576133e684600160f81b611d65565b1561340b5782358301602081019035613400338383613a6f565b935061081892505050565b613416846000611d65565b156134a35760008036600061342b87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161344a5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6592505050565b6134b5846001600160f81b0319611d65565b156133aa5760006134c96014828587614452565b6134d29161447c565b60601c90503660006134e78560148189614452565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081613501579050509350613384338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c2592505050565b846040516308c3ee0360e11b815260040161067c91906147d1565b6131c7837f000000000000000000000000000000000000000000000000000000000000000084846040516024016135ac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612d51565b60008036816135ed6014828789614452565b6135f69161447c565b60601c9350613609603460148789614452565b61361291614c18565b92506136218560348189614452565b949793965094505050565b6131c7837f00000000000000000000000000000000000000000000000000000000000000008484604051602401613664929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261308b565b60405163468721a760e01b81526000906001600160a01b0386169063468721a7906136c890879087908790879060040161481e565b6020604051808303816000875af11580156136e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370b91906148d5565b905080611ee457604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a15050505050565b600060016001600160a01b038316148015906108185750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b6000808360018111156137a2576137a26147e6565b1480156137b757506001600160e01b03198216155b156137d75750336000908152600460205260409020546001600160a01b03165b60018360018111156137eb576137eb6147e6565b0361072257506001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b0316919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561384b57600061384e565b60015b60ff161717949350505050565b6001600160a01b038116158061387a57506001600160a01b0381166001145b156138a357604051637c84ecfb60e01b81526001600160a01b038316600482015260240161067c565b6001600160a01b0382811660009081526020868152604080832087851684529091529020548116908216146138f657604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60606139bb847f0000000000000000000000000000000000000000000000000000000000000000858560405160240161398c929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526139ce565b8060200190518101906108189190614ce5565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613a06949392919061481e565b6000604051808303816000875af1158015613a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a4d9190810190614864565b9250905080612e0b57604051632b3f6d1160e21b815260040160405180910390fd5b6060806000613adb867f00000000000000000000000000000000000000000000000000000000000000008787604051602401613aac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613c25565b905080806020019051810190613af19190614d19565b8151919450925060005b81811015613b5a57848181518110613b1557613b15614768565b6020026020010151613b5257604080516001600160a01b038a16815260208101839052600080516020614dd9833981519152910160405180910390a15b600101613afb565b505050935093915050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401613b9c949392919061481e565b6000604051808303816000875af1158015613bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613be39190810190614864565b9250905080611d5c57604080516001600160a01b038816815260006020820152600080516020614dd9833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613c5d949392919061481e565b6000604051808303816000875af1158015613c7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ca49190810190614864565b9250905080612e0b57604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a1509392505050565b6001600160a01b0381168114613cfa57600080fd5b50565b8035611c5281613ce5565b60008083601f840112613d1a57600080fd5b5081356001600160401b03811115613d3157600080fd5b60208301915083602082850101111561060e57600080fd5b60008060008060608587031215613d5f57600080fd5b843593506020850135613d7181613ce5565b925060408501356001600160401b03811115613d8c57600080fd5b613d9887828801613d08565b95989497509550505050565b600080600060408486031215613db957600080fd5b8335925060208401356001600160401b03811115613dd657600080fd5b613de286828701613d08565b9497909650939450505050565b60006101208284031215613e0257600080fd5b50919050565b600080600060608486031215613e1d57600080fd5b83356001600160401b03811115613e3357600080fd5b613e3f86828701613def565b9660208601359650604090950135949350505050565b60008083601f840112613e6757600080fd5b5081356001600160401b03811115613e7e57600080fd5b6020830191508360208260051b850101111561060e57600080fd5b600060608284031215613e0257600080fd5b600080600080600080600080600060a08a8c031215613ec957600080fd5b89356001600160401b03811115613edf57600080fd5b613eeb8c828d01613e55565b909a5098505060208a01356001600160401b03811115613f0a57600080fd5b613f168c828d01613e55565b90985096505060408a01356001600160401b03811115613f3557600080fd5b613f418c828d01613e55565b90965094505060608a01356001600160401b03811115613f6057600080fd5b613f6c8c828d01613e55565b90945092505060808a01356001600160401b03811115613f8b57600080fd5b613f978c828d01613e99565b9150509295985092959850929598565b60008060408385031215613fba57600080fd5b82356001600160401b03811115613fd057600080fd5b613fdc85828601613def565b9250506020830135613fed81613ce5565b809150509250929050565b60005b83811015614013578181015183820152602001613ffb565b50506000910152565b60008151808452614034816020860160208601613ff8565b601f01601f19169290920160200192915050565b60808152600061405b608083018761401c565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152614089818561401c565b979650505050505050565b600080604083850312156140a757600080fd5b82356140b281613ce5565b946020939093013593505050565b6040808252835190820181905260009060208501906060840190835b818110156141035783516001600160a01b03168352602093840193909201916001016140dc565b50506001600160a01b039490941660209390930192909252509092915050565b6000806020838503121561413657600080fd5b82356001600160401b0381111561414c57600080fd5b61415885828601613e55565b90969095509350505050565b602081526000610b8f602083018461401c565b6001600160e01b031981168114613cfa57600080fd5b60006020828403121561419f57600080fd5b8135610b8f81614177565b6000602082840312156141bc57600080fd5b5035919050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561421c57603f1987860301845261420785835161401c565b945060209384019391909101906001016141eb565b50929695505050505050565b6000806040838503121561423b57600080fd5b823561424681613ce5565b91506020830135613fed81613ce5565b803560ff81168114611c5257600080fd5b6000806000806060858703121561427d57600080fd5b843561428881613ce5565b935060208501356001600160401b038111156142a357600080fd5b6142af87828801613e55565b90945092506142c2905060408601614256565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038516815283602082015260606040820152600061431e6060830184866142cd565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561436657614366614328565b604052919050565b60006001600160401b0382111561438757614387614328565b50601f01601f191660200190565b600082601f8301126143a657600080fd5b81516143b96143b48261436e565b61433e565b8181528460208386010111156143ce57600080fd5b610818826020830160208701613ff8565b6000602082840312156143f157600080fd5b81516001600160401b0381111561440757600080fd5b61081884828501614395565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561444b57600080fd5b5051919050565b6000808585111561446257600080fd5b8386111561446f57600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff1981169060148410156144c2576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b8481526060602082015260006144e2606083018661401c565b82810360408401526140898185876142cd565b60006020828403121561450757600080fd5b8151610b8f81614177565b6000808335601e1984360301811261452957600080fd5b83016020810192503590506001600160401b0381111561454857600080fd5b80360382131561060e57600080fd5b604081526145786040820161456b85613cfd565b6001600160a01b03169052565b6020830135606082015260006145916040850185614512565b61012060808501526145a8610160850182846142cd565b9150506145b86060860186614512565b848303603f190160a08601526145cf8382846142cd565b608088013560c08781019190915260a089013560e0808901919091529089013561010088015290935061460792508701905086614512565b848303603f190161012086015261461f8382846142cd565b92505050614631610100860186614512565b848303603f19016101408601526146498382846142cd565b93505050508260208301529392505050565b60006020828403121561466d57600080fd5b8135610b8f81613ce5565b6000808335601e1984360301811261468f57600080fd5b8301803591506001600160401b038211156146a957600080fd5b6020019150600581901b360382131561060e57600080fd5b6000602082840312156146d357600080fd5b610b8f82614256565b6000808335601e198436030181126146f357600080fd5b8301803591506001600160401b0382111561470d57600080fd5b60200191503681900382131561060e57600080fd5b80356001600160d01b031981169060068410156144c2576001600160d01b031960069490940360031b84901b1690921692915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261479457600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906147c89083018461401c565b95945050505050565b6001600160f81b031991909116815260200190565b634e487b7160e01b600052602160045260246000fd5b6002811061481a57634e487b7160e01b600052602160045260246000fd5b9052565b60018060a01b0385168152836020820152608060408201526000614845608083018561401c565b90506147c860608301846147fc565b80518015158114611c5257600080fd5b6000806040838503121561487757600080fd5b61488083614854565b915060208301516001600160401b0381111561489b57600080fd5b6148a785828601614395565b9150509250929050565b6001600160a01b03831681526040602082018190526000906108189083018461401c565b6000602082840312156148e757600080fd5b610b8f82614854565b803560028110611c5257600080fd5b6000806040838503121561491257600080fd5b61491b836148f0565b91506020830135613fed81614177565b82815260008251614943816020850160208701613ff8565b919091016020019392505050565b83815260606020820152600061496a606083018561401c565b828103604084015261431e818561401c565b60ff84168152604060208201819052810182905260008360608301825b858110156149c95782356149ac81613ce5565b6001600160a01b0316825260209283019290910190600101614999565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016149fc576149fc6149d4565b5060010190565b81810381811115610722576107226149d4565b600082601f830112614a2757600080fd5b8135614a356143b48261436e565b818152846020838601011115614a4a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614a7c57600080fd5b8335614a8781614177565b925060208401356001600160f81b031981168114614aa457600080fd5b915060408401356001600160401b03811115614abf57600080fd5b614acb86828701614a16565b9150509250925092565b600080600060608486031215614aea57600080fd5b614af3846148f0565b92506020840135614aa481614177565b60008060408385031215614b1657600080fd5b8235614b2181613ce5565b915060208301356001600160401b03811115614b3c57600080fd5b6148a785828601614a16565b60008060408385031215614b5b57600080fd5b8235614b2181614177565b6020808252810182905260006040600584901b830181019083018583605e1936839003015b87821015614c0b57868503603f190184528235818112614baa57600080fd5b89018035614bb781613ce5565b6001600160a01b0316865260208181013590870152614bd96040820182614512565b915060606040880152614bf06060880183836142cd565b96505050602083019250602084019350600182019150614b8b565b5092979650505050505050565b8035602083101561072257600019602084900360031b1b1692915050565b60006001600160401b03821115614c4f57614c4f614328565b5060051b60200190565b600082601f830112614c6a57600080fd5b8151614c786143b482614c36565b8082825260208201915060208360051b860101925085831115614c9a57600080fd5b602085015b83811015614cdb5780516001600160401b03811115614cbd57600080fd5b614ccc886020838a0101614395565b84525060209283019201614c9f565b5095945050505050565b600060208284031215614cf757600080fd5b81516001600160401b03811115614d0d57600080fd5b61081884828501614c59565b60008060408385031215614d2c57600080fd5b82516001600160401b03811115614d4257600080fd5b8301601f81018513614d5357600080fd5b8051614d616143b482614c36565b8082825260208201915060208360051b850101925087831115614d8357600080fd5b6020840193505b82841015614dac57614d9b84614854565b825260209384019390910190614d8a565b8095505050505060208301516001600160401b03811115614dcc57600080fd5b6148a785828601614c5956feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca2646970667358221220ea7603497be0a0e1ddc106666c75af038c8db18b0f9143f6418b0e8b232c109164736f6c634300081a0033", + "sourceMap": "2122:17308:113:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9566:24:118;728:1:71;715:15;710:3;706:25;1058:10;1055:1;1052:17;1039:10;1036:1;1033:17;1030:40;1017:10;1014:1;1011:17;1008:63;1005:190;;;1103:1;1097:4;1090:15;1097:4;1149;1142:18;1005:190;-1:-1:-1;13275:10:118::1;9540:7;13263:23:::0;;;:11:::1;:23;::::0;;;;;;;;-1:-1:-1;;;;;;9540:7:118;::::1;;13314:22:::0;;;:12:::1;:22:::0;;;;;:34;;;;;;;;;;-1:-1:-1;;;;;13263:23:118;;::::1;::::0;13314:34;::::1;::::0;9540:7;13400:30:::1;13263:23:::0;13314:34;13400:9:::1;:30::i;:::-;13358:72;;;;9660:30:::2;9681:8;;9660:20;:30::i;:::-;9653:37;;13451:44:::1;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;:::-;13232:270;;;;1214:1:71;9388:309:118::0;;;2122:17308:113;;;;;;17023:107:118;;;;;;;;;;-1:-1:-1;17112:10:118;17069:12;17100:23;;;:11;:23;;;;;;-1:-1:-1;;;;;17100:23:118;17023:107;;;-1:-1:-1;;;;;287:32:153;;;269:51;;257:2;242:18;17023:107:118;;;;;;;;18241:908:113;;;;;;;;;;-1:-1:-1;18241:908:113;;;;;:::i;:::-;;:::i;:::-;;;1792:14:153;;1785:22;1767:41;;1755:2;1740:18;18241:908:113;1627:187:153;13195:1835:113;;;;;;;;;;-1:-1:-1;13195:1835:113;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;2509:33:153;;;2491:52;;2479:2;2464:18;13195:1835:113;2347:202:153;10726:1310:113;;;;;;;;;;-1:-1:-1;10726:1310:113;;;;;:::i;:::-;;:::i;:::-;;;3492:25:153;;;3480:2;3465:18;10726:1310:113;3346:177:153;1867:508:117;;;;;;;;;;-1:-1:-1;1867:508:117;;;;;:::i;:::-;;:::i;:::-;;976:3275:120;;;;;;;;;;-1:-1:-1;976:3275:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3752:352:118:-;;;;;;;;;;-1:-1:-1;3752:352:118;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1037:779:117:-;;;;;;;;;;-1:-1:-1;1037:779:117;;;;;:::i;:::-;;:::i;15081:1421:113:-;;;;;;;;;;-1:-1:-1;15081:1421:113;;;;;:::i;:::-;;:::i;541:135:122:-;;;;;;;;;;-1:-1:-1;634:35:122;;;;;;;;;;;;;;;;541:135;;;;634:35;541:135;:::i;16553:1637:113:-;;;;;;;;;;-1:-1:-1;16553:1637:113;;;;;:::i;:::-;;:::i;895:135:115:-;;;;;;;;;;-1:-1:-1;981:42:115;895:135;;16884:133:118;;;;;;;;;;-1:-1:-1;16884:133:118;;;;;:::i;:::-;-1:-1:-1;;;;;;16976:22:118;16945:12;16976:22;;;:12;:22;;;;;;;;16999:10;16976:34;;;;;;;;-1:-1:-1;;;;;16976:34:118;;16884:133;682:712:122;;;;;;;;;;-1:-1:-1;682:712:122;;;;;:::i;:::-;;:::i;6201:660:113:-;;;;;;;;;;-1:-1:-1;6201:660:113;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19200:228::-;;;;;;;;;;-1:-1:-1;19200:228:113;;;;;:::i;:::-;;:::i;2731:3419::-;;;;;;;;;;-1:-1:-1;2731:3419:113;;;;;:::i;:::-;;:::i;6056:350:118:-;;;;;;;;;;-1:-1:-1;6056:350:118;;;;;:::i;:::-;;:::i;6064:234:117:-;;;;;;;;;;-1:-1:-1;6064:234:117;;;;;:::i;:::-;;:::i;1400:373:122:-;;;;;;;;;;-1:-1:-1;1400:373:122;;;;;:::i;:::-;;:::i;4257:150:120:-;;;;;;;;;;;;;:::i;11504:843:118:-;11616:19;;-1:-1:-1;;;;;11673:24:118;;;11669:339;;11722:225;11764:10;11801;11836:1;11897:12;:10;:12::i;:::-;11911:9;11922:8;;11865:67;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11865:67:118;;;;;;;;;;;;;;-1:-1:-1;;;;;11865:67:118;-1:-1:-1;;;11865:67:118;;;11722:11;:225::i;:::-;11713:234;;11981:6;11970:27;;;;;;;;;;;;:::i;:::-;11961:36;;11669:339;-1:-1:-1;;;;;12021:21:118;;;12017:324;;12064:222;12106:10;12143:7;12175:1;12236:12;:10;:12::i;12064:222::-;12058:228;;12317:3;12306:24;;;;;;;;;;;;:::i;:::-;12300:30;;12017:324;11504:843;;;;;:::o;9703:1249::-;9885:34;9939:7;;-1:-1:-1;;;;;;9939:7:118;9922:25;;:16;:25;;;;;;;;9948:10;9922:37;;;;;;;9987:18;;9791:24;;9922:37;-1:-1:-1;;;;;9987:18:118;;;-1:-1:-1;;;10035:19:118;;;;9987:18;10120:60;;10154:26;;-1:-1:-1;;;10154:26:118;;-1:-1:-1;;;;;;10172:7:118;;;10154:26;;;2491:52:153;2464:18;;10154:26:118;;;;;;;;10120:60;10403:27;:8;-1:-1:-1;;;10403:27:118;:::i;:::-;10399:259;;;10453:194;10501:10;10538:7;10590:8;;10600:12;:10;:12::i;:::-;10573:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10453:17;:194::i;:::-;10446:201;;;;;;;10399:259;10671:27;:8;2789:4:131;10671:27:118;:::i;:::-;10667:279;;;10721:214;10763:10;10800:7;10832:1;10878:8;;10888:12;:10;:12::i;:::-;10861:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10721:11;:214::i;10667:279::-;9821:1131;;;9703:1249;;;;;:::o;12417:667::-;-1:-1:-1;;;;;12586:24:118;;;12582:248;;12626:193;12662:10;12699;12734:1;12796:6;12763:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12763:41:118;;;;;;;;;;;;;;-1:-1:-1;;;;;12763:41:118;-1:-1:-1;;;12763:41:118;;;12626:5;:193::i;:::-;-1:-1:-1;;;;;12843:21:118;;;12839:239;;12880:187;12916:10;12953:7;12985:1;13047:3;13014:38;;;;;;;;:::i;12880:187::-;12417:667;;;;:::o;18241:908:113:-;18415:4;276:1:76;18439:10:113;:35;18435:708;;18661:10;-1:-1:-1;;;;;18651:20:113;;;18647:37;;-1:-1:-1;18680:4:113;18673:11;;18647:37;18705:29;18727:6;18705:21;:29::i;:::-;18698:36;;;;18435:708;319:1:76;18755:10:113;:34;18751:392;;18812:28;18833:6;18812:20;:28::i;18751:392::-;362:1:76;18861:10:113;:34;18857:286;;18918:54;18946:6;18954:17;;18918:27;:54::i;18857:286::-;401:1:76;18993:10:113;:30;18989:154;;19046:43;19063:6;19071:17;;19046:16;:43::i;18989:154::-;-1:-1:-1;19127:5:113;18989:154;18241:908;;;;;;:::o;13195:1835::-;13325:17;13377:10;13447:16;;;13443:467;;13479:19;13528:186;13574:4;-1:-1:-1;;;;;13574:20:113;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13678:16;;;;;;3492:25:153;;;2480:66:113;;3465:18:153;13678:16:113;;;;-1:-1:-1;;13678:16:113;;;;;;;;;13668:27;;13678:16;13668:27;;;;13657:39;;;3492:25:153;3465:18;13657:39:113;;;;;;;;;;;;13528:24;:186::i;:::-;13501:227;;;;;;;13751:32;;-1:-1:-1;;;13751:32:113;;;;;3492:25:153;;;13501:227:113;;-1:-1:-1;;;;;;13751:19:113;;;;;3465:18:153;;13751:32:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13787:1;13751:37;13743:67;;;;-1:-1:-1;;;13743:67:113;;16335:2:153;13743:67:113;;;16317:21:153;16374:2;16354:18;;;16347:30;-1:-1:-1;;;16393:18:153;;;16386:47;16450:18;;13743:67:113;16133:341:153;13743:67:113;-1:-1:-1;;;;13865:34:113;-1:-1:-1;13858:41:113;;-1:-1:-1;13858:41:113;13443:467;13919:24;13962:9;13968:2;13919:24;13962:4;;:9;:::i;:::-;13954:18;;;:::i;:::-;13946:27;;;-1:-1:-1;14166:30:113;;;:74;;;14201:39;14223:16;14201:21;:39::i;:::-;14200:40;14166:74;14162:456;;;14256:24;14283:138;14325:4;-1:-1:-1;;;;;14325:20:113;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14389:16;;;;;;3492:25:153;;;2480:66:113;;3465:18:153;14389:16:113;3346:177:153;14283:138:113;14458:22;;;;;;14256:165;;-1:-1:-1;;;;;;14495:20:113;;;14458:22;14256:165;14542:9;:4;14547:2;14542:4;;:9;:::i;:::-;14495:57;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;14573:34:113;-1:-1:-1;14566:41:113;;-1:-1:-1;;;;;;;14566:41:113;14162:456;14712:16;14731:244;14775:10;14808:16;14920:12;:10;:12::i;:::-;14934:4;14940:9;:4;14945:2;14940:4;;:9;:::i;:::-;14848:116;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14848:116:113;;;;;;;;;;;;;;-1:-1:-1;;;;;14848:116:113;-1:-1:-1;;;14848:116:113;;;14731:17;:244::i;:::-;14712:263;;15009:3;14998:25;;;;;;;;;;;;:::i;:::-;14985:38;;13348:1682;;;13195:1835;;;;;;:::o;10726:1310::-;10923:22;981:42:115;783:12;:10;:12::i;:::-;-1:-1:-1;;;;;783:28:115;;779:93;;834:27;;-1:-1:-1;;;834:27:115;;;;;;;;;;;779:93;11004:12:113::1;::::0;::::1;;11123:2;11119:14:::0;;::::1;::::0;11236:23;;;:60:::1;;;11264:32;11286:9;11264:21;:32::i;:::-;11263:33;11236:60;11232:536;;;11329:27;11349:6;11329:19;:27::i;:::-;11312:44;;11232:536;;;11453:20;11476:220;11518:10;11555:9;11589:1;11661:6;11669:10;11618:63;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;11618:63:113;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;11618:63:113::1;-1:-1:-1::0;;;11618:63:113::1;::::0;;11476:11:::1;:220::i;:::-;11453:243;;11738:7;11727:30;;;;;;;;;;;;:::i;:::-;11710:47;;11373:395;11232:536;11805:24:::0;;11801:229:::1;;11845:174;11881:10;981:42:115::0;11955:19:113::1;11845:174;;;;;;;;;;;::::0;:5:::1;:174::i;:::-;10951:1085;;10726:1310:::0;;;;;:::o;1867:508:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;2165:89:117::1;2184:21;;::::0;::::1;:12:::0;:21:::1;:::i;:::-;2207:22;;::::0;::::1;:12:::0;:22:::1;:::i;:::-;2231;::::0;;;::::1;::::0;::::1;;:::i;:::-;2165:18;:89::i;:::-;2315:53;2328:10;;2340:9;;2351;;2362:5;;2315:12;:53::i;:::-;1867:508:::0;;;;;;;;;:::o;976:3275:120:-;1132:26;1172:17;;1132:26;1480:18;1172:17;1501:16;;;;:6;:16;:::i;:::-;1480:37;;-1:-1:-1;1480:37:120;-1:-1:-1;1558:8:120;1564:1;1562;1480:37;;1558:8;:::i;:::-;1551:16;;;:::i;:::-;1544:24;;;-1:-1:-1;1609:9:120;1615:2;1613:1;1609:3;;:9;:::i;:::-;1602:17;;;:::i;:::-;1595:25;;;-1:-1:-1;1647:8:120;:3;1651:2;1647:3;;:8;:::i;:::-;1634:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2706:830:120;;;;;;;;;193:66:128;2706:830:120;;1634:21;;-1:-1:-1;1634:21:120;-1:-1:-1;2706:830:120;;-1:-1:-1;;2706:830:120;;;;;-1:-1:-1;2794:13:120;;-1:-1:-1;2794:13:120;;:6;:13;:::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;2832:6;:12;;;2706:830;;;;2886:6;:15;;;;;;;;:::i;:::-;2876:26;;;;;;;:::i;:::-;;;;;;;;;2706:830;;;;2944:15;;;;:6;:15;:::i;:::-;2934:26;;;;;;;:::i;:::-;;;;;;;;2706:830;;;;3008:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3084:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3150:6;:25;;;2706:830;;;;3223:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3299:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3377:23;;;;:6;:23;:::i;:::-;3367:34;;;;;;;:::i;:::-;;;;;;;;;;;2706:830;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2706:830:120;;;;;;;4089:3;4064:29;;2663:873;;-1:-1:-1;;;;;;;4198:17:120;:15;:17::i;:::-;4153:81;;-1:-1:-1;;;;;;23370:26:153;;;4153:81:120;;;23358:39:153;23426:26;;;;23413:11;;;23406:47;23469:11;;;23462:27;23505:12;;;23498:28;;;23542:12;;4153:81:120;;;;;;;;;;;;4121:113;;2185:2060;;976:3275;;;;;;;:::o;3752:352:118:-;3903:22;3927:12;3962:135;:11;4017:10;4048:6;4078:8;3962:31;:135::i;:::-;3955:142;;;;3752:352;;;;;:::o;1037:779:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;1240:41:117::1;:11;1268:10;1240:16;:41::i;:::-;1308:10:::0;1291:14:::1;1335:429;1355:6;1351:1;:10;1335:429;;;1382:29;1414:10;;1425:1;1414:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1382:45:::0;-1:-1:-1;1441:69:117::1;1469:10;1491:16;;::::0;::::1;1382:45:::0;1491:16:::1;:::i;:::-;1441:11;::::0;:69;:16:::1;:69::i;:::-;-1:-1:-1::0;1363:3:117::1;;1335:429;;;-1:-1:-1::0;1778:31:117::1;::::0;1798:10:::1;::::0;1778:31:::1;::::0;;;::::1;1179:637;1037:779:::0;;:::o;15081:1421:113:-;13275:10:118;13242:18;13263:23;;;:11;:23;;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;15246:38:113;-1:-1:-1;;;;;13263:23:118;;;;13314:34;;;;13242:18;13400:30;13263:23;13314:34;13400:9;:30::i;:::-;13358:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;15510:27:113::2;276:1:76;15551:10:113;:35:::0;15547:673:::2;;15619:35;15637:6;15645:8;;15619:17;:35::i;:::-;15602:52;;15547:673;;;319:1:76;15675:10:113;:34:::0;15671:549:::2;;15742:34;15759:6;15767:8;;15742:16;:34::i;15671:549::-;362:1:76;15797:10:113;:34:::0;15793:427:::2;;15864:41;15888:6;15896:8;;15864:23;:41::i;15793:427::-;401:1:76;15926:10:113;:30:::0;15922:298:::2;;15989:30;16002:6;16010:8;;15989:12;:30::i;15922:298::-;16040:10:::0;16036:184:::2;;16103:35;16121:6;16129:8;;16103:17;:35::i;16036:184::-;16176:33;::::0;-1:-1:-1;;;16176:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;16176:33:113::2;3346:177:153::0;16036:184:113::2;16268:227;16308:10;16341:4;16435:10;16447:6;16455:14;16369:115;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;16369:115:113;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;16369:115:113::2;-1:-1:-1::0;;;16369:115:113::2;::::0;;16268:13:::2;:227::i;:::-;15319:1183;13451:44:118::0;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;16553:1637:113:-;13605:10:118;13572:18;13593:23;;;:11;:23;;;;;;;;;13644:22;:34;;;;;;;16725:6:113;;-1:-1:-1;;;16733:40:113;-1:-1:-1;;;;;13593:23:118;;;;13644:34;;;;13693:20;;;;;;;:41;;;13727:7;-1:-1:-1;;;;;13717:17:118;:6;-1:-1:-1;;;;;13717:17:118;;;13693:41;13689:249;;;13751:19;13772:16;13792:30;13802:10;13814:7;13792:9;:30::i;:::-;13750:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;17007:29:113::2;276:1:76;17050:10:113;:35:::0;17046:703:::2;;17120:39;17140:6;17148:10;;17120:19;:39::i;:::-;17101:58;;17046:703;;;319:1:76;17180:10:113;:34:::0;17176:573:::2;;17249:38;17268:6;17276:10;;17249:18;:38::i;17176:573::-;362:1:76;17308:10:113;:34:::0;17304:445:::2;;17377:45;17403:6;17411:10;;17377:25;:45::i;17304:445::-;401:1:76;17443:10:113;:30:::0;17439:310:::2;;17508:34;17523:6;17531:10;;17508:14;:34::i;17439:310::-;17563:10:::0;17559:190:::2;;17628:39;17648:6;17656:10;;17628:19;:39::i;17559:190::-;17705:33;::::0;-1:-1:-1;;;17705:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;17705:33:113::2;3346:177:153::0;17559:190:113::2;17949:234;17992:10;18025:4;18121:10;18133:6;18141:16;18053:119;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;18053:119:113;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;18053:119:113::2;-1:-1:-1::0;;;18053:119:113::2;::::0;;17949:16:::2;:234::i;:::-;16808:1382;13851:44:118::0;13862:10;13874:7;13883:6;13891:3;13851:10;:44::i;:::-;13736:170;;13689:249;;;981:42:115;583:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;17007:29:113::2;276:1:76;17050:10:113;:35:::0;17046:703:::2;;17120:39;17140:6;17148:10;;17120:19;:39::i;:::-;17101:58;;17046:703;;;319:1:76;17180:10:113;:34:::0;17176:573:::2;;17249:38;17268:6;17276:10;;17249:18;:38::i;17176:573::-;362:1:76;17308:10:113;:34:::0;17304:445:::2;;17377:45;17403:6;17411:10;;17377:25;:45::i;17304:445::-;401:1:76;17443:10:113;:30:::0;17439:310:::2;;17508:34;17523:6;17531:10;;17508:14;:34::i;17439:310::-;17563:10:::0;17559:190:::2;;17628:39;17648:6;17656:10;;17628:19;:39::i;17559:190::-;17705:33;::::0;-1:-1:-1;;;17705:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;17705:33:113::2;3346:177:153::0;17559:190:113::2;17949:234;17992:10;18025:4;18121:10;18133:6;18141:16;18053:119;;;;;;;;;;:::i;13689:249:118:-:0;13562:382;;16553:1637:113;;;;;;:::o;682:712:122:-;758:14;929:11;969:1;965:19;;;1007:26;929:11;-1:-1:-1;;;1007:26:122;:::i;:::-;1003:209;;;1047:4;1035:16;;1003:209;;;1070:27;:8;2789:4:131;1070:27:122;:::i;:::-;1066:146;;;1111:4;1099:16;;1066:146;;;1134:33;:8;-1:-1:-1;;;;;;1134:33:122;:::i;:::-;1130:82;;;1181:4;1169:16;;1130:82;;;-1:-1:-1;1207:5:122;;682:712;-1:-1:-1;;;682:712:122:o;1130:82::-;1227:9;:41;;;;-1:-1:-1;1240:28:122;:8;3369:4:131;1240:28:122;:::i;:::-;1223:164;;;1270:16;;682:712;;;:::o;1223:164::-;1305:9;:37;;;;-1:-1:-1;1318:24:122;:8;-1:-1:-1;;;1318:24:122;:::i;:::-;1301:86;;;1344:16;;682:712;;;:::o;6201:660:113:-;6499:26;4497:34:118;4518:12;:10;:12::i;:::-;4497:20;:34::i;:::-;4492:75;;4554:12;:10;:12::i;:::-;4540:27;;-1:-1:-1;;;4540:27:118;;-1:-1:-1;;;;;287:32:153;;;4540:27:118;;;269:51:153;242:18;;4540:27:118;123:203:153;4492:75:118;13275:10:::1;13242:18;13263:23:::0;;;:11:::1;:23;::::0;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;6379:44:113;-1:-1:-1;;;;;13263:23:118;;::::1;::::0;13314:34;;::::1;::::0;13242:18;13400:30:::1;13263:23:::0;13314:34;13400:9:::1;:30::i;:::-;13358:72;;;;6446:12:113::2;:10;:12::i;:::-;319:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;6687:4:113::0;6720:1:::3;6716:12:::0;;::::3;6801:53;6716:12:::0;6687:4;6836:17;;6801:14:::3;:53::i;:::-;6794:60;;;;13440:1:118::2;;13451:44:::1;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;:::-;13232:270;;;;4577:1;6201:660:113::0;;;;;:::o;19200:228::-;19274:13;19313:45;;;;-1:-1:-1;;;;;19313:45:113;981:42:115;19376:45:113;;-1:-1:-1;;;19376:45:113;;-1:-1:-1;;;;;24612:32:153;;;19376:45:113;;;24594:51:153;-1:-1:-1;;;;;24681:32:153;;24661:18;;;24654:60;19376:34:113;;;;;;;24567:18:153;;19376:45:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2731:3419::-;13275:10:118;13242:18;13263:23;;;:11;:23;;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;2853:32:113;-1:-1:-1;;;;;13263:23:118;;;;13314:34;;;;13242:18;13400:30;13263:23;13314:34;13400:9;:30::i;:::-;13358:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;3076:4:113::0;3109:1:::2;3105:12:::0;;::::2;3449:10;3474:28;3105:12:::0;2930:17:::2;3474:28;:::i;:::-;3470:2674;;;3563:26;:8:::0;-1:-1:-1;;;3563:26:113::2;:::i;:::-;3559:903;;;930:29:130::0;;909:51;;1062:2;1045:20;;;1103:25;3692:23:113::2;3698:4:::0;1045:20:130;1103:25;3692:5:113::2;:23::i;:::-;3591:139;;3470:2674;;3559:903;3794:27;:8:::0;2789:4:131::2;3794:27:113;:::i;:::-;3790:672;;;3842:14;3858:13:::0;3873:23:::2;;3920:32;:17;;:30;:32::i;:::-;3841:111;;;;;;;;3970:36;3976:4;3982:6;3990:5;3997:8;;3970:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;3970:5:113::2;::::0;-1:-1:-1;;;3970:36:113:i:2;:::-;3823:198;;;;3470:2674;;3790:672;4086:33;:8:::0;-1:-1:-1;;;;;;4086:33:113::2;:::i;:::-;4082:380;;;4139:14;4172:22;4191:2;4139:14:::0;4172:17;;:22:::2;:::i;:::-;4164:31;::::0;::::2;:::i;:::-;4156:40;;4139:57;;4214:23;;4240:17;;4258:2;4240:22;;;;;;;;;:::i;:::-;4214:48;;;;4280:37;4294:4;4300:6;4308:8;;4280:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;4280:13:113::2;::::0;-1:-1:-1;;;4280:37:113:i:2;:::-;4121:211;;;3470:2674;;4082:380;4438:8;4418:29;;-1:-1:-1::0;;;4418:29:113::2;;;;;;;;:::i;3470:2674::-;4784:24;:8:::0;-1:-1:-1;;;4784:24:113::2;:::i;:::-;4780:1364;;;4865:26;:8:::0;-1:-1:-1;;;4865:26:113::2;:::i;:::-;4861:904;;;930:29:130::0;;909:51;;1062:2;1045:20;;;1103:25;4994:26:113::2;5003:4:::0;1045:20:130;1103:25;4994:8:113::2;:26::i;4861:904::-;5095:27;:8:::0;2789:4:131::2;5095:27:113;:::i;:::-;5091:674;;;5143:14;5159:13:::0;5174:23:::2;;5221:32;:17;;:30;:32::i;:::-;5142:111;;;;;;;;5271:39;5280:4;5286:6;5294:5;5301:8;;5271:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;5271:8:113::2;::::0;-1:-1:-1;;;5271:39:113:i:2;5091:674::-;5386:33;:8:::0;-1:-1:-1;;;;;;5386:33:113::2;:::i;:::-;5382:383;;;5439:14;5472:22;5491:2;5439:14:::0;5472:17;;:22:::2;:::i;:::-;5464:31;::::0;::::2;:::i;:::-;5456:40;;5439:57;;5514:23;;5540:17;;5558:2;5540:22;;;;;;;;;:::i;:::-;5514:48;;;;5580:40;5597:4;5603:6;5611:8;;5580:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;5580:16:113::2;::::0;-1:-1:-1;;;5580:40:113:i:2;4780:1364::-;6124:8;6104:29;;-1:-1:-1::0;;;6104:29:113::2;;;;;;;;:::i;4780:1364::-;2920:3230;;;13451:44:118::0;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;6056:350::-;6206:22;6230:12;6265:134;:10;6319;6350:6;6380:8;6265:30;:134::i;6064:234:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;6241:50:117::1;6260:8;6270:9;;6281;6241:18;:50::i;1400:373:122:-:0;1469:4;276:1:76;1489:12:122;:37;1485:281;;-1:-1:-1;1535:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1485:281::-;319:1:76;1558:12:122;:36;1554:212;;-1:-1:-1;1603:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1554:212::-;362:1:76;1626:12:122;:36;1622:144;;-1:-1:-1;1671:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1622:144::-;401:1:76;1694:12:122;:32;1690:76;;-1:-1:-1;1735:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;-1:-1:-1;1761:5:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;1400:373;;;:::o;4257:150:120:-;4341:58;;;420:66;4341:58;;;25405:25:153;4379:13:120;25446:18:153;;;25439:34;;;;4394:4:120;25489:18:153;;;25482:60;4305:7:120;;25378:18:153;;4341:58:120;;;;;;;;;;;;4331:69;;;;;;4324:76;;4257:150;:::o;1053:312:57:-;-1:-1:-1;;1328:14:57;1324:23;1311:37;1307:2;1303:46;;1053:312::o;3115:392:116:-;3274:20;3310:12;3365:4;-1:-1:-1;;;;;3365:40:116;;3406:6;3414:5;3421:8;3431:20;3365:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3365:87:116;;;;;;;;;;;;:::i;:::-;3332:120;-1:-1:-1;3332:120:116;-1:-1:-1;3332:120:116;3462:38;;3483:17;;-1:-1:-1;;;3483:17:116;;;;;;;;;;;3462:38;3300:207;3115:392;;;;;;:::o;5465:120:131:-;-1:-1:-1;;;;;;5542:40:131;;;;;;;5465:120::o;7830:1080:116:-;7985:19;8020:27;8093:6;8101:8;8050:61;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8050:61:116;;;;;;;;;;;;;;-1:-1:-1;;;;;8050:61:116;-1:-1:-1;;;8050:61:116;;;8167:72;8050:61;;-1:-1:-1;;;8167:72:116;;8216:4;;8050:61;;8167:72;;;:::i;:::-;;;;-1:-1:-1;;8167:72:116;;;;;;;;;;;;;;;-1:-1:-1;;;;;8167:72:116;-1:-1:-1;;;8167:72:116;;;8502:25;;8167:72;;-1:-1:-1;8167:72:116;;-1:-1:-1;;8425:4:116;8398:5;8366:231;8345:266;8667:4;8649:16;8645:27;8701:4;8695:11;8685:21;;8744:12;8736:6;8732:25;8726:4;8719:39;8800:12;8794:4;8786:6;8771:42;;8843:4;8837:11;8827:67;;8884:6;8878:13;8871:4;8863:6;8859:17;8852:40;1637:247;1752:77;;-1:-1:-1;;;1752:77:116;;1737:12;;-1:-1:-1;;;;;1752:30:116;;;;;:77;;1783:6;;1791:5;;1798:8;;1737:12;;1752:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1737:92;;1844:7;1839:38;;1860:17;;-1:-1:-1;;;1860:17:116;;;;;;;;;;;1839:38;1727:157;1637:247;;;;:::o;3451:229:118:-;3564:16;3610:63;:11;3642:10;3661:9;3610:20;:63::i;5760:225::-;5871:16;5917:61;:10;5948;5967:8;5917:19;:61::i;8607:397::-;8781:4;;8822:39;;;;8833:17;8822:39;:::i;:::-;-1:-1:-1;;;;;;8909:29:118;8872:34;8909:29;;;:16;:29;;;;;;;;8939:10;8909:41;;;;;;;8967:18;-1:-1:-1;;;;;8967:18:118;;;:30;;;;;-1:-1:-1;;8607:397:118;;;;;:::o;16523:355::-;16658:4;;;16717:39;;;;16728:7;16717:39;:::i;:::-;16678:78;;;;16766:12;16781:59;16809:8;16829;16781:15;:59::i;:::-;-1:-1:-1;;;;;16857:14:118;;;;;;;;-1:-1:-1;;;;16523:355:118;;;;;:::o;19453:378:113:-;19622:12;19694:4;19687:12;;19720:4;19713:12;;19739:15;19795:8;19805:7;19778:35;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;19778:35:113;;;;;;;19768:46;;19778:35;19768:46;;;;-1:-1:-1;;;;;;23370:26:153;;;19657:167:113;;;23358:39:153;;;;23426:26;;;;23413:11;;;23406:47;23469:11;;;23462:27;23505:12;;;23498:28;23542:12;;19657:167:113;;;;;;;;;;;;19650:174;;19453:378;;;;;:::o;12237:907::-;12350:22;;;;;12490:31;12500:6;981:42:115;976:3275:120;:::i;12490:31:113:-;12571:24;;;;;;12535:88;;-1:-1:-1;;;12535:88:113;;12388:133;;-1:-1:-1;12388:133:113;;-1:-1:-1;12388:133:113;;-1:-1:-1;12388:133:113;-1:-1:-1;12542:10:113;;12535:35;;:88;;12388:133;;;;12535:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12531:607;;12979:148;13028:4;13062:10;13102;12979:19;:148::i;:::-;12962:165;;12531:607;;;12781:149;12830:5;12865:10;12905;12781:19;:149::i;:::-;12764:166;;12531:607;12378:766;;;;12237:907;;;:::o;1297:738:119:-;1559:10;1549:9;:21;;;;;;;;;;:32;;-1:-1:-1;;;;;;1549:32:119;-1:-1:-1;;;;;1549:32:119;;;;;;;;1686;1682:285;;1734:222;1770:10;1815:8;1849:1;1919:9;1930;;1878:63;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1878:63:119;;;;;;;;;;;;;;-1:-1:-1;;;;;1878:63:119;-1:-1:-1;;;1878:63:119;;;1734:5;:222::i;:::-;1981:47;;-1:-1:-1;;;;;1981:47:119;;;2007:10;;1981:47;;;;;1297:738;;;;:::o;2506:3507:117:-;3072:10;1033:4:42;1060:31;;;:22;;:31;:22;:31;;;2726:27:117;;2780:10;;-1:-1:-1;;;;;1060:31:42;3025:896:117;;3101:41;:11;3129:10;3101:16;:41::i;:::-;3161:9;3156:673;3176:6;3172:1;:10;3156:673;;;3207:29;3239:10;;3250:1;3239:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;3207:45;-1:-1:-1;3374:55:117;3392:16;;;;3207:45;3392:16;:::i;:::-;3410:18;;;;:9;:18;:::i;:::-;3374:17;:55::i;:::-;3357:72;-1:-1:-1;3494:320:117;3542:10;3583:4;276:1:76;3740:16:117;;;;:9;:16;:::i;:::-;3758:14;3619:176;;;;;;;;;;:::i;3494:320::-;-1:-1:-1;3184:3:117;;3156:673;;;;3025:896;;;3849:11;;3845:76;;3883:27;;-1:-1:-1;;;3883:27:117;;3899:10;3883:27;;;269:51:153;242:18;;3883:27:117;123:203:153;3845:76:117;3983:40;:10;4010;3983:15;:40::i;:::-;-1:-1:-1;4043:9:117;4074;4069:614;4089:6;4085:1;:10;4069:614;;;4116:28;4147:9;;4157:1;4147:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4116:43;-1:-1:-1;4273:52:117;4290:15;;;;4116:43;4290:15;:::i;:::-;4307:17;;;;:8;:17;:::i;:::-;4273:16;:52::i;:::-;4256:69;-1:-1:-1;4382:290:117;4426:10;4463:4;319:1:76;4607:15:117;;;;:8;:15;:::i;4382:290::-;-1:-1:-1;4097:3:117;;4069:614;;;-1:-1:-1;4702:9:117;;-1:-1:-1;4733:9:117;4728:625;4748:6;4744:1;:10;4728:625;;;4775:29;4807:9;;4817:1;4807:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4775:44;-1:-1:-1;4933:61:117;4957:16;;;;4775:44;4957:16;:::i;:::-;4975:18;;;;:9;:18;:::i;:::-;4933:23;:61::i;:::-;4916:78;-1:-1:-1;5051:291:117;5095:10;5132:4;362:1:76;5276:16:117;;;;:9;:16;:::i;5051:291::-;-1:-1:-1;4756:3:117;;4728:625;;;-1:-1:-1;5372:5:117;;-1:-1:-1;5399:9:117;5394:566;5414:6;5410:1;:10;5394:566;;;5441:24;5468:5;;5474:1;5468:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5441:35;-1:-1:-1;5590:40:117;5603:11;;;;5441:35;5603:11;:::i;:::-;5616:13;;;;:4;:13;:::i;:::-;5590:12;:40::i;:::-;5573:57;-1:-1:-1;5687:262:117;5731:10;5768:4;401:1:76;5888:11:117;;;;:4;:11;:::i;5687:262::-;-1:-1:-1;5422:3:117;;5394:566;;;-1:-1:-1;5975:31:117;;5995:10;;5975:31;;;;;2716:3297;;2506:3507;;;;;;;;:::o;3410:171:13:-;3510:7;3536:38;3550:6;:23;;;2887:3;2868:22;;2780:117;3587:162;3679:7;-1:-1:-1;;;;;3718:23:13;;;;3039:31;3705:37;2959:118;3083:162;3183:7;3223:14;;;;2887:3;2868:22;3209:29;2780:117;3251:153;3343:7;-1:-1:-1;;;;;3382:14:13;;;;3039:31;3369:28;2959:118;3124:1854:42;3315:22;3339:12;-1:-1:-1;;;;;3371:17:42;;93:3;3371:17;;;;:52;;;3393:30;3402:4;3408:7;3417:5;3393:8;:30::i;:::-;3392:31;3371:52;3367:120;;;3446:30;;-1:-1:-1;;;3446:30:42;;-1:-1:-1;;;;;287:32:153;;3446:30:42;;;269:51:153;242:18;;3446:30:42;123:203:153;3367:120:42;3500:8;3512:1;3500:13;3496:50;;3522:24;;-1:-1:-1;;;3522:24:42;;;;;;;;;;;3496:50;3619:8;-1:-1:-1;;;;;3605:23:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:23:42;-1:-1:-1;;;;;;3711:19:42;;;3672:18;3711:19;;;;;;;;;;;:28;;;;;;;;;;;3597:31;;-1:-1:-1;3711:28:42;;;-1:-1:-1;3749:197:42;-1:-1:-1;;;;;3756:20:42;;;;;;:40;;-1:-1:-1;;;;;;3780:16:42;;93:3;3780:16;;3756:40;:65;;;;;3813:8;3800:10;:21;3756:65;3749:197;;;3857:4;3837:5;3843:10;3837:17;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3837:24:42;;;:17;;;;;;;;;;:24;;;;3882:18;;;:12;:18;;;;;;;;;;:27;;;;;;;;;;;;;;;;;3923:12;;;;:::i;:::-;;;;3749:197;;;-1:-1:-1;;;;;4671:16:42;;93:3;4671:16;;;;:34;;;4704:1;4691:10;:14;4671:34;4667:93;;;4728:5;4734:14;4747:1;4734:10;:14;:::i;:::-;4728:21;;;;;;;;:::i;:::-;;;;;;;4721:28;;4667:93;4951:10;4944:5;4937:25;4923:49;3124:1854;;;;;;;:::o;673:213::-;93:3;1033:4;1060:22;;;;;;;;;;;-1:-1:-1;;;;;1060:31:42;;;;;;;;;;;;:47;750:77;;796:31;;-1:-1:-1;;;796:31:42;;;;;;;;;;;750:77;93:3;837:12;:22;;;;;;;;;;;-1:-1:-1;;;;;837:31:42;;;;;;;;;;;;:42;;-1:-1:-1;;;;;;837:42:42;;;;;;673:213::o;1442:480::-;-1:-1:-1;;;;;1541:24:42;;;;:48;;-1:-1:-1;;;;;;1569:20:42;;93:3;1569:20;1541:48;1537:119;;;1612:33;;-1:-1:-1;;;1612:33:42;;-1:-1:-1;;;;;287:32:153;;1612:33:42;;;269:51:153;242:18;;1612:33:42;123:203:153;1537:119:42;-1:-1:-1;;;;;1669:22:42;;;139:3;1669:22;;;;;;;;;;;:31;;;;;;;;;;;;:47;1665:124;;1739:39;;-1:-1:-1;;;1739:39:42;;-1:-1:-1;;;;;287:32:153;;1739:39:42;;;269:51:153;242:18;;1739:39:42;123:203:153;1665:124:42;93:3;1832:12;:22;;;;;;;;;;;-1:-1:-1;;;;;1832:31:42;;;;;;;;;;;;;;1798:22;;;;;;;;;;;;:31;;;;;;;;;;:65;;1832:31;;;;-1:-1:-1;;;;;;1798:65:42;;;;;;;1873:31;:42;;;;;;;;1442:480::o;2225:311:118:-;2403:27;2352:9;276:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;2446:62:118::1;:11;2474:10;2496:9:::0;2446:16:::1;:62::i;:::-;2525:4;;2518:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2518:11:118;;2225:311;-1:-1:-1;;;;;;;;;2225:311:118:o;4858:305::-;5032:27;4983:8;319:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;5075:60:118::1;:10;5102;5124:8:::0;5075:15:::1;:60::i;6826:1099::-:0;7023:27;6975:7;362:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;7067:18:118::1;::::0;;7143:45:::1;::::0;;::::1;7154:6:::0;7143:45:::1;:::i;:::-;7066:122:::0;;-1:-1:-1;7066:122:118;-1:-1:-1;7066:122:118;-1:-1:-1;;;;;;;7317:41:118;::::1;-1:-1:-1::0;;;7317:41:118::1;::::0;:88:::1;;-1:-1:-1::0;;;;;;;7362:43:118;::::1;-1:-1:-1::0;;;7362:43:118::1;7317:88;7300:158;;;7423:35;::::0;-1:-1:-1;;;7423:35:118;;-1:-1:-1;;;;;;2509:33:153;;7423:35:118::1;::::0;::::1;2491:52:153::0;2464:18;;7423:35:118::1;2347:202:153::0;7300:158:118::1;7515:27;:8:::0;2789:4:131::1;7515:27:118;:::i;:::-;:58;;;;-1:-1:-1::0;7546:27:118::1;:8:::0;-1:-1:-1;;;7546:27:118::1;:::i;:::-;7511:121;;;7612:8;7596:25;;-1:-1:-1::0;;;7596:25:118::1;;;;;;;;:::i;7511:121::-;-1:-1:-1::0;;;;;;8072:29:118;;8019:4;8072:29;;;:16;:29;;;;;;;;8102:10;8072:41;;;;;;;8130:18;-1:-1:-1;;;;;8130:18:118;:32;7642:83:::1;;7695:30;::::0;-1:-1:-1;;;7695:30:118;;-1:-1:-1;;;;;;2509:33:153;;7695:30:118::1;::::0;::::1;2491:52:153::0;2464:18;;7695:30:118::1;2347:202:153::0;7642:83:118::1;-1:-1:-1::0;;;;;;7773:29:118;;::::1;7736:34;7773:29:::0;;;:16:::1;:29;::::0;;;;;;;7803:10:::1;7773:41:::0;;;;;;;7824:30;;-1:-1:-1;;;;;7864:28:118;::::1;-1:-1:-1::0;;;;;;7824:30:118::1;::::0;;;::::1;-1:-1:-1::0;;;7824:30:118::1;7864:28:::0;;;;-1:-1:-1;;;;;;7864:28:118;;;;;;;::::1;::::0;;7910:8;-1:-1:-1;6826:1099:118;;;;;;;:::o;14196:1306::-;14370:27;14329:4;401:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;14414:17:118::1;::::0;;14487:43:::1;::::0;;::::1;14498:4:::0;14487:43:::1;:::i;:::-;14413:117:::0;;-1:-1:-1;14413:117:118;-1:-1:-1;14413:117:118;-1:-1:-1;14540:19:118::1;::::0;14605:8:::1;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1::0;;;;;;;14636:15:118;::::1;::::0;14605:46:::1;14601:869;;;-1:-1:-1::0;14693:10:118::1;14681:23;::::0;;;:11:::1;:23;::::0;;;;;-1:-1:-1;;;;;14681:23:118::1;14851:25:::0;;14847:104:::1;;14903:33;::::0;-1:-1:-1;;;14903:33:118;;-1:-1:-1;;;;;287:32:153;;14903:33:118::1;::::0;::::1;269:51:153::0;242:18;;14903:33:118::1;123:203:153::0;14847:104:118::1;14976:10;14964:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;;;;;14964:30:118::1;-1:-1:-1::0;;;;;14964:30:118;::::1;;::::0;;14601:869:::1;;;15027:12;15015:8;:24;;;;;;;;:::i;:::-;::::0;15011:459:::1;;-1:-1:-1::0;;;;;;;15069:22:118;::::1;;::::0;;;:12:::1;:22;::::0;;;;;;;15092:10:::1;15069:34:::0;;;;;;;;-1:-1:-1;;;;;15069:34:118::1;15250:25:::0;;15246:104:::1;;15302:33;::::0;-1:-1:-1;;;15302:33:118;;-1:-1:-1;;;;;287:32:153;;15302:33:118::1;::::0;::::1;269:51:153::0;242:18;;15302:33:118::1;123:203:153::0;15246:104:118::1;-1:-1:-1::0;;;;;;15363:22:118;::::1;;::::0;;;:12:::1;:22;::::0;;;;;;;15386:10:::1;15363:34:::0;;;;;;;:41;;-1:-1:-1;;;;;;15363:41:118::1;-1:-1:-1::0;;;;;15363:41:118;::::1;;::::0;;15011:459:::1;;;15442:17;;-1:-1:-1::0;;;15442:17:118::1;;;;;;;;;;;15011:459;-1:-1:-1::0;15487:8:118;14196:1306;-1:-1:-1;;;;;;;;14196:1306:118:o;17586:3425::-;17710:28;18187:20;;18171:37;;18255:2;18238:20;;;;18287:25;;18335:15;;;18395:20;18379:37;;18448:20;;;;18500:25;;;18548:15;;;18608:20;18592:37;;18667:20;;;;18725:25;18287;18813;;;18809:52;;18847:14;;-1:-1:-1;;;18847:14:118;;;;;;;;;;;18809:52;18963:9;18958:1873;18978:6;18974:1;:10;18958:1873;;;19005:13;19021:5;;19027:1;19021:8;;;;;;;:::i;:::-;;;;;;;19005:24;;276:1:76;19354:5:118;:30;19350:1471;;19404:38;19422:6;19430:8;;19439:1;19430:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;19404:38::-;;19350:1471;;;319:1:76;19785:5:118;:29;19781:1040;;19834:37;19851:6;19859:8;;19868:1;19859:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;19781:1040::-;362:1:76;20214:5:118;:29;20210:611;;20263:44;20287:6;20295:8;;20304:1;20295:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;20210:611::-;401:1:76;20650:5:118;:25;20646:175;;20695:33;20708:6;20716:8;;20725:1;20716:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;20646:175::-;20774:32;;-1:-1:-1;;;20774:32:118;;-1:-1:-1;;;;;31922:32:153;;20774::118;;;31904:51:153;31971:18;;;31964:34;;;31877:18;;20774:32:118;31730:274:153;20646:175:118;-1:-1:-1;18986:3:118;;18958:1873;;;;20990:14;;20972:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20972:32:118;;17586:3425;-1:-1:-1;;;;;;;;;;;;;;17586:3425:118:o;1890:256:116:-;2010:81;;-1:-1:-1;;;2010:81:116;;1983:12;;-1:-1:-1;;;;;2010:30:116;;;;;:81;;2041:6;;1983:12;;2052:8;;2062:28;;2010:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1983:108;;2106:7;2101:38;;2122:17;;-1:-1:-1;;;2122:17:116;;;;;;;;;;;2878:344:118;3003:27;3046:12;3093:34;;;;3104:4;3093:34;:::i;:::-;3068:59;-1:-1:-1;3068:59:118;-1:-1:-1;3137:78:118;:11;3164:10;3068:59;3203:9;3137:15;:78::i;:::-;3036:186;2878:344;;;;;:::o;5410:::-;5533:29;5578:12;5627:34;;;;5638:4;5627:34;:::i;:::-;5600:61;-1:-1:-1;5600:61:118;-1:-1:-1;5671:76:118;:10;5697;5600:61;5736:8;5671:14;:76::i;8175:426::-;8327:29;8372:18;8434:36;;;;8445:7;8434:36;:::i;:::-;-1:-1:-1;;;;;;8518:29:118;;;8481:34;8518:29;;;:16;:29;;;;;;;;8548:10;8518:41;;;;;;;8569:25;;-1:-1:-1;;;;;;8569:25:118;;;8400:70;8175:426;-1:-1:-1;;;;;8175:426:118:o;15508:596::-;15643:29;15688:17;;15781:43;;;;15792:4;15781:43;:::i;:::-;15740:84;-1:-1:-1;15740:84:118;;-1:-1:-1;15740:84:118;-1:-1:-1;15850:15:118;15838:8;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1;;;;;;;15869:15:118;;;15838:46;15834:264;;;15919:10;15907:23;;;;:11;:23;;;;;15900:30;;-1:-1:-1;;;;;;15900:30:118;;;15834:264;;;15963:12;15951:8;:24;;;;;;;;:::i;:::-;;15947:151;;-1:-1:-1;;;;;;15998:22:118;;;;;;:12;:22;;;;;;;;16021:10;15998:34;;;;;;;15991:41;;-1:-1:-1;;;;;;15991:41:118;;;15947:151;;21017:3447;21143:30;21624:20;;21608:37;;21692:2;21675:20;;;;21724:25;;21772:15;;;21832:20;21816:37;;21885:20;;;;21937:25;;;21985:15;;;22045:20;22029:37;;22106:20;;;;22166:25;21724;22254;;;22250:52;;22288:14;;-1:-1:-1;;;22288:14:118;;;;;;;;;;;22250:52;22404:9;22399:1881;22419:6;22415:1;:10;22399:1881;;;22446:13;22462:5;;22468:1;22462:8;;;;;;;:::i;:::-;;;;;;;22446:24;;276:1:76;22795:5:118;:30;22791:1479;;22845:40;22865:6;22873:8;;22882:1;22873:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;22845:19;:40::i;:::-;;22791:1479;;;319:1:76;23228:5:118;:29;23224:1046;;23277:39;23296:6;23304:8;;23313:1;23304:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23277:18;:39::i;23224:1046::-;362:1:76;23659:5:118;:29;23655:615;;23708:46;23734:6;23742:8;;23751:1;23742:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23708:25;:46::i;23655:615::-;401:1:76;24097:5:118;:25;24093:177;;24142:35;24157:6;24165:8;;24174:1;24165:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;24142:14;:35::i;24093:177::-;-1:-1:-1;22427:3:118;;22399:1881;;4968:267:116;5091:81;;-1:-1:-1;;;5091:81:116;;5064:12;;-1:-1:-1;;;;;5091:30:116;;;;;:81;;5122:6;;5064:12;;5133:8;;5143:28;;5091:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5064:108;;5187:7;5182:46;;5201:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;5226:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;5201:27:116;31877:18:153;5201:27:116;;;;;;;5054:181;4968:267;;;:::o;901:331:119:-;1015:10;985:17;1005:21;;;;;;;;;;;-1:-1:-1;;;;;1005:21:119;1040:31;;1036:190;;1159:56;;-1:-1:-1;;;1159:56:119;;1184:10;1159:56;;;33942:51:153;-1:-1:-1;;;;;34029:32:153;;;34009:18;;;34002:60;34078:18;;;34071:34;;;1159:24:119;;;;;33915:18:153;;1159:56:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:190;975:257;901:331;;:::o;7101:3574:113:-;7260:26;7601:28;:8;3369:4:131;7601:28:113;:::i;:::-;7597:3072;;;7690:26;:8;-1:-1:-1;;;7690:26:113;:::i;:::-;7686:1100;;;930:29:130;;909:51;;1062:2;1045:20;;;1103:25;7833:42:113;7851:10;1045:20:130;1103:25;7833:11:113;:42::i;:::-;7819:56;;7718:172;;7597:3072;;7686:1100;7954:27;:8;2789:4:131;7954:27:113;:::i;:::-;7950:836;;;8002:14;8018:13;8033:23;;8080:32;:17;;:30;:32::i;:::-;8144:14;;;8156:1;8144:14;;;;;;;;;8001:111;;-1:-1:-1;8001:111:113;;-1:-1:-1;8001:111:113;;-1:-1:-1;8001:111:113;-1:-1:-1;8144:14:113;;;;;;;;;;;;;;;;;;;;8130:28;;8193:55;8211:10;8224:6;8232:5;8239:8;;8193:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:11:113;;-1:-1:-1;;;8193:55:113:i;:::-;8176:11;8188:1;8176:14;;;;;;;;:::i;:::-;;;;;;:72;;;;7983:280;;;;7597:3072;;7950:836;8328:33;:8;-1:-1:-1;;;;;;8328:33:113;:::i;:::-;8324:462;;;8381:14;8414:22;8433:2;8381:14;8414:17;;:22;:::i;:::-;8406:31;;;:::i;:::-;8398:40;;;-1:-1:-1;8456:23:113;;8482:22;:17;8500:2;8482:17;;:22;:::i;:::-;8536:14;;;8548:1;8536:14;;;;;;;;;8456:48;;-1:-1:-1;8456:48:113;;-1:-1:-1;8536:14:113;;;;;;;;;;;;;;;;;;;;8522:28;;8585:56;8611:10;8624:6;8632:8;;8585:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8585:19:113;;-1:-1:-1;;;8585:56:113:i;:::-;8568:11;8580:1;8568:14;;;;;;;;:::i;:::-;;;;;;:73;;;;8363:293;;;7597:3072;;8324:462;8762:8;8742:29;;-1:-1:-1;;;8742:29:113;;;;;;;;:::i;7597:3072::-;9108:24;:8;-1:-1:-1;;;9108:24:113;:::i;:::-;9104:1565;;;9189:26;:8;-1:-1:-1;;;9189:26:113;:::i;:::-;9185:1105;;;930:29:130;;909:51;;1062:2;1045:20;;;1103:25;9336:45:113;9357:10;1045:20:130;1103:25;9336:14:113;:45::i;:::-;9318:63;-1:-1:-1;9104:1565:113;;-1:-1:-1;;;9104:1565:113;9185:1105;9456:27;:8;2789:4:131;9456:27:113;:::i;:::-;9452:838;;;9504:14;9520:13;9535:23;;9582:32;:17;;:30;:32::i;:::-;9646:14;;;9658:1;9646:14;;;;;;;;;9503:111;;-1:-1:-1;9503:111:113;;-1:-1:-1;9503:111:113;;-1:-1:-1;9503:111:113;-1:-1:-1;9646:14:113;;;;;;;;;;;;;;;;;;;;9632:28;;9695:58;9716:10;9729:6;9737:5;9744:8;;9695:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9695:14:113;;-1:-1:-1;;;9695:58:113:i;9452:838::-;9829:33;:8;-1:-1:-1;;;;;;9829:33:113;:::i;:::-;9825:465;;;9882:14;9915:22;9934:2;9882:14;9915:17;;:22;:::i;:::-;9907:31;;;:::i;:::-;9899:40;;;-1:-1:-1;9957:23:113;;9983:22;:17;10001:2;9983:17;;:22;:::i;:::-;10037:14;;;10049:1;10037:14;;;;;;;;;9957:48;;-1:-1:-1;9957:48:113;;-1:-1:-1;10037:14:113;;;;;;;;;;;;;;;;;;;;10023:28;;10086:59;10115:10;10128:6;10136:8;;10086:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10086:22:113;;-1:-1:-1;;;10086:59:113:i;9104:1565::-;10649:8;10629:29;;-1:-1:-1;;;10629:29:113;;;;;;;;:::i;1395:236:116:-;1474:150;1508:4;1534;1602:10;;1562:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1562:51:116;;;;;;;;;;;;;;-1:-1:-1;;;;;1562:51:116;-1:-1:-1;;;1562:51:116;;;1474:13;:150::i;1332:333:130:-;1435:14;;1466:23;1435:14;1530:23;1550:2;1435:14;1530:17;;:23;:::i;:::-;1522:32;;;:::i;:::-;1514:41;;;-1:-1:-1;1589:24:130;1610:2;1607;1589:17;;:24;:::i;:::-;1581:33;;;:::i;:::-;1573:42;-1:-1:-1;1636:22:130;:17;1654:2;1636:17;;:22;:::i;:::-;1332:333;;;;-1:-1:-1;1625:33:130;-1:-1:-1;;;1332:333:130:o;4453:245:116:-;4535:156;4572:4;4598;4669:10;;4626:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4626:54:116;;;;;;;;;;;;;;-1:-1:-1;;;;;4626:54:116;-1:-1:-1;;;4626:54:116;;;4535:16;:156::i;4704:258::-;4822:77;;-1:-1:-1;;;4822:77:116;;4807:12;;-1:-1:-1;;;;;4822:30:116;;;;;:77;;4853:6;;4861:5;;4868:8;;4807:12;;4822:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4807:92;;4914:7;4909:46;;4928:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;4953:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;4928:27:116;31877:18:153;4928:27:116;;;;;;;4797:165;4704:258;;;;:::o;2865:253:42:-;3019:4;93:3;-1:-1:-1;;;;;3046:17:42;;;;;;:65;;-1:-1:-1;;;;;;;3067:19:42;;;139:3;3067:19;;;;;;;;;;;:28;;;;;;;;;;;;;:44;;;2865:253::o;16110:407:118:-;16240:12;;16303:8;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1;;;;;;;16334:15:118;;;16303:46;16299:107;;;-1:-1:-1;16384:10:118;16372:23;;;;:11;:23;;;;;;-1:-1:-1;;;;;16372:23:118;16299:107;16431:12;16419:8;:24;;;;;;;;:::i;:::-;;16415:96;;-1:-1:-1;;;;;;;16466:22:118;;;;;:12;:22;;;;;;;;16489:10;16466:34;;;;;;;;-1:-1:-1;;;;;16466:34:118;;16110:407;-1:-1:-1;16110:407:118:o;2448:248:9:-;2559:7;2683:8;2667:10;2659:19;;:33;;2643:3;2628:10;2620:19;;:26;;2590:9;:17;;2606:1;2590:17;;;2602:1;2590:17;2589:58;;;:104;;2448:248;-1:-1:-1;;;;2448:248:9:o;1928:545:42:-;-1:-1:-1;;;;;2095:24:42;;;;:48;;-1:-1:-1;;;;;;2123:20:42;;93:3;2123:20;2095:48;2091:120;;;2166:34;;-1:-1:-1;;;2166:34:42;;-1:-1:-1;;;;;287:32:153;;2166:34:42;;;269:51:153;242:18;;2166:34:42;123:203:153;2091:120:42;-1:-1:-1;;;;;2224:23:42;;;:12;:23;;;;;;;;;;;:32;;;;;;;;;;;;;:44;;;;2220:115;;2291:33;;-1:-1:-1;;;2291:33:42;;-1:-1:-1;;;;;287:32:153;;2291:33:42;;;269:51:153;242:18;;2291:33:42;123:203:153;2220:115:42;-1:-1:-1;;;;;2379:22:42;;;:12;:22;;;;;;;;;;;:31;;;;;;;;;;;;;;2344:23;;;;;;;;;;;:32;;;;;;;;:66;;2379:31;;;;-1:-1:-1;;;;;;2344:66:42;;;;;;;2420:31;;;;:46;;;;;1928:545::o;2695:414:116:-;2817:23;2891:178;2935:4;2965;3043:10;;2997:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2997:57:116;;;;;;;;;;;;;;-1:-1:-1;;;;;2997:57:116;-1:-1:-1;;;2997:57:116;;;2891:19;:178::i;:::-;2867:235;;;;;;;;;;;;:::i;3513:391::-;3657:20;3693:12;3736:4;-1:-1:-1;;;;;3736:40:116;;3790:6;3798:1;3801:8;3811:28;3736:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3736:113:116;;;;;;;;;;;;:::i;:::-;3715:134;-1:-1:-1;3715:134:116;-1:-1:-1;3715:134:116;3859:38;;3880:17;;-1:-1:-1;;;3880:17:116;;;;;;;;;;;5785:605;5910:21;5933:23;5972:16;5991:168;6034:4;6060;6137:10;;6088:60;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6088:60:116;;;;;;;;;;;;;;-1:-1:-1;;;;;6088:60:116;-1:-1:-1;;;6088:60:116;;;5991:22;:168::i;:::-;5972:187;;6202:3;6191:34;;;;;;;;;;;;:::i;:::-;6253:14;;6169:56;;-1:-1:-1;6169:56:116;-1:-1:-1;6236:14:116;6277:107;6297:6;6293:1;:10;6277:107;;;6329:7;6337:1;6329:10;;;;;;;;:::i;:::-;;;;;;;6324:49;;6346:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;31986:2;31971:18;;31964:34;;;-1:-1:-1;;;;;;;;;;;6346:27:116;31877:18:153;6346:27:116;;;;;;;6324:49;6305:3;;6277:107;;;;5962:428;;5785:605;;;;;;:::o;6396:403::-;6558:20;6594:12;6649:4;-1:-1:-1;;;;;6649:40:116;;6690:6;6698:5;6705:8;6715:20;6649:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6649:87:116;;;;;;;;;;;;:::i;:::-;6616:120;-1:-1:-1;6616:120:116;-1:-1:-1;6616:120:116;6746:46;;6765:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;6790:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;6765:27:116;31877:18:153;6765:27:116;;;;;;;6584:215;6396:403;;;;;;:::o;6805:::-;6952:20;6988:12;7031:4;-1:-1:-1;;;;;7031:40:116;;7085:6;7093:1;7096:8;7106:28;7031:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7031:113:116;;;;;;;;;;;;:::i;:::-;7010:134;-1:-1:-1;7010:134:116;-1:-1:-1;7010:134:116;7155:46;;7174:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;7199:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;7174:27:116;31877:18:153;7174:27:116;;;;;;;6978:230;6805:403;;;;;:::o;331:131:153:-;-1:-1:-1;;;;;406:31:153;;396:42;;386:70;;452:1;449;442:12;386:70;331:131;:::o;467:134::-;535:20;;564:31;535:20;564:31;:::i;606:347::-;657:8;667:6;721:3;714:4;706:6;702:17;698:27;688:55;;739:1;736;729:12;688:55;-1:-1:-1;762:20:153;;-1:-1:-1;;;;;794:30:153;;791:50;;;837:1;834;827:12;791:50;874:4;866:6;862:17;850:29;;926:3;919:4;910:6;902;898:19;894:30;891:39;888:59;;;943:1;940;933:12;958:664;1046:6;1054;1062;1070;1123:2;1111:9;1102:7;1098:23;1094:32;1091:52;;;1139:1;1136;1129:12;1091:52;1184:23;;;-1:-1:-1;1283:2:153;1268:18;;1255:32;1296:33;1255:32;1296:33;:::i;:::-;1348:7;-1:-1:-1;1406:2:153;1391:18;;1378:32;-1:-1:-1;;;;;1422:30:153;;1419:50;;;1465:1;1462;1455:12;1419:50;1504:58;1554:7;1545:6;1534:9;1530:22;1504:58;:::i;:::-;958:664;;;;-1:-1:-1;1581:8:153;-1:-1:-1;;;;958:664:153:o;1819:523::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2028:23;;;-1:-1:-1;2126:2:153;2111:18;;2098:32;-1:-1:-1;;;;;2142:30:153;;2139:50;;;2185:1;2182;2175:12;2139:50;2224:58;2274:7;2265:6;2254:9;2250:22;2224:58;:::i;:::-;1819:523;;2301:8;;-1:-1:-1;2198:84:153;;-1:-1:-1;;;;1819:523:153:o;2554:168::-;2626:5;2671:3;2662:6;2657:3;2653:16;2649:26;2646:46;;;2688:1;2685;2678:12;2646:46;-1:-1:-1;2710:6:153;2554:168;-1:-1:-1;2554:168:153:o;2727:614::-;2843:6;2851;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2968:9;2955:23;-1:-1:-1;;;;;2993:6:153;2990:30;2987:50;;;3033:1;3030;3023:12;2987:50;3056:79;3127:7;3118:6;3107:9;3103:22;3056:79;:::i;:::-;3046:89;3204:2;3189:18;;3176:32;;-1:-1:-1;3305:2:153;3290:18;;;3277:32;;2727:614;-1:-1:-1;;;;2727:614:153:o;3528:386::-;3610:8;3620:6;3674:3;3667:4;3659:6;3655:17;3651:27;3641:55;;3692:1;3689;3682:12;3641:55;-1:-1:-1;3715:20:153;;-1:-1:-1;;;;;3747:30:153;;3744:50;;;3790:1;3787;3780:12;3744:50;3827:4;3819:6;3815:17;3803:29;;3887:3;3880:4;3870:6;3867:1;3863:14;3855:6;3851:27;3847:38;3844:47;3841:67;;;3904:1;3901;3894:12;3919:160;3984:5;4029:2;4020:6;4015:3;4011:16;4007:25;4004:45;;;4045:1;4042;4035:12;4084:1893;4444:6;4452;4460;4468;4476;4484;4492;4500;4508;4561:3;4549:9;4540:7;4536:23;4532:33;4529:53;;;4578:1;4575;4568:12;4529:53;4618:9;4605:23;-1:-1:-1;;;;;4643:6:153;4640:30;4637:50;;;4683:1;4680;4673:12;4637:50;4722:89;4803:7;4794:6;4783:9;4779:22;4722:89;:::i;:::-;4830:8;;-1:-1:-1;4696:115:153;-1:-1:-1;;4918:2:153;4903:18;;4890:32;-1:-1:-1;;;;;4934:32:153;;4931:52;;;4979:1;4976;4969:12;4931:52;5018:91;5101:7;5090:8;5079:9;5075:24;5018:91;:::i;:::-;5128:8;;-1:-1:-1;4992:117:153;-1:-1:-1;;5216:2:153;5201:18;;5188:32;-1:-1:-1;;;;;5232:32:153;;5229:52;;;5277:1;5274;5267:12;5229:52;5316:91;5399:7;5388:8;5377:9;5373:24;5316:91;:::i;:::-;5426:8;;-1:-1:-1;5290:117:153;-1:-1:-1;;5514:2:153;5499:18;;5486:32;-1:-1:-1;;;;;5530:32:153;;5527:52;;;5575:1;5572;5565:12;5527:52;5614:91;5697:7;5686:8;5675:9;5671:24;5614:91;:::i;:::-;5724:8;;-1:-1:-1;5588:117:153;-1:-1:-1;;5812:3:153;5797:19;;5784:33;-1:-1:-1;;;;;5829:32:153;;5826:52;;;5874:1;5871;5864:12;5826:52;5897:74;5963:7;5952:8;5941:9;5937:24;5897:74;:::i;:::-;5887:84;;;4084:1893;;;;;;;;;;;:::o;5982:515::-;6089:6;6097;6150:2;6138:9;6129:7;6125:23;6121:32;6118:52;;;6166:1;6163;6156:12;6118:52;6206:9;6193:23;-1:-1:-1;;;;;6231:6:153;6228:30;6225:50;;;6271:1;6268;6261:12;6225:50;6294:79;6365:7;6356:6;6345:9;6341:22;6294:79;:::i;:::-;6284:89;;;6423:2;6412:9;6408:18;6395:32;6436:31;6461:5;6436:31;:::i;:::-;6486:5;6476:15;;;5982:515;;;;;:::o;6502:250::-;6587:1;6597:113;6611:6;6608:1;6605:13;6597:113;;;6687:11;;;6681:18;6668:11;;;6661:39;6633:2;6626:10;6597:113;;;-1:-1:-1;;6744:1:153;6726:16;;6719:27;6502:250::o;6757:270::-;6798:3;6836:5;6830:12;6863:6;6858:3;6851:19;6879:76;6948:6;6941:4;6936:3;6932:14;6925:4;6918:5;6914:16;6879:76;:::i;:::-;7009:2;6988:15;-1:-1:-1;;6984:29:153;6975:39;;;;7016:4;6971:50;;6757:270;-1:-1:-1;;6757:270:153:o;7032:559::-;7277:3;7266:9;7259:22;7240:4;7304:45;7344:3;7333:9;7329:19;7321:6;7304:45;:::i;:::-;7397:14;7389:6;7385:27;7380:2;7369:9;7365:18;7358:55;7461:14;7453:6;7449:27;7444:2;7433:9;7429:18;7422:55;7525:9;7517:6;7513:22;7508:2;7497:9;7493:18;7486:50;7553:32;7578:6;7570;7553:32;:::i;:::-;7545:40;7032:559;-1:-1:-1;;;;;;;7032:559:153:o;7596:367::-;7664:6;7672;7725:2;7713:9;7704:7;7700:23;7696:32;7693:52;;;7741:1;7738;7731:12;7693:52;7780:9;7767:23;7799:31;7824:5;7799:31;:::i;:::-;7849:5;7927:2;7912:18;;;;7899:32;;-1:-1:-1;;;7596:367:153:o;7968:742::-;8186:2;8198:21;;;8268:13;;8171:18;;;8290:22;;;8138:4;;8381;8369:17;;;8343:2;8328:18;;;8138:4;8414:199;8428:6;8425:1;8422:13;8414:199;;;8493:13;;-1:-1:-1;;;;;8489:39:153;8477:52;;8558:4;8586:17;;;;8549:14;;;;8525:1;8443:9;8414:199;;;-1:-1:-1;;;;;;;8671:32:153;;;;8664:4;8649:20;;;;8642:62;;;;-1:-1:-1;8630:3:153;;7968:742;-1:-1:-1;;7968:742:153:o;8715:487::-;8832:6;8840;8893:2;8881:9;8872:7;8868:23;8864:32;8861:52;;;8909:1;8906;8899:12;8861:52;8949:9;8936:23;-1:-1:-1;;;;;8974:6:153;8971:30;8968:50;;;9014:1;9011;9004:12;8968:50;9053:89;9134:7;9125:6;9114:9;9110:22;9053:89;:::i;:::-;9161:8;;9027:115;;-1:-1:-1;8715:487:153;-1:-1:-1;;;;8715:487:153:o;9207:219::-;9356:2;9345:9;9338:21;9319:4;9376:44;9416:2;9405:9;9401:18;9393:6;9376:44;:::i;9431:131::-;-1:-1:-1;;;;;;9505:32:153;;9495:43;;9485:71;;9552:1;9549;9542:12;9567:245;9625:6;9678:2;9666:9;9657:7;9653:23;9649:32;9646:52;;;9694:1;9691;9684:12;9646:52;9733:9;9720:23;9752:30;9776:5;9752:30;:::i;9817:256::-;9906:6;9959:2;9947:9;9938:7;9934:23;9930:32;9927:52;;;9975:1;9972;9965:12;9927:52;-1:-1:-1;10020:23:153;;9817:256;-1:-1:-1;9817:256:153:o;10636:779::-;10796:4;10844:2;10833:9;10829:18;10874:2;10863:9;10856:21;10897:6;10932;10926:13;10963:6;10955;10948:22;11001:2;10990:9;10986:18;10979:25;;11063:2;11053:6;11050:1;11046:14;11035:9;11031:30;11027:39;11013:53;;11101:2;11093:6;11089:15;11122:1;11132:254;11146:6;11143:1;11140:13;11132:254;;;11239:2;11235:7;11223:9;11215:6;11211:22;11207:36;11202:3;11195:49;11267:39;11299:6;11290;11284:13;11267:39;:::i;:::-;11257:49;-1:-1:-1;11341:2:153;11364:12;;;;11329:15;;;;;11168:1;11161:9;11132:254;;;-1:-1:-1;11403:6:153;;10636:779;-1:-1:-1;;;;;;10636:779:153:o;11420:388::-;11488:6;11496;11549:2;11537:9;11528:7;11524:23;11520:32;11517:52;;;11565:1;11562;11555:12;11517:52;11604:9;11591:23;11623:31;11648:5;11623:31;:::i;:::-;11673:5;-1:-1:-1;11730:2:153;11715:18;;11702:32;11743:33;11702:32;11743:33;:::i;11813:156::-;11879:20;;11939:4;11928:16;;11918:27;;11908:55;;11959:1;11956;11949:12;11974:679;12094:6;12102;12110;12118;12171:2;12159:9;12150:7;12146:23;12142:32;12139:52;;;12187:1;12184;12177:12;12139:52;12226:9;12213:23;12245:31;12270:5;12245:31;:::i;:::-;12295:5;-1:-1:-1;12351:2:153;12336:18;;12323:32;-1:-1:-1;;;;;12367:30:153;;12364:50;;;12410:1;12407;12400:12;12364:50;12449:89;12530:7;12521:6;12510:9;12506:22;12449:89;:::i;:::-;12557:8;;-1:-1:-1;12423:115:153;-1:-1:-1;12611:36:153;;-1:-1:-1;12643:2:153;12628:18;;12611:36;:::i;:::-;12601:46;;11974:679;;;;;;;:::o;13071:266::-;13159:6;13154:3;13147:19;13211:6;13204:5;13197:4;13192:3;13188:14;13175:43;-1:-1:-1;13263:1:153;13238:16;;;13256:4;13234:27;;;13227:38;;;;13319:2;13298:15;;;-1:-1:-1;;13294:29:153;13285:39;;;13281:50;;13071:266::o;13342:412::-;13584:1;13580;13575:3;13571:11;13567:19;13559:6;13555:32;13544:9;13537:51;13624:6;13619:2;13608:9;13604:18;13597:34;13667:2;13662;13651:9;13647:18;13640:30;13518:4;13687:61;13744:2;13733:9;13729:18;13721:6;13713;13687:61;:::i;:::-;13679:69;13342:412;-1:-1:-1;;;;;;13342:412:153:o;13759:127::-;13820:10;13815:3;13811:20;13808:1;13801:31;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13891:275;13962:2;13956:9;14027:2;14008:13;;-1:-1:-1;;14004:27:153;13992:40;;-1:-1:-1;;;;;14047:34:153;;14083:22;;;14044:62;14041:88;;;14109:18;;:::i;:::-;14145:2;14138:22;13891:275;;-1:-1:-1;13891:275:153:o;14171:186::-;14219:4;-1:-1:-1;;;;;14244:6:153;14241:30;14238:56;;;14274:18;;:::i;:::-;-1:-1:-1;14340:2:153;14319:15;-1:-1:-1;;14315:29:153;14346:4;14311:40;;14171:186::o;14362:461::-;14415:5;14468:3;14461:4;14453:6;14449:17;14445:27;14435:55;;14486:1;14483;14476:12;14435:55;14519:6;14513:13;14550:52;14566:35;14594:6;14566:35;:::i;:::-;14550:52;:::i;:::-;14627:6;14618:7;14611:23;14681:3;14674:4;14665:6;14657;14653:19;14649:30;14646:39;14643:59;;;14698:1;14695;14688:12;14643:59;14711:81;14785:6;14778:4;14769:7;14765:18;14758:4;14750:6;14746:17;14711:81;:::i;14828:335::-;14907:6;14960:2;14948:9;14939:7;14935:23;14931:32;14928:52;;;14976:1;14973;14966:12;14928:52;15009:9;15003:16;-1:-1:-1;;;;;15034:6:153;15031:30;15028:50;;;15074:1;15071;15064:12;15028:50;15097:60;15149:7;15140:6;15129:9;15125:22;15097:60;:::i;15168:360::-;15379:6;15371;15366:3;15353:33;15449:2;15445:15;;;;-1:-1:-1;;15441:53:153;15405:16;;15430:65;;;15519:2;15511:11;;15168:360;-1:-1:-1;15168:360:153:o;15755:184::-;15825:6;15878:2;15866:9;15857:7;15853:23;15849:32;15846:52;;;15894:1;15891;15884:12;15846:52;-1:-1:-1;15917:16:153;;15755:184;-1:-1:-1;15755:184:153:o;16479:331::-;16584:9;16595;16637:8;16625:10;16622:24;16619:44;;;16659:1;16656;16649:12;16619:44;16688:6;16678:8;16675:20;16672:40;;;16708:1;16705;16698:12;16672:40;-1:-1:-1;;16734:23:153;;;16779:25;;;;;-1:-1:-1;16479:331:153:o;16815:374::-;16936:19;;-1:-1:-1;;16973:40:153;;;17033:2;17025:11;;17022:161;;;17145:26;17141:31;17110:26;17106:31;17099:3;17095:2;17091:12;17088:1;17084:20;17080:58;17076:2;17072:67;17068:105;17059:114;;17022:161;;16815:374;;;;:::o;17194:481::-;17431:6;17420:9;17413:25;17474:2;17469;17458:9;17454:18;17447:30;17394:4;17500:44;17540:2;17529:9;17525:18;17517:6;17500:44;:::i;:::-;17592:9;17584:6;17580:22;17575:2;17564:9;17560:18;17553:50;17620:49;17662:6;17654;17646;17620:49;:::i;18103:249::-;18172:6;18225:2;18213:9;18204:7;18200:23;18196:32;18193:52;;;18241:1;18238;18231:12;18193:52;18273:9;18267:16;18292:30;18316:5;18292:30;:::i;18357:500::-;18415:5;18422:6;18482:3;18469:17;18568:2;18564:7;18553:8;18537:14;18533:29;18529:43;18509:18;18505:68;18495:96;;18587:1;18584;18577:12;18495:96;18615:33;;18719:4;18706:18;;;-1:-1:-1;18667:21:153;;-1:-1:-1;;;;;;18736:30:153;;18733:50;;;18779:1;18776;18769:12;18733:50;18826:6;18810:14;18806:27;18799:5;18795:39;18792:59;;;18847:1;18844;18837:12;18862:1866;19095:2;19084:9;19077:21;19107:66;19169:2;19158:9;19154:18;19126:26;19145:6;19126:26;:::i;:::-;-1:-1:-1;;;;;80:31:153;68:44;;14:104;19107:66;19239:4;19227:17;;19214:31;19276:2;19261:18;;19254:33;19058:4;19330:55;19381:2;19369:15;;19231:6;19330:55;:::i;:::-;19422:6;19416:3;19405:9;19401:19;19394:35;19452:74;19521:3;19510:9;19506:19;19492:12;19478;19452:74;:::i;:::-;19438:88;;;19573:55;19624:2;19616:6;19612:15;19604:6;19573:55;:::i;:::-;19669:22;;;-1:-1:-1;;19665:36:153;19659:3;19644:19;;19637:65;19725;19673:6;19767:14;19751;19725:65;:::i;:::-;19860:3;19848:16;;19835:30;19896:3;19881:19;;;19874:36;;;;19980:3;19968:16;;19955:30;20016:3;20001:19;;;19994:36;;;;20088:16;;;20075:30;20136:3;20121:19;;20114:36;19711:79;;-1:-1:-1;20197:56:153;;-1:-1:-1;20236:16:153;;;-1:-1:-1;19852:6:153;20197:56;:::i;:::-;20297:22;;;-1:-1:-1;;20293:36:153;20284:6;20269:22;;20262:68;20353:65;20301:6;20395:14;20379;20353:65;:::i;:::-;20339:79;;;;20465:56;20516:3;20508:6;20504:16;20496:6;20465:56;:::i;:::-;20562:22;;;-1:-1:-1;;20558:36:153;20552:3;20537:19;;20530:65;20612;20566:6;20654:14;20638;20612:65;:::i;:::-;20604:73;;;;;20715:6;20708:4;20697:9;20693:20;20686:36;18862:1866;;;;;:::o;20733:265::-;20810:6;20863:2;20851:9;20842:7;20838:23;20834:32;20831:52;;;20879:1;20876;20869:12;20831:52;20918:9;20905:23;20937:31;20962:5;20937:31;:::i;21003:545::-;21096:4;21102:6;21162:11;21149:25;21256:2;21252:7;21241:8;21225:14;21221:29;21217:43;21197:18;21193:68;21183:96;;21275:1;21272;21265:12;21183:96;21302:33;;21354:20;;;-1:-1:-1;;;;;;21386:30:153;;21383:50;;;21429:1;21426;21419:12;21383:50;21462:4;21450:17;;-1:-1:-1;21513:1:153;21509:14;;;21493;21489:35;21479:46;;21476:66;;;21538:1;21535;21528:12;21553:182;21610:6;21663:2;21651:9;21642:7;21638:23;21634:32;21631:52;;;21679:1;21676;21669:12;21631:52;21702:27;21719:9;21702:27;:::i;21740:521::-;21817:4;21823:6;21883:11;21870:25;21977:2;21973:7;21962:8;21946:14;21942:29;21938:43;21918:18;21914:68;21904:96;;21996:1;21993;21986:12;21904:96;22023:33;;22075:20;;;-1:-1:-1;;;;;;22107:30:153;;22104:50;;;22150:1;22147;22140:12;22104:50;22183:4;22171:17;;-1:-1:-1;22214:14:153;22210:27;;;22200:38;;22197:58;;;22251:1;22248;22241:12;22266:350;22386:19;;-1:-1:-1;;;;;;22423:33:153;;;22476:1;22468:10;;22465:145;;;-1:-1:-1;;;;;;22537:1:153;22533:11;;;;22530:1;22526:19;22522:50;;;22514:59;22510:90;;;;22266:350;-1:-1:-1;;22266:350:153:o;22873:271::-;23056:6;23048;23043:3;23030:33;23012:3;23082:16;;23107:13;;;23082:16;22873:271;-1:-1:-1;22873:271:153:o;23565:127::-;23626:10;23621:3;23617:20;23614:1;23607:31;23657:4;23654:1;23647:15;23681:4;23678:1;23671:15;23697:328;23794:4;23852:11;23839:25;23946:2;23942:7;23931:8;23915:14;23911:29;23907:43;23887:18;23883:68;23873:96;;23965:1;23962;23955:12;23873:96;23986:33;;;;;23697:328;-1:-1:-1;;23697:328:153:o;24030:385::-;24215:25;;;-1:-1:-1;;;;;24276:32:153;;24271:2;24256:18;;24249:60;24345:2;24340;24325:18;;24318:30;;;-1:-1:-1;;24365:44:153;;24390:18;;24382:6;24365:44;:::i;:::-;24357:52;24030:385;-1:-1:-1;;;;;24030:385:153:o;24725:226::-;-1:-1:-1;;;;;;24918:26:153;;;;24900:45;;24888:2;24873:18;;24725:226::o;25553:127::-;25614:10;25609:3;25605:20;25602:1;25595:31;25645:4;25642:1;25635:15;25669:4;25666:1;25659:15;25685:237;25766:1;25759:5;25756:12;25746:143;;25811:10;25806:3;25802:20;25799:1;25792:31;25846:4;25843:1;25836:15;25874:4;25871:1;25864:15;25746:143;25898:18;;25685:237::o;25927:490::-;26200:1;26196;26191:3;26187:11;26183:19;26175:6;26171:32;26160:9;26153:51;26240:6;26235:2;26224:9;26220:18;26213:34;26283:3;26278:2;26267:9;26263:18;26256:31;26134:4;26304:45;26344:3;26333:9;26329:19;26321:6;26304:45;:::i;:::-;26296:53;;26358;26407:2;26396:9;26392:18;26384:6;26358:53;:::i;26422:164::-;26498:13;;26547;;26540:21;26530:32;;26520:60;;26576:1;26573;26566:12;26591:414;26676:6;26684;26737:2;26725:9;26716:7;26712:23;26708:32;26705:52;;;26753:1;26750;26743:12;26705:52;26776:37;26803:9;26776:37;:::i;:::-;26766:47;;26857:2;26846:9;26842:18;26836:25;-1:-1:-1;;;;;26876:6:153;26873:30;26870:50;;;26916:1;26913;26906:12;26870:50;26939:60;26991:7;26982:6;26971:9;26967:22;26939:60;:::i;:::-;26929:70;;;26591:414;;;;;:::o;27010:314::-;-1:-1:-1;;;;;27185:32:153;;27167:51;;27254:2;27249;27234:18;;27227:30;;;-1:-1:-1;;27274:44:153;;27299:18;;27291:6;27274:44;:::i;27329:202::-;27396:6;27449:2;27437:9;27428:7;27424:23;27420:32;27417:52;;;27465:1;27462;27455:12;27417:52;27488:37;27515:9;27488:37;:::i;27536:149::-;27610:20;;27659:1;27649:12;;27639:40;;27675:1;27672;27665:12;27690:339;27771:6;27779;27832:2;27820:9;27811:7;27807:23;27803:32;27800:52;;;27848:1;27845;27838:12;27800:52;27871:35;27896:9;27871:35;:::i;:::-;27861:45;;27956:2;27945:9;27941:18;27928:32;27969:30;27993:5;27969:30;:::i;28034:359::-;28221:6;28216:3;28209:19;28191:3;28257:6;28251:13;28273:73;28339:6;28334:2;28329:3;28325:12;28320:2;28312:6;28308:15;28273:73;:::i;:::-;28366:16;;;;28384:2;28362:25;;28034:359;-1:-1:-1;;;28034:359:153:o;28398:448::-;28619:6;28608:9;28601:25;28662:2;28657;28646:9;28642:18;28635:30;28582:4;28688:44;28728:2;28717:9;28713:18;28705:6;28688:44;:::i;:::-;28780:9;28772:6;28768:22;28763:2;28752:9;28748:18;28741:50;28808:32;28833:6;28825;28808:32;:::i;28851:762::-;29117:4;29105:17;;29087:36;;29075:2;29154;29139:18;;29132:30;;;29060:18;;29197:22;;;29027:4;29276:6;29250:2;29235:18;;29027:4;29310:277;29324:6;29321:1;29318:13;29310:277;;;29399:6;29386:20;29419:31;29444:5;29419:31;:::i;:::-;-1:-1:-1;;;;;29475:31:153;29463:44;;29536:2;29562:15;;;;29527:12;;;;29503:1;29339:9;29310:277;;;-1:-1:-1;29604:3:153;28851:762;-1:-1:-1;;;;;;28851:762:153:o;29618:127::-;29679:10;29674:3;29670:20;29667:1;29660:31;29710:4;29707:1;29700:15;29734:4;29731:1;29724:15;29750:135;29789:3;29810:17;;;29807:43;;29830:18;;:::i;:::-;-1:-1:-1;29877:1:153;29866:13;;29750:135::o;29890:128::-;29957:9;;;29978:11;;;29975:37;;;29992:18;;:::i;30023:486::-;30065:5;30118:3;30111:4;30103:6;30099:17;30095:27;30085:55;;30136:1;30133;30126:12;30085:55;30176:6;30163:20;30207:52;30223:35;30251:6;30223:35;:::i;30207:52::-;30284:6;30275:7;30268:23;30338:3;30331:4;30322:6;30314;30310:19;30306:30;30303:39;30300:59;;;30355:1;30352;30345:12;30300:59;30420:6;30413:4;30405:6;30401:17;30394:4;30385:7;30381:18;30368:59;30476:1;30447:20;;;30469:4;30443:31;30436:42;;;;30451:7;30023:486;-1:-1:-1;;;30023:486:153:o;30514:659::-;30629:6;30637;30645;30698:2;30686:9;30677:7;30673:23;30669:32;30666:52;;;30714:1;30711;30704:12;30666:52;30753:9;30740:23;30772:30;30796:5;30772:30;:::i;:::-;30821:5;-1:-1:-1;30878:2:153;30863:18;;30850:32;-1:-1:-1;;;;;;30913:27:153;;30901:40;;30891:68;;30955:1;30952;30945:12;30891:68;30978:7;-1:-1:-1;31036:2:153;31021:18;;31008:32;-1:-1:-1;;;;;31052:30:153;;31049:50;;;31095:1;31092;31085:12;31049:50;31118:49;31159:7;31150:6;31139:9;31135:22;31118:49;:::i;:::-;31108:59;;;30514:659;;;;;:::o;31178:547::-;31277:6;31285;31293;31346:2;31334:9;31325:7;31321:23;31317:32;31314:52;;;31362:1;31359;31352:12;31314:52;31385:35;31410:9;31385:35;:::i;:::-;31375:45;;31470:2;31459:9;31455:18;31442:32;31483:30;31507:5;31483:30;:::i;32512:463::-;32597:6;32605;32658:2;32646:9;32637:7;32633:23;32629:32;32626:52;;;32674:1;32671;32664:12;32626:52;32713:9;32700:23;32732:31;32757:5;32732:31;:::i;:::-;32782:5;-1:-1:-1;32838:2:153;32823:18;;32810:32;-1:-1:-1;;;;;32854:30:153;;32851:50;;;32897:1;32894;32887:12;32851:50;32920:49;32961:7;32952:6;32941:9;32937:22;32920:49;:::i;32980:453::-;33056:6;33064;33117:2;33105:9;33096:7;33092:23;33088:32;33085:52;;;33133:1;33130;33123:12;33085:52;33172:9;33159:23;33191:30;33215:5;33191:30;:::i;34116:1484::-;34374:2;34386:21;;;34359:18;;34442:22;;;-1:-1:-1;34495:2:153;34544:1;34540:14;;;34525:30;;34521:39;;;34480:18;;34583:6;-1:-1:-1;;;34635:14:153;34631:27;;;34627:41;34677:894;34691:6;34688:1;34685:13;34677:894;;;34756:22;;;-1:-1:-1;;34752:36:153;34740:49;;34828:20;;34871:27;;;34861:55;;34912:1;34909;34902:12;34861:55;34942:31;;35001:19;;35033:33;35001:19;35033:33;:::i;:::-;-1:-1:-1;;;;;35094:33:153;35079:49;;35205:2;35194:14;;;35181:28;35229:15;;;35222:32;35301:53;35350:2;35339:14;;35198:5;35301:53;:::i;:::-;35267:87;;35391:4;35386:2;35378:6;35374:15;35367:29;35419:72;35485:4;35477:6;35473:17;35459:12;35445;35419:72;:::i;:::-;35409:82;;;;35526:2;35518:6;35514:15;35504:25;;35558:2;35553:3;35549:12;35542:19;;34713:1;34710;34706:9;34701:14;;34677:894;;;-1:-1:-1;35588:6:153;;34116:1484;-1:-1:-1;;;;;;;34116:1484:153:o;35605:255::-;35725:19;;35764:2;35756:11;;35753:101;;;-1:-1:-1;;35825:2:153;35821:12;;;35818:1;35814:20;35810:33;35799:45;35605:255;;;;:::o;35865:181::-;35923:4;-1:-1:-1;;;;;35948:6:153;35945:30;35942:56;;;35978:18;;:::i;:::-;-1:-1:-1;36023:1:153;36019:14;36035:4;36015:25;;35865:181::o;36051:831::-;36114:5;36167:3;36160:4;36152:6;36148:17;36144:27;36134:55;;36185:1;36182;36175:12;36134:55;36218:6;36212:13;36245:62;36261:45;36299:6;36261:45;:::i;36245:62::-;36331:3;36355:6;36350:3;36343:19;36387:4;36382:3;36378:14;36371:21;;36448:4;36438:6;36435:1;36431:14;36423:6;36419:27;36415:38;36401:52;;36476:3;36468:6;36465:15;36462:35;;;36493:1;36490;36483:12;36462:35;36529:4;36521:6;36517:17;36543:308;36559:6;36554:3;36551:15;36543:308;;;36640:3;36634:10;-1:-1:-1;;;;;36663:11:153;36660:35;36657:55;;;36708:1;36705;36698:12;36657:55;36737:69;36802:3;36795:4;36781:11;36773:6;36769:24;36765:35;36737:69;:::i;:::-;36725:82;;-1:-1:-1;36836:4:153;36827:14;;;;36576;36543:308;;;-1:-1:-1;36869:7:153;36051:831;-1:-1:-1;;;;;36051:831:153:o;36887:370::-;36991:6;37044:2;37032:9;37023:7;37019:23;37015:32;37012:52;;;37060:1;37057;37050:12;37012:52;37093:9;37087:16;-1:-1:-1;;;;;37118:6:153;37115:30;37112:50;;;37158:1;37155;37148:12;37112:50;37181:70;37243:7;37234:6;37223:9;37219:22;37181:70;:::i;37262:1157::-;37397:6;37405;37458:2;37446:9;37437:7;37433:23;37429:32;37426:52;;;37474:1;37471;37464:12;37426:52;37507:9;37501:16;-1:-1:-1;;;;;37532:6:153;37529:30;37526:50;;;37572:1;37569;37562:12;37526:50;37595:22;;37648:4;37640:13;;37636:27;-1:-1:-1;37626:55:153;;37677:1;37674;37667:12;37626:55;37710:2;37704:9;37733:62;37749:45;37787:6;37749:45;:::i;37733:62::-;37817:3;37841:6;37836:3;37829:19;37873:4;37868:3;37864:14;37857:21;;37930:4;37920:6;37917:1;37913:14;37909:2;37905:23;37901:34;37887:48;;37958:7;37950:6;37947:19;37944:39;;;37979:1;37976;37969:12;37944:39;38011:4;38007:2;38003:13;37992:24;;38025:160;38041:6;38036:3;38033:15;38025:160;;;38109:31;38136:3;38109:31;:::i;:::-;38097:44;;38170:4;38058:14;;;;38161;;;;38025:160;;;38204:5;38194:15;;;;;;38255:4;38244:9;38240:20;38234:27;-1:-1:-1;;;;;38276:8:153;38273:32;38270:52;;;38318:1;38315;38308:12;38270:52;38341:72;38405:7;38394:8;38383:9;38379:24;38341:72;:::i", + "linkReferences": {}, + "immutableReferences": { + "67808": [ + { "start": 4643, "length": 32 }, + { "start": 5147, "length": 32 }, + { "start": 5500, "length": 32 }, + { "start": 7621, "length": 32 }, + { "start": 8726, "length": 32 }, + { "start": 8944, "length": 32 }, + { "start": 9095, "length": 32 }, + { "start": 9246, "length": 32 }, + { "start": 13690, "length": 32 }, + { "start": 13874, "length": 32 }, + { "start": 14682, "length": 32 }, + { "start": 14970, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "domainSeparator()": "f698da25", + "entryPoint()": "b0d691fe", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "getActiveHook()": "0a664dba", + "getActiveHook(bytes4)": "b875d5d8", + "getExecutorsPaginated(address,uint256)": "ea5f61d0", + "getNonce(address,address)": "d828435d", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "getValidatorsPaginated(address,uint256)": "5faac46b", + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": "540fb4f9", + "initializeAccountWithValidators((address,bytes)[])": "79aad60e", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "setRegistry(address,address[],uint8)": "eab77e17", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountAccessUnauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"FallbackInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currentHook\",\"type\":\"address\"}],\"name\":\"HookAlreadyInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"InvalidCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"InvalidFallbackHandler\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHookType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"}],\"name\":\"InvalidInitData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"InvalidModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedList_AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entry\",\"type\":\"address\"}],\"name\":\"LinkedList_EntryAlreadyInList\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entry\",\"type\":\"address\"}],\"name\":\"LinkedList_InvalidEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedList_InvalidPage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"NoFallbackHandler\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"ERC7484RegistryConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"}],\"name\":\"Safe7579Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISafe\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numberInBatch\",\"type\":\"uint256\"}],\"name\":\"TryExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISafe\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"name\":\"TryExecutionsFailed\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnDatas\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getExecutorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"internalType\":\"struct RegistryInit\",\"name\":\"registryInit\",\"type\":\"tuple\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"initializeAccountWithValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"supported\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validSignature\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"details\":\"This contract is a Safe account implementation that supports ERC7579 operations. In order to facilitate full ERC7579 compliance, the contract implements the IERC7579Account interface. This contract is an implementation of a Safe account supporting ERC7579 operations and complying with the IERC7579Account interface. It serves as a Safe FallbackHandler and module for Safe accounts, incorporating complex hacks to ensure ERC7579 compliance and requiring interactions and event emissions to be done via the SafeProxy as msg.sender using Safe's \\\"executeTransactionFromModule\\\" features.\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"getNonce(address,address)\":{\"params\":{\"safe\":\"address of safe account\",\"validator\":\"ERC7579 validator to encode\"}},\"getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)\":{\"details\":\"Decodes an ERC-4337 user operation into a Safe operation.\",\"params\":{\"userOp\":\"The ERC-4337 user operation.\"},\"returns\":{\"operationData\":\"Encoded EIP-712 Safe operation data bytes used for signature verification.\",\"signatures\":\"The Safe owner signatures extracted from the user operation.\",\"validAfter\":\"The timestamp the user operation is valid from.\",\"validUntil\":\"The timestamp the user operation is valid until.\"}},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"params\":{\"executors\":\"executor modules and initData\",\"fallbacks\":\"fallback modules and initData\",\"hooks\":\"hook module and initData\",\"registryInit\":\"(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed\",\"validators\":\"validator modules and initData\"}},\"initializeAccountWithValidators((address,bytes)[])\":{\"details\":\"it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad\"},\"installModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"data\":\"abi.encodePacked(address validationModule, bytes signatures)\",\"hash\":\"message hash of ERC1271 request\"}},\"setRegistry(address,address[],uint8)\":{\"params\":{\"attesters\":\"list of attesters\",\"registry\":\"IERC7484 registry\",\"threshold\":\"number of attesters required\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers\"}},\"title\":\"ERC7579 Adapter for Safe accounts. creates full ERC7579 compliance to Safe accounts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getActiveHook()\":{\"notice\":\"Get the current active global hook\"},\"getActiveHook(bytes4)\":{\"notice\":\"Get the current active selector hook\"},\"getExecutorsPaginated(address,uint256)\":{\"notice\":\"Get paginated list of installed executors\"},\"getNonce(address,address)\":{\"notice\":\"Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator\"},\"getValidatorsPaginated(address,uint256)\":{\"notice\":\"Get paginated list of installed validators\"},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"notice\":\"This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty\"},\"initializeAccountWithValidators((address,bytes)[])\":{\"notice\":\"This function is intended to be called by Launchpad.validateUserOp()\"},\"installModule(uint256,address,bytes)\":{\"notice\":\"Installs a 7579 Module of a certain type on the smart account\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function\"},\"setRegistry(address,address[],uint8)\":{\"notice\":\"Configure the Safe7579 with a IERC7484 registry\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"uninstallModule(uint256,address,bytes)\":{\"notice\":\"Uninstalls a Module of a certain type on the smart account.\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"ERC4337 v0.7 validation function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Safe7579.sol\":\"Safe7579\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"keccak256\":\"0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155\",\"dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9\",\"dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"keccak256\":\"0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3\",\"dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00\",\"dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/@rhinestone/sentinellist/src/SentinelList.sol\":{\"keccak256\":\"0x0fdb07d60acf6c8272517b2cf9a7ce36cef7dabd3acfc61e7424662818044da2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b67e9af0f8efcf0882e856b33ad8363024e9ed9b048795dedffcba9cd27f6062\",\"dweb:/ipfs/Qme6oX3V1JCyTSZNEHuR5nByNxJUhDDuriJkNecVyWGVGr\"]},\"node_modules/@rhinestone/sentinellist/src/SentinelList4337.sol\":{\"keccak256\":\"0x173a41622f0525822de4252e768907b83d5b43b6a939a6448082c5cfcdd76b33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61849503c2eb3bb4efd476860ed78995d6f2b6b2880d6c56178ca8eb6f6ac326\",\"dweb:/ipfs/QmSfCu28jDnBDFVbDtj71isCJ6qGzZVc9cPUKjxffRdiCL\"]},\"node_modules/@safe-global/safe-contracts/contracts/handler/HandlerContext.sol\":{\"keccak256\":\"0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://b57666c08d90b0b56344813511789a6d21b66044f049146d802f8db0e28899fc\",\"dweb:/ipfs/QmYWHsFYNbibbAGfNNQrWon9KzNHfgu5E6B3bDteLKDEmL\"]},\"node_modules/erc7579/src/core/AccountBase.sol\":{\"keccak256\":\"0x11805c609cfd00250d52f440983ea54daaddc2d2bd0da83676ffef6192fecb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://93fdd8d0e9da56705838ff9deb8a9130e18296986ff8f59d73ba3f8b0b00c2c5\",\"dweb:/ipfs/QmZwGFNjQjsPxAwrVuobhLDvSkLf8eduSQc35R69XFPcvf\"]},\"node_modules/erc7579/src/core/Receiver.sol\":{\"keccak256\":\"0x42d41b30a6582d95d737fd75122b621a8af1ec3123782d91a29385b67612b9e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bfb32e6d912477279bf3105eeb7afaf4bfb6526541ef9944428a3d5b9133c23f\",\"dweb:/ipfs/QmUc5nZW5NkC2prAUuRbFBdA2vSRwUBHKXD4evb5yiHSKf\"]},\"node_modules/erc7579/src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5\",\"dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/Safe7579.sol\":{\"keccak256\":\"0xfe8ee150f3a01d2d43659e8bcc5f82b0fed942573b16d89ed52aed4614ae96bb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c2977b34b16b03eeb1c23d8342b6268a6377285ae1510f0f9d4028146953fdc2\",\"dweb:/ipfs/Qmac9iNijFGqeaRGcbBTZAmzNCJuRqnw3SYfcooaVj9BbQ\"]},\"src/core/AccessControl.sol\":{\"keccak256\":\"0x65292c830de10b53a1a7cb37d65134b3f820308b22932341c2ce3cf425cf39a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1726e810a97e26707aa500d10386935b70f8a2c2791e799110f9543bd30c8bdd\",\"dweb:/ipfs/QmZo8mqWdaWnJEoJsSNHUxHvf62eXCzQkexGELVKP33WLY\"]},\"src/core/ExecutionHelper.sol\":{\"keccak256\":\"0x2efc3bc6427ac8c1ac78c449606ffb7aeee00db4c93170019046d7c90ca40b00\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bec5af879e26b73e1f6654d95b89d3a79669bf89daa2ef560b8ac18c3af7329a\",\"dweb:/ipfs/Qmd675PqtXn5dGrYBLzLGDtZG2xxH6RPkuR4DngRRWkQAg\"]},\"src/core/Initializer.sol\":{\"keccak256\":\"0xe9db50095c600259f0e013d5fd81c9e6c1f244a0bf59eb0dee784bf8e8bb9cbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45ed85640b0cd4d874bd9d732f9925ac64caaa162174d68061a58af4052ace3f\",\"dweb:/ipfs/QmQAevyNMb28mfu2aPQzbuXT1MfSzXWLDX1CRXdWMnLfTP\"]},\"src/core/ModuleManager.sol\":{\"keccak256\":\"0x42d3a02ca4321a708f43731caf2920312a0784e0ef99831f6869a8b704bdac0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://251342f930d887d9845e0b5e24eefd97ff141e4d3729c578d7550b1486d54499\",\"dweb:/ipfs/QmQzD4wLAAVsLZveHtPm4Yn8f6Zt4BhJnyDN21sdx1qG93\"]},\"src/core/RegistryAdapter.sol\":{\"keccak256\":\"0xa791b4946887e489f929f74e3b6028aada1d1e0c44fd9febad12067768a96f13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6be2cfa7cd054d1580ccd424f7c0c73fd176eada44bc16c9688d3ad0c4889a64\",\"dweb:/ipfs/QmaAcy7LnYXruBesFpgm1tE3pBZcHWMmR6zsYfkZcGKS2K\"]},\"src/core/SafeOp.sol\":{\"keccak256\":\"0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04\",\"dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ\"]},\"src/core/SetupDCUtil.sol\":{\"keccak256\":\"0x8adecef3f28fe53b297dbe65dda65379536b833795910960a2c232e0f574326b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10dee7abb225ad918b052b38d5edae3e2e9205b330782968a0345cc7b1979500\",\"dweb:/ipfs/QmakXnYAoPQqAqfVtFUUEGB8pa2QbaKL2kngg8DBXbEj1v\"]},\"src/core/SupportViewer.sol\":{\"keccak256\":\"0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd\",\"dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW\"]},\"src/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb393da93ddb9aca17c3a952bd0c667f190cbf8e0abc2b63c075951469deaa21a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://14f56c33dfb8e00c13da56987d1a4256c46984fde1a8bafed31617fe98bffea3\",\"dweb:/ipfs/QmQUZoro4bYJjEJuw2nV3KL8sT6t6qZHupCD8HkjC54XDU\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ExecutionLib.sol\":{\"keccak256\":\"0x5852404ef72dbe607a5402af160494067e7d9e6bf1fbf9460ff309e53b4db399\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f78188bf12cec49056da5dcfd33628b4ce76026a108d227b0c03b87f650dbce\",\"dweb:/ipfs/QmaP3N8RuMYJD2wqfRhCMvGcnVzamT8RSbBNj2pYgeCThi\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { "inputs": [], "type": "error", "name": "AccountAccessUnauthorized" }, + { "inputs": [], "type": "error", "name": "ExecutionFailed" }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "FallbackInstalled" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "currentHook", + "type": "address" + } + ], + "type": "error", + "name": "HookAlreadyInstalled" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "InvalidCallType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "InvalidFallbackHandler" + }, + { "inputs": [], "type": "error", "name": "InvalidHookType" }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" } + ], + "type": "error", + "name": "InvalidInitData" + }, + { "inputs": [], "type": "error", "name": "InvalidInput" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "InvalidModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidModuleType" + }, + { + "inputs": [], + "type": "error", + "name": "LinkedList_AlreadyInitialized" + }, + { + "inputs": [ + { "internalType": "address", "name": "entry", "type": "address" } + ], + "type": "error", + "name": "LinkedList_EntryAlreadyInList" + }, + { + "inputs": [ + { "internalType": "address", "name": "entry", "type": "address" } + ], + "type": "error", + "name": "LinkedList_InvalidEntry" + }, + { "inputs": [], "type": "error", "name": "LinkedList_InvalidPage" }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "NoFallbackHandler" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ERC7484RegistryConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Safe7579Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ISafe", + "name": "safe", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "numberInBatch", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "TryExecutionFailed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ISafe", + "name": "safe", + "type": "address", + "indexed": false + }, + { + "internalType": "bool[]", + "name": "success", + "type": "bool[]", + "indexed": false + } + ], + "type": "event", + "name": "TryExecutionsFailed", + "anonymous": false + }, + { "inputs": [], "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "entryPoint", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnDatas", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "selector", "type": "bytes4" } + ], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getExecutorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNonce", + "outputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getValidatorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct RegistryInit", + "name": "registryInit", + "type": "tuple", + "components": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint8", + "name": "threshold", + "type": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccountWithValidators" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "magicValue", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRegistry" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [ + { "internalType": "bool", "name": "supported", "type": "bool" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validSignature", + "type": "uint256" + } + ] + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "getNonce(address,address)": { + "params": { + "safe": "address of safe account", + "validator": "ERC7579 validator to encode" + } + }, + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": { + "details": "Decodes an ERC-4337 user operation into a Safe operation.", + "params": { "userOp": "The ERC-4337 user operation." }, + "returns": { + "operationData": "Encoded EIP-712 Safe operation data bytes used for signature verification.", + "signatures": "The Safe owner signatures extracted from the user operation.", + "validAfter": "The timestamp the user operation is valid from.", + "validUntil": "The timestamp the user operation is valid until." + } + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "params": { + "executors": "executor modules and initData", + "fallbacks": "fallback modules and initData", + "hooks": "hook module and initData", + "registryInit": "(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed", + "validators": "validator modules and initData" + } + }, + "initializeAccountWithValidators((address,bytes)[])": { + "details": "it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad" + }, + "installModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "params": { + "data": "abi.encodePacked(address validationModule, bytes signatures)", + "hash": "message hash of ERC1271 request" + } + }, + "setRegistry(address,address[],uint8)": { + "params": { + "attesters": "list of attesters", + "registry": "IERC7484 registry", + "threshold": "number of attesters required" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getActiveHook()": { "notice": "Get the current active global hook" }, + "getActiveHook(bytes4)": { + "notice": "Get the current active selector hook" + }, + "getExecutorsPaginated(address,uint256)": { + "notice": "Get paginated list of installed executors" + }, + "getNonce(address,address)": { + "notice": "Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator" + }, + "getValidatorsPaginated(address,uint256)": { + "notice": "Get paginated list of installed validators" + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "notice": "This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty" + }, + "initializeAccountWithValidators((address,bytes)[])": { + "notice": "This function is intended to be called by Launchpad.validateUserOp()" + }, + "installModule(uint256,address,bytes)": { + "notice": "Installs a 7579 Module of a certain type on the smart account" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "isValidSignature(bytes32,bytes)": { + "notice": "Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function" + }, + "setRegistry(address,address[],uint8)": { + "notice": "Configure the Safe7579 with a IERC7484 registry" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "uninstallModule(uint256,address,bytes)": { + "notice": "Uninstalls a Module of a certain type on the smart account." + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "ERC4337 v0.7 validation function" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Safe7579.sol": "Safe7579" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAggregator.sol": { + "keccak256": "0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588", + "urls": [ + "bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155", + "dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol": { + "keccak256": "0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4", + "urls": [ + "bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9", + "dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/INonceManager.sol": { + "keccak256": "0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb", + "urls": [ + "bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3", + "dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IStakeManager.sol": { + "keccak256": "0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04", + "urls": [ + "bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00", + "dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj" + ], + "license": "GPL-3.0-only" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/@rhinestone/sentinellist/src/SentinelList.sol": { + "keccak256": "0x0fdb07d60acf6c8272517b2cf9a7ce36cef7dabd3acfc61e7424662818044da2", + "urls": [ + "bzz-raw://b67e9af0f8efcf0882e856b33ad8363024e9ed9b048795dedffcba9cd27f6062", + "dweb:/ipfs/Qme6oX3V1JCyTSZNEHuR5nByNxJUhDDuriJkNecVyWGVGr" + ], + "license": "MIT" + }, + "node_modules/@rhinestone/sentinellist/src/SentinelList4337.sol": { + "keccak256": "0x173a41622f0525822de4252e768907b83d5b43b6a939a6448082c5cfcdd76b33", + "urls": [ + "bzz-raw://61849503c2eb3bb4efd476860ed78995d6f2b6b2880d6c56178ca8eb6f6ac326", + "dweb:/ipfs/QmSfCu28jDnBDFVbDtj71isCJ6qGzZVc9cPUKjxffRdiCL" + ], + "license": "MIT" + }, + "node_modules/@safe-global/safe-contracts/contracts/handler/HandlerContext.sol": { + "keccak256": "0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d", + "urls": [ + "bzz-raw://b57666c08d90b0b56344813511789a6d21b66044f049146d802f8db0e28899fc", + "dweb:/ipfs/QmYWHsFYNbibbAGfNNQrWon9KzNHfgu5E6B3bDteLKDEmL" + ], + "license": "LGPL-3.0-only" + }, + "node_modules/erc7579/src/core/AccountBase.sol": { + "keccak256": "0x11805c609cfd00250d52f440983ea54daaddc2d2bd0da83676ffef6192fecb82", + "urls": [ + "bzz-raw://93fdd8d0e9da56705838ff9deb8a9130e18296986ff8f59d73ba3f8b0b00c2c5", + "dweb:/ipfs/QmZwGFNjQjsPxAwrVuobhLDvSkLf8eduSQc35R69XFPcvf" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/core/Receiver.sol": { + "keccak256": "0x42d41b30a6582d95d737fd75122b621a8af1ec3123782d91a29385b67612b9e4", + "urls": [ + "bzz-raw://bfb32e6d912477279bf3105eeb7afaf4bfb6526541ef9944428a3d5b9133c23f", + "dweb:/ipfs/QmUc5nZW5NkC2prAUuRbFBdA2vSRwUBHKXD4evb5yiHSKf" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IERC7579Module.sol": { + "keccak256": "0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604", + "urls": [ + "bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5", + "dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/Safe7579.sol": { + "keccak256": "0xfe8ee150f3a01d2d43659e8bcc5f82b0fed942573b16d89ed52aed4614ae96bb", + "urls": [ + "bzz-raw://c2977b34b16b03eeb1c23d8342b6268a6377285ae1510f0f9d4028146953fdc2", + "dweb:/ipfs/Qmac9iNijFGqeaRGcbBTZAmzNCJuRqnw3SYfcooaVj9BbQ" + ], + "license": "GPL-3.0" + }, + "src/core/AccessControl.sol": { + "keccak256": "0x65292c830de10b53a1a7cb37d65134b3f820308b22932341c2ce3cf425cf39a6", + "urls": [ + "bzz-raw://1726e810a97e26707aa500d10386935b70f8a2c2791e799110f9543bd30c8bdd", + "dweb:/ipfs/QmZo8mqWdaWnJEoJsSNHUxHvf62eXCzQkexGELVKP33WLY" + ], + "license": "MIT" + }, + "src/core/ExecutionHelper.sol": { + "keccak256": "0x2efc3bc6427ac8c1ac78c449606ffb7aeee00db4c93170019046d7c90ca40b00", + "urls": [ + "bzz-raw://bec5af879e26b73e1f6654d95b89d3a79669bf89daa2ef560b8ac18c3af7329a", + "dweb:/ipfs/Qmd675PqtXn5dGrYBLzLGDtZG2xxH6RPkuR4DngRRWkQAg" + ], + "license": "MIT" + }, + "src/core/Initializer.sol": { + "keccak256": "0xe9db50095c600259f0e013d5fd81c9e6c1f244a0bf59eb0dee784bf8e8bb9cbb", + "urls": [ + "bzz-raw://45ed85640b0cd4d874bd9d732f9925ac64caaa162174d68061a58af4052ace3f", + "dweb:/ipfs/QmQAevyNMb28mfu2aPQzbuXT1MfSzXWLDX1CRXdWMnLfTP" + ], + "license": "MIT" + }, + "src/core/ModuleManager.sol": { + "keccak256": "0x42d3a02ca4321a708f43731caf2920312a0784e0ef99831f6869a8b704bdac0a", + "urls": [ + "bzz-raw://251342f930d887d9845e0b5e24eefd97ff141e4d3729c578d7550b1486d54499", + "dweb:/ipfs/QmQzD4wLAAVsLZveHtPm4Yn8f6Zt4BhJnyDN21sdx1qG93" + ], + "license": "MIT" + }, + "src/core/RegistryAdapter.sol": { + "keccak256": "0xa791b4946887e489f929f74e3b6028aada1d1e0c44fd9febad12067768a96f13", + "urls": [ + "bzz-raw://6be2cfa7cd054d1580ccd424f7c0c73fd176eada44bc16c9688d3ad0c4889a64", + "dweb:/ipfs/QmaAcy7LnYXruBesFpgm1tE3pBZcHWMmR6zsYfkZcGKS2K" + ], + "license": "MIT" + }, + "src/core/SafeOp.sol": { + "keccak256": "0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e", + "urls": [ + "bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04", + "dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ" + ], + "license": "GPL-3.0" + }, + "src/core/SetupDCUtil.sol": { + "keccak256": "0x8adecef3f28fe53b297dbe65dda65379536b833795910960a2c232e0f574326b", + "urls": [ + "bzz-raw://10dee7abb225ad918b052b38d5edae3e2e9205b330782968a0345cc7b1979500", + "dweb:/ipfs/QmakXnYAoPQqAqfVtFUUEGB8pa2QbaKL2kngg8DBXbEj1v" + ], + "license": "MIT" + }, + "src/core/SupportViewer.sol": { + "keccak256": "0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf", + "urls": [ + "bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd", + "dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC1271.sol": { + "keccak256": "0xb393da93ddb9aca17c3a952bd0c667f190cbf8e0abc2b63c075951469deaa21a", + "urls": [ + "bzz-raw://14f56c33dfb8e00c13da56987d1a4256c46984fde1a8bafed31617fe98bffea3", + "dweb:/ipfs/QmQUZoro4bYJjEJuw2nV3KL8sT6t6qZHupCD8HkjC54XDU" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ExecutionLib.sol": { + "keccak256": "0x5852404ef72dbe607a5402af160494067e7d9e6bf1fbf9460ff309e53b4db399", + "urls": [ + "bzz-raw://6f78188bf12cec49056da5dcfd33628b4ce76026a108d227b0c03b87f650dbce", + "dweb:/ipfs/QmaP3N8RuMYJD2wqfRhCMvGcnVzamT8RSbBNj2pYgeCThi" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 113 +} diff --git a/artifacts/Safe7579DCUtil.json b/artifacts/Safe7579DCUtil.json new file mode 100644 index 0000000..8f22230 --- /dev/null +++ b/artifacts/Safe7579DCUtil.json @@ -0,0 +1,443 @@ +{ + "abi": [ + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "staticCall", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tryExecute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecuteReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "success", "type": "bool[]", "internalType": "bool[]" }, + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unInstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b506109c28061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "4015:532:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "4015:532:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:283;;;;;;:::i;:::-;;:::i;:::-;;894:289;;;;;;:::i;:::-;;:::i;1478:391::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4083:462;;;;;;:::i;:::-;;:::i;596:263::-;;;;;;:::i;:::-;;:::i;333:257::-;;;;;;:::i;:::-;;:::i;1875:472::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1189:283::-;1275:10;1258:14;1303:163;1323:6;1319:1;:10;1303:163;;;1350:24;1377:10;;1388:1;1377:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1350:40;-1:-1:-1;1404:51:132;1413:12;;;;1350:40;1413:12;:::i;:::-;1427:11;;;;1440:14;;;;1427:5;1440:14;:::i;:::-;1404:8;:51::i;:::-;-1:-1:-1;;1331:3:132;;1303:163;;;;1248:224;1189:283;;:::o;894:289::-;983:10;966:14;1011:166;1031:6;1027:1;:10;1011:166;;;1058:24;1085:10;;1096:1;1085:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1058:40;-1:-1:-1;1112:54:132;1124:12;;;;1058:40;1124:12;:::i;:::-;1138:11;;;;1151:14;;;;1138:5;1151:14;:::i;:::-;1112:11;:54::i;:::-;-1:-1:-1;;;1039:3:132;;1011:166;;1478:391;1568:21;1622:10;;1658:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:28;;1693:9;1688:175;1708:6;1704:1;:10;1688:175;;;1735:24;1762:10;;1773:1;1762:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1735:40;-1:-1:-1;1801:51:132;1810:12;;;;1735:40;1810:12;:::i;1801:51::-;1789:6;1796:1;1789:9;;;;;;;;:::i;:::-;;;;;;;;;;:63;-1:-1:-1;1716:3:132;;1688:175;;;;1595:274;1478:391;;;;:::o;4083:462::-;4274:4;4268:11;4369:4;4363;4356;4350:11;4343:4;4337;4333:15;4325:6;4318:5;4307:67;4413:16;4407:4;4402:3;4387:43;4446:7;4443:44;;;4468:16;4463:3;4456:29;4443:44;;4512:16;4507:3;4500:29;596:263;745:44;;-1:-1:-1;;;745:44:132;;-1:-1:-1;;;;;745:34:132;;;;;:44;;780:8;;;;745:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;804:48:132;;;6537:25:153;;;-1:-1:-1;;;;;6598:32:153;;6593:2;6578:18;;6571:60;804:48:132;;-1:-1:-1;6510:18:153;;-1:-1:-1;804:48:132;;;;;;;;596:263;;;;:::o;333:257::-;480:42;;-1:-1:-1;;;480:42:132;;-1:-1:-1;;;;;480:32:132;;;;;:42;;513:8;;;;480:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;537:46:132;;;6537:25:153;;;-1:-1:-1;;;;;6598:32:153;;6593:2;6578:18;;6571:60;537:46:132;;-1:-1:-1;6510:18:153;;-1:-1:-1;537:46:132;6363:274:153;1875:472:132;1968:21;;2045:10;;2081:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:28;;2131:6;2120:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:18:132;;2110:28;;2154:9;2149:192;2169:6;2165:1;:10;2149:192;;;2196:24;2223:10;;2234:1;2223:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2196:40;-1:-1:-1;2276:54:132;2288:12;;;;2196:40;2288:12;:::i;2276:54::-;2251:7;2259:1;2251:10;;;;;;;;:::i;:::-;;;;;;2263:6;2270:1;2263:9;;;;;;;;:::i;:::-;;;;;;;;;;2250:80;;;;;;;;;-1:-1:-1;2177:3:132;;2149:192;;;;2018:329;1875:472;;;;;:::o;2353:912::-;2637:4;2631:11;2693:15;2676;2631:11;2655:54;2796:4;2784:10;2767:15;2759:6;2752:5;2744:6;2737:5;2732:69;2722:269;;2911:16;2905:4;2897:6;2882:46;2960:16;2952:6;2945:32;2722:269;3019:16;3011:6;3004:32;3091:4;3083:6;3079:17;3133:16;3127:4;3124:1;3109:41;3207:16;3200:24;3194:4;3187:38;2353:912;;-1:-1:-1;;;;2353:912:132:o;3271:740::-;3572:4;3566:11;3428:12;;3628:15;3611;3566:11;3590:54;3732:4;3720:10;3703:15;3695:6;3688:5;3680:6;3673:5;3668:69;3657:80;;3765:16;3757:6;3750:32;3837:4;3829:6;3825:17;3879:16;3873:4;3870:1;3855:41;3953:16;3950:1;3946:24;3940:4;3933:38;;3271:740;;;;;;;:::o;14:640:153:-;130:6;138;191:2;179:9;170:7;166:23;162:32;159:52;;;207:1;204;197:12;159:52;247:9;234:23;280:18;272:6;269:30;266:50;;;312:1;309;302:12;266:50;335:22;;388:4;380:13;;376:27;-1:-1:-1;366:55:153;;417:1;414;407:12;366:55;457:2;444:16;483:18;475:6;472:30;469:50;;;515:1;512;505:12;469:50;568:7;563:2;553:6;550:1;546:14;542:2;538:23;534:32;531:45;528:65;;;589:1;586;579:12;528:65;620:2;612:11;;;;;642:6;;-1:-1:-1;14:640:153;-1:-1:-1;;;14:640:153:o;659:955::-;710:3;741;773:5;767:12;800:6;795:3;788:19;832:4;827:3;823:14;816:21;;890:4;880:6;877:1;873:14;866:5;862:26;858:37;929:4;922:5;918:16;952:1;962:626;976:6;973:1;970:13;962:626;;;1041:16;;;-1:-1:-1;;1037:30:153;1025:43;;1091:13;;1133:9;;1155:22;;;1201:1;1215:161;1231:8;1226:3;1223:17;1215:161;;;1355:4;1341:12;;;1337:23;;1331:30;1308:14;;;1304:25;;1297:65;1250:14;1215:161;;;1219:3;1428:1;1421:4;1410:8;1404:4;1400:19;1396:30;1389:41;1499:4;1492:2;1488:7;1483:2;1473:8;1469:17;1465:31;1459:4;1455:42;1451:53;1443:61;;;;1539:4;1531:6;1527:17;1517:27;;1573:4;1568:3;1564:14;1557:21;;998:1;995;991:9;986:14;;962:626;;;-1:-1:-1;1604:4:153;;659:955;-1:-1:-1;;;;;;659:955:153:o;1619:277::-;1816:2;1805:9;1798:21;1779:4;1836:54;1886:2;1875:9;1871:18;1863:6;1836:54;:::i;:::-;1828:62;1619:277;-1:-1:-1;;;1619:277:153:o;1901:173::-;1969:20;;-1:-1:-1;;;;;2018:31:153;;2008:42;;1998:70;;2064:1;2061;2054:12;1998:70;1901:173;;;:::o;2079:127::-;2140:10;2135:3;2131:20;2128:1;2121:31;2171:4;2168:1;2161:15;2195:4;2192:1;2185:15;2211:1018;2288:6;2296;2349:2;2337:9;2328:7;2324:23;2320:32;2317:52;;;2365:1;2362;2355:12;2317:52;2388:29;2407:9;2388:29;:::i;:::-;2378:39;;2468:2;2457:9;2453:18;2440:32;2495:18;2487:6;2484:30;2481:50;;;2527:1;2524;2517:12;2481:50;2550:22;;2603:4;2595:13;;2591:27;-1:-1:-1;2581:55:153;;2632:1;2629;2622:12;2581:55;2672:2;2659:16;2698:18;2690:6;2687:30;2684:56;;;2720:18;;:::i;:::-;2769:2;2763:9;2861:2;2823:17;;-1:-1:-1;;2819:31:153;;;2852:2;2815:40;2811:54;2799:67;;2896:18;2881:34;;2917:22;;;2878:62;2875:88;;;2943:18;;:::i;:::-;2979:2;2972:22;3003;;;3044:15;;;3061:2;3040:24;3037:37;-1:-1:-1;3034:57:153;;;3087:1;3084;3077:12;3034:57;3143:6;3138:2;3134;3130:11;3125:2;3117:6;3113:15;3100:50;3196:1;3191:2;3182:6;3174;3170:19;3166:28;3159:39;3217:6;3207:16;;;;;2211:1018;;;;;:::o;3234:728::-;3322:6;3330;3338;3346;3399:2;3387:9;3378:7;3374:23;3370:32;3367:52;;;3415:1;3412;3405:12;3367:52;3451:9;3438:23;3428:33;;3480:38;3514:2;3503:9;3499:18;3480:38;:::i;:::-;3470:48;;3569:2;3558:9;3554:18;3541:32;3596:18;3588:6;3585:30;3582:50;;;3628:1;3625;3618:12;3582:50;3651:22;;3704:4;3696:13;;3692:27;-1:-1:-1;3682:55:153;;3733:1;3730;3723:12;3682:55;3773:2;3760:16;3799:18;3791:6;3788:30;3785:50;;;3831:1;3828;3821:12;3785:50;3876:7;3871:2;3862:6;3858:2;3854:15;3850:24;3847:37;3844:57;;;3897:1;3894;3887:12;3844:57;3234:728;;;;-1:-1:-1;3928:2:153;3920:11;;-1:-1:-1;;;3234:728:153:o;3967:817::-;4247:2;4259:21;;;4329:13;;4232:18;;;4351:22;;;4199:4;;4442;4430:17;;;4404:2;4389:18;;;4199:4;4475:189;4489:6;4486:1;4483:13;4475:189;;;4564:13;;4557:21;4550:29;4538:42;;4609:4;4637:17;;;;4600:14;;;;4511:1;4504:9;4475:189;;;4479:3;;4711:9;4706:3;4702:19;4695:4;4684:9;4680:20;4673:49;4739:39;4774:3;4766:6;4739:39;:::i;:::-;4731:47;3967:817;-1:-1:-1;;;;;;3967:817:153:o;4789:127::-;4850:10;4845:3;4841:20;4838:1;4831:31;4881:4;4878:1;4871:15;4905:4;4902:1;4895:15;4921:327;5017:4;5075:11;5062:25;5169:2;5165:7;5154:8;5138:14;5134:29;5130:43;5110:18;5106:68;5096:96;;5188:1;5185;5178:12;5096:96;5209:33;;;;;4921:327;-1:-1:-1;;4921:327:153:o;5253:186::-;5312:6;5365:2;5353:9;5344:7;5340:23;5336:32;5333:52;;;5381:1;5378;5371:12;5333:52;5404:29;5423:9;5404:29;:::i;5444:521::-;5521:4;5527:6;5587:11;5574:25;5681:2;5677:7;5666:8;5650:14;5646:29;5642:43;5622:18;5618:68;5608:96;;5700:1;5697;5690:12;5608:96;5727:33;;5779:20;;;-1:-1:-1;5822:18:153;5811:30;;5808:50;;;5854:1;5851;5844:12;5808:50;5887:4;5875:17;;-1:-1:-1;5918:14:153;5914:27;;;5904:38;;5901:58;;;5955:1;5952;5945:12;5901:58;5444:521;;;;;:::o;5970:388::-;6127:2;6116:9;6109:21;6166:6;6161:2;6150:9;6146:18;6139:34;6223:6;6215;6210:2;6199:9;6195:18;6182:48;6279:1;6250:22;;;6274:2;6246:31;;;6239:42;;;;6342:2;6321:15;;;-1:-1:-1;;6317:29:153;6302:45;6298:54;;5970:388;-1:-1:-1;5970:388:153:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "execute((address,uint256,bytes)[])": "3f707e6b", + "executeReturn((address,uint256,bytes)[])": "61085573", + "installModule(uint256,address,bytes)": "9517e29f", + "staticCall(address,bytes)": "6a221657", + "tryExecute((address,uint256,bytes)[])": "50c89022", + "tryExecuteReturn((address,uint256,bytes)[])": "9abb6e17", + "unInstallModule(uint256,address,bytes)": "78272525" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"executeReturn\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"staticCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecuteReturn\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"},{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"unInstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"Safe7579DCUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeReturn", + "outputs": [ + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "staticCall" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecuteReturn", + "outputs": [ + { "internalType": "bool[]", "name": "success", "type": "bool[]" }, + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unInstallModule" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "Safe7579DCUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/Safe7579Launchpad.json b/artifacts/Safe7579Launchpad.json new file mode 100644 index 0000000..0dd6f45 --- /dev/null +++ b/artifacts/Safe7579Launchpad.json @@ -0,0 +1,1445 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { "name": "entryPoint", "type": "address", "internalType": "address" }, + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "REGISTRY", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "contract IERC7484" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SUPPORTED_ENTRYPOINT", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "addSafe7579", + "inputs": [ + { "name": "safe7579", "type": "address", "internalType": "address" }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitHash", + "inputs": [], + "outputs": [ + { "name": "value", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hash", + "inputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct Safe7579Launchpad.InitData", + "components": [ + { + "name": "singleton", + "type": "address", + "internalType": "address" + }, + { + "name": "owners", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "threshold", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "setupTo", "type": "address", "internalType": "address" }, + { "name": "setupData", "type": "bytes", "internalType": "bytes" }, + { + "name": "safe7579", + "type": "address", + "internalType": "contract ISafe7579" + }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { + "name": "module", + "type": "address", + "internalType": "address" + }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initSafe7579", + "inputs": [ + { "name": "safe7579", "type": "address", "internalType": "address" }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "preValidationSetup", + "inputs": [ + { "name": "initHash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "preInit", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "predictSafeAddress", + "inputs": [ + { "name": "singleton", "type": "address", "internalType": "address" }, + { + "name": "safeProxyFactory", + "type": "address", + "internalType": "address" + }, + { "name": "creationCode", "type": "bytes", "internalType": "bytes" }, + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "factoryInitializer", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "safeProxy", "type": "address", "internalType": "address" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "setupSafe", + "inputs": [ + { + "name": "initData", + "type": "tuple", + "internalType": "struct Safe7579Launchpad.InitData", + "components": [ + { + "name": "singleton", + "type": "address", + "internalType": "address" + }, + { + "name": "owners", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "threshold", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "setupTo", "type": "address", "internalType": "address" }, + { "name": "setupData", "type": "bytes", "internalType": "bytes" }, + { + "name": "safe7579", + "type": "address", + "internalType": "contract ISafe7579" + }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { + "name": "module", + "type": "address", + "internalType": "address" + }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [ + { "name": "supported", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validationData", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "InvalidEntryPoint", "inputs": [] }, + { "type": "error", "name": "InvalidInitHash", "inputs": [] }, + { "type": "error", "name": "InvalidSetup", "inputs": [] }, + { "type": "error", "name": "InvalidSignature", "inputs": [] }, + { "type": "error", "name": "InvalidUserOperationData", "inputs": [] }, + { "type": "error", "name": "OnlyDelegatecall", "inputs": [] }, + { "type": "error", "name": "OnlyProxy", "inputs": [] }, + { "type": "error", "name": "PreValidationSetupFailed", "inputs": [] }, + { + "type": "error", + "name": "Safe7579LaunchpadAlreadyInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "WrongContractSignature", + "inputs": [ + { + "name": "contractSignature", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "WrongContractSignatureFormat", + "inputs": [ + { "name": "s", "type": "uint256", "internalType": "uint256" }, + { + "name": "contractSignatureLen", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signaturesLen", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "bytecode": { + "object": "0x60e060405234801561001057600080fd5b50604051612dea380380612dea83398101604081905261002f91610089565b6001600160a01b03821661005657604051632039d3c960e01b815260040160405180910390fd5b306080526001600160a01b0391821660a0521660c0526100c3565b6001600160a01b038116811461008657600080fd5b50565b6000806040838503121561009c57600080fd5b82516100a781610071565b60208401519092506100b881610071565b809150509250929050565b60805160a05160c051612cc161012960003960008181610159015281816104900152610fc60152600081816101aa015281816105be015281816110a701526113ea01526000818160f6015281816105690152818161099301526111100152612cc16000f3fe6080604052600436106100ec5760003560e01c8063663c87d81161008a578063d78343d911610059578063d78343d914610348578063d9ed0e8f14610368578063f2dc691d14610388578063f698da25146103a857600080fd5b8063663c87d81461028c578063928107f9146102ac5780639cfd7cff146102cc578063d03c79141461031857600080fd5b806319822f7c116100c657806319822f7c146101ec5780633c9de1b81461021a5780634fff40e11461023c57806355d559f41461025c57600080fd5b806306433b1b14610147578063137e051e1461019857806315cca638146101cc57600080fd5b36610142576000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614610140576040516308e3edd160e41b815260040160405180910390fd5b005b600080fd5b34801561015357600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d857600080fd5b506101406101e7366004611ab5565b6103bd565b3480156101f857600080fd5b5061020c610207366004611bc2565b610563565b60405190815260200161018f565b34801561022657600080fd5b50600080516020612c6c8339815191525461020c565b34801561024857600080fd5b50610140610257366004611c0f565b61098e565b34801561026857600080fd5b5061027c610277366004611c99565b610abe565b60405161018f9493929190611d3a565b34801561029857600080fd5b5061017b6102a7366004611e94565b610d1b565b3480156102b857600080fd5b5061020c6102c7366004612094565b610df5565b3480156102d857600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161018f91906121c2565b34801561032457600080fd5b506103386103333660046121dc565b610e47565b604051901515815260200161018f565b34801561035457600080fd5b506101406103633660046121f5565b610ef0565b34801561037457600080fd5b50610140610383366004612321565b61109c565b34801561039457600080fd5b506103386103a33660046121dc565b611324565b3480156103b457600080fd5b5061020c611373565b3330146103dd57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b50506040805160008082526020820190925230935063540fb4f992509061047c565b6040805180820190915260008152606060208201528152602001906001900390816104545790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261052598979695949392919060040161255c565b600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146105b3576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc57604051632039d3c960e01b815260040160405180910390fd5b61060960608501856125cf565b61061891600491600091612615565b6106219161263f565b6001600160e01b03191663d9ed0e8f60e01b146106515760405163c3d40f7760e01b815260040160405180910390fd5b600061066060608601866125cf565b61066e916004908290612615565b81019061067b9190612094565b9050610693600080516020612c6c8339815191525490565b61069c82610df5565b146106ba5760405163278328b160e21b815260040160405180910390fd5b600080866020013590508060601c915060008360a001516001600160a01b03168460c001516040516024016106ef9190612677565b60408051601f19818403018152918152602080830180516001600160e01b0316633cd56b0760e11b1790529051610729929133910161268a565b60408051601f1981840301815290829052610743916126bc565b6000604051808303816000865af19150503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b50509050806107a75760405163c3d40f7760e01b815260040160405180910390fd5b60c084015151600090815b818110156108c95760008760c0015182815181106107d2576107d26126d8565b6020026020010151600001519050806001600160a01b0316636d61fe708960c001518481518110610805576108056126d8565b6020026020010151602001516040518263ffffffff1660e01b815260040161082d91906121c2565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1866001600160a01b0316816001600160a01b0316036108c057600193505b506001016107b2565b50811561094857604051639700320360e01b81526001600160a01b038616906397003203906108fe908d908d906004016127ce565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094191906127f0565b965061096f565b6000806000610957898e6113cc565b92509250925061096983158383611542565b99505050505b8715610981576000806000808b335af1505b5050505050509392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146109dd576040516308e3edd160e41b815260040160405180910390fd5b60006109f5600080516020612c6c8339815191525490565b14610a135760405163d4d496e560e01b815260040160405180910390fd5b610a2984600080516020612c6c83398151915255565b6001600160a01b03831615610ab8576000836001600160a01b03168383604051610a54929190612809565b600060405180830381855af49150503d8060008114610a8f576040519150601f19603f3d011682016040523d82523d6000602084013e610a94565b606091505b5050905080610ab657604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b6060600080823682610ad46101008901896125cf565b9092509050610ae7600660008385612615565b610af091612819565b60d01c9450610b03600c60068385612615565b610b0c91612819565b60d01c9350610b1e81600c8185612615565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610b9a91508a018a61284f565b6001600160a01b0316815260200188602001358152602001888060400190610bc291906125cf565b604051610bd0929190612809565b6040519081900390208152602001610beb60608a018a6125cf565b604051610bf9929190612809565b60405180910390208152602001610c0f8961157a565b6001600160801b03168152602001610c2689611590565b6001600160801b031681526020018860a001358152602001610c47896115a5565b6001600160801b03168152602001610c5e896115b4565b6001600160801b03168152602001610c7960e08a018a6125cf565b604051610c87929190612809565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610cd3611373565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b6000818051906020012083604051602001610d40929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b0316604051602001610d7b92919061286c565b60405160208183030381529060405280519060200120604051602001610dd394939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610e2a98909796910161288e565b604051602081830303815290604052805190602001209050919050565b600081600881901b6001600160f81b03198216600160f81b03610e6d5760019250610ea9565b6001600160f81b03198216610e855760019250610ea9565b6001600160f81b031980831603610e9f5760019250610ea9565b5060009392505050565b828015610ebe57506001600160f81b03198116155b15610eca575050919050565b828015610ee457506001600160f81b03198116600160f81b145b15610e9f575050919050565b60405163610b592560e01b81526001600160a01b038d166004820152309063610b592590602401600060405180830381600087803b158015610f3157600080fd5b505af1158015610f45573d6000803e3d6000fd5b505060405163f08a032360e01b81526001600160a01b038f16600482015230925063f08a03239150602401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b50505050306001600160a01b031663540fb4f98c8c8c8c8c8c8c8c60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018e8e8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8d166020909101526040516001600160e01b031960e08c901b16815261105c9998979695949392919060040161290b565b600060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b50505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110e557604051632039d3c960e01b815260040160405180910390fd5b6110f2602082018261284f565b600080546001600160a01b0319166001600160a01b039283161790557f000000000000000000000000000000000000000000000000000000000000000016611140608083016060840161284f565b6001600160a01b03161461116757604051633007073760e01b815260040160405180910390fd5b6302b994c760e31b61117c60808301836125cf565b61118b91600491600091612615565b6111949161263f565b6001600160e01b031916146111bc57604051633007073760e01b815260040160405180910390fd5b3063b63e800d6111cf6020840184612980565b60408501356111e4608087016060880161284f565b6111f160808801886125cf565b61120160c08a0160a08b0161284f565b60008060006040518b63ffffffff1660e01b815260040161122b9a999897969594939291906129c9565b600060405180830381600087803b15801561124557600080fd5b505af1158015611259573d6000803e3d6000fd5b50506000600080516020612c6c83398151915255506112759050565b60008061128860c0840160a0850161284f565b6001600160a01b031661129e60e08501856125cf565b306040516020016112b193929190612a80565b60408051601f19818403018152908290526112cb916126bc565b6000604051808303816000865af19150503d8060008114611308576040519150601f19603f3d011682016040523d82523d6000602084013e61130d565b606091505b50915091508161131f57805160208201fd5b505050565b60006001820361133657506001919050565b6002820361134657506001919050565b6003820361135657506001919050565b6004820361136657506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60008060006060808660a001516001600160a01b03166355d559f4877f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611426929190612aa1565b600060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261146b9190810190612b2e565b8351602085012060408c01519298509296509294509192509060009061149490839085906115c9565b905061149f816118c1565b60208901516114ad816118c1565b6114b6816118cd565b80516000805b8281101561152e5760006114f28583815181106114db576114db6126d8565b6020026020010151876118d690919063ffffffff16565b5090508015611525578261150581612bcc565b9350508d6040015183106115255760019b5050505050505050505061153b565b506001016114bc565b5060009950505050505050505b9250925092565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561156a57600061156d565b60015b60ff161717949350505050565b600061158a826080013560801c90565b92915050565b60006001600160801b0360808301351661158a565b600060c082013560801c61158a565b60006001600160801b0360c08301351661158a565b606060006115d8836041612be5565b8451909150836001600160401b038111156115f5576115f5611d86565b60405190808252806020026020018201604052801561161e578160200160208202803683370190505b5092508181101561164257604051638baa579f60e01b815260040160405180910390fd5b60005b848110156118b7576000806000806116758a86604102016020810151604082015160609092015160001a92909190565b9250925092508260ff16600003611816579092508290611696896041612be5565b8110156116cc576040516338a245ff60e11b81526004810182905260006024820181905260448201526064015b60405180910390fd5b856116d8826020612bfc565b1115611708576040516338a245ff60e11b81526004810182905260006024820152604481018790526064016116c3565b6020818b018101519087908290611720908590612bfc565b61172a9190612bfc565b111561175a576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016116c3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b81526004016117a4929190612c0f565b602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190612c28565b6001600160e01b0319161461180f578060405163605d348960e01b81526004016116c391906121c2565b505061187c565b601e8360ff16111561186d576118666118548c6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b61185f600486612c52565b84846118f9565b935061187c565b6118798b8484846118f9565b93505b8388868151811061188f5761188f6126d8565b6001600160a01b03909216602092830291909101909101525050600190920191506116459050565b5050509392505050565b6118ca81611937565b50565b6118ca8161198c565b6000806118ee84846001600160a01b031660006119d5565b909590945092505050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b8051600082528060051b82016020601f198185015b8201838111611984578051828201805182811161196b5750505061194c565b5b818601528301805182811161196c575084015261194c565b505050915250565b60028151106118ca576020810160408201600183510160051b83015b81518351146119bc57602083019250815183525b6020820191508082036119a857505081900360051c9052565b60008060001960018651600087870197505b81830160011c94508460051b8901518701905087811482841117611a2157808811611a165783850191506119e7565b6001850192506119e7565b84151597148716989290930190950295509350505050565b6001600160a01b03811681146118ca57600080fd5b803561136e81611a39565b60008083601f840112611a6b57600080fd5b5081356001600160401b03811115611a8257600080fd5b6020830191508360208260051b8501011115611a9d57600080fd5b9250929050565b803560ff8116811461136e57600080fd5b60008060008060008060008060008060c08b8d031215611ad457600080fd5b611add8b611a4e565b995060208b01356001600160401b03811115611af857600080fd5b611b048d828e01611a59565b909a5098505060408b01356001600160401b03811115611b2357600080fd5b611b2f8d828e01611a59565b90985096505060608b01356001600160401b03811115611b4e57600080fd5b611b5a8d828e01611a59565b90965094505060808b01356001600160401b03811115611b7957600080fd5b611b858d828e01611a59565b9094509250611b98905060a08c01611aa4565b90509295989b9194979a5092959850565b60006101208284031215611bbc57600080fd5b50919050565b600080600060608486031215611bd757600080fd5b83356001600160401b03811115611bed57600080fd5b611bf986828701611ba9565b9660208601359650604090950135949350505050565b60008060008060608587031215611c2557600080fd5b843593506020850135611c3781611a39565b925060408501356001600160401b03811115611c5257600080fd5b8501601f81018713611c6357600080fd5b80356001600160401b03811115611c7957600080fd5b876020828401011115611c8b57600080fd5b949793965060200194505050565b60008060408385031215611cac57600080fd5b82356001600160401b03811115611cc257600080fd5b611cce85828601611ba9565b9250506020830135611cdf81611a39565b809150509250929050565b60005b83811015611d05578181015183820152602001611ced565b50506000910152565b60008151808452611d26816020860160208601611cea565b601f01601f19169290920160200192915050565b608081526000611d4d6080830187611d0e565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152611d7b8185611d0e565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611dbe57611dbe611d86565b60405290565b60405161010081016001600160401b0381118282101715611dbe57611dbe611d86565b604051601f8201601f191681016001600160401b0381118282101715611e0f57611e0f611d86565b604052919050565b60006001600160401b03821115611e3057611e30611d86565b50601f01601f191660200190565b600082601f830112611e4f57600080fd5b8135611e62611e5d82611e17565b611de7565b818152846020838601011115611e7757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611eac57600080fd5b8535611eb781611a39565b94506020860135611ec781611a39565b935060408601356001600160401b03811115611ee257600080fd5b611eee88828901611e3e565b9350506060860135915060808601356001600160401b03811115611f1157600080fd5b611f1d88828901611e3e565b9150509295509295909350565b60006001600160401b03821115611f4357611f43611d86565b5060051b60200190565b600082601f830112611f5e57600080fd5b8135611f6c611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611f8e57600080fd5b602085015b83811015611fb4578035611fa681611a39565b835260209283019201611f93565b5095945050505050565b600082601f830112611fcf57600080fd5b8135611fdd611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611fff57600080fd5b602085015b83811015611fb45780356001600160401b0381111561202257600080fd5b86016040818903601f1901121561203857600080fd5b612040611d9c565b602082013561204e81611a39565b815260408201356001600160401b0381111561206957600080fd5b6120788a602083860101611e3e565b6020830152508085525050602083019250602081019050612004565b6000602082840312156120a657600080fd5b81356001600160401b038111156120bc57600080fd5b820161010081850312156120cf57600080fd5b6120d7611dc4565b6120e082611a4e565b815260208201356001600160401b038111156120fb57600080fd5b61210786828501611f4d565b6020830152506040828101359082015261212360608301611a4e565b606082015260808201356001600160401b0381111561214157600080fd5b61214d86828501611e3e565b60808301525061215f60a08301611a4e565b60a082015260c08201356001600160401b0381111561217d57600080fd5b61218986828501611fbe565b60c08301525060e08201356001600160401b038111156121a857600080fd5b6121b486828501611e3e565b60e083015250949350505050565b6020815260006121d56020830184611d0e565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060008060008060008060008060008060e08d8f03121561221757600080fd5b6122208d611a4e565b9b506001600160401b0360208e0135111561223a57600080fd5b61224a8e60208f01358f01611a59565b909b5099506001600160401b0360408e0135111561226757600080fd5b6122778e60408f01358f01611a59565b90995097506001600160401b0360608e0135111561229457600080fd5b6122a48e60608f01358f01611a59565b90975095506001600160401b0360808e013511156122c157600080fd5b6122d18e60808f01358f01611a59565b90955093506001600160401b0360a08e013511156122ee57600080fd5b6122fe8e60a08f01358f01611a59565b909350915061230f60c08e01611aa4565b90509295989b509295989b509295989b565b60006020828403121561233357600080fd5b81356001600160401b0381111561234957600080fd5b820161010081850312156121d557600080fd5b600082825180855260208501945060208160051b8301016020850160005b838110156123cc57848303601f19018852815180516001600160a01b031684526020908101516040918501829052906123b590850182611d0e565b6020998a019990945092909201915060010161237a565b50909695505050505050565b6000808335601e198436030181126123ef57600080fd5b83016020810192503590506001600160401b0381111561240e57600080fd5b803603821315611a9d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208501945060208460051b8201018360005b868110156123cc57838303601f19018852813536879003603e1901811261248557600080fd5b8601803561249281611a39565b6001600160a01b031684526124aa60208201826123d8565b9150604060208601526124c160408601838361241d565b60209a8b019a9095509390930192505060010161245f565b600081518084526020840193506020830160005b828110156125145781516001600160a01b03168652602095860195909101906001016124ed565b5093949350505050565b60018060a01b038151168252600060208201516060602085015261254560608501826124d9565b60409384015160ff16949093019390935250919050565b60a08152600061256f60a083018b61235c565b8281036020840152612582818a8c612446565b9050828103604084015261259781888a612446565b905082810360608401526125ac818688612446565b905082810360808401526125c0818561251e565b9b9a5050505050505050505050565b6000808335601e198436030181126125e657600080fd5b8301803591506001600160401b0382111561260057600080fd5b602001915036819003821315611a9d57600080fd5b6000808585111561262557600080fd5b8386111561263257600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015612670576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6020815260006121d5602083018461235c565b6000835161269c818460208801611cea565b60609390931b6001600160601b0319169190920190815260140192915050565b600082516126ce818460208701611cea565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b612708826126fb83611a4e565b6001600160a01b03169052565b60208181013590830152600061272160408301836123d8565b61012060408601526127386101208601828461241d565b91505061274860608401846123d8565b858303606087015261275b83828461241d565b6080868101359088015260a0808701359088015260c08087013590880152925061278b91505060e08401846123d8565b85830360e087015261279e83828461241d565b925050506127b06101008401846123d8565b8583036101008701526127c483828461241d565b9695505050505050565b6040815260006127e160408301856126ee565b90508260208301529392505050565b60006020828403121561280257600080fd5b5051919050565b8183823760009101908152919050565b80356001600160d01b03198116906006841015612670576001600160d01b031960069490940360031b84901b1690921692915050565b60006020828403121561286157600080fd5b81356121d581611a39565b6000835161287e818460208801611cea565b9190910191825250602001919050565b6001600160a01b038816815260e0602082018190526000906128b2908301896124d9565b604083018890526001600160a01b038716606084015282810360808401526128da8187611d0e565b6001600160a01b03861660a085015283810360c085015290506128fd818561235c565b9a9950505050505050505050565b60a08152600061291f60a083018b8d612446565b8281036020840152612932818a8c612446565b9050828103604084015261294781888a612446565b9050828103606084015261295c818688612446565b90508281036080840152612970818561251e565b9c9b505050505050505050505050565b6000808335601e1984360301811261299757600080fd5b8301803591506001600160401b038211156129b157600080fd5b6020019150600581901b3603821315611a9d57600080fd5b61010080825281018a905260008b6101208301825b8d811015612a0e5782356129f181611a39565b6001600160a01b03168252602092830192909101906001016129de565b508b6020850152612a2a604085018c6001600160a01b03169052565b8381036060850152612a3d818a8c61241d565b92505050612a5660808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c08301526125c060e08301846001600160a01b03169052565b8284823760609190911b6001600160601b0319169101908152601401919050565b604081526000612ab460408301856126ee565b905060018060a01b03831660208301529392505050565b600082601f830112612adc57600080fd5b8151612aea611e5d82611e17565b818152846020838601011115612aff57600080fd5b612b10826020830160208701611cea565b949350505050565b805165ffffffffffff8116811461136e57600080fd5b60008060008060808587031215612b4457600080fd5b84516001600160401b03811115612b5a57600080fd5b612b6687828801612acb565b945050612b7560208601612b18565b9250612b8360408601612b18565b915060608501516001600160401b03811115612b9e57600080fd5b612baa87828801612acb565b91505092959194509250565b634e487b7160e01b600052601160045260246000fd5b600060018201612bde57612bde612bb6565b5060010190565b808202811582820484141761158a5761158a612bb6565b8082018082111561158a5761158a612bb6565b828152604060208201526000612b106040830184611d0e565b600060208284031215612c3a57600080fd5b81516001600160e01b0319811681146121d557600080fd5b60ff828116828216039081111561158a5761158a612bb656fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220b8570cdd622e1fbbf9414238ac24ec7629c0bf87595f396efe2bec7415eff9ce64736f6c634300081a0033", + "sourceMap": "1487:15193:114:-:0;;;2604:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2669:24:114;;2665:56;;2702:19;;-1:-1:-1;;;2702:19:114;;;;;;;;;;;2665:56;2747:4;2732:20;;-1:-1:-1;;;;;2762:33:114;;;;;2805:19;;;1487:15193;;14:131:153;-1:-1:-1;;;;;89:31:153;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:403::-;247:6;255;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;356:9;350:16;375:31;400:5;375:31;:::i;:::-;475:2;460:18;;454:25;425:5;;-1:-1:-1;488:33:153;454:25;488:33;:::i;:::-;540:7;530:17;;;150:403;;;;;:::o;:::-;1487:15193:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106100ec5760003560e01c8063663c87d81161008a578063d78343d911610059578063d78343d914610348578063d9ed0e8f14610368578063f2dc691d14610388578063f698da25146103a857600080fd5b8063663c87d81461028c578063928107f9146102ac5780639cfd7cff146102cc578063d03c79141461031857600080fd5b806319822f7c116100c657806319822f7c146101ec5780633c9de1b81461021a5780634fff40e11461023c57806355d559f41461025c57600080fd5b806306433b1b14610147578063137e051e1461019857806315cca638146101cc57600080fd5b36610142576000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614610140576040516308e3edd160e41b815260040160405180910390fd5b005b600080fd5b34801561015357600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d857600080fd5b506101406101e7366004611ab5565b6103bd565b3480156101f857600080fd5b5061020c610207366004611bc2565b610563565b60405190815260200161018f565b34801561022657600080fd5b50600080516020612c6c8339815191525461020c565b34801561024857600080fd5b50610140610257366004611c0f565b61098e565b34801561026857600080fd5b5061027c610277366004611c99565b610abe565b60405161018f9493929190611d3a565b34801561029857600080fd5b5061017b6102a7366004611e94565b610d1b565b3480156102b857600080fd5b5061020c6102c7366004612094565b610df5565b3480156102d857600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161018f91906121c2565b34801561032457600080fd5b506103386103333660046121dc565b610e47565b604051901515815260200161018f565b34801561035457600080fd5b506101406103633660046121f5565b610ef0565b34801561037457600080fd5b50610140610383366004612321565b61109c565b34801561039457600080fd5b506103386103a33660046121dc565b611324565b3480156103b457600080fd5b5061020c611373565b3330146103dd57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b50506040805160008082526020820190925230935063540fb4f992509061047c565b6040805180820190915260008152606060208201528152602001906001900390816104545790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261052598979695949392919060040161255c565b600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146105b3576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc57604051632039d3c960e01b815260040160405180910390fd5b61060960608501856125cf565b61061891600491600091612615565b6106219161263f565b6001600160e01b03191663d9ed0e8f60e01b146106515760405163c3d40f7760e01b815260040160405180910390fd5b600061066060608601866125cf565b61066e916004908290612615565b81019061067b9190612094565b9050610693600080516020612c6c8339815191525490565b61069c82610df5565b146106ba5760405163278328b160e21b815260040160405180910390fd5b600080866020013590508060601c915060008360a001516001600160a01b03168460c001516040516024016106ef9190612677565b60408051601f19818403018152918152602080830180516001600160e01b0316633cd56b0760e11b1790529051610729929133910161268a565b60408051601f1981840301815290829052610743916126bc565b6000604051808303816000865af19150503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b50509050806107a75760405163c3d40f7760e01b815260040160405180910390fd5b60c084015151600090815b818110156108c95760008760c0015182815181106107d2576107d26126d8565b6020026020010151600001519050806001600160a01b0316636d61fe708960c001518481518110610805576108056126d8565b6020026020010151602001516040518263ffffffff1660e01b815260040161082d91906121c2565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1866001600160a01b0316816001600160a01b0316036108c057600193505b506001016107b2565b50811561094857604051639700320360e01b81526001600160a01b038616906397003203906108fe908d908d906004016127ce565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094191906127f0565b965061096f565b6000806000610957898e6113cc565b92509250925061096983158383611542565b99505050505b8715610981576000806000808b335af1505b5050505050509392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146109dd576040516308e3edd160e41b815260040160405180910390fd5b60006109f5600080516020612c6c8339815191525490565b14610a135760405163d4d496e560e01b815260040160405180910390fd5b610a2984600080516020612c6c83398151915255565b6001600160a01b03831615610ab8576000836001600160a01b03168383604051610a54929190612809565b600060405180830381855af49150503d8060008114610a8f576040519150601f19603f3d011682016040523d82523d6000602084013e610a94565b606091505b5050905080610ab657604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b6060600080823682610ad46101008901896125cf565b9092509050610ae7600660008385612615565b610af091612819565b60d01c9450610b03600c60068385612615565b610b0c91612819565b60d01c9350610b1e81600c8185612615565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610b9a91508a018a61284f565b6001600160a01b0316815260200188602001358152602001888060400190610bc291906125cf565b604051610bd0929190612809565b6040519081900390208152602001610beb60608a018a6125cf565b604051610bf9929190612809565b60405180910390208152602001610c0f8961157a565b6001600160801b03168152602001610c2689611590565b6001600160801b031681526020018860a001358152602001610c47896115a5565b6001600160801b03168152602001610c5e896115b4565b6001600160801b03168152602001610c7960e08a018a6125cf565b604051610c87929190612809565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610cd3611373565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b6000818051906020012083604051602001610d40929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b0316604051602001610d7b92919061286c565b60405160208183030381529060405280519060200120604051602001610dd394939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610e2a98909796910161288e565b604051602081830303815290604052805190602001209050919050565b600081600881901b6001600160f81b03198216600160f81b03610e6d5760019250610ea9565b6001600160f81b03198216610e855760019250610ea9565b6001600160f81b031980831603610e9f5760019250610ea9565b5060009392505050565b828015610ebe57506001600160f81b03198116155b15610eca575050919050565b828015610ee457506001600160f81b03198116600160f81b145b15610e9f575050919050565b60405163610b592560e01b81526001600160a01b038d166004820152309063610b592590602401600060405180830381600087803b158015610f3157600080fd5b505af1158015610f45573d6000803e3d6000fd5b505060405163f08a032360e01b81526001600160a01b038f16600482015230925063f08a03239150602401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b50505050306001600160a01b031663540fb4f98c8c8c8c8c8c8c8c60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018e8e8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8d166020909101526040516001600160e01b031960e08c901b16815261105c9998979695949392919060040161290b565b600060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b50505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110e557604051632039d3c960e01b815260040160405180910390fd5b6110f2602082018261284f565b600080546001600160a01b0319166001600160a01b039283161790557f000000000000000000000000000000000000000000000000000000000000000016611140608083016060840161284f565b6001600160a01b03161461116757604051633007073760e01b815260040160405180910390fd5b6302b994c760e31b61117c60808301836125cf565b61118b91600491600091612615565b6111949161263f565b6001600160e01b031916146111bc57604051633007073760e01b815260040160405180910390fd5b3063b63e800d6111cf6020840184612980565b60408501356111e4608087016060880161284f565b6111f160808801886125cf565b61120160c08a0160a08b0161284f565b60008060006040518b63ffffffff1660e01b815260040161122b9a999897969594939291906129c9565b600060405180830381600087803b15801561124557600080fd5b505af1158015611259573d6000803e3d6000fd5b50506000600080516020612c6c83398151915255506112759050565b60008061128860c0840160a0850161284f565b6001600160a01b031661129e60e08501856125cf565b306040516020016112b193929190612a80565b60408051601f19818403018152908290526112cb916126bc565b6000604051808303816000865af19150503d8060008114611308576040519150601f19603f3d011682016040523d82523d6000602084013e61130d565b606091505b50915091508161131f57805160208201fd5b505050565b60006001820361133657506001919050565b6002820361134657506001919050565b6003820361135657506001919050565b6004820361136657506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60008060006060808660a001516001600160a01b03166355d559f4877f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611426929190612aa1565b600060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261146b9190810190612b2e565b8351602085012060408c01519298509296509294509192509060009061149490839085906115c9565b905061149f816118c1565b60208901516114ad816118c1565b6114b6816118cd565b80516000805b8281101561152e5760006114f28583815181106114db576114db6126d8565b6020026020010151876118d690919063ffffffff16565b5090508015611525578261150581612bcc565b9350508d6040015183106115255760019b5050505050505050505061153b565b506001016114bc565b5060009950505050505050505b9250925092565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561156a57600061156d565b60015b60ff161717949350505050565b600061158a826080013560801c90565b92915050565b60006001600160801b0360808301351661158a565b600060c082013560801c61158a565b60006001600160801b0360c08301351661158a565b606060006115d8836041612be5565b8451909150836001600160401b038111156115f5576115f5611d86565b60405190808252806020026020018201604052801561161e578160200160208202803683370190505b5092508181101561164257604051638baa579f60e01b815260040160405180910390fd5b60005b848110156118b7576000806000806116758a86604102016020810151604082015160609092015160001a92909190565b9250925092508260ff16600003611816579092508290611696896041612be5565b8110156116cc576040516338a245ff60e11b81526004810182905260006024820181905260448201526064015b60405180910390fd5b856116d8826020612bfc565b1115611708576040516338a245ff60e11b81526004810182905260006024820152604481018790526064016116c3565b6020818b018101519087908290611720908590612bfc565b61172a9190612bfc565b111561175a576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016116c3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b81526004016117a4929190612c0f565b602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190612c28565b6001600160e01b0319161461180f578060405163605d348960e01b81526004016116c391906121c2565b505061187c565b601e8360ff16111561186d576118666118548c6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b61185f600486612c52565b84846118f9565b935061187c565b6118798b8484846118f9565b93505b8388868151811061188f5761188f6126d8565b6001600160a01b03909216602092830291909101909101525050600190920191506116459050565b5050509392505050565b6118ca81611937565b50565b6118ca8161198c565b6000806118ee84846001600160a01b031660006119d5565b909590945092505050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b8051600082528060051b82016020601f198185015b8201838111611984578051828201805182811161196b5750505061194c565b5b818601528301805182811161196c575084015261194c565b505050915250565b60028151106118ca576020810160408201600183510160051b83015b81518351146119bc57602083019250815183525b6020820191508082036119a857505081900360051c9052565b60008060001960018651600087870197505b81830160011c94508460051b8901518701905087811482841117611a2157808811611a165783850191506119e7565b6001850192506119e7565b84151597148716989290930190950295509350505050565b6001600160a01b03811681146118ca57600080fd5b803561136e81611a39565b60008083601f840112611a6b57600080fd5b5081356001600160401b03811115611a8257600080fd5b6020830191508360208260051b8501011115611a9d57600080fd5b9250929050565b803560ff8116811461136e57600080fd5b60008060008060008060008060008060c08b8d031215611ad457600080fd5b611add8b611a4e565b995060208b01356001600160401b03811115611af857600080fd5b611b048d828e01611a59565b909a5098505060408b01356001600160401b03811115611b2357600080fd5b611b2f8d828e01611a59565b90985096505060608b01356001600160401b03811115611b4e57600080fd5b611b5a8d828e01611a59565b90965094505060808b01356001600160401b03811115611b7957600080fd5b611b858d828e01611a59565b9094509250611b98905060a08c01611aa4565b90509295989b9194979a5092959850565b60006101208284031215611bbc57600080fd5b50919050565b600080600060608486031215611bd757600080fd5b83356001600160401b03811115611bed57600080fd5b611bf986828701611ba9565b9660208601359650604090950135949350505050565b60008060008060608587031215611c2557600080fd5b843593506020850135611c3781611a39565b925060408501356001600160401b03811115611c5257600080fd5b8501601f81018713611c6357600080fd5b80356001600160401b03811115611c7957600080fd5b876020828401011115611c8b57600080fd5b949793965060200194505050565b60008060408385031215611cac57600080fd5b82356001600160401b03811115611cc257600080fd5b611cce85828601611ba9565b9250506020830135611cdf81611a39565b809150509250929050565b60005b83811015611d05578181015183820152602001611ced565b50506000910152565b60008151808452611d26816020860160208601611cea565b601f01601f19169290920160200192915050565b608081526000611d4d6080830187611d0e565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152611d7b8185611d0e565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611dbe57611dbe611d86565b60405290565b60405161010081016001600160401b0381118282101715611dbe57611dbe611d86565b604051601f8201601f191681016001600160401b0381118282101715611e0f57611e0f611d86565b604052919050565b60006001600160401b03821115611e3057611e30611d86565b50601f01601f191660200190565b600082601f830112611e4f57600080fd5b8135611e62611e5d82611e17565b611de7565b818152846020838601011115611e7757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611eac57600080fd5b8535611eb781611a39565b94506020860135611ec781611a39565b935060408601356001600160401b03811115611ee257600080fd5b611eee88828901611e3e565b9350506060860135915060808601356001600160401b03811115611f1157600080fd5b611f1d88828901611e3e565b9150509295509295909350565b60006001600160401b03821115611f4357611f43611d86565b5060051b60200190565b600082601f830112611f5e57600080fd5b8135611f6c611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611f8e57600080fd5b602085015b83811015611fb4578035611fa681611a39565b835260209283019201611f93565b5095945050505050565b600082601f830112611fcf57600080fd5b8135611fdd611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611fff57600080fd5b602085015b83811015611fb45780356001600160401b0381111561202257600080fd5b86016040818903601f1901121561203857600080fd5b612040611d9c565b602082013561204e81611a39565b815260408201356001600160401b0381111561206957600080fd5b6120788a602083860101611e3e565b6020830152508085525050602083019250602081019050612004565b6000602082840312156120a657600080fd5b81356001600160401b038111156120bc57600080fd5b820161010081850312156120cf57600080fd5b6120d7611dc4565b6120e082611a4e565b815260208201356001600160401b038111156120fb57600080fd5b61210786828501611f4d565b6020830152506040828101359082015261212360608301611a4e565b606082015260808201356001600160401b0381111561214157600080fd5b61214d86828501611e3e565b60808301525061215f60a08301611a4e565b60a082015260c08201356001600160401b0381111561217d57600080fd5b61218986828501611fbe565b60c08301525060e08201356001600160401b038111156121a857600080fd5b6121b486828501611e3e565b60e083015250949350505050565b6020815260006121d56020830184611d0e565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060008060008060008060008060008060e08d8f03121561221757600080fd5b6122208d611a4e565b9b506001600160401b0360208e0135111561223a57600080fd5b61224a8e60208f01358f01611a59565b909b5099506001600160401b0360408e0135111561226757600080fd5b6122778e60408f01358f01611a59565b90995097506001600160401b0360608e0135111561229457600080fd5b6122a48e60608f01358f01611a59565b90975095506001600160401b0360808e013511156122c157600080fd5b6122d18e60808f01358f01611a59565b90955093506001600160401b0360a08e013511156122ee57600080fd5b6122fe8e60a08f01358f01611a59565b909350915061230f60c08e01611aa4565b90509295989b509295989b509295989b565b60006020828403121561233357600080fd5b81356001600160401b0381111561234957600080fd5b820161010081850312156121d557600080fd5b600082825180855260208501945060208160051b8301016020850160005b838110156123cc57848303601f19018852815180516001600160a01b031684526020908101516040918501829052906123b590850182611d0e565b6020998a019990945092909201915060010161237a565b50909695505050505050565b6000808335601e198436030181126123ef57600080fd5b83016020810192503590506001600160401b0381111561240e57600080fd5b803603821315611a9d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208501945060208460051b8201018360005b868110156123cc57838303601f19018852813536879003603e1901811261248557600080fd5b8601803561249281611a39565b6001600160a01b031684526124aa60208201826123d8565b9150604060208601526124c160408601838361241d565b60209a8b019a9095509390930192505060010161245f565b600081518084526020840193506020830160005b828110156125145781516001600160a01b03168652602095860195909101906001016124ed565b5093949350505050565b60018060a01b038151168252600060208201516060602085015261254560608501826124d9565b60409384015160ff16949093019390935250919050565b60a08152600061256f60a083018b61235c565b8281036020840152612582818a8c612446565b9050828103604084015261259781888a612446565b905082810360608401526125ac818688612446565b905082810360808401526125c0818561251e565b9b9a5050505050505050505050565b6000808335601e198436030181126125e657600080fd5b8301803591506001600160401b0382111561260057600080fd5b602001915036819003821315611a9d57600080fd5b6000808585111561262557600080fd5b8386111561263257600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015612670576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6020815260006121d5602083018461235c565b6000835161269c818460208801611cea565b60609390931b6001600160601b0319169190920190815260140192915050565b600082516126ce818460208701611cea565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b612708826126fb83611a4e565b6001600160a01b03169052565b60208181013590830152600061272160408301836123d8565b61012060408601526127386101208601828461241d565b91505061274860608401846123d8565b858303606087015261275b83828461241d565b6080868101359088015260a0808701359088015260c08087013590880152925061278b91505060e08401846123d8565b85830360e087015261279e83828461241d565b925050506127b06101008401846123d8565b8583036101008701526127c483828461241d565b9695505050505050565b6040815260006127e160408301856126ee565b90508260208301529392505050565b60006020828403121561280257600080fd5b5051919050565b8183823760009101908152919050565b80356001600160d01b03198116906006841015612670576001600160d01b031960069490940360031b84901b1690921692915050565b60006020828403121561286157600080fd5b81356121d581611a39565b6000835161287e818460208801611cea565b9190910191825250602001919050565b6001600160a01b038816815260e0602082018190526000906128b2908301896124d9565b604083018890526001600160a01b038716606084015282810360808401526128da8187611d0e565b6001600160a01b03861660a085015283810360c085015290506128fd818561235c565b9a9950505050505050505050565b60a08152600061291f60a083018b8d612446565b8281036020840152612932818a8c612446565b9050828103604084015261294781888a612446565b9050828103606084015261295c818688612446565b90508281036080840152612970818561251e565b9c9b505050505050505050505050565b6000808335601e1984360301811261299757600080fd5b8301803591506001600160401b038211156129b157600080fd5b6020019150600581901b3603821315611a9d57600080fd5b61010080825281018a905260008b6101208301825b8d811015612a0e5782356129f181611a39565b6001600160a01b03168252602092830192909101906001016129de565b508b6020850152612a2a604085018c6001600160a01b03169052565b8381036060850152612a3d818a8c61241d565b92505050612a5660808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c08301526125c060e08301846001600160a01b03169052565b8284823760609190911b6001600160601b0319169101908152601401919050565b604081526000612ab460408301856126ee565b905060018060a01b03831660208301529392505050565b600082601f830112612adc57600080fd5b8151612aea611e5d82611e17565b818152846020838601011115612aff57600080fd5b612b10826020830160208701611cea565b949350505050565b805165ffffffffffff8116811461136e57600080fd5b60008060008060808587031215612b4457600080fd5b84516001600160401b03811115612b5a57600080fd5b612b6687828801612acb565b945050612b7560208601612b18565b9250612b8360408601612b18565b915060608501516001600160401b03811115612b9e57600080fd5b612baa87828801612acb565b91505092959194509250565b634e487b7160e01b600052601160045260246000fd5b600060018201612bde57612bde612bb6565b5060010190565b808202811582820484141761158a5761158a612bb6565b8082018082111561158a5761158a612bb6565b828152604060208201526000612b106040830184611d0e565b600060208284031215612c3a57600080fd5b81516001600160e01b0319811681146121d557600080fd5b60ff828116828216039081111561158a5761158a612bb656fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220b8570cdd622e1fbbf9414238ac24ec7629c0bf87595f396efe2bec7415eff9ce64736f6c634300081a0033", + "sourceMap": "1487:15193:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;1487:15193;;;;;2298:34;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;196:32:153;;;178:51;;166:2;151:18;2298:34:114;;;;;;;;2247:45;;;;;;;;;;;;;;;3486:655;;;;;;;;;;-1:-1:-1;3486:655:114;;;;;:::i;:::-;;:::i;7367:3339::-;;;;;;;;;;-1:-1:-1;7367:3339:114;;;;;:::i;:::-;;:::i;:::-;;;4073:25:153;;;4061:2;4046:18;7367:3339:114;3927:177:153;14600:210:114;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;14773:21:114;14600:210;;5403:552;;;;;;;;;;-1:-1:-1;5403:552:114;;;;;:::i;:::-;;:::i;976:3275:120:-;;;;;;;;;;-1:-1:-1;976:3275:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;15307:892:114:-;;;;;;;;;;-1:-1:-1;15307:892:114;;;;;:::i;:::-;;:::i;16312:366::-;;;;;;;;;;-1:-1:-1;16312:366:114;;;;;:::i;:::-;;:::i;541:135:122:-;;;;;;;;;;-1:-1:-1;634:35:122;;;;;;;;;;;;;;;;541:135;;;;634:35;541:135;:::i;682:712::-;;;;;;;;;;-1:-1:-1;682:712:122;;;;;:::i;:::-;;:::i;:::-;;;13712:14:153;;13705:22;13687:41;;13675:2;13660:18;682:712:122;13547:187:153;4259:719:114;;;;;;;;;;-1:-1:-1;4259:719:114;;;;;:::i;:::-;;:::i;12839:1710::-;;;;;;;;;;-1:-1:-1;12839:1710:114;;;;;:::i;:::-;;:::i;1400:373:122:-;;;;;;;;;;-1:-1:-1;1400:373:122;;;;;:::i;:::-;;:::i;4257:150:120:-;;;;;;;;;;;;;:::i;3486:655:114:-;2883:10;2905:4;2883:27;2879:58;;2919:18;;-1:-1:-1;;;2919:18:114;;;;;;;;;;;2879:58;3780:43:::1;::::0;-1:-1:-1;;;3780:43:114;;-1:-1:-1;;;;;196:32:153;;3780:43:114::1;::::0;::::1;178:51:153::0;3794:4:114::1;::::0;3780:33:::1;::::0;151:18:153;;3780:43:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3902:19:114::1;::::0;;3919:1:::1;3902:19:::0;;;::::1;::::0;::::1;::::0;;;3851:4:::1;::::0;-1:-1:-1;3833:42:114::1;::::0;-1:-1:-1;3902:19:114;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;3902:19:114::1;;;;;;;;;;;;;;;;3946:9;;3980;;4010:5;;4043:80;;;;;;;;4068:8;-1:-1:-1::0;;;;;4043:80:114::1;;;;;4089:9;;4043:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;4043:80:114;;;-1:-1:-1;4043:80:114::1;::::0;::::1;;::::0;;::::1;::::0;3833:301:::1;::::0;-1:-1:-1;;;;;;3833:301:114::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3486:655:::0;;;;;;;;;;:::o;7367:3339::-;7623:22;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;3106:10:::1;-1:-1:-1::0;;;;;3120:20:114::1;3106:34;;3102:66;;3149:19;;-1:-1:-1::0;;;3149:19:114::1;;;;;;;;;;;3102:66;7699:15:::2;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;:19;::::0;7716:1:::2;::::0;7699:19:::2;::::0;::::2;:::i;:::-;7692:27;::::0;::::2;:::i;:::-;-1:-1:-1::0;;;;;;7665:54:114::2;-1:-1:-1::0;;;7665:54:114::2;7661:118;;7742:26;;-1:-1:-1::0;;;7742:26:114::2;;;;;;;;;;;7661:118;7789:24;7827:15;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;:19;::::0;7843:1:::2;::::0;7827:19;;::::2;:::i;:::-;7816:43;;;;;;;:::i;:::-;7789:70;;7989:13;-1:-1:-1::0;;;;;;;;;;;14773:21:114;;14600:210;7989:13:::2;7971:14;7976:8;7971:4;:14::i;:::-;:31;7967:61;;8011:17;;-1:-1:-1::0;;;8011:17:114::2;;;;;;;;;;;7967:61;8084:17;8111:13:::0;8127:6:::2;:12;;;8111:28;;8249:5;8245:2;8241:14;8228:27;;8620:12;8645:8;:17;;;-1:-1:-1::0;;;;;8637:31:114::2;8775:8;:19;;;8716:80;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;8716:80:114;;::::2;::::0;;;;;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;8716:80:114::2;-1:-1:-1::0;;;8716:80:114::2;::::0;;8682:196;;::::2;::::0;8716:80;8828:10:::2;::::0;8682:196:::2;;:::i;:::-;;::::0;;-1:-1:-1;;8682:196:114;;::::2;::::0;;;;;;;8637:251:::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8619:269;;;8951:7;8946:47;;8967:26;;-1:-1:-1::0;;;8967:26:114::2;;;;;;;;;;;8946:47;9297:19;::::0;::::2;::::0;:26;9231:29:::2;::::0;;9333:361:::2;9353:16;9349:1;:20;9333:361;;;9390:23;9416:8;:19;;;9436:1;9416:22;;;;;;;;:::i;:::-;;;;;;;:29;;;9390:55;;9470:15;-1:-1:-1::0;;;;;9459:37:114::2;;9497:8;:19;;;9517:1;9497:22;;;;;;;;:::i;:::-;;;;;;;:31;;;9459:70;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;9548:55:114::2;::::0;;276:1:76::2;24290:25:153::0;;-1:-1:-1;;;;;24351:32:153;;24346:2;24331:18;;24324:60;9548:55:114::2;::::0;-1:-1:-1;24263:18:153;;-1:-1:-1;9548:55:114::2;;;;;;;9641:9;-1:-1:-1::0;;;;;9622:28:114::2;:15;-1:-1:-1::0;;;;;9622:28:114::2;::::0;9618:65:::2;;9679:4;9652:31;;9618:65;-1:-1:-1::0;9371:3:114::2;;9333:361;;;;9825:24;9821:602;;;9946:56;::::0;-1:-1:-1;;;9946:56:114;;-1:-1:-1;;;;;9946:36:114;::::2;::::0;::::2;::::0;:56:::2;::::0;9983:6;;9991:10;;9946:56:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9929:73;;9821:602;;;10119:13;10134:17:::0;10153::::2;10190:37;10210:8;10220:6;10190:19;:37::i;:::-;10118:109;;;;;;10259:153;10309:8;10308:9;10347:10;10387;10259:19;:153::i;:::-;10242:170;;10019:404;;;9821:602;10475:23:::0;;10471:229:::2;;10673:1;10670::::0;10667::::2;10664::::0;10643:19:::2;10633:8;10626:5;10621:54;10617:59;10471:229;7651:3055;;;;;;7367:3339:::0;;;;;:::o;5403:552::-;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;5593:1:::1;5568:13;-1:-1:-1::0;;;;;;;;;;;14773:21:114;;14600:210;5568:13:::1;:27;5564:77;;5604:37;;-1:-1:-1::0;;;5604:37:114::1;;;;;;;;;;;5564:77;5679:22;5692:8;-1:-1:-1::0;;;;;;;;;;;15010:29:114;14859:196;5679:22:::1;-1:-1:-1::0;;;;;5803:16:114;::::1;::::0;5799:150:::1;;5836:12;5853:2;-1:-1:-1::0;;;;;5853:15:114::1;5869:7;;5853:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5835:42;;;5896:7;5891:47;;5912:26;;-1:-1:-1::0;;;5912:26:114::1;;;;;;;;;;;5891:47;5821:128;5799:150;5403:552:::0;;;;:::o;976:3275:120:-;1132:26;1172:17;;1132:26;1480:18;1172:17;1501:16;;;;:6;:16;:::i;:::-;1480:37;;-1:-1:-1;1480:37:120;-1:-1:-1;1558:8:120;1564:1;1562;1480:37;;1558:8;:::i;:::-;1551:16;;;:::i;:::-;1544:24;;;-1:-1:-1;1609:9:120;1615:2;1613:1;1609:3;;:9;:::i;:::-;1602:17;;;:::i;:::-;1595:25;;;-1:-1:-1;1647:8:120;:3;1651:2;1647:3;;:8;:::i;:::-;1634:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2706:830:120;;;;;;;;;193:66:128;2706:830:120;;1634:21;;-1:-1:-1;1634:21:120;-1:-1:-1;2706:830:120;;-1:-1:-1;;2706:830:120;;;;;-1:-1:-1;2794:13:120;;-1:-1:-1;2794:13:120;;:6;:13;:::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;2832:6;:12;;;2706:830;;;;2886:6;:15;;;;;;;;:::i;:::-;2876:26;;;;;;;:::i;:::-;;;;;;;;;2706:830;;;;2944:15;;;;:6;:15;:::i;:::-;2934:26;;;;;;;:::i;:::-;;;;;;;;2706:830;;;;3008:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3084:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3150:6;:25;;;2706:830;;;;3223:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3299:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3377:23;;;;:6;:23;:::i;:::-;3367:34;;;;;;;:::i;:::-;;;;;;;;;;;2706:830;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2706:830:120;;;;;;;4089:3;4064:29;;2663:873;;-1:-1:-1;;;;;;;4198:17:120;:15;:17::i;:::-;4153:81;;-1:-1:-1;;;;;;27618:26:153;;;4153:81:120;;;27606:39:153;27674:26;;;;27661:11;;;27654:47;27717:11;;;27710:27;27753:12;;;27746:28;;;27790:12;;4153:81:120;;;;;;;;;;;;4121:113;;2185:2060;;976:3275;;;;;;;:::o;15307:892:114:-;15547:17;15624:18;15614:29;;;;;;15645:4;15597:53;;;;;;;;27970:19:153;;;28014:2;28005:12;;27998:28;28051:2;28042:12;;27813:247;15597:53:114;;;;;;;;;;;;;15587:64;;;;;;15580:71;;15837:4;15830:12;;15880:16;15927:4;16021:12;16059:9;-1:-1:-1;;;;;16035:36:114;16004:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15961:141;;;;;;15784:344;;;;;;;;;;-1:-1:-1;;;;;;28676:26:153;;;;28664:39;;28740:2;28736:15;;;;-1:-1:-1;;;;;;28732:53:153;28728:1;28719:11;;28712:74;28811:2;28802:12;;28795:28;28848:2;28839:12;;28832:28;28885:2;28876:12;;28453:441;15784:344:114;;;;-1:-1:-1;;15784:344:114;;;;;;;;;15749:401;;15784:344;15749:401;;;;;15307:892;-1:-1:-1;;;;;;15307:892:114:o;16312:366::-;16446:14;;16478:11;;;;;16507:14;;;;;16539:12;;;;16569:14;;;;16601:13;;;;16632:15;;;;16418:243;;16369:7;;16418:243;;16446:14;;16478:11;16632:15;16418:243;;:::i;:::-;;;;;;;;;;;;;16395:276;;;;;;16388:283;;16312:366;;;:::o;682:712:122:-;758:14;929:11;969:1;965:19;;;-1:-1:-1;;;;;;5542:40:131;;-1:-1:-1;;;5542:40:131;1003:209:122;;1047:4;1035:16;;1003:209;;;-1:-1:-1;;;;;;5542:40:131;;1066:146:122;;1111:4;1099:16;;1066:146;;;-1:-1:-1;;;;;;5542:40:131;;;;1130:82:122;;1181:4;1169:16;;1130:82;;;-1:-1:-1;1207:5:122;;682:712;-1:-1:-1;;;682:712:122:o;1130:82::-;1227:9;:41;;;;-1:-1:-1;;;;;;;5542:40:131;;;1240:28:122;1223:164;;;1270:16;;682:712;;;:::o;1223:164::-;1305:9;:37;;;;-1:-1:-1;;;;;;;5542:40:131;;-1:-1:-1;;;5542:40:131;1318:24:122;1301:86;;;1344:16;;682:712;;;:::o;4259:719:114:-;4567:43;;-1:-1:-1;;;4567:43:114;;-1:-1:-1;;;;;196:32:153;;4567:43:114;;;178:51:153;4581:4:114;;4567:33;;151:18:153;;4567:43:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4620:49:114;;-1:-1:-1;;;4620:49:114;;-1:-1:-1;;;;;196:32:153;;4620:49:114;;;178:51:153;4634:4:114;;-1:-1:-1;4620:39:114;;-1:-1:-1;151:18:153;;4620:49:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4697:4;-1:-1:-1;;;;;4679:42:114;;4748:10;;4783:9;;4817;;4847:5;;4880:80;;;;;;;;4905:8;-1:-1:-1;;;;;4880:80:114;;;;;4926:9;;4880:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4880:80:114;;;-1:-1:-1;4880:80:114;;;;;;;;4679:292;;-1:-1:-1;;;;;;4679:292:114;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4259:719;;;;;;;;;;;;:::o;12839:1710::-;3106:10;-1:-1:-1;;;;;3120:20:114;3106:34;;3102:66;;3149:19;;-1:-1:-1;;;3149:19:114;;;;;;;;;;;3102:66;13085:18:::1;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;13061:21;:42:::0;;-1:-1:-1;;;;;;13061:42:114::1;-1:-1:-1::0;;;;;13061:42:114;;::::1;;::::0;;13182:4:::1;13162:24;:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;13162:24:114::1;;13158:51;;13195:14;;-1:-1:-1::0;;;13195:14:114::1;;;;;;;;;;;13158:51;-1:-1:-1::0;;;13294:18:114::1;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;:22;::::0;13314:1:::1;::::0;13294:22:::1;::::0;::::1;:::i;:::-;13287:30;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;;13287:60:114::1;;13283:87;;13356:14;;-1:-1:-1::0;;;13356:14:114::1;;;;;;;;;;;13283:87;13423:4;13409:26;13459:15;;::::0;::::1;:8:::0;:15:::1;:::i;:::-;13500:18;::::0;::::1;;13536:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;13572:18;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;13629:17;::::0;;;::::1;::::0;::::1;;:::i;:::-;13683:1;13708::::0;13756::::1;13409:361;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;13820:1:114::1;-1:-1:-1::0;;;;;;;;;;;15010:29:114;-1:-1:-1;13807:15:114::1;::::0;-1:-1:-1;14859:196:114;13807:15:::1;14052:12;::::0;14101:17:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;14093:31:114::1;14172:17;;::::0;::::1;:8:::0;:17:::1;:::i;:::-;14275:4;14138:182;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;14138:182:114;;::::1;::::0;;;;;;;14093:237:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14051:279;;;;14345:7;14340:203;;14507:10;14501:17;14494:4;14482:10;14478:21;14471:48;14340:203;12919:1630;;12839:1710:::0;:::o;1400:373:122:-;1469:4;276:1:76;1489:12:122;:37;1485:281;;-1:-1:-1;1535:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1485:281::-;319:1:76;1558:12:122;:36;1554:212;;-1:-1:-1;1603:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1554:212::-;362:1:76;1626:12:122;:36;1622:144;;-1:-1:-1;1671:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1622:144::-;401:1:76;1694:12:122;:32;1690:76;;-1:-1:-1;1735:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;-1:-1:-1;1761:5:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;1400:373;;;:::o;4257:150:120:-;4341:58;;;420:66;4341:58;;;34265:25:153;4379:13:120;34306:18:153;;;34299:34;;;;4394:4:120;34349:18:153;;;34342:60;4305:7:120;;34238:18:153;;4341:58:120;;;;;;;;;;;;4331:69;;;;;;4324:76;;4257:150;:::o;10712:1353:114:-;10882:13;10897:17;10916;10949:26;10985:23;11146:17;:26;;;-1:-1:-1;;;;;11138:45:114;;11184:6;11192:20;11138:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11138:75:114;;;;;;;;;;;;:::i;:::-;11239:24;;;;;;11338:27;;;;11072:141;;-1:-1:-1;11072:141:114;;-1:-1:-1;11072:141:114;;-1:-1:-1;11072:141:114;;-1:-1:-1;11239:24:114;11223:13;;11301:65;;11239:24;;11072:141;;11301:24;:65::i;:::-;11274:92;;11376:23;:7;:21;:23::i;:::-;11436:24;;;;11551:22;11436:24;11551:20;:22::i;:::-;11583:23;:6;:21;:23::i;:::-;11640:13;;11617:20;;11691:320;11711:12;11707:1;:16;11691:320;;;11745:10;11760:31;11781:6;11788:1;11781:9;;;;;;;;:::i;:::-;;;;;;;11760:7;:20;;:31;;;;:::i;:::-;11744:47;;;11809:5;11805:196;;;11834:11;;;;:::i;:::-;;;;11880:17;:27;;;11867:9;:40;11863:124;;11939:4;11931:37;;;;;;;;;;;;;11863:124;-1:-1:-1;11725:3:114;;11691:320;;;;12028:5;12020:38;;;;;;;;;10712:1353;;;;;;:::o;2448:248:9:-;2559:7;2683:8;2667:10;2659:19;;:33;;2643:3;2628:10;2620:19;;:26;;2590:9;:17;;2606:1;2590:17;;;2602:1;2590:17;2589:58;;;:104;;2448:248;-1:-1:-1;;;;2448:248:9:o;3410:171:13:-;3510:7;3536:38;3550:6;:23;;;2887:3;2868:22;;2780:117;3536:38;3529:45;3410:171;-1:-1:-1;;3410:171:13:o;3587:162::-;3679:7;-1:-1:-1;;;;;3718:23:13;;;;3039:31;3705:37;2959:118;3083:162;3183:7;3223:14;;;;2887:3;2868:22;3209:29;2780:117;3251:153;3343:7;-1:-1:-1;;;;;3382:14:13;;;;3039:31;3369:28;2959:118;904:3530:27;1080:33;1129:31;1163:23;:18;1184:2;1163:23;:::i;:::-;1223:17;;1129:57;;-1:-1:-1;1283:18:27;-1:-1:-1;;;;;1269:33:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:33:27;;1250:52;;1335:23;1316:16;:42;1312:73;;;1367:18;;-1:-1:-1;;;1367:18:27;;;;;;;;;;;1312:73;1401:9;1396:3032;1416:18;1412:1;:22;1396:3032;;;1498:15;1528:7;1537:9;1548;1561:50;1590:10;1607:1;5504:4;5500:14;5538:40;5572:4;5538:40;;5532:47;5637:4;5603:40;;5597:47;5710:4;5676:40;;;5670:47;5313:7;5662:56;;5532:47;;5597;5182:552;1561:50;1527:84;;;;;;1630:1;:6;;1635:1;1630:6;1626:2749;;1876:1;;-1:-1:-1;1876:1:27;;2180:23;2185:18;2180:2;:23;:::i;:::-;2167:36;;2163:136;;;2234:46;;-1:-1:-1;;;2234:46:27;;;;;36850:25:153;;;2263:10:27;36891:18:153;;;36884:34;;;36934:18;;;36927:34;36823:18;;2234:46:27;;;;;;;;2163:136;2339:16;2321:15;2329:1;2334:2;2321:15;:::i;:::-;:34;2317:149;;;2386:61;;-1:-1:-1;;;2386:61:27;;;;;36850:25:153;;;2415:10:27;36891:18:153;;;36884:34;36934:18;;;36927:34;;;36823:18;;2386:61:27;36632:335:153;2317:149:27;2823:4;2803:18;;;2799:29;;2793:36;;2909:16;;2793:36;;2868:15;;2803:18;;2868:15;:::i;:::-;:38;;;;:::i;:::-;:57;2864:237;;;2956:126;;-1:-1:-1;;;2956:126:27;;;;;36850:25:153;;;36891:18;;;36884:34;;;36934:18;;;36927:34;;;36823:18;;2956:126:27;36632:335:153;2864:237:27;3154:30;3504:4;3500:1;3488:10;3484:18;3480:29;3459:50;;168:10;3671:19;;-1:-1:-1;;;;;3569:121:27;;3589:7;-1:-1:-1;;;;;3569:45:27;;3615:8;3625:17;3569:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3569:121:27;;3544:213;;3739:17;3716:41;;-1:-1:-1;;;3716:41:27;;;;;;;;:::i;3544:213::-;1638:2134;;1626:2749;;;3786:2;3782:1;:6;;;3778:597;;;4073:184;4118:38;4147:8;15824:4:105;15817:18;15904:50;15725:14;15891:64;16007:4;16001;15991:21;;15656:409;4118:38:27;4181:5;4185:1;4181;:5;:::i;:::-;4211:1;4237;4073:16;:184::i;:::-;4063:194;;3778:597;;;4306:54;4331:8;4344:1;4350;4356;4306:16;:54::i;:::-;4296:64;;3778:597;4410:7;4388:16;4405:1;4388:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4388:29:27;;;:19;;;;;;;;;;;:29;-1:-1:-1;;1436:3:27;;;;;-1:-1:-1;1396:3032:27;;-1:-1:-1;1396:3032:27;;;1119:3315;;904:3530;;;;;:::o;2083:100:107:-;2150:26;2173:1;2150:13;:26::i;:::-;2083:100;:::o;10119:102::-;10187:27;10211:1;10187:14;:27::i;11107:225::-;11212:10;;11270:55;11293:1;11313:6;-1:-1:-1;;;;;11297:24:107;11323:1;11270:13;:55::i;:::-;11253:72;;;;-1:-1:-1;11107:225:107;-1:-1:-1;;;11107:225:107:o;14080:1040:105:-;14192:14;14303:4;14297:11;14368:4;14362;14355:18;14406:4;14403:1;14399:12;14393:4;14386:26;14438:1;14432:4;14425:15;14466:1;14460:4;14453:15;14789:4;14743;14699;14654;14604:1;14534:5;14502:328;14481:363;14870:1;14864:4;14857:15;15022:16;15016:4;15012:27;15006:34;14996:44;;15066:1;15060:4;15053:15;;14080:1040;;;;;;:::o;776:1034:107:-;924:1;918:8;967:1;964;957:12;1054:1;1051;1047:9;1044:1;1040:17;1093:4;1123;1119:9;1163:1;1160;1156:9;1141:598;1196:9;;1225:8;;;1236:5;1222:21;1275:1;1269:8;1318:1;1315;1311:9;1389:1;1383:8;1445:1;1442;1439:8;1429:32;;1451:8;;;1141:598;;1429:32;1478:210;1519:9;;;1512:20;1558:9;;1612:8;;1651;;;1478:210;1641:29;-1:-1:-1;1712:9:107;;1705:20;1141:598;;;-1:-1:-1;;;1752:12:107;;-1:-1:-1;776:1034:107:o;9124:722::-;9336:1;9332;9326:8;9323:15;9313:517;;9374:4;9371:1;9367:12;9412:4;9409:1;9405:12;9473:1;9469;9463:8;9459:16;9456:1;9452:24;9449:1;9445:32;9494:277;9557:1;9551:8;9547:1;9541:8;9538:22;9528:143;;9600:4;9597:1;9593:12;9588:17;;9646:1;9640:8;9637:1;9630:19;9528:143;9704:4;9701:1;9697:12;9692:17;;9739:3;9736:1;9733:10;9494:277;9730:23;-1:-1:-1;;9805:9:107;;;9802:1;9798:17;9788:28;;9124:722::o;21300:1099::-;21421:10;21433:13;21541:1;21537:6;21565:1;21594;21588:8;21618:1;21660:6;21652;21648:19;21638:29;;21632:453;21716:1;21713;21709:9;21706:1;21702:17;21693:26;;21773:5;21770:1;21766:13;21763:1;21759:21;21753:28;21745:6;21741:41;21736:46;;21821:6;21818:1;21815:13;21811:1;21808;21805:8;21802:27;21832:5;21799:40;21945:1;21937:6;21934:13;21924:112;;21987:1;21980:5;21976:13;21971:18;;21632:453;;21924:112;22069:1;22062:5;22058:13;22053:18;;21632:453;;;22291:13;;22284:21;22253:13;;22370;;;22331;;;;22327:21;;;;-1:-1:-1;21300:1099:107;-1:-1:-1;;;;21300:1099:107:o;557:131:153:-;-1:-1:-1;;;;;632:31:153;;622:42;;612:70;;678:1;675;668:12;693:134;761:20;;790:31;761:20;790:31;:::i;832:386::-;914:8;924:6;978:3;971:4;963:6;959:17;955:27;945:55;;996:1;993;986:12;945:55;-1:-1:-1;1019:20:153;;-1:-1:-1;;;;;1051:30:153;;1048:50;;;1094:1;1091;1084:12;1048:50;1131:4;1123:6;1119:17;1107:29;;1191:3;1184:4;1174:6;1171:1;1167:14;1159:6;1155:27;1151:38;1148:47;1145:67;;;1208:1;1205;1198:12;1145:67;832:386;;;;;:::o;1223:156::-;1289:20;;1349:4;1338:16;;1328:27;;1318:55;;1369:1;1366;1359:12;1384:1746;1687:6;1695;1703;1711;1719;1727;1735;1743;1751;1759;1812:3;1800:9;1791:7;1787:23;1783:33;1780:53;;;1829:1;1826;1819:12;1780:53;1852:29;1871:9;1852:29;:::i;:::-;1842:39;;1932:2;1921:9;1917:18;1904:32;-1:-1:-1;;;;;1951:6:153;1948:30;1945:50;;;1991:1;1988;1981:12;1945:50;2030:89;2111:7;2102:6;2091:9;2087:22;2030:89;:::i;:::-;2138:8;;-1:-1:-1;2004:115:153;-1:-1:-1;;2226:2:153;2211:18;;2198:32;-1:-1:-1;;;;;2242:32:153;;2239:52;;;2287:1;2284;2277:12;2239:52;2326:91;2409:7;2398:8;2387:9;2383:24;2326:91;:::i;:::-;2436:8;;-1:-1:-1;2300:117:153;-1:-1:-1;;2524:2:153;2509:18;;2496:32;-1:-1:-1;;;;;2540:32:153;;2537:52;;;2585:1;2582;2575:12;2537:52;2624:91;2707:7;2696:8;2685:9;2681:24;2624:91;:::i;:::-;2734:8;;-1:-1:-1;2598:117:153;-1:-1:-1;;2822:3:153;2807:19;;2794:33;-1:-1:-1;;;;;2839:32:153;;2836:52;;;2884:1;2881;2874:12;2836:52;2923:91;3006:7;2995:8;2984:9;2980:24;2923:91;:::i;:::-;3033:8;;-1:-1:-1;2897:117:153;-1:-1:-1;3087:37:153;;-1:-1:-1;3119:3:153;3104:19;;3087:37;:::i;:::-;3077:47;;1384:1746;;;;;;;;;;;;;:::o;3135:168::-;3207:5;3252:3;3243:6;3238:3;3234:16;3230:26;3227:46;;;3269:1;3266;3259:12;3227:46;-1:-1:-1;3291:6:153;3135:168;-1:-1:-1;3135:168:153:o;3308:614::-;3424:6;3432;3440;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3549:9;3536:23;-1:-1:-1;;;;;3574:6:153;3571:30;3568:50;;;3614:1;3611;3604:12;3568:50;3637:79;3708:7;3699:6;3688:9;3684:22;3637:79;:::i;:::-;3627:89;3785:2;3770:18;;3757:32;;-1:-1:-1;3886:2:153;3871:18;;;3858:32;;3308:614;-1:-1:-1;;;;3308:614:153:o;4291:841::-;4379:6;4387;4395;4403;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;4517:23;;;-1:-1:-1;4616:2:153;4601:18;;4588:32;4629:33;4588:32;4629:33;:::i;:::-;4681:7;-1:-1:-1;4739:2:153;4724:18;;4711:32;-1:-1:-1;;;;;4755:30:153;;4752:50;;;4798:1;4795;4788:12;4752:50;4821:22;;4874:4;4866:13;;4862:27;-1:-1:-1;4852:55:153;;4903:1;4900;4893:12;4852:55;4943:2;4930:16;-1:-1:-1;;;;;4961:6:153;4958:30;4955:50;;;5001:1;4998;4991:12;4955:50;5046:7;5041:2;5032:6;5028:2;5024:15;5020:24;5017:37;5014:57;;;5067:1;5064;5057:12;5014:57;4291:841;;;;-1:-1:-1;5098:2:153;5090:11;;-1:-1:-1;;;4291:841:153:o;5137:515::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5361:9;5348:23;-1:-1:-1;;;;;5386:6:153;5383:30;5380:50;;;5426:1;5423;5416:12;5380:50;5449:79;5520:7;5511:6;5500:9;5496:22;5449:79;:::i;:::-;5439:89;;;5578:2;5567:9;5563:18;5550:32;5591:31;5616:5;5591:31;:::i;:::-;5641:5;5631:15;;;5137:515;;;;;:::o;5657:250::-;5742:1;5752:113;5766:6;5763:1;5760:13;5752:113;;;5842:11;;;5836:18;5823:11;;;5816:39;5788:2;5781:10;5752:113;;;-1:-1:-1;;5899:1:153;5881:16;;5874:27;5657:250::o;5912:270::-;5953:3;5991:5;5985:12;6018:6;6013:3;6006:19;6034:76;6103:6;6096:4;6091:3;6087:14;6080:4;6073:5;6069:16;6034:76;:::i;:::-;6164:2;6143:15;-1:-1:-1;;6139:29:153;6130:39;;;;6171:4;6126:50;;5912:270;-1:-1:-1;;5912:270:153:o;6187:559::-;6432:3;6421:9;6414:22;6395:4;6459:45;6499:3;6488:9;6484:19;6476:6;6459:45;:::i;:::-;6552:14;6544:6;6540:27;6535:2;6524:9;6520:18;6513:55;6616:14;6608:6;6604:27;6599:2;6588:9;6584:18;6577:55;6680:9;6672:6;6668:22;6663:2;6652:9;6648:18;6641:50;6708:32;6733:6;6725;6708:32;:::i;:::-;6700:40;6187:559;-1:-1:-1;;;;;;;6187:559:153:o;6751:127::-;6812:10;6807:3;6803:20;6800:1;6793:31;6843:4;6840:1;6833:15;6867:4;6864:1;6857:15;6883:257;6955:4;6949:11;;;6987:17;;-1:-1:-1;;;;;7019:34:153;;7055:22;;;7016:62;7013:88;;;7081:18;;:::i;:::-;7117:4;7110:24;6883:257;:::o;7145:255::-;7217:2;7211:9;7259:6;7247:19;;-1:-1:-1;;;;;7281:34:153;;7317:22;;;7278:62;7275:88;;;7343:18;;:::i;7405:275::-;7476:2;7470:9;7541:2;7522:13;;-1:-1:-1;;7518:27:153;7506:40;;-1:-1:-1;;;;;7561:34:153;;7597:22;;;7558:62;7555:88;;;7623:18;;:::i;:::-;7659:2;7652:22;7405:275;;-1:-1:-1;7405:275:153:o;7685:186::-;7733:4;-1:-1:-1;;;;;7758:6:153;7755:30;7752:56;;;7788:18;;:::i;:::-;-1:-1:-1;7854:2:153;7833:15;-1:-1:-1;;7829:29:153;7860:4;7825:40;;7685:186::o;7876:486::-;7918:5;7971:3;7964:4;7956:6;7952:17;7948:27;7938:55;;7989:1;7986;7979:12;7938:55;8029:6;8016:20;8060:52;8076:35;8104:6;8076:35;:::i;:::-;8060:52;:::i;:::-;8137:6;8128:7;8121:23;8191:3;8184:4;8175:6;8167;8163:19;8159:30;8156:39;8153:59;;;8208:1;8205;8198:12;8153:59;8273:6;8266:4;8258:6;8254:17;8247:4;8238:7;8234:18;8221:59;8329:1;8300:20;;;8322:4;8296:31;8289:42;;;;8304:7;7876:486;-1:-1:-1;;;7876:486:153:o;8367:932::-;8480:6;8488;8496;8504;8512;8565:3;8553:9;8544:7;8540:23;8536:33;8533:53;;;8582:1;8579;8572:12;8533:53;8621:9;8608:23;8640:31;8665:5;8640:31;:::i;:::-;8690:5;-1:-1:-1;8747:2:153;8732:18;;8719:32;8760:33;8719:32;8760:33;:::i;:::-;8812:7;-1:-1:-1;8870:2:153;8855:18;;8842:32;-1:-1:-1;;;;;8886:30:153;;8883:50;;;8929:1;8926;8919:12;8883:50;8952:49;8993:7;8984:6;8973:9;8969:22;8952:49;:::i;:::-;8942:59;-1:-1:-1;;9074:2:153;9059:18;;9046:32;;-1:-1:-1;9157:3:153;9142:19;;9129:33;-1:-1:-1;;;;;9174:32:153;;9171:52;;;9219:1;9216;9209:12;9171:52;9242:51;9285:7;9274:8;9263:9;9259:24;9242:51;:::i;:::-;9232:61;;;8367:932;;;;;;;;:::o;9304:183::-;9364:4;-1:-1:-1;;;;;9389:6:153;9386:30;9383:56;;;9419:18;;:::i;:::-;-1:-1:-1;9464:1:153;9460:14;9476:4;9456:25;;9304:183::o;9492:744::-;9546:5;9599:3;9592:4;9584:6;9580:17;9576:27;9566:55;;9617:1;9614;9607:12;9566:55;9657:6;9644:20;9684:64;9700:47;9740:6;9700:47;:::i;9684:64::-;9772:3;9796:6;9791:3;9784:19;9828:4;9823:3;9819:14;9812:21;;9889:4;9879:6;9876:1;9872:14;9864:6;9860:27;9856:38;9842:52;;9917:3;9909:6;9906:15;9903:35;;;9934:1;9931;9924:12;9903:35;9970:4;9962:6;9958:17;9984:221;10000:6;9995:3;9992:15;9984:221;;;10082:3;10069:17;10099:31;10124:5;10099:31;:::i;:::-;10143:18;;10190:4;10181:14;;;;10017;9984:221;;;-1:-1:-1;10223:7:153;9492:744;-1:-1:-1;;;;;9492:744:153:o;10241:1296::-;10305:5;10358:3;10351:4;10343:6;10339:17;10335:27;10325:55;;10376:1;10373;10366:12;10325:55;10416:6;10403:20;10443:64;10459:47;10499:6;10459:47;:::i;10443:64::-;10531:3;10555:6;10550:3;10543:19;10587:4;10582:3;10578:14;10571:21;;10648:4;10638:6;10635:1;10631:14;10623:6;10619:27;10615:38;10601:52;;10676:3;10668:6;10665:15;10662:35;;;10693:1;10690;10683:12;10662:35;10729:4;10721:6;10717:17;10743:763;10759:6;10754:3;10751:15;10743:763;;;10847:3;10834:17;-1:-1:-1;;;;;10870:11:153;10867:35;10864:55;;;10915:1;10912;10905:12;10864:55;10942:24;;11014:4;10990:12;;;-1:-1:-1;;10986:26:153;10982:37;10979:57;;;11032:1;11029;11022:12;10979:57;11062:22;;:::i;:::-;11133:4;11129:2;11125:13;11112:27;11152:33;11177:7;11152:33;:::i;:::-;11198:22;;11270:4;11262:13;;11249:27;-1:-1:-1;;;;;11292:32:153;;11289:52;;;11337:1;11334;11327:12;11289:52;11379:51;11426:3;11419:4;11408:8;11404:2;11400:17;11396:28;11379:51;:::i;:::-;11372:4;11365:5;11361:16;11354:77;;11456:5;11451:3;11444:18;;;11491:4;11486:3;11482:14;11475:21;;10785:4;10780:3;10776:14;10769:21;;10743:763;;11542:1515;11628:6;11681:2;11669:9;11660:7;11656:23;11652:32;11649:52;;;11697:1;11694;11687:12;11649:52;11737:9;11724:23;-1:-1:-1;;;;;11762:6:153;11759:30;11756:50;;;11802:1;11799;11792:12;11756:50;11825:22;;11881:6;11863:16;;;11859:29;11856:49;;;11901:1;11898;11891:12;11856:49;11927:22;;:::i;:::-;11972;11991:2;11972:22;:::i;:::-;11965:5;11958:37;12041:2;12037;12033:11;12020:25;-1:-1:-1;;;;;12060:8:153;12057:32;12054:52;;;12102:1;12099;12092:12;12054:52;12138:56;12186:7;12175:8;12171:2;12167:17;12138:56;:::i;:::-;12133:2;12122:14;;12115:80;-1:-1:-1;12261:2:153;12253:11;;;12240:25;12281:14;;;12274:31;12337;12364:2;12356:11;;12337:31;:::i;:::-;12332:2;12325:5;12321:14;12314:55;12415:3;12411:2;12407:12;12394:26;-1:-1:-1;;;;;12435:8:153;12432:32;12429:52;;;12477:1;12474;12467:12;12429:52;12514:44;12550:7;12539:8;12535:2;12531:17;12514:44;:::i;:::-;12508:3;12501:5;12497:15;12490:69;;12592:32;12619:3;12615:2;12611:12;12592:32;:::i;:::-;12586:3;12579:5;12575:15;12568:57;12671:3;12667:2;12663:12;12650:26;-1:-1:-1;;;;;12691:8:153;12688:32;12685:52;;;12733:1;12730;12723:12;12685:52;12770:66;12828:7;12817:8;12813:2;12809:17;12770:66;:::i;:::-;12764:3;12757:5;12753:15;12746:91;;12883:3;12879:2;12875:12;12862:26;-1:-1:-1;;;;;12903:8:153;12900:32;12897:52;;;12945:1;12942;12935:12;12897:52;12982:44;13018:7;13007:8;13003:2;12999:17;12982:44;:::i;:::-;12976:3;12965:15;;12958:69;-1:-1:-1;12969:5:153;11542:1515;-1:-1:-1;;;;11542:1515:153:o;13062:219::-;13211:2;13200:9;13193:21;13174:4;13231:44;13271:2;13260:9;13256:18;13248:6;13231:44;:::i;:::-;13223:52;13062:219;-1:-1:-1;;;13062:219:153:o;13286:256::-;13375:6;13428:2;13416:9;13407:7;13403:23;13399:32;13396:52;;;13444:1;13441;13434:12;13396:52;-1:-1:-1;13489:23:153;;13286:256;-1:-1:-1;13286:256:153:o;13739:2097::-;14109:6;14117;14125;14133;14141;14149;14157;14165;14173;14181;14189:7;14198;14252:3;14240:9;14231:7;14227:23;14223:33;14220:53;;;14269:1;14266;14259:12;14220:53;14292:29;14311:9;14292:29;:::i;:::-;14282:39;;-1:-1:-1;;;;;14364:2:153;14353:9;14349:18;14336:32;14333:56;14330:76;;;14402:1;14399;14392:12;14330:76;14441:115;14548:7;14541:2;14530:9;14526:18;14513:32;14502:9;14498:48;14441:115;:::i;:::-;14575:8;;-1:-1:-1;14602:8:153;-1:-1:-1;;;;;;14653:2:153;14638:18;;14625:32;14622:56;14619:76;;;14691:1;14688;14681:12;14619:76;14730:115;14837:7;14830:2;14819:9;14815:18;14802:32;14791:9;14787:48;14730:115;:::i;:::-;14864:8;;-1:-1:-1;14891:8:153;-1:-1:-1;;;;;;14942:2:153;14927:18;;14914:32;14911:56;14908:76;;;14980:1;14977;14970:12;14908:76;15019:115;15126:7;15119:2;15108:9;15104:18;15091:32;15080:9;15076:48;15019:115;:::i;:::-;15153:8;;-1:-1:-1;15180:8:153;-1:-1:-1;;;;;;15231:3:153;15216:19;;15203:33;15200:57;15197:77;;;15270:1;15267;15260:12;15197:77;15309:116;15417:7;15409:3;15398:9;15394:19;15381:33;15370:9;15366:49;15309:116;:::i;:::-;15444:8;;-1:-1:-1;15471:8:153;-1:-1:-1;;;;;;15522:3:153;15507:19;;15494:33;15491:57;15488:77;;;15561:1;15558;15551:12;15488:77;15601:116;15709:7;15701:3;15690:9;15686:19;15673:33;15662:9;15658:49;15601:116;:::i;:::-;15736:8;;-1:-1:-1;15764:9:153;-1:-1:-1;15793:37:153;15825:3;15810:19;;15793:37;:::i;:::-;15782:48;;13739:2097;;;;;;;;;;;;;;:::o;15841:389::-;15929:6;15982:2;15970:9;15961:7;15957:23;15953:32;15950:52;;;15998:1;15995;15988:12;15950:52;16038:9;16025:23;-1:-1:-1;;;;;16063:6:153;16060:30;16057:50;;;16103:1;16100;16093:12;16057:50;16126:22;;16182:3;16164:16;;;16160:26;16157:46;;;16199:1;16196;16189:12;16466:792;16529:3;16560;16592:5;16586:12;16619:6;16614:3;16607:19;16651:4;16646:3;16642:14;16635:21;;16709:4;16699:6;16696:1;16692:14;16685:5;16681:26;16677:37;16748:4;16741:5;16737:16;16771:1;16781:451;16795:6;16792:1;16789:13;16781:451;;;16860:16;;;-1:-1:-1;;16856:30:153;16844:43;;16910:13;;16953:9;;-1:-1:-1;;;;;16949:35:153;16936:49;;17032:4;17024:13;;;17018:20;17075:4;17058:15;;;17051:29;;;17018:20;17101:47;;17132:15;;17018:20;17101:47;:::i;:::-;17183:4;17208:14;;;;17093:55;;-1:-1:-1;17171:17:153;;;;;-1:-1:-1;16817:1:153;16810:9;16781:451;;;-1:-1:-1;17248:4:153;;16466:792;-1:-1:-1;;;;;;16466:792:153:o;17263:500::-;17321:5;17328:6;17388:3;17375:17;17474:2;17470:7;17459:8;17443:14;17439:29;17435:43;17415:18;17411:68;17401:96;;17493:1;17490;17483:12;17401:96;17521:33;;17625:4;17612:18;;;-1:-1:-1;17573:21:153;;-1:-1:-1;;;;;;17642:30:153;;17639:50;;;17685:1;17682;17675:12;17639:50;17732:6;17716:14;17712:27;17705:5;17701:39;17698:59;;;17753:1;17750;17743:12;17768:266;17856:6;17851:3;17844:19;17908:6;17901:5;17894:4;17889:3;17885:14;17872:43;-1:-1:-1;17960:1:153;17935:16;;;17953:4;17931:27;;;17924:38;;;;18016:2;17995:15;;;-1:-1:-1;;17991:29:153;17982:39;;;17978:50;;17768:266::o;18039:1128::-;18128:3;18159;18183:6;18178:3;18171:19;18215:4;18210:3;18206:14;18199:21;;18273:4;18263:6;18260:1;18256:14;18249:5;18245:26;18241:37;18301:5;18324:1;18334:807;18348:6;18345:1;18342:13;18334:807;;;18413:16;;;-1:-1:-1;;18409:30:153;18397:43;;18479:20;;18554:14;18550:26;;;-1:-1:-1;;18546:40:153;18522:65;;18512:93;;18601:1;18598;18591:12;18512:93;18633:30;;18691:21;;18725:33;18691:21;18725:33;:::i;:::-;-1:-1:-1;;;;;18784:33:153;18771:47;;18865:59;18918:4;18905:18;;18909:7;18865:59;:::i;:::-;18831:93;;18961:4;18954;18948;18944:15;18937:29;18987:70;19051:4;19045;19041:15;19027:12;19013;18987:70;:::i;:::-;19092:4;19117:14;;;;18979:78;;-1:-1:-1;19080:17:153;;;;;-1:-1:-1;;18370:1:153;18363:9;18334:807;;19172:446;19225:3;19263:5;19257:12;19290:6;19285:3;19278:19;19322:4;19317:3;19313:14;19306:21;;19361:4;19354:5;19350:16;19384:1;19394:199;19408:6;19405:1;19402:13;19394:199;;;19473:13;;-1:-1:-1;;;;;19469:39:153;19457:52;;19538:4;19529:14;;;;19566:17;;;;19505:1;19423:9;19394:199;;;-1:-1:-1;19609:3:153;;19172:446;-1:-1:-1;;;;19172:446:153:o;19623:385::-;19743:1;19739;19734:3;19730:11;19726:19;19718:5;19712:12;19708:38;19703:3;19696:51;19678:3;19793:4;19786:5;19782:16;19776:23;19831:4;19824;19819:3;19815:14;19808:28;19857:58;19909:4;19904:3;19900:14;19886:12;19857:58;:::i;:::-;19968:4;19957:16;;;19951:23;19976:4;19947:34;19931:14;;;;19924:58;;;;-1:-1:-1;19845:70:153;19623:385;-1:-1:-1;19623:385:153:o;20013:1480::-;20784:3;20773:9;20766:22;20747:4;20811:67;20873:3;20862:9;20858:19;20850:6;20811:67;:::i;:::-;20926:9;20918:6;20914:22;20909:2;20898:9;20894:18;20887:50;20960:80;21033:6;21025;21017;20960:80;:::i;:::-;20946:94;;21088:9;21080:6;21076:22;21071:2;21060:9;21056:18;21049:50;21122:80;21195:6;21187;21179;21122:80;:::i;:::-;21108:94;;21250:9;21242:6;21238:22;21233:2;21222:9;21218:18;21211:50;21284:80;21357:6;21349;21341;21284:80;:::i;:::-;21270:94;;21413:9;21405:6;21401:22;21395:3;21384:9;21380:19;21373:51;21441:46;21480:6;21472;21441:46;:::i;:::-;21433:54;20013:1480;-1:-1:-1;;;;;;;;;;;20013:1480:153:o;21498:521::-;21575:4;21581:6;21641:11;21628:25;21735:2;21731:7;21720:8;21704:14;21700:29;21696:43;21676:18;21672:68;21662:96;;21754:1;21751;21744:12;21662:96;21781:33;;21833:20;;;-1:-1:-1;;;;;;21865:30:153;;21862:50;;;21908:1;21905;21898:12;21862:50;21941:4;21929:17;;-1:-1:-1;21972:14:153;21968:27;;;21958:38;;21955:58;;;22009:1;22006;21999:12;22024:331;22129:9;22140;22182:8;22170:10;22167:24;22164:44;;;22204:1;22201;22194:12;22164:44;22233:6;22223:8;22220:20;22217:40;;;22253:1;22250;22243:12;22217:40;-1:-1:-1;;22279:23:153;;;22324:25;;;;;-1:-1:-1;22024:331:153:o;22360:338::-;22480:19;;-1:-1:-1;;;;;;22517:29:153;;;22566:1;22558:10;;22555:137;;;-1:-1:-1;;;;;;22627:1:153;22623:11;;;22620:1;22616:19;22612:46;;;22604:55;;22600:82;;-1:-1:-1;22555:137:153;;22360:338;;;;:::o;22703:329::-;22940:2;22929:9;22922:21;22903:4;22960:66;23022:2;23011:9;23007:18;22999:6;22960:66;:::i;23037:428::-;23194:3;23232:6;23226:13;23248:66;23307:6;23302:3;23295:4;23287:6;23283:17;23248:66;:::i;:::-;23383:2;23379:15;;;;-1:-1:-1;;;;;;23375:53:153;23336:16;;;;23361:68;;;23456:2;23445:14;;23037:428;-1:-1:-1;;23037:428:153:o;23470:287::-;23599:3;23637:6;23631:13;23653:66;23712:6;23707:3;23700:4;23692:6;23688:17;23653:66;:::i;:::-;23735:16;;;;;23470:287;-1:-1:-1;;23470:287:153:o;23762:127::-;23823:10;23818:3;23814:20;23811:1;23804:31;23854:4;23851:1;23844:15;23878:4;23875:1;23868:15;24395:1544;24484:50;24530:3;24503:25;24522:5;24503:25;:::i;:::-;-1:-1:-1;;;;;306:31:153;294:44;;240:104;24484:50;24603:4;24592:16;;;24579:30;24625:14;;;24618:31;24466:3;24692:55;24741:4;24730:16;;24596:5;24692:55;:::i;:::-;24779:6;24772:4;24767:3;24763:14;24756:30;24807:71;24870:6;24865:3;24861:16;24847:12;24833;24807:71;:::i;:::-;24795:83;;;24925:55;24974:4;24967:5;24963:16;24956:5;24925:55;:::i;:::-;25022:3;25016:4;25012:14;25005:4;25000:3;24996:14;24989:38;25050:63;25108:4;25092:14;25076;25050:63;:::i;:::-;25182:4;25171:16;;;25158:30;25204:14;;;25197:31;25297:4;25286:16;;;25273:30;25319:14;;;25312:31;25412:4;25401:16;;;25388:30;25434:14;;;25427:31;25036:77;-1:-1:-1;25505:55:153;;-1:-1:-1;;25554:4:153;25543:16;;25175:5;25505:55;:::i;:::-;25604:3;25596:6;25592:16;25585:4;25580:3;25576:14;25569:40;25632:65;25690:6;25674:14;25658;25632:65;:::i;:::-;25618:79;;;;25744:57;25793:6;25786:5;25782:18;25775:5;25744:57;:::i;:::-;25847:3;25839:6;25835:16;25826:6;25821:3;25817:16;25810:42;25868:65;25926:6;25910:14;25894;25868:65;:::i;:::-;25861:72;24395:1544;-1:-1:-1;;;;;;24395:1544:153:o;25944:376::-;26177:2;26166:9;26159:21;26140:4;26197:74;26267:2;26256:9;26252:18;26244:6;26197:74;:::i;:::-;26189:82;;26307:6;26302:2;26291:9;26287:18;26280:34;25944:376;;;;;:::o;26325:184::-;26395:6;26448:2;26436:9;26427:7;26423:23;26419:32;26416:52;;;26464:1;26461;26454:12;26416:52;-1:-1:-1;26487:16:153;;26325:184;-1:-1:-1;26325:184:153:o;26514:271::-;26697:6;26689;26684:3;26671:33;26653:3;26723:16;;26748:13;;;26723:16;26514:271;-1:-1:-1;26514:271:153:o;26790:350::-;26910:19;;-1:-1:-1;;;;;;26947:33:153;;;27000:1;26992:10;;26989:145;;;-1:-1:-1;;;;;;27061:1:153;27057:11;;;;27054:1;27050:19;27046:50;;;27038:59;27034:90;;;;26790:350;-1:-1:-1;;26790:350:153:o;27145:247::-;27204:6;27257:2;27245:9;27236:7;27232:23;27228:32;27225:52;;;27273:1;27270;27263:12;27225:52;27312:9;27299:23;27331:31;27356:5;27331:31;:::i;28065:383::-;28222:3;28260:6;28254:13;28276:66;28335:6;28330:3;28323:4;28315:6;28311:17;28276:66;:::i;:::-;28364:16;;;;28389:21;;;-1:-1:-1;28437:4:153;28426:16;;28065:383;-1:-1:-1;28065:383:153:o;28899:1079::-;-1:-1:-1;;;;;29391:32:153;;29373:51;;29460:3;29455:2;29440:18;;29433:31;;;-1:-1:-1;;29487:57:153;;29524:19;;29516:6;29487:57;:::i;:::-;29575:2;29560:18;;29553:34;;;-1:-1:-1;;;;;29623:32:153;;29618:2;29603:18;;29596:60;29693:22;;;29687:3;29672:19;;29665:51;29739:32;29697:6;29756;29739:32;:::i;:::-;-1:-1:-1;;;;;29808:32:153;;29828:3;29787:19;;29780:61;29878:22;;;29872:3;29857:19;;29850:51;29725:46;-1:-1:-1;29918:54:153;29725:46;29957:6;29918:54;:::i;:::-;29910:62;28899:1079;-1:-1:-1;;;;;;;;;;28899:1079:153:o;29983:1518::-;30766:3;30755:9;30748:22;30729:4;30793:93;30881:3;30870:9;30866:19;30858:6;30850;30793:93;:::i;:::-;30934:9;30926:6;30922:22;30917:2;30906:9;30902:18;30895:50;30968:80;31041:6;31033;31025;30968:80;:::i;:::-;30954:94;;31096:9;31088:6;31084:22;31079:2;31068:9;31064:18;31057:50;31130:80;31203:6;31195;31187;31130:80;:::i;:::-;31116:94;;31258:9;31250:6;31246:22;31241:2;31230:9;31226:18;31219:50;31292:80;31365:6;31357;31349;31292:80;:::i;:::-;31278:94;;31421:9;31413:6;31409:22;31403:3;31392:9;31388:19;31381:51;31449:46;31488:6;31480;31449:46;:::i;:::-;31441:54;29983:1518;-1:-1:-1;;;;;;;;;;;;29983:1518:153:o;31506:545::-;31599:4;31605:6;31665:11;31652:25;31759:2;31755:7;31744:8;31728:14;31724:29;31720:43;31700:18;31696:68;31686:96;;31778:1;31775;31768:12;31686:96;31805:33;;31857:20;;;-1:-1:-1;;;;;;31889:30:153;;31886:50;;;31932:1;31929;31922:12;31886:50;31965:4;31953:17;;-1:-1:-1;32016:1:153;32012:14;;;31996;31992:35;31982:46;;31979:66;;;32041:1;32038;32031:12;32327:1350;32775:3;32788:22;;;32760:19;;32845:22;;;32727:4;32925:6;32898:3;32883:19;;32727:4;32959:281;32973:6;32970:1;32967:13;32959:281;;;33048:6;33035:20;33068:31;33093:5;33068:31;:::i;:::-;-1:-1:-1;;;;;33124:31:153;33112:44;;33185:4;33213:17;;;;33176:14;;;;33152:1;32988:9;32959:281;;;32963:3;33278:6;33271:4;33260:9;33256:20;33249:36;33294:46;33336:2;33325:9;33321:18;33313:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33294:46;33385:9;33380:3;33376:19;33371:2;33360:9;33356:18;33349:47;33413:46;33455:3;33447:6;33439;33413:46;:::i;:::-;33405:54;;;;33468:47;33510:3;33499:9;33495:19;33487:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33468:47;-1:-1:-1;;;;;306:31:153;;33566:3;33551:19;;294:44;33608:6;33602:3;33591:9;33587:19;33580:35;33624:47;33666:3;33655:9;33651:19;33643:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33682:360;33893:6;33885;33880:3;33867:33;33963:2;33959:15;;;;-1:-1:-1;;;;;;33955:53:153;33919:16;;33944:65;;;34033:2;34025:11;;33682:360;-1:-1:-1;33682:360:153:o;34413:402::-;34646:2;34635:9;34628:21;34609:4;34666:74;34736:2;34725:9;34721:18;34713:6;34666:74;:::i;:::-;34658:82;;34805:1;34801;34796:3;34792:11;34788:19;34780:6;34776:32;34771:2;34760:9;34756:18;34749:60;34413:402;;;;;:::o;34820:461::-;34873:5;34926:3;34919:4;34911:6;34907:17;34903:27;34893:55;;34944:1;34941;34934:12;34893:55;34977:6;34971:13;35008:52;35024:35;35052:6;35024:35;:::i;35008:52::-;35085:6;35076:7;35069:23;35139:3;35132:4;35123:6;35115;35111:19;35107:30;35104:39;35101:59;;;35156:1;35153;35146:12;35101:59;35169:81;35243:6;35236:4;35227:7;35223:18;35216:4;35208:6;35204:17;35169:81;:::i;:::-;35268:7;34820:461;-1:-1:-1;;;;34820:461:153:o;35286:171::-;35364:13;;35417:14;35406:26;;35396:37;;35386:65;;35447:1;35444;35437:12;35462:720;35575:6;35583;35591;35599;35652:3;35640:9;35631:7;35627:23;35623:33;35620:53;;;35669:1;35666;35659:12;35620:53;35702:9;35696:16;-1:-1:-1;;;;;35727:6:153;35724:30;35721:50;;;35767:1;35764;35757:12;35721:50;35790:60;35842:7;35833:6;35822:9;35818:22;35790:60;:::i;:::-;35780:70;;;35869:48;35913:2;35902:9;35898:18;35869:48;:::i;:::-;35859:58;;35936:48;35980:2;35969:9;35965:18;35936:48;:::i;:::-;35926:58;;36030:2;36019:9;36015:18;36009:25;-1:-1:-1;;;;;36049:8:153;36046:32;36043:52;;;36091:1;36088;36081:12;36043:52;36114:62;36168:7;36157:8;36146:9;36142:24;36114:62;:::i;:::-;36104:72;;;35462:720;;;;;;;:::o;36187:127::-;36248:10;36243:3;36239:20;36236:1;36229:31;36279:4;36276:1;36269:15;36303:4;36300:1;36293:15;36319:135;36358:3;36379:17;;;36376:43;;36399:18;;:::i;:::-;-1:-1:-1;36446:1:153;36435:13;;36319:135::o;36459:168::-;36532:9;;;36563;;36580:15;;;36574:22;;36560:37;36550:71;;36601:18;;:::i;36972:125::-;37037:9;;;37058:10;;;37055:36;;;37071:18;;:::i;37758:288::-;37933:6;37922:9;37915:25;37976:2;37971;37960:9;37956:18;37949:30;37896:4;37996:44;38036:2;38025:9;38021:18;38013:6;37996:44;:::i;38051:290::-;38120:6;38173:2;38161:9;38152:7;38148:23;38144:32;38141:52;;;38189:1;38186;38179:12;38141:52;38215:16;;-1:-1:-1;;;;;;38260:32:153;;38250:43;;38240:71;;38307:1;38304;38297:12;38346:151;38436:4;38429:12;;;38415;;;38411:31;;38454:14;;38451:40;;;38471:18;;:::i", + "linkReferences": {}, + "immutableReferences": { + "64381": [ + { "start": 246, "length": 32 }, + { "start": 1385, "length": 32 }, + { "start": 2451, "length": 32 }, + { "start": 4368, "length": 32 } + ], + "64383": [ + { "start": 426, "length": 32 }, + { "start": 1470, "length": 32 }, + { "start": 4263, "length": 32 }, + { "start": 5098, "length": 32 } + ], + "64386": [ + { "start": 345, "length": 32 }, + { "start": 1168, "length": 32 }, + { "start": 4038, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "REGISTRY()": "06433b1b", + "SUPPORTED_ENTRYPOINT()": "137e051e", + "accountId()": "9cfd7cff", + "addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": "d78343d9", + "domainSeparator()": "f698da25", + "getInitHash()": "3c9de1b8", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": "928107f9", + "initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": "15cca638", + "preValidationSetup(bytes32,address,bytes)": "4fff40e1", + "predictSafeAddress(address,address,bytes,bytes32,bytes)": "663c87d8", + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": "d9ed0e8f", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"},{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSetup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUserOperationData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDelegatecall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyProxy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PreValidationSetupFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Safe7579LaunchpadAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractSignature\",\"type\":\"bytes\"}],\"name\":\"WrongContractSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"contractSignatureLen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signaturesLen\",\"type\":\"uint256\"}],\"name\":\"WrongContractSignatureFormat\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REGISTRY\",\"outputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPORTED_ENTRYPOINT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"addSafe7579\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInitHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"setupTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"setupData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISafe7579\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Safe7579Launchpad.InitData\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"initSafe7579\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"initHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"preInit\",\"type\":\"bytes\"}],\"name\":\"preValidationSetup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"safeProxyFactory\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"creationCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"factoryInitializer\",\"type\":\"bytes\"}],\"name\":\"predictSafeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"safeProxy\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"setupTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"setupData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISafe7579\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Safe7579Launchpad.InitData\",\"name\":\"initData\",\"type\":\"tuple\"}],\"name\":\"setupSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"supported\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)\":{\"details\":\"Decodes an ERC-4337 user operation into a Safe operation.\",\"params\":{\"userOp\":\"The ERC-4337 user operation.\"},\"returns\":{\"operationData\":\"Encoded EIP-712 Safe operation data bytes used for signature verification.\",\"signatures\":\"The Safe owner signatures extracted from the user operation.\",\"validAfter\":\"The timestamp the user operation is valid from.\",\"validUntil\":\"The timestamp the user operation is valid until.\"}},\"preValidationSetup(bytes32,address,bytes)\":{\"params\":{\"initHash\":\"will be calculated offchain using this.hash(InitData)\",\"preInit\":\"optional parameter for a delegatecall\",\"to\":\"optional parameter for a delegatecall\"}},\"predictSafeAddress(address,address,bytes,bytes32,bytes)\":{\"details\":\"factoryInitializer is expected to be: abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, to, callData));\"},\"setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"params\":{\"initData\":\"initData to initialize the Safe and Safe7579 Adapter\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"params\":{\"missingAccountFunds\":\"amount of gas that has to be paid\",\"userOp\":\"EntryPoint v0.7 userOp.\",\"userOpHash\":\"hash of userOp\"},\"returns\":{\"validationData\":\"4337 packed validation data returned by the validator module\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)\":{\"notice\":\"This function allows existing safe accounts to add the Safe7579 adapter to their account\"},\"hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"notice\":\"Create unique InitData hash. Using all params but excluding data.callData from hash\"},\"initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)\":{\"notice\":\"This function is intended to be delegatecalled by the ISafe.setup function. It configures the Safe7579 for the user for all module types except validators, which were initialized in the validateUserOp function.\"},\"preValidationSetup(bytes32,address,bytes)\":{\"notice\":\"SafeProxyFactory will create a SafeProxy and using this contract as the singleton implementation and call this function to initialize the account. will write initHash into SafeProxy storage\"},\"predictSafeAddress(address,address,bytes,bytes32,bytes)\":{\"notice\":\"Helper function that can be used offchain to predict the counterfactual Safe address.\"},\"setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"notice\":\"During the execution phase of ERC4337, this function upgrades the SafeProxy to the actual SafeSingleton implementation. Subsequently, it invokes the ISafe.setup() function to initialize the Safe Account. The setup() function should ensure the completion of Safe7579 Adapter initialization with InitData.setupTo as address(this) and InitData.setupData encoding the call to this.initSafe7579(). SafeProxy.setup() delegatecalls this function to install executors, fallbacks, hooks, and registry configurations on the Safe7579 adapter. As this occurs in the ERC4337 execution phase, storage restrictions are not applicable.\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Upon creation of SafeProxy by SafeProxyFactory, EntryPoint invokes this function to verify the transaction. It ensures that only this.setupSafe() can be called by EntryPoint during execution. The function validates the hash of InitData in userOp.callData against the hash stored in preValidationSetup. This function abides by ERC4337 storage restrictions, allowing Safe7579 adapter initialization only in Validation Modules compliant with 4337. It installs validators from InitData onto the Safe7579 adapter for the account. When called by EP, the SafeProxy singleton address remains unupgraded to SafeSingleton, preventing execTransactionFromModule by Safe7579 Adapter. Initialization of Validator Modules is achieved through a direct call to onInstall(). This delegatecalled function initializes the Validator Module with the correct msg.sender. Once all validator modules are set up, they can be used to validate the userOp. Parameters include userOp (EntryPoint v0.7 userOp), userOpHash, and missingAccountFunds representing the gas payment required.\"}},\"notice\":\"Launchpad to deploy a Safe account and connect the Safe7579 adapter. Check Readme.md for more information. Special thanks to [nlordell (Safe)](https://github.com/nlordell), who came up with [this technique](https://github.com/safe-global/safe-modules/pull/184)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Safe7579Launchpad.sol\":\"Safe7579Launchpad\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAccount.sol\":{\"keccak256\":\"0x38710bec0cb20ff4ceef46a80475b5bdabc27b7efd2687fd473db68332f61b78\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://dea7a723e1ef852e8764e69914a345d2e8bc5e13facfc9d5c29d791cb4ab0020\",\"dweb:/ipfs/QmU8dYgyF4DBJXFqjwLAtnE3q8q259ChfoEk9a6wyhHzEP\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/@rhinestone/checknsignatures/src/CheckNSignatures.sol\":{\"keccak256\":\"0x8392bfc019b80519960685df058636a57011b09925d7a351ae3c63aad40cda73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfafd74f1f0e61b9442436e807529600696eb38559c35b5c10a213bdbf6e2363\",\"dweb:/ipfs/QmXFG4cyBJeZmyENTwGc9xcygCg9qK3SHsN3z6kvSPbnHm\"]},\"node_modules/@safe-global/safe-contracts/contracts/libraries/SafeStorage.sol\":{\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://f2c67b22791022356f5ca85533ecdda740aa8d5c9ed263d0c2761f2560dd1b87\",\"dweb:/ipfs/QmYf6gm89StvSTgZGR83UgSmUgJGjhGbBRRNvmxwywfiMc\"]},\"node_modules/erc7579/src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5\",\"dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC\"]},\"node_modules/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0x317f8208d1f03356e8f709eec8e2c579d6be227099a26f777cc9ec8a06814ae4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f437b1683add465da31ecc92259d056d11edb4ea95dff22a8519fdabd82423dc\",\"dweb:/ipfs/QmbsFH26DQtnb97yqfF6Bw7CULFXupcra1x1xcq2Yy63FY\"]},\"node_modules/solady/src/utils/LibSort.sol\":{\"keccak256\":\"0x39ea0fe7c9f2138c890e37df2adbe83e222deda7271e2717f98fa42556ab93ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebdeea46531d4e8ccbaa1e4ed33e41b3a3f4c45fc76f54d06f4d4d213cb1d231\",\"dweb:/ipfs/QmckdgpGYChN5YC5AjK2FLXre225nvTixQhDQ8aewrdgMQ\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/Safe7579Launchpad.sol\":{\"keccak256\":\"0xe92c16b1da189f17e6578034b6b6ddb7a9a970378ac028c12d7dc614f90707bf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://87cae95ead2e9c2b1015310c0e0ffb741821736ac5dfb151df1cc96a44d4ff2e\",\"dweb:/ipfs/QmVRJePNMv3ZH9kxg7kSwz7NAuxDjt99tT6BcnG99YTNbJ\"]},\"src/core/SafeOp.sol\":{\"keccak256\":\"0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04\",\"dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ\"]},\"src/core/SupportViewer.sol\":{\"keccak256\":\"0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd\",\"dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "type": "error", "name": "InvalidEntryPoint" }, + { "inputs": [], "type": "error", "name": "InvalidInitHash" }, + { "inputs": [], "type": "error", "name": "InvalidSetup" }, + { "inputs": [], "type": "error", "name": "InvalidSignature" }, + { "inputs": [], "type": "error", "name": "InvalidUserOperationData" }, + { "inputs": [], "type": "error", "name": "OnlyDelegatecall" }, + { "inputs": [], "type": "error", "name": "OnlyProxy" }, + { "inputs": [], "type": "error", "name": "PreValidationSetupFailed" }, + { + "inputs": [], + "type": "error", + "name": "Safe7579LaunchpadAlreadyInitialized" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractSignature", + "type": "bytes" + } + ], + "type": "error", + "name": "WrongContractSignature" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "s", "type": "uint256" }, + { + "internalType": "uint256", + "name": "contractSignatureLen", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signaturesLen", + "type": "uint256" + } + ], + "type": "error", + "name": "WrongContractSignatureFormat" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "REGISTRY", + "outputs": [ + { + "internalType": "contract IERC7484", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "SUPPORTED_ENTRYPOINT", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addSafe7579" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getInitHash", + "outputs": [ + { "internalType": "bytes32", "name": "value", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { + "internalType": "struct Safe7579Launchpad.InitData", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "address", + "name": "setupTo", + "type": "address" + }, + { + "internalType": "bytes", + "name": "setupData", + "type": "bytes" + }, + { + "internalType": "contract ISafe7579", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ] + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "pure", + "type": "function", + "name": "hash", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initSafe7579" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "initHash", + "type": "bytes32" + }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "bytes", "name": "preInit", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "preValidationSetup" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address", + "name": "safeProxyFactory", + "type": "address" + }, + { + "internalType": "bytes", + "name": "creationCode", + "type": "bytes" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "factoryInitializer", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "predictSafeAddress", + "outputs": [ + { + "internalType": "address", + "name": "safeProxy", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct Safe7579Launchpad.InitData", + "name": "initData", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "address", + "name": "setupTo", + "type": "address" + }, + { + "internalType": "bytes", + "name": "setupData", + "type": "bytes" + }, + { + "internalType": "contract ISafe7579", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ] + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setupSafe" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [ + { "internalType": "bool", "name": "supported", "type": "bool" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ] + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": { + "details": "Decodes an ERC-4337 user operation into a Safe operation.", + "params": { "userOp": "The ERC-4337 user operation." }, + "returns": { + "operationData": "Encoded EIP-712 Safe operation data bytes used for signature verification.", + "signatures": "The Safe owner signatures extracted from the user operation.", + "validAfter": "The timestamp the user operation is valid from.", + "validUntil": "The timestamp the user operation is valid until." + } + }, + "preValidationSetup(bytes32,address,bytes)": { + "params": { + "initHash": "will be calculated offchain using this.hash(InitData)", + "preInit": "optional parameter for a delegatecall", + "to": "optional parameter for a delegatecall" + } + }, + "predictSafeAddress(address,address,bytes,bytes32,bytes)": { + "details": "factoryInitializer is expected to be: abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, to, callData));" + }, + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "params": { + "initData": "initData to initialize the Safe and Safe7579 Adapter" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "params": { + "missingAccountFunds": "amount of gas that has to be paid", + "userOp": "EntryPoint v0.7 userOp.", + "userOpHash": "hash of userOp" + }, + "returns": { + "validationData": "4337 packed validation data returned by the validator module" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": { + "notice": "This function allows existing safe accounts to add the Safe7579 adapter to their account" + }, + "hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "notice": "Create unique InitData hash. Using all params but excluding data.callData from hash" + }, + "initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": { + "notice": "This function is intended to be delegatecalled by the ISafe.setup function. It configures the Safe7579 for the user for all module types except validators, which were initialized in the validateUserOp function." + }, + "preValidationSetup(bytes32,address,bytes)": { + "notice": "SafeProxyFactory will create a SafeProxy and using this contract as the singleton implementation and call this function to initialize the account. will write initHash into SafeProxy storage" + }, + "predictSafeAddress(address,address,bytes,bytes32,bytes)": { + "notice": "Helper function that can be used offchain to predict the counterfactual Safe address." + }, + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "notice": "During the execution phase of ERC4337, this function upgrades the SafeProxy to the actual SafeSingleton implementation. Subsequently, it invokes the ISafe.setup() function to initialize the Safe Account. The setup() function should ensure the completion of Safe7579 Adapter initialization with InitData.setupTo as address(this) and InitData.setupData encoding the call to this.initSafe7579(). SafeProxy.setup() delegatecalls this function to install executors, fallbacks, hooks, and registry configurations on the Safe7579 adapter. As this occurs in the ERC4337 execution phase, storage restrictions are not applicable." + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "Upon creation of SafeProxy by SafeProxyFactory, EntryPoint invokes this function to verify the transaction. It ensures that only this.setupSafe() can be called by EntryPoint during execution. The function validates the hash of InitData in userOp.callData against the hash stored in preValidationSetup. This function abides by ERC4337 storage restrictions, allowing Safe7579 adapter initialization only in Validation Modules compliant with 4337. It installs validators from InitData onto the Safe7579 adapter for the account. When called by EP, the SafeProxy singleton address remains unupgraded to SafeSingleton, preventing execTransactionFromModule by Safe7579 Adapter. Initialization of Validator Modules is achieved through a direct call to onInstall(). This delegatecalled function initializes the Validator Module with the correct msg.sender. Once all validator modules are set up, they can be used to validate the userOp. Parameters include userOp (EntryPoint v0.7 userOp), userOpHash, and missingAccountFunds representing the gas payment required." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Safe7579Launchpad.sol": "Safe7579Launchpad" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAccount.sol": { + "keccak256": "0x38710bec0cb20ff4ceef46a80475b5bdabc27b7efd2687fd473db68332f61b78", + "urls": [ + "bzz-raw://dea7a723e1ef852e8764e69914a345d2e8bc5e13facfc9d5c29d791cb4ab0020", + "dweb:/ipfs/QmU8dYgyF4DBJXFqjwLAtnE3q8q259ChfoEk9a6wyhHzEP" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/@rhinestone/checknsignatures/src/CheckNSignatures.sol": { + "keccak256": "0x8392bfc019b80519960685df058636a57011b09925d7a351ae3c63aad40cda73", + "urls": [ + "bzz-raw://cfafd74f1f0e61b9442436e807529600696eb38559c35b5c10a213bdbf6e2363", + "dweb:/ipfs/QmXFG4cyBJeZmyENTwGc9xcygCg9qK3SHsN3z6kvSPbnHm" + ], + "license": "MIT" + }, + "node_modules/@safe-global/safe-contracts/contracts/libraries/SafeStorage.sol": { + "keccak256": "0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a", + "urls": [ + "bzz-raw://f2c67b22791022356f5ca85533ecdda740aa8d5c9ed263d0c2761f2560dd1b87", + "dweb:/ipfs/QmYf6gm89StvSTgZGR83UgSmUgJGjhGbBRRNvmxwywfiMc" + ], + "license": "LGPL-3.0-only" + }, + "node_modules/erc7579/src/interfaces/IERC7579Module.sol": { + "keccak256": "0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604", + "urls": [ + "bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5", + "dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/ECDSA.sol": { + "keccak256": "0x317f8208d1f03356e8f709eec8e2c579d6be227099a26f777cc9ec8a06814ae4", + "urls": [ + "bzz-raw://f437b1683add465da31ecc92259d056d11edb4ea95dff22a8519fdabd82423dc", + "dweb:/ipfs/QmbsFH26DQtnb97yqfF6Bw7CULFXupcra1x1xcq2Yy63FY" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/LibSort.sol": { + "keccak256": "0x39ea0fe7c9f2138c890e37df2adbe83e222deda7271e2717f98fa42556ab93ce", + "urls": [ + "bzz-raw://ebdeea46531d4e8ccbaa1e4ed33e41b3a3f4c45fc76f54d06f4d4d213cb1d231", + "dweb:/ipfs/QmckdgpGYChN5YC5AjK2FLXre225nvTixQhDQ8aewrdgMQ" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/Safe7579Launchpad.sol": { + "keccak256": "0xe92c16b1da189f17e6578034b6b6ddb7a9a970378ac028c12d7dc614f90707bf", + "urls": [ + "bzz-raw://87cae95ead2e9c2b1015310c0e0ffb741821736ac5dfb151df1cc96a44d4ff2e", + "dweb:/ipfs/QmVRJePNMv3ZH9kxg7kSwz7NAuxDjt99tT6BcnG99YTNbJ" + ], + "license": "GPL-3.0" + }, + "src/core/SafeOp.sol": { + "keccak256": "0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e", + "urls": [ + "bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04", + "dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ" + ], + "license": "GPL-3.0" + }, + "src/core/SupportViewer.sol": { + "keccak256": "0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf", + "urls": [ + "bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd", + "dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 114 +} diff --git a/artifacts/interfaces/IERC7579Account.json b/artifacts/interfaces/IERC7579Account.json new file mode 100644 index 0000000..57e2469 --- /dev/null +++ b/artifacts/interfaces/IERC7579Account.json @@ -0,0 +1,528 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"installModule(uint256,address,bytes)\":{\"details\":\"installs a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module\",\"params\":{\"data\":\"The data that is signed\",\"hash\":\"The hash of the data that is signed\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579Account\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "installModule(uint256,address,bytes)": { + "details": "installs a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "details": "ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module", + "params": { + "data": "The data that is signed", + "hash": "The hash of the data that is signed" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579Account" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IERC7579AccountEvents.json b/artifacts/interfaces/IERC7579AccountEvents.json new file mode 100644 index 0000000..0d911d3 --- /dev/null +++ b/artifacts/interfaces/IERC7579AccountEvents.json @@ -0,0 +1,144 @@ +{ + "abi": [ + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": {}, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579AccountEvents\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579AccountEvents" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IERC7579AccountView.json b/artifacts/interfaces/IERC7579AccountView.json new file mode 100644 index 0000000..f2dd8e5 --- /dev/null +++ b/artifacts/interfaces/IERC7579AccountView.json @@ -0,0 +1,172 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579AccountView\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579AccountView" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IExecutor.json b/artifacts/interfaces/IExecutor.json new file mode 100644 index 0000000..3d80e45 --- /dev/null +++ b/artifacts/interfaces/IExecutor.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IExecutor" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IFallback.json b/artifacts/interfaces/IFallback.json new file mode 100644 index 0000000..d1c6b9f --- /dev/null +++ b/artifacts/interfaces/IFallback.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IFallback\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IFallback" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IHook.json b/artifacts/interfaces/IHook.json new file mode 100644 index 0000000..a21c0cc --- /dev/null +++ b/artifacts/interfaces/IHook.json @@ -0,0 +1,224 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "postCheck", + "inputs": [ + { "name": "hookData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "preCheck", + "inputs": [ + { "name": "msgSender", "type": "address", "internalType": "address" }, + { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, + { "name": "msgData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "hookData", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3", + "postCheck(bytes)": "173bf7da", + "preCheck(address,uint256,bytes)": "d68f6025" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"postCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"msgData\",\"type\":\"bytes\"}],\"name\":\"preCheck\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IHook\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "hookData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "postCheck" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "msgSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "msgValue", + "type": "uint256" + }, + { "internalType": "bytes", "name": "msgData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "preCheck", + "outputs": [ + { "internalType": "bytes", "name": "hookData", "type": "bytes" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IHook" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IMSA.json b/artifacts/interfaces/IMSA.json new file mode 100644 index 0000000..0e0d50e --- /dev/null +++ b/artifacts/interfaces/IMSA.json @@ -0,0 +1,848 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validationData", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccountInitializationFailed", "inputs": [] }, + { + "type": "error", + "name": "MismatchModuleTypeId", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": "8dd7712f", + "initializeAccount(bytes)": "4b6a1419", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountInitializationFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"MismatchModuleTypeId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"params\":{\"userOp\":\"- The operation that was just validated.\",\"userOpHash\":\"- Hash of the user's request data.\"}},\"initializeAccount(bytes)\":{\"details\":\"Initializes the account. Function might be called directly, or by a Factory\",\"params\":{\"data\":\". encoded data that can be used during the initialization phase\"}},\"installModule(uint256,address,bytes)\":{\"details\":\"installs a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module\",\"params\":{\"data\":\"The data that is signed\",\"hash\":\"The hash of the data that is signed\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"authorizer\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid. 0 for \\\"indefinite\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"notice\":\"Account may implement this execute method. passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash) to the account. The account should skip the methodSig, and use the callData (and optionally, other UserOp fields)\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/erc7579/src/interfaces/IMSA.sol\":\"IMSA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/erc7579/src/interfaces/IERC4337Account.sol\":{\"keccak256\":\"0x55f4a9fe65535a8b3f6db727c764aad1eb237a22828f2565941d0c079e9b7e3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc161771a4b8cf0a71da17b63f8bc41b325ce92a3b0185f42c7565512b21c614\",\"dweb:/ipfs/QmTLH2JGFoAGd1KpYMxyEXVCxtGqrumairejZfS9pc64TG\"]},\"node_modules/erc7579/src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0x08368aba5f1bb83eb57e9f8d31a04edee4be69159b4844a6443f65100917011c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://789244f53fb8b25f4bacb8ac0b9c2f5ea2067a9c5c7bd13fd00e10618e52e2ff\",\"dweb:/ipfs/QmVSbGSyDpfL6UfyvaMBQHmV9u52wway1h3caJnvXVgkvn\"]},\"node_modules/erc7579/src/interfaces/IMSA.sol\":{\"keccak256\":\"0x649ef44dfc5ba9b485b31cda765335e96f35aa6e595fd8d86c28a62aa8982cbe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43dac226bde7880ef807331972ec074d1bd046ca0bd776c69fec026416469e05\",\"dweb:/ipfs/QmWjEtYgMggSGBiQp1JaowyVux27a2WCGVmku4hn1oLcVn\"]},\"node_modules/erc7579/src/lib/ModeLib.sol\":{\"keccak256\":\"0x02ce0fc8805d1427841f32e2335157e3fae18e99d5c49ba46d53e12fcd1a5185\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9900d0dfb593b136a058a16f1817f60d5096c3eca6adea662381e12c241b14b4\",\"dweb:/ipfs/QmdsfLLtfzY9oEpZxk1Ve1PLuPQdphZcNK92L6mHa8n1h7\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "AccountInitializationFailed" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "MismatchModuleTypeId" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "executeUserOp" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "params": { + "userOp": "- The operation that was just validated.", + "userOpHash": "- Hash of the user's request data." + } + }, + "initializeAccount(bytes)": { + "details": "Initializes the account. Function might be called directly, or by a Factory", + "params": { + "data": ". encoded data that can be used during the initialization phase" + } + }, + "installModule(uint256,address,bytes)": { + "details": "installs a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "details": "ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module", + "params": { + "data": "The data that is signed", + "hash": "The hash of the data that is signed" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "Must validate caller is the entryPoint. Must validate the signature and nonce", + "params": { + "missingAccountFunds": "- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.", + "userOp": "- The operation that is about to be executed.", + "userOpHash": "- Hash of the user's request data. can be used as the basis for signature." + }, + "returns": { + "validationData": " - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"authorizer\" contract. <6-byte> validUntil - Last timestamp this operation is valid. 0 for \"indefinite\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "notice": "Account may implement this execute method. passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash) to the account. The account should skip the methodSig, and use the callData (and optionally, other UserOp fields)" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "node_modules/erc7579/src/interfaces/IMSA.sol": "IMSA" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/erc7579/src/interfaces/IERC4337Account.sol": { + "keccak256": "0x55f4a9fe65535a8b3f6db727c764aad1eb237a22828f2565941d0c079e9b7e3e", + "urls": [ + "bzz-raw://cc161771a4b8cf0a71da17b63f8bc41b325ce92a3b0185f42c7565512b21c614", + "dweb:/ipfs/QmTLH2JGFoAGd1KpYMxyEXVCxtGqrumairejZfS9pc64TG" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IERC7579Account.sol": { + "keccak256": "0x08368aba5f1bb83eb57e9f8d31a04edee4be69159b4844a6443f65100917011c", + "urls": [ + "bzz-raw://789244f53fb8b25f4bacb8ac0b9c2f5ea2067a9c5c7bd13fd00e10618e52e2ff", + "dweb:/ipfs/QmVSbGSyDpfL6UfyvaMBQHmV9u52wway1h3caJnvXVgkvn" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IMSA.sol": { + "keccak256": "0x649ef44dfc5ba9b485b31cda765335e96f35aa6e595fd8d86c28a62aa8982cbe", + "urls": [ + "bzz-raw://43dac226bde7880ef807331972ec074d1bd046ca0bd776c69fec026416469e05", + "dweb:/ipfs/QmWjEtYgMggSGBiQp1JaowyVux27a2WCGVmku4hn1oLcVn" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/lib/ModeLib.sol": { + "keccak256": "0x02ce0fc8805d1427841f32e2335157e3fae18e99d5c49ba46d53e12fcd1a5185", + "urls": [ + "bzz-raw://9900d0dfb593b136a058a16f1817f60d5096c3eca6adea662381e12c241b14b4", + "dweb:/ipfs/QmdsfLLtfzY9oEpZxk1Ve1PLuPQdphZcNK92L6mHa8n1h7" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 77 +} diff --git a/artifacts/interfaces/IModule.json b/artifacts/interfaces/IModule.json new file mode 100644 index 0000000..076b7e8 --- /dev/null +++ b/artifacts/interfaces/IModule.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IModule" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/ISafe.json b/artifacts/interfaces/ISafe.json new file mode 100644 index 0000000..1a874ca --- /dev/null +++ b/artifacts/interfaces/ISafe.json @@ -0,0 +1,462 @@ +{ + "abi": [ + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "checkSignatures", + "inputs": [ + { "name": "dataHash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enableModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "execTransactionFromModule", + "inputs": [ + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "operation", + "type": "uint8", + "internalType": "enum ISafe.Operation" + } + ], + "outputs": [ + { "name": "success", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "execTransactionFromModuleReturnData", + "inputs": [ + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "operation", + "type": "uint8", + "internalType": "enum ISafe.Operation" + } + ], + "outputs": [ + { "name": "success", "type": "bool", "internalType": "bool" }, + { "name": "returnData", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getModulesPaginated", + "inputs": [ + { "name": "start", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getStorageAt", + "inputs": [ + { "name": "offset", "type": "uint256", "internalType": "uint256" }, + { "name": "length", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setFallbackHandler", + "inputs": [ + { "name": "handler", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setup", + "inputs": [ + { "name": "_owners", "type": "address[]", "internalType": "address[]" }, + { "name": "_threshold", "type": "uint256", "internalType": "uint256" }, + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "fallbackHandler", + "type": "address", + "internalType": "address" + }, + { + "name": "paymentToken", + "type": "address", + "internalType": "address" + }, + { "name": "payment", "type": "uint256", "internalType": "uint256" }, + { + "name": "paymentReceiver", + "type": "address", + "internalType": "address payable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "signedMessages", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "simulateAndRevert", + "inputs": [ + { + "name": "targetContract", + "type": "address", + "internalType": "address" + }, + { "name": "calldataPayload", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "VERSION()": "ffa1ad74", + "checkSignatures(bytes32,bytes,bytes)": "934f3a11", + "domainSeparator()": "f698da25", + "enableModule(address)": "610b5925", + "execTransactionFromModule(address,uint256,bytes,uint8)": "468721a7", + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": "5229073f", + "getModulesPaginated(address,uint256)": "cc2f8452", + "getStorageAt(uint256,uint256)": "5624b25b", + "setFallbackHandler(address)": "f08a0323", + "setup(address[],uint256,address,bytes,address,address,uint256,address)": "b63e800d", + "signedMessages(bytes32)": "5ae6bd37", + "simulateAndRevert(address,bytes)": "b4faba09" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum ISafe.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum ISafe.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,bytes,bytes)\":{\"details\":\"Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise.\",\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"signatures\":\"Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash.\"}},\"domainSeparator()\":{\"details\":\"Returns the domain separator for this contract, as defined in the EIP-712 standard.\",\"returns\":{\"_0\":\"bytes32 The domain separator hash.\"}},\"enableModule(address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be enabled.\"}},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"details\":\"Allows a Module to execute a Safe transaction without any further confirmations.\",\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"}},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"returnData\":\"Data returned by the call.\",\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"getModulesPaginated(address,uint256)\":{\"details\":\"Returns array of modules.\",\"params\":{\"pageSize\":\"Maximum number of modules that should be returned.\",\"start\":\"Start of the page.\"},\"returns\":{\"array\":\"Array of modules.\",\"next\":\"Start of the next page.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"enableModule(address)\":{\"notice\":\"Enables the module `module` for the Safe.\"},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISafe.sol\":\"ISafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "checkSignatures" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "enableModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum ISafe.Operation", + "name": "operation", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execTransactionFromModule", + "outputs": [ + { "internalType": "bool", "name": "success", "type": "bool" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum ISafe.Operation", + "name": "operation", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { "internalType": "bool", "name": "success", "type": "bool" }, + { "internalType": "bytes", "name": "returnData", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "start", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "uint256", "name": "offset", "type": "uint256" }, + { "internalType": "uint256", "name": "length", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getStorageAt", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "handler", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFallbackHandler" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "address", + "name": "fallbackHandler", + "type": "address" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { "internalType": "uint256", "name": "payment", "type": "uint256" }, + { + "internalType": "address payable", + "name": "paymentReceiver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setup" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "signedMessages", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "calldataPayload", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "simulateAndRevert" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "checkSignatures(bytes32,bytes,bytes)": { + "details": "Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise.", + "params": { + "data": "That should be signed (this is passed to an external validator contract)", + "dataHash": "Hash of the data (could be either a message hash or transaction hash)", + "signatures": "Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash." + } + }, + "domainSeparator()": { + "details": "Returns the domain separator for this contract, as defined in the EIP-712 standard.", + "returns": { "_0": "bytes32 The domain separator hash." } + }, + "enableModule(address)": { + "details": "This can only be done via a Safe transaction.", + "params": { "module": "Module to be enabled." } + }, + "execTransactionFromModule(address,uint256,bytes,uint8)": { + "details": "Allows a Module to execute a Safe transaction without any further confirmations.", + "params": { + "data": "Data payload of module transaction.", + "operation": "Operation type of module transaction.", + "to": "Destination address of module transaction.", + "value": "Ether value of module transaction." + } + }, + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": { + "params": { + "data": "Data payload of module transaction.", + "operation": "Operation type of module transaction.", + "to": "Destination address of module transaction.", + "value": "Ether value of module transaction." + }, + "returns": { + "returnData": "Data returned by the call.", + "success": "Boolean flag indicating if the call succeeded." + } + }, + "getModulesPaginated(address,uint256)": { + "details": "Returns array of modules.", + "params": { + "pageSize": "Maximum number of modules that should be returned.", + "start": "Start of the page." + }, + "returns": { + "array": "Array of modules.", + "next": "Start of the next page." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "enableModule(address)": { + "notice": "Enables the module `module` for the Safe." + }, + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": { + "notice": "Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/ISafe.sol": "ISafe" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + } + }, + "version": 1 + }, + "id": 127 +} diff --git a/artifacts/interfaces/ISafe7579.json b/artifacts/interfaces/ISafe7579.json new file mode 100644 index 0000000..921cd00 --- /dev/null +++ b/artifacts/interfaces/ISafe7579.json @@ -0,0 +1,1397 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnDatas", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [ + { "name": "selector", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getExecutorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "size", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNonce", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" }, + { "name": "validator", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "nonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "registryInit", + "type": "tuple", + "internalType": "struct RegistryInit", + "components": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeAccountWithValidators", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "magicValue", "type": "bytes4", "internalType": "bytes4" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setRegistry", + "inputs": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "packedValidSig", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ERC7484RegistryConfigured", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "registry", + "type": "address", + "indexed": true, + "internalType": "contract IERC7484" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "FallbackInstalled", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "HookAlreadyInstalled", + "inputs": [ + { "name": "currentHook", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "InvalidFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { "type": "error", "name": "InvalidHookType", "inputs": [] }, + { "type": "error", "name": "InvalidInput", "inputs": [] }, + { + "type": "error", + "name": "InvalidModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidModuleType", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "moduleType", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "NoFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "domainSeparator()": "f698da25", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "getActiveHook()": "0a664dba", + "getActiveHook(bytes4)": "b875d5d8", + "getExecutorsPaginated(address,uint256)": "ea5f61d0", + "getNonce(address,address)": "d828435d", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "getValidatorsPaginated(address,uint256)": "5faac46b", + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": "540fb4f9", + "initializeAccountWithValidators((address,bytes)[])": "79aad60e", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "setRegistry(address,address[],uint8)": "eab77e17", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"FallbackInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currentHook\",\"type\":\"address\"}],\"name\":\"HookAlreadyInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"InvalidCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"InvalidFallbackHandler\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHookType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"InvalidModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"NoFallbackHandler\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"ERC7484RegistryConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnDatas\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"name\":\"getExecutorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"internalType\":\"struct RegistryInit\",\"name\":\"registryInit\",\"type\":\"tuple\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"initializeAccountWithValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"packedValidSig\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"getNonce(address,address)\":{\"params\":{\"safe\":\"address of safe account\",\"validator\":\"ERC7579 validator to encode\"}},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"params\":{\"executors\":\"executor modules and initData\",\"fallbacks\":\"fallback modules and initData\",\"hooks\":\"hook module and initData\",\"registryInit\":\"(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed\",\"validators\":\"validator modules and initData\"}},\"initializeAccountWithValidators((address,bytes)[])\":{\"details\":\"it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad\"},\"installModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"data\":\"abi.encodePacked(address validationModule, bytes signatures)\",\"hash\":\"message hash of ERC1271 request\"}},\"setRegistry(address,address[],uint8)\":{\"params\":{\"attesters\":\"list of attesters\",\"registry\":\"IERC7484 registry\",\"threshold\":\"number of attesters required\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers\"}},\"title\":\"ERC7579 Adapter for Safe accounts. creates full ERC7579 compliance to Safe accounts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getActiveHook()\":{\"notice\":\"Get the current active global hook\"},\"getActiveHook(bytes4)\":{\"notice\":\"Get the current active selector hook\"},\"getNonce(address,address)\":{\"notice\":\"Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator\"},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"notice\":\"This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty\"},\"initializeAccountWithValidators((address,bytes)[])\":{\"notice\":\"This function is intended to be called by Launchpad.validateUserOp()\"},\"installModule(uint256,address,bytes)\":{\"notice\":\"Installs a 7579 Module of a certain type on the smart account\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function\"},\"setRegistry(address,address[],uint8)\":{\"notice\":\"Configure the Safe7579 with a IERC7484 registry\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"uninstallModule(uint256,address,bytes)\":{\"notice\":\"Uninstalls a Module of a certain type on the smart account.\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"ERC4337 v0.7 validation function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ISafe7579.sol\":\"ISafe7579\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "FallbackInstalled" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "currentHook", + "type": "address" + } + ], + "type": "error", + "name": "HookAlreadyInstalled" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "InvalidCallType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "InvalidFallbackHandler" + }, + { "inputs": [], "type": "error", "name": "InvalidHookType" }, + { "inputs": [], "type": "error", "name": "InvalidInput" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "InvalidModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidModuleType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "NoFallbackHandler" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ERC7484RegistryConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnDatas", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "selector", "type": "bytes4" } + ], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "size", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getExecutorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNonce", + "outputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getValidatorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct RegistryInit", + "name": "registryInit", + "type": "tuple", + "components": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint8", + "name": "threshold", + "type": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccountWithValidators" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "magicValue", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRegistry" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "packedValidSig", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "getNonce(address,address)": { + "params": { + "safe": "address of safe account", + "validator": "ERC7579 validator to encode" + } + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "params": { + "executors": "executor modules and initData", + "fallbacks": "fallback modules and initData", + "hooks": "hook module and initData", + "registryInit": "(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed", + "validators": "validator modules and initData" + } + }, + "initializeAccountWithValidators((address,bytes)[])": { + "details": "it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad" + }, + "installModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "params": { + "data": "abi.encodePacked(address validationModule, bytes signatures)", + "hash": "message hash of ERC1271 request" + } + }, + "setRegistry(address,address[],uint8)": { + "params": { + "attesters": "list of attesters", + "registry": "IERC7484 registry", + "threshold": "number of attesters required" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getActiveHook()": { "notice": "Get the current active global hook" }, + "getActiveHook(bytes4)": { + "notice": "Get the current active selector hook" + }, + "getNonce(address,address)": { + "notice": "Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator" + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "notice": "This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty" + }, + "initializeAccountWithValidators((address,bytes)[])": { + "notice": "This function is intended to be called by Launchpad.validateUserOp()" + }, + "installModule(uint256,address,bytes)": { + "notice": "Installs a 7579 Module of a certain type on the smart account" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "isValidSignature(bytes32,bytes)": { + "notice": "Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function" + }, + "setRegistry(address,address[],uint8)": { + "notice": "Configure the Safe7579 with a IERC7484 registry" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "uninstallModule(uint256,address,bytes)": { + "notice": "Uninstalls a Module of a certain type on the smart account." + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "ERC4337 v0.7 validation function" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/ISafe7579.sol": "ISafe7579" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 112 +} diff --git a/artifacts/interfaces/ISafeOp.json b/artifacts/interfaces/ISafeOp.json new file mode 100644 index 0000000..1ab230d --- /dev/null +++ b/artifacts/interfaces/ISafeOp.json @@ -0,0 +1,209 @@ +{ + "abi": [ + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "domainSeparator()": "f698da25", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISafeOp.sol\":\"ISafeOp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/ISafeOp.sol": "ISafeOp" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 128 +} diff --git a/artifacts/interfaces/IValidator.json b/artifacts/interfaces/IValidator.json new file mode 100644 index 0000000..329dc33 --- /dev/null +++ b/artifacts/interfaces/IValidator.json @@ -0,0 +1,319 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignatureWithSender", + "inputs": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "isValidSignatureWithSender(address,bytes32,bytes)": "f551e2ee", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": "97003203" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignatureWithSender\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"details\":\"Validates a transaction on behalf of the account. This function is intended to be called by the MSA during the ERC-4337 validaton phase Note: solely relying on bytes32 hash and signature is not suffcient for some validation implementations (i.e. SessionKeys often need access to userOp.calldata)\",\"params\":{\"userOp\":\"The user operation to be validated. The userOp MUST NOT contain any metadata. The MSA MUST clean up the userOp before sending it to the validator.\",\"userOpHash\":\"The hash of the user operation to be validated\"},\"returns\":{\"_0\":\"return value according to ERC-4337\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignatureWithSender(address,bytes32,bytes)\":{\"notice\":\"Validator can be used for ERC-1271 validation\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IValidator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignatureWithSender", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "details": "Validates a transaction on behalf of the account. This function is intended to be called by the MSA during the ERC-4337 validaton phase Note: solely relying on bytes32 hash and signature is not suffcient for some validation implementations (i.e. SessionKeys often need access to userOp.calldata)", + "params": { + "userOp": "The user operation to be validated. The userOp MUST NOT contain any metadata. The MSA MUST clean up the userOp before sending it to the validator.", + "userOpHash": "The hash of the user operation to be validated" + }, + "returns": { "_0": "return value according to ERC-4337" } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isValidSignatureWithSender(address,bytes32,bytes)": { + "notice": "Validator can be used for ERC-1271 validation" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Module.sol": "IValidator" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/audits/ackee-blockchain-rhinestone-safe7579-report.pdf b/audits/ackee-blockchain-rhinestone-safe7579-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4aa62ae75b50d55965790277277b92c08ac6005e GIT binary patch literal 1825397 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 >nJ)I_S$jQfntOT* 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≪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

}Ht6r6cudR43J=k+S7yT_C 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

5iK; zW-G@s;-q4G;zV4zfO0_yX} z1^xoO{3xS#1F_l`_B_r`2VLA61fR18DN-S1XDC;z&&Gw@Wx{q6q{#@sHLd4h4Z??N z!E8R+^X%OcPb}T+)h}t2Rz3ItWE=vJ@ygFjzIm|OdTd>&3^p0eiw-zG#9bO5Jb`iD z%-718b~)X<@5tgnoLuR^&aSxbKfJg+aFA!JshZ_uTo3ioJ)rwamXRAJEgtf|PwHiA zZu;c<+?R2qP|_xe_H^nOA{e~4U~JWT*6^+l ztY54ux`7Whp*G&f`fXg_^M-b$xxS*RAVi=`r!-&n_5=$?x`c*d{f3g+hR^ns`L&bG zv96aLT~Xy-udlhcIxl>5*cmELy+nNQEXA=4#MEQdvWDtCWcR6!(9RKma*bz4%O3K@ zFT~e$a_znd(W41<2Obx@t)EQU7g*~4#ifLe-~B2Q@;-{B>wd_m>!PA}Fh0)(-K@H! z5&>_GU4B*PNccrtR+1zX32I`;e{B~*?ys?axpg#D00WU}pKqKOL7g#3sne6H%a>Nu zzMZpB>Aw7TCW;3n#4q4akbKM}8aJ9EWMQ<`P6Pb zPbrwSK!VZdGBWD=h&H#@r2N-~7@5;tKR#rtD>ATtkg3Z%3b?wcHbCn3k*BmUJ_X_M zwm9Okh=Iv$#I?t)gXwd3`6xxch^H+Y} zuq8g(OPT8=*Z(H1KBxQ>BL2kuu+i-kJMTdHn@n=r`R$dg!oD5ltG`Zg#=b}|Y>V8+ z{YKd-q1rIy92)3*(tY=?`_<|7QPp_(tvf@a@m{>IIdekSyz;|=?84K{DY;_9w?Wx! zLmb*RB8)n1r_dFxfVzMhuEhwlgCHntS=rS>#ZkG!I%*YZhQw6 zq7^Q+21t9M;I}aOh_TH{e=hEt*DFA3g^kJe0n0iI!DxnpzlRrPI053D1y634FKWV` zV3{kzm8&@kd-An0gSY!h0x!2o_isR>k25L({V$BN3Krdb+b`F!mGR}V%f|oG8tzG< zRU^T%Q*mO`pC&|)Z+}%v+WE?EoRx%onkTg5?DZpG<7vyj_3KV;Iea;_CZ_QO_w~5U z_3PZS5l(U^~*EQP40_@ZK%kklU1dLk$9CU}3tt^VdG&LDGPRlEU(yzo9nJu+akX_Px*VzKN-)_*(8a&QZ8y>%vg_?$^B2M2jsoFKbLo8&tI0YFPci?w!p@rfIy!DcBge#T%c zrc2`yT^ayYpuGb?jE|Ka9kYE38Yt2IIEPjqeLR=iBvOITh|I*o?xicp$c!BKOo=Z| zm#U;j)Mh#`i~7ENMq=@_>y{|y=&bI5Oa0icGCpcQmeIGCQxJ(1r+D{?V2 z79ynei}ZW#g6_%JQ)5F{e6blVIZ5(>3KFwf_~Vzs^aF-ejO*TA>n+oJ2gb6nj94d2 zD{fXR$gwZULf}(Q-aZHrvJV)~$xnx1H98eCcW?v?d$YkAOv(&gBPel+Fovl zb6r~iobfZ}`~6Dnf8NW0K5K2A@Nq%`C`C=89_%><>7qMs#7TBUN>9N3Egv#6!o9ap zqC0UF<8#>f-wMBHA)kf^B8W$b!94r{}7+Y+&cDI#p8`i z@4uSiQmf_ucR< z2ifU?am)?V%~+ohVPrFFQTYs-WodphW3r1UI@-Q_|5x-+ZYpFyG<_(00W{X1vC({LlN47{%?b#R4Sz;f zg^@7~n;0G=2_NP8R*#st^7kdL9P!NwQ#|JpUU)OU?R`m1|3X^L|8AuY1z}tt=-o6urY%}=sp8i`VFWL9iEg@b1iVJ;>F`7? zZj9)8`Zn9*{nN@I|N8E4X%_D$E7d|q|GZY0lzfXt7qVBCnVfJ*U({&;L~EQ|%QtKw zW0|7ghI4h)0VlKDWm4OT)hvC`QvYYKGs5Mnf>?b6>bE?}gryf0PL_BtKq;pnZSFT^ zyAVM%Z69bZB0+Ppc{k7H75yxkK$~+L1ql5qv!ZSuk~N;wsfiEX?g>ytTOs;RJP1@1 zCSzE?hZk{jp7MwbguiqT@}t8yJINl^2~7D+;ZE|((v8T)S$7O0qQSfz^w`V&d4?Q%hL9W3^c!4S|0P3y|3^_URi)BcaoT-(O)^V zGNbBJt9JK94B;{jW$Mibuuk4>DwP~RH#%uj?K772y$HMQnwA@ci#5);& z!Ps0A1&whm>X&8_a?8n3oN!Qlx@{w=O~fSS@Z~`3)j?P8Tbx6>lg8&@aw5|JlzuYp zFb*i1#LqWL^G zrEKutWCOTSrc9h5l9uZ9vo%;ThL3QJoL2Y%G6FCT$~`ie7bxtPbK$xT)11=8rRo>Y zR=vA-fg-Pjd?IWU$T3>Y0gSFL+!vgy?Gsy73KMN{}hgWw@+x$pxPiqLU^R)kPh`CFojcbi7mIwQ2xx+ti_>JeJ(sJ8p zn1aaW3fBE0n%`sd^%;VU)v4OM%p)Kg`%10=mp9IJjW}2f_({H;!LM~%5HBuzU|fqK z$}Xt_THp2eX$mRah_mT6iY+RYe44+-{X2U5uE;PHN9=`EjQr{^IU;sG~0zh{j;Du0VMe%3=D)7z`$>9OW( z{nH1#50~EdDj~;|riYTfxSvl-HhA@2;_rw&(x~Zwa%tID@4i4-eYtzt(a#B$pu~J9 zGT4SMF}rqkIqsou<6w|HC_~4$^0`Xn?NU1#8q;WwialNo#<~H;_Aj!4&DO~nWND0^ zMTQ(mZpjb&^C*3<+Gs@^NUJg!&fJL4Cp|{Va%S0Tb|yxQJ#}zy`EpR;$F_$Fy{Gp5 zOG^#fadGzPVjJwUJ#pO^fx|MHdx>G&QCn26pWZ|w4#)42g+10;j4i5)9I=iVUSS>~ zo5XI%5fm&k@`MO7vAIJ61fPdOu9`Oe&YDiVYtHQo)@=)w>_nbwi>s#wK+^G_1$qW^ zYizLR`ZTD7(7=(j<~1;)G7x^Y-K5&TD2h`1gn4A$gnbxCq-jj+_>BOZ4~j45C1|}W z-pe`xVQ5S2(bmI{!4IiuWcl5iLdbmB>tcW~vVj9zVNOWy9|h6lt1O6OyEdN%Xsz2j z`V*=sp9x@r7}0|efqbV8=6=$(o%hN?!_&W6AIK7*vNA9Ze(2VqS?sTJt5tq+*^a1j zOL?^FKBsW&v?T3_;f+28bhqd)D*ezdHGO)w(S6fr|Cl~!+&WgP>{0*j9EsL19afZ6 z7TI5#?pYT7h#zskXlAE7o%A0nTu6=9YnRzB+e8;8_~AJD4ai+=-LsfxT;X z2VJk%Ap-?0@(@-)yfxOe5K`ZzBmZ82&Ueik7lc~84V_De7!v_zbd4$Uo>p|0otoSm z=zX%#l%15s{+OLfJcn zqD3;OYzJXX#Z5`pN~vfOMvE*_w#l9?OFiHDJOh+KN{5$yswx?L{o-H8S5E}n6~ z-BZA8Ta_CkV|^3|uw;gSVE0D0)dt+^aViXh8h}dYQm%cUd8bd0@w!jrZ!$ zZ~L)&G4x3^-`B16TMSel1A*ag2HlH+P0?)kmX*;E`SaU9e`?p<1s_$-@}u@N)mMe% zFygEJ(@A|`D(PgA_tubko#-`E7OC22>PJN$gRvjA$kO@^v}l?8KOKo})NUrQs)*B^;MauvN}5AIv2eFZgB|Iq0dZw`Uv;@N^5LVOB=wHNL|M(K;Tr{YSl z?Z5t!3?!M7Jf@%jlPE(k4xiZMIs?`>&~$O1){T0res&?^QO7ZE z*orkH1YjLFgzajx+x!&7qFl}P*jxla+=9}gPbTqGk&aikB8>ojVBeu>0cd>bC?@)m z2c+s_heR<{0|z?gcTnPCdSEwd0;-1;*{I2S{$J!awT*IRCA2G1R*Wj1c5!y10XSBefB6dgWn zr6tf2c!dasf^Ngbzhr;i@UXfkHY=;^R@T9!=R#LxzX+wAnTVRZUzN-6=Bk(!lOsQb zj}8BojT#L775es)ym^6*l`ws!HX2Q2n~9m**zbypK$cSd>Lx=XtkQ+)*K!?Zs5=lx zW0k^;wZQClSX~)$H9cvI_Ji88NMn#U#GO1O^fg5u-4g9h;C_`o#xSA{ z+kh-e5_4gMLgZGcqxYXV-gH{tg!wN|LyGnQ0_os=`jrs29Gh)^RF-r0ySCYjo0z|6 zVC*JwT|4k4T(i5p*NadRSuh60$kG8ej|Les|BCWe*VOJ>ZS zBGu6IQlGc~d^_nkdv9xJD}y@oKKjW;>;0P^)x&fXh_?JgqdYJ{AW?JtU(?d`t14*7FuOMN&J+Nsv7gdbZ!9x6(|Fw(dO z(-5>rKgxE1+ehS<=Ot0YtR*t1FzH-u?)1+?NbdLI^mS3KMEeXzC`3On>m!D)5r^8N zr8qlQ$Zq`+LSYl=cZ%#p(3D{8c3Yc)l<|(5-o1ujqD9{w2tcF%#7~wuy6hi<*#V0L zug~6IbE2yQuKpL8b^SuppzdP048C73Jl1~b+6vxst?Fmt(|@w_XrgGG5H@x2^7_o9 zbTX=H9V!F_#;~nQBE*tYK(DN5@`+=TSdlu>CTn3ns6BpC@J;;0uzKQB)sx>95T~wZ zQ1XwLMO8tyUu(k^xAZmz54(L)R|%|FSy#WF`#jjWZ{NxFz0a17=F>{zjM3*5`rXNt z&p`L+dxQf)x|}{*pbWhvd##H9E)i5p7FVBNuKf-gj?>3Oi)rg+=|B2Jn6Ph((~-`l zfm**Olfc&P5#gk^kzpqnp=@I3sf|AhTiD8EisFi4VdS!+!yWT>Le%?3^5P6>tgnGN z3(K`DZX4I`R9g*miydfrvnHK2m8J&QZyTeo);nkpt!N@eIOSbe;=UDM<2pmYtEHj9$&u}BLo@JYZ2NXC2IQgvX{pu$`vs78#V?RmGAe~Wr zgj=Mb9@ia~}X-rLR*3e<2ZNB#J$t~GN5HOmK?G@kncYCeMiN_0Wh z%+{z7wzYA(o!|;$6uC-vG&Nj=QH=Rd`kYg2bYyJ8H2T0Kct4wep|Et5DqH|o71!kPZF=bV1^WBtEj{8t%`8u(*rtceC`<;3iQ3L>Ey z>AaMvV}z#N|2&?_(DgtOv^d`fwHh*5cdcI}mMAhT?{JP_6gC00ItO{D6D*JIwl8dsoUCZMOX zc(?a zAQdZ&UPrD5y?T0g^NwefE|7D)e|Try71!&?s3+~GcAgljQ~!K)>_*l}vx>FWoHs8i z)ah|GXa1VgcSaHj>`&+{G*c=crg;o%GK=*lie4RuTtQy)nky^p?eM>a-L0;W+%-rG z!nqz>oOKA?UIkxAX8NP0vO6z;+xmo`=%NN9VOnwST~fIA{&zQ{bRxUkvv!sq-*<)) z{6az+-S@bwJM$V;{;%7e#0l9NEd!VLZ4d@+xGnMAN-3PX5?wjJHi|nbg>U-b$Hmnq za6A6E$O6x1*c9;Ja%ktL(}d%l>N+}qFLcQgQB@FO+hhX{u9>ye?Gq*D22g{?Hf7r=!F@#>#J## zD%QZd&Atcp61RWD?J*$G{Zi({2B_VBr3Is*Ek%^RHDnju{&@D_JmEIGpWz=@n)S-j z9g)}wu`Y(K@!C7-a_3Hw!4X9)kzmpYUI_aS+2|5=-T1hzLy}ld3t5Ka#!x*IX8IkN z{a*K3ekceu*(2VdHc%f%Mj!5nIJTUaz*Ifc?sCr)*Xc1rlzy0vM$gTa9k|%?SKXs` z5gY0`^fbDUn7HSq9~u33I5MtT3^^ssIV}plU;?-7@fKC&=z6}p5GyMQMrVAH%4;h_ zXG2^sH0ybqI8S!yNTa^@>&$q6@Ah5mQ6CB`{IB_3=!F&dwtqJZApgel(SVYoOISx( z3W=(T+Rn*JT1oflk~pas&wJmSi1ZPnZ`#QYMc{^yvhV3kb);qE;)PWNw&&v92%MO* z4d~VZO$Tv>8knC<-(A=mCHk(7*3-b0+$ad7J8~u|2f5`7(wR;T`H<+Y%qWPO=W@sz zc`)>nOx?*`ix{!v39L2uK`eOt%N3~O5yU7w^G?cE+#So92&xbP;oU${hWW3lq6|nV zs^Oa39zg9SANCyy3F;$oFPJzWI?vk_8F(Jg0A{NSB4szq!T!qp4WA+ZUg))qG-|E- zU%hdCoGiyt120U#WFD_UbmSry`(>+auOpO;RK&Mc3ZE5Q`BP+NVu~J09ssLhRRh=` zegvQ$B>U=ybC(`8%!SvZ9Rc9(pOoSJ1Gd*E4RcR3f$$&C{=4^UpQ*d2N3ZO)l~Ds* zGGhox*4lv6Rgc=!wKQ<=r&~XcI(P+A&_(d$UjEzgZaDpHb9LF7MptRH_*bB2pe5E3 z?AMlEtuotnApKn6@s`^83mh9l>4e(h+UPPdy0ycfv**|Eh2mZbW1@w^=yMUe`>xdp zLp)3r)}6qnUboRM`<)@;wDrvcVM25wqjJO#SenZItMQXVoABA` zZGn}E(6@%S5`c0Y^-t3)!_%CwcyjsdXfE1e>~=ZN7<;yS9OOIDRTMo2!O;4BKUc4n`s5 zPotw{+0#L#EVGX;MrmonGH78C0Hj|R^s5^G5kvV?*+xjhevQuQ7+WB;cOz5p8pVjw z+Z}hq?X0sYy;IpF&HyP3)a}jOA+kM~4v6##uy-U#qK>{M(uYX&1gA8(eag--+)$Vm z;6O9`1hva=o;w)IRMW@fH^A+6AHHo6H<^SBTJ7>_cd`&TJST|0tYL7f} zvDzmcO&cq@4#znSiE7~2ypeuygd(ID@$?aa{>q5%kwlW<5Y5T#8GUne{O?7{+${$p zsshmMN08jy%k%spIC#GhZ&0o@0b9ts7bnhH=O-GTLq;UxNV)-?aqo)3OJ4~#wnc70 z@h|XG=Y7jK=Z#nr$a)d;X(zVU6VYg!o55wSgkR|Yl5dGi%QP=TbMbDrn=AN7yi2Z#ZGN}Qo;>FYELad|{J$R#nY!zfU&L8Ft=+U=-b{HNYu>-!Deg4o;Kjv#S;IH7(d%+mB z8%kVfLeL_J($Lf`(H%5Z%dnWn2EB-m6^R7)`7q7DSEV@rzR&HrNd(8xo;?Qa=Nsu` z@}61>=+fmXUHq^8y@_6pI;IE`$%VL64YG!~Q~IN2{=s*j8&3HphDD|Sdo@>S-8{PT z&mr&ygcsubsxFtD@C;=H>uaL>TqZJlFgj<8JYU_V%UhFMN$mGsx?{{X zT#ftz=`uTUz_@*ZT=n0ETS{{L-MW7p;}Pl>ZoCv7oI5w1@)|pRyC$kn8y(09--KT| zH+vH^%m+)fxXCRobO&=cT+rrn$myJo%jPWg<9|Ey^*!>_=2(bxP@XKkHe1<_nX~Du zi?B8rg`6?}COiCgvS4Uc-8|O^)@-;~R$U+DMh!#lqC>G43Dlk2GeXv#GJ=&O>! z3+=Y!8i(gjB3HMD5z7^yM#qqv$e8ka2){#WN{xrg{mKKz-M#*8E4Cp(S``y^S~6}= zY^vc2>5-E1OAq6d8*4@5XXPZbd-!wG~@Vx2W+lC#_$=b(g|uE2L~ z?ja!sxg`Jbt{G8WvMYVh{2f0OCa`mJBg&pC96=@}e65)g*6mazv>1%4F~_+(nSTMZ z_AVQ&ANRi(E5rSfM=P1!x1)rnwIPNC_Rgm4Clq$*gpV+K&!D^Wp(sZv>4@Y2f5zwW z)7LOhZ)7Avf{x4XW9rX@`R~0eA#MS-Y_5S>Sp6XaSih46xXAm1Cdq56bv~Hjn#MYZ zU{su;MBt9L5xq1SlaNs?iJF(<#5{~8g3!<&=T=ToE7AX+I@*HJ%(Sr>(YpT<%7E(k zfe5goqhdYxPF$;GsGSKn9hkG$kGPQab_KrsYEYh>IYjm7{btUD5PbzW&R%n~XlTN^ z;S`n28t`_N()+w8fa37=`uf z-rHfZ(y_g#B2~b`ZuDnXUK&+0#6`y%-WK5>MRRyQbxWKid(A5|KJmq?K!0vF9eE(` zyFRKI?%Jx;Bo^@>(=- zce9q%kAPn5x+T~yDB#4pB17LAdt-$kAO;VuN;*74}g?*Kt{hHD9zn^R*v@P5HQ^oXeRj7V4#>SGV^cU zxi?aa+cTTDVI7QLQzhg*t!bVwFng!E@~sjlhEKeS-&du9%OsA!PRB`H!sGcnG88pD zVpgcBiR4BAA*@kE)~c1j5FBl2#I|L$uR>g_0SrE+kNeyI_PBZ}r$(5~ECW}=$honj z0{QLc&2#q%pxHhIGi;F+1Avo|TM>076`HnEKUkxX~V60t-=lx2$Kv8*3WL+^a#Op(`+v*Ai4>Jy(J@+~@ z8{7;8Ufy%CENo4GA-Yl%9g<*+&@BZA$!XtRMgu2;KoyUEMD-mx^P%J~dJsNqhb>@h zlQ$eOG$yc9i1f2bFQ2-d7jk{q-S==xrU`^G2Vq>WW^aUf((?GVCJN749+%X^{6o0+ zZh@0XYFlI^-d17T1*4&XfB*ZJ_4_(7lROF^=$|I9GGR=1M8NJi3DphzCx@= z5{RSbVMEDWO_MmsVMXmdpid___#J3MdSOtZK%ko6S(In*xTijBueb&$HN`>wH(;>l z_BkimfP;D zMnFB)9EPYlb2YPf!@<+TPglypuKR>ok>J>mJ>=RPwfj$fLem~62)~`Z?)Y+l?weAn zvoS7UcTd2SqoT%duAFnIxoKccW;MOa*k^#B?Map4Snch-{2H@j$b`fN#=SR2&4qay zzDvb4z0w>r7=T_Sv^7A0s9f z2w+4{f~XR=Tn#C&$N<_g+Y=yCksMYANc-qAG8psA-~zs#Fg?b(8}jF*k`l!@VTHh@ z2|kxC(YNntqFHDH$^SZpy7Na1cMv%_zlTn z`M`_v<`D11(YR9GZ^2ts+~-fG{J9t;(!e0w($L*un(rVvFG>1Y03EU@<9Q{@?%etq93TFBnGd8e&VM+msE4_Byz{A4m@Nhz*?3GyU z)4UN%#kLKC*H?^g#k3)`-vGXeRHqQdApUz2O9jlH+ku7p9rl<-FuD$$y-qi>JMIPn z#9occ_-Y5v@2lFKHn6UHUR$^W(hz$!iIRa!N^rhR*gZHoPq|w5l%}k!3Uo##Lmx(z z4OEES^g~e=B+heDJd={28yEP4^m(9I1_uzT-t*c(2BdrbZZ)W9LzN+}ILwtHiq=M( zXynA?LB9Vr_ytJ-q~Z0KzD47t55u=hCx)#!|JM3K_7x4U39Puy(S~38Hjeb=Lo>z{ zwC^Ai2jhZMePAO6m0+eC{UN}70nk7VX6*YoS6%bm;-|Rj)48sd54Al2Hgt5ZM(^lO zPz0xPLi2cSr4kgZ0`teJmcj!ruZkuhz1qLOlc<-SyVsACg-~^KEDx45Q^2{)|MwMd z-;ac5B8-DyQ|S5M$Mxr?`Jfac4Qj|waXv@-Bul1W;8EI&VOdnwq;{I17nL_;10^zx z;@1!N6{WjjdBZ-E^cW{9euPo({V@RoppPheRf};HZnqKU6x#E_PWC?>C`B+>5(EP$ z_;n!MzO5a=K)0Os1FeMS|ITlYqzu53Yzem~u6&eibz$2SwKyQQpH;+O5U8h94Be3i z0W(NN9G_3hy7$V$MiQ{Ui3x$MHn2-9hr}tcR(bqFkIf+DHunxD@#%f3u zK->~>x-iU1M+tFo``=#|H1Mh{ouLaSh9vxGcsd3 z%9hXem3&i~+kx3{fhatGHgcb<={|3cN(~F;#WaiJN4AlhMLhwyv+X6*JQQ+$2)T~V z7P|$70o`kCd%t;ecFfPiCFy==BBjmTNYs5yq2iQ%xv~=U54E(b*~-^X7`6!(0S3d{ zmMKvg1kRbP?As53X~MpUMg)CdHdj5Eqeo3_Z(vqIiH8Y^ICz3KGDoOT4$SQxSE( zkqyAOc%=*5#5jt{P9g7LqXdXY1rD_O!bB|5S}x+in!|}0f9&S{dlQWpgZ9*o#*+94 z1{daRkjlpn!CLQw3UN7eX|#HesM{o{{Tz$YKLM7yotm9ZDj>ymDsAkdF8*j=#M5^b zo-gJcCB?AF7OmIG2^$){SSM@g4LQ=VaJr1RhU?$rVAr55@&Lg5r!y zan6fbs6SnZvJoLSlj-BI?;V;a4K=DgpTzqgwdPhNxMGFqfDu{`%Uv&Gh6$KAa22HxpH*}{;S`U zo!~xSc1OcpoFf%Uq!&p+!Ou92oz_SyKTI=deeT~KvFInb!Bhm$HmCS`a&=)~tohNl zrsUAYoUI;O1b%_69HjIIWwuQ*#5p_VI)pi5+aM1i+fOmE==PHY&OsFwq+%-RqO!XCtMKFQqg7 zkkDw)?z?Wx9Kxr4V=4U%sj#;aP(yACfv%lJ0^RF_hfCs}Oc1w^F2o=28DAaO?<4Up zC)Kr>-5{5kQ*vd$!OaXs3b}s)$ahaB`+G z!_DkK*w+>?=I_K^CCCHq=}7w}VbuIyk_gO)^Hcso{dd3X%s-_4gPSg1%(>^oZ2z)v zEdP^;|CaIW2r>F)Fz*OcO+kIw9U^ZhJL3v8)6}f;W4&IuH^eu>Wz}o5-EUz2BKJX# z)o!?<6|gLz3Y5sLR5k;r`+i|gnrPNN(E6TI`|&1`JLmfjUktivvghfK{THBe80zmdArhO)0}@oA@@>~)Evoi&70w0IPKeXB>3=i&D&eMg zsmAD)0QAo>WEmWfPQNh25TOQ$x+a!eT72U>fy)!cpETp*fRKUtfgS1zRV#O5iCcuQ z(<|?WjXf0XuNrtA{ivQ68dv)PaN<`%H_2&(L!bJyE|(nh42|4ZKl9U35k0rrw=;S7 zyy!UX5~iCA`xe;%nnuO}QBu~07Q+iC!HFPe_P-A!AscK;_jADq;ZciCHBM#EbxBLD z7NBUyz)@Y44&YD_Np$v1^9r<-pEfs-`5#q7!B)@CzB%a<9=UX<&E*ka+jlKwpO^!F z$f=Ji{V3>hfH>d8lyNYV<0*MSJKD_y_{?a=UNNpfaLKtR*|_eVw0 z@bQwja&R0tq~25n-Hmb&{Ye{^;0X`tMYKPD>UWs)%nX}~I^RqK=aew&L1-HL>j91` zMSQ8^>7G#v80^77zrS;U!GszFAc67**jGP_yZL|MGVfO!7}y(CQMH?k;R9If*m&@! zj-E9Ts9O>TQAT%xmI9a!)9BqW8LfSW-Plg#*zJbm=H{w66rLG9`Q%#F z@B7U@RyWOix?<2(?PoSAPt99U^Z zONVhEM&*4H(}BTQd^p$}U=(s=AoOjR|FfbLE=>tlHMV$L4bfHA`M1#Lf0=}QB`9xRK$D4^QqBgyltV=XxH zts(AxP7&?Y1TU$($3>!j?5G)t#@7o1B=JYt?20vwEn47s-xL&+P-1FWHAYuF*>)rg zOo><9Azk@OoyUJej_spBbHwFO=R40PV0|$QXnJz)vQ1}}tltN?0DRvAAoj~OeUA2Lj3nrO$IpEPAn`wo#D0Z zj}@3)jIfbmUs)43h+18dNu;|o|Hq`0=(@p%M3!tLIGM3lP4xY$5byQl!-7%WW|#se zCNs*z@-jAY1!Uqjwc~_#`NTCG5;w~ba4K*N&6kDPDg(p@O!-{Eae3eQPC5UT!sZky z%7g3G(Pm?U6sP#(QxK403q}gVqKHQ#Y-%gA6km|%Ax8O7y4#*EM;$|f>F^I zQK|tfd*WuEXTob#6rT|2^Cr$e(?0+jV)xXXwj!~PK3or>YIV9}Bn-4@8_i!_e$nig zRC|5v@UB-^-c}EIf{%s&c>b4;27V*(#Me^+ZDXb?564TIE32pM0U=?T#PVkbmUAkgqkqiVCq{(i*OI+ z^9{^SQqxXENfQkNh$JsFWbWrq#K;R4t+Y$X$qNF7mWhSnFq(c2g4cc;2vGU&-)0-5 z7D!w*(2D7GCJD?m`w`)s5zA!df6A@j6(s0K3D!r7!{cer$NXfvSQEo7sW4zkTsQLg=l^$J=8*Hxvo8 zGp(0z8G?W4BUx~7!jcedBgFHPM(a-j#n$)VQ|U~$kr@bmxC+kzbRke|Au1gV=U@KR zj{m)BH0eDsy%YTCzdji0m^J$Bvbl4IeO0CJ;{BIFBu-~_K#TqXQB=ri0A%^gnqgKh z%ZuSF7wAz7t1bZ@%%Z5L1c6m9_D02otd9O|16OZS|3Q?w3XpxccG#a%;kWhelYd=PRyNZ7w$WPAOQ!489xt3c)j0&{JV_e5mWLz2Rp z1sag|R$e#uIpVF(gt&0cvI6Db`AsSu)w0G+(cGw`O6b24GA<54hwUnS<9F(mMQq`M zI;y=dqI|}8Kxj3ajI?jZPDi+dqb_Mr9fawgU-ofxA#r9soMaE0rJP1QWh zyb0*UJs|l@fC-7hO+C-sh+oy5^(%6gYM&0i@1+4bsebsBDGtDOedK}rnm6;qak4;=vM%PIh9nS~fBTohu7iDUyal9mcrj6zRz0yz-Y0VE>2 zmhk{6M-f^U;70N?UMhX@XaX%c!66HdNB0V-lwRjyDtY5tuB5sOcB5;$L=yEO7+t%R z1OAw8`VwD@^wbe_ag8{uvfS5>4Hq`oRj**s1wwHFZvjXE9l7 z`L(O>hk%65-(F9^#hczqG!IWfuDR7hzPq(1(_d7jquVdJpxbSb1ebrZHT8SQ6y9Xh zpvB#1nE#Zm-QD$4kN=fz83@<`GR;qSn^(*okVX|Y7J-_O%Bn*~fMc2YG%#8Lqv2!s zdd^G9a5QwI-5d3iH;~z@^9hrX=r6llxG?+A-|Qp+J}ibyeG~O8H+`dmFciTrDENqZ z^n+;%!+7dqX#I(LFJ3^cud?x8(y*A_8>hjmT0IfJ3 z`X@jGu)vQ^Bq(eVPDzjaw0VZ{3MWh7r;9(bClw5f4!p!V>iA*&_>9JVfycYf>YY*` z@an>UO^r7wbR}5?op<~i`AcwpH*=m1=^Vri&lBYwFzzhj%s31H1Q9fsq&q#`c!D7J z{XN6e7f4N}o`g2f56eoSKs#-KZwc!oG_4Bn1LBnx7C`1mW8fh{-h`$t;jQoP<^iT1 zs7m96P>HPoF6G7FFLL*peHp$C1dz84`T!^5!*C-|t(mGwdGBFn?YIA+hRZn}7BfO( zXl!v<8kee z49+9@&z#(|1ZLMkhs>XyCht=<2>$B!cpBxF9$5*s^0={xB%%>=VIj1 z_G`E@8zGNYgH#OqdG`3934TgCCUffNXa4DxX=xd7;&xg^MhfFrH9(v3{A zi_}iP`PCY-Fb#^9CDEy0MTY?>@ln76v=>Snt!1 z#4J=ma)~FE{Fb~e-3s8jV$(#JQ#JnTlNvF*j3kjR$|Vx z27znFZzK)5K!P7to+1>7BsJu6FPoHKwfs=Ll0K{>f0G5VwyEogx z+YUgYvoPMYF)nd!1&OW|YjqAc|43}2#{%53Pm5Q&Wi_>Qdws`7`im8bXCxBsaUeW3 zvpyrX##1}+pJtve{hI_P0R2F+pnyMN1|d+nY>^r+dN8?4SDnE$Jm z6bi2V0Bm$F`o3qF0`?%;gkhTjLb=*w$aFU*2vxjKlR=jwL^%~}iF`FCN19D(1mo}m@@J9R0u8|m9bW*(gqu_f@w zr$l=!xchT!e(op#j|61y2 z7|jSgVON{_b3Aw$Hcr-! z7M=QAyFzd^Z@_B;yYE)^hr^e1?v0FuR#pyv9i`>)8^;Bg@FtO~u1L#?G7?Aeq-mmxjO0 z%m$cO)U~)}wadaL={3W94S1CcYJN-f&m9IIuKvhUfl;9FE1wvRkuy&h;Y40XDt}iz z5p(Hm_(qaOKl-dAh$>93M(mpL*?f}j_7p@3=BI-}NDcqnpn|l-_kjREBBw`rddJN; z^!z5t-05a~FV?4&2(cH0_=h0YOAEi^ca>5X1?^E81 zSzYbFHxCBZtPBUJp%n~6+-z~ULGRjkIPsIqMqo$%Z~7&Xx+c6&KnZ{g`S;9A0@V&^ z9_$2cfm+tWn~ZRA#2IMh{Qna|lSA(GGhBepDlb54`(pSN!9Z$b&|7MDCrp92h8!caj0v@1@vD4iPNzqdO?N2>w!_P9Mx->3kq=tZIDQhzkE9q zeQPv$43^Cs|12BeAAFyl^J>0xdHCVF@%8!0BsqF2?AA19-Z09b7TCb8F;zfJ=) z>nNkaIZRX@kuVfuu~$O2Nd(SZjSx7z4r6?6wbrc9`$(*pF?G^n!p~NB`39P#J?-DW zwNuHWwQ}~rVAZJ-#}pfcVyA%*RJF>BR@)%=SCswmid*lOZyI>FS_BrA;bcKT_*(w@ zeob_JMUX9`)(+c`Cck-@iO8MaGym@KeEqG}04xPrE1iDmTI5#XBtU^bpzLgr_4ZE| zV*gm_`r(jkJqUONQge^3;GFSs+X%4H7kePi*#G<)zXzliFXntR9e8~&0pO>j?kBa5 z1EZN^chI4LDMvE;>-4HhkJ7AoX=;(l}I$;(UwD$Fs_#U-r?Gj?*Ft+s)< z^7nmJ0DaBUJsMo~WOIJIo@)hA67r)w9X zT%Lx`3)1GjJPA!Zm`CK7>;IMJfL#9#O|QfHRDc(1FBY}|bZB(0k`~C{EJZlV%4UCN zXH(`z`@4r49}X~bEF#OqIDR9)hTWV2;_yFHQ=gdt=CCZ;-VYPKWtx59=hh%Brt1dHyH@kZd2Or__OBB`IK<=hzNr+2gQd z$PSa_F#hG?mqeEE(H)585_mkax9K|Jt&l&xS6dV{KmfPA3HOe6a%X__mem4PDdkrJ zct|s}rl9(b#Sd%h6%;m;-?M;x2++zhn_Wn(&l7HnC_`fa@WpZl3N-XcT;Onqv|cxe!?_pY)nl^SFaJ6i8NW+X*Cp>bmp%>#D7JjvGG9Ii#-pAy z@xP7ccvJ(#0-L|^Uaa-Ng$4cEh9aoxPX31?p;;PofyygPY2j2 z?pkau`AcFCxw+UE0cc0RX3Ql?S-z%X(OPr_k0k$%MTnkiR&A8bvg+ z-eD_Pj=S{0dp1kJJ45%y)@z3+Jo*VL7)_qfD$qAqMu7ojGp?(+FM^75v*W!kqV`EPYRYH{(0ZwtM)U$e(TSaa z`Jd*aJHnR>-gmQYN9|7uLDdV$7{=dzm3{Rqv1A4*NY94>LdhC!RszTCQ13$_K%K`ggII_Y9qA!)rNL;PwMj z^uvVqYedeh2{JrA9e-8SL2dyfQTLx|ucb5xgdNDY*B3d${dO^{3jE zFn0yfzj|?%6MitR`F>}#Ng1=FuZ>_2++s7C>o!K0fnE2vc%m1*+Xy_Cne$9VzC}Wd z{NyR9AyUZI`P-ArOql0+sm18lTZ|jCuj(~bkn*2*uTh~u-)W`)oECv+{HL~gpcckD zO!*OMBAnv%)XKXbpO zQ3gMjn)Vy=-Ok+bNni=DdCxe!WYdx$ur3d*HF^HuG_PthfA__x5%87wE&o;ddo!zI~r@rs3}%H;G)}BTrI4K51|ls9OGV3EaQ0FP=(@ z6`}XGHThk0HBW+OxFQ^v0)6I6|3zQmBLGUGX&HFtfTR%biP$Zd^@YvJP-+YWSm$mb zWb}dyI%zwniKPCJNmvC@ZzI1NKceP#_`RV>tN%>vBSL`&z`JOStczMcIr9cuxSN_!z?j(=9T&4 z$^7GY9td%?H~kOM6T;njhT+RLko_lsWC%PS1nXfLdRle}ru?zjE^_t`!9E2snD&w6 zcmcMdOonrfo$&?Z?>%>K8#C+I)$#q~k%~r9VAffual5{-7*MQYsmS}Z**PFZEio7$ zTmhH+93*iK&fQZT+slw4Hfa&y28Lf>44c}Dn}?j7of9P64gK7MgfeOC ze*jYxx2lhpllgw;+!FO>KjX&$!xL`WHStp#SKcurU2~V24e{kvuJ&(++OMlv92F=5 zR-n5k?uZwFxAl7V20Skm^S7%6{Lg)_Go^P|<3C3zNy-+d;P&i15Ot#Q-0}3R4GndE zH%}4z1wJ?LfXhefU+e&QDql0tP8pc)h^$PLlo6u+CzmhxPV_#khH)S_AC_PfchCP+ zJ|ixmLwT_~1^W4vUf1c{j zo?8b)k_s}fU{?@P!}NaqR4pa{O_x0Q-4SUhp)M_#5L{I8T5xE__sG~byCYqvxpjko zJN^_$zc(FSKoVZ>c(7vFJvFtyKfLGf#FMw=&{OxRjD5di$DSi>NdTw`99nQSY!8@F zm1Tpsj^&aJ`Udu_EJ|G^2`AJ)dW0ED)IjiWM^nlk61cM^*lE))7oY`;8>4VV%Td2` za`?tvo6>X2+Qf#(^bO{%XM+MVKedA)lV|9A?p{>IJr|1bsMf(Eb1z1#9(ws~MG}ZXaOw{5< zF?E+C4@}&KHrlhTVzzw^B0PI%3FsT^A@=6yG1L(YL|7*Y;oqBvkoU zgnfLEsJ0^K1O;!=v{D^h5(eWRx%?$u>Av1_gj`q9p->^gQ#PAY$2Av5k1mZEZEOa8 zyOvW(0q*cOa^eLH9H}Rrw~~6pXU9qfa9XXVv2Se<&PVI|JHVm}Lh4ec-D1<);H~lZ zAKCX0+<)UHHfT#iK?Jy<09kP&N%u)?xQ3DT>(()cf*^v3nlUuh0y=H`E&}jA8j9r57{3h%v@4*AG4^DIP&-{HG1q_ZtFg%)E7|9g|PbQ=?S0Q#jtYwgSy0oQ+ zYu%8wos-|ff9ImJ5lZ>JA{y#+EpP1!a9kHjn04O=fI65$WberfOlkjJCOo;uCFk5bUC@?l8QkMpUcE875|q3aS+~i3A<36pj3b@p zRq^u0Dtj^6#D7itZpC+-;$kVh^ORZ;A_QB1*M#Ew?+1fe3bVdghz;(nL- zCsc7XdiskMCJ`OpFq6juL)oI}(cR$<4|=4Yz-w!ZCVD-2(FzT-N+I-Qk*4JvNH8kW zBMu!JT5?U6e;aYK*I#|9P=5=nXf=Qh&N;7i*aYGIllli%b3|8Bo|C=}Run;c;;34l z!NwHCslW?O46d3Kd?{r1Lpjg}gT<_mO;`wwu2t=v^Ub* z{&ObkS;KdYplErj5CRMJccFN=fP_Re4}DO7fZzu~EIaSKzFRLy0^gXrA78U=GBO+c zeYG9w?WT3iC1zEv#9RcSjfCJ+iu`l%HOZbGraIgwayqj;Awp& zVC1*ChV^gBuWG`;F(zG7w*FPfPO+kGMg+%eXRmjh7jn}M(#)%n@dK$4&xrd>C(=oT z+@rsv*o#2vC&x3oz8)GPh9~6BizhmMUQt~BjStPi{V~xm6F5rrpq&k$`M!Ce*wm-P zqw=q(b$7W51?I3K8+jCLFPqTb`p+dXjf!g7{Wmutbu*LD$BHL9ql1Haiy$Eer3oF?Z$0G5btW>27Ah~f&8|&U#YDDnpv`A@@%}GsK zhe|dTH?s+sVnip$K3(UrjEJsBdF!Rdz1r<8o0nCzhlMo|O4x6^ISk*p0?iB9O&G%c znyxL>%X4xE*HyH~dzkBdumZ}*&p&Y;&32ea=lw6DH43=85B9y{f!5%g>EF0ES{$rE zxG8YmozooHL9;OKnajB-+ne#5DZ`i(4caFu6Udj9!{Flla&v75C}A5lawLStOPS0$98Ra(PfdCJ*qG0%XwGZkNst+X z84(2s#>Rf`gJ!ya07_Qzpx>Qo(%cVL${ULO`RgLI2Nyr&`q{~fmDU4e!nk)Xrr-1& zf##yXF(NCyrODgrTeGCV%6-FBtO6!Ri#Dqewq~;HgVpj;_EPsR%@AR;TkUAPRm~)# zhm`+dwYLd3v6&<-({jC&5=M4q1uOC$)vyp(a0IeVbM;3)EQ^e{Fy123C8HZH(xl20 zkn=qdCr@@NCF_#?IwIc4LPZDGfb)-DrdF_D?uv7td^e{g<71OJBO5@&RkxB{bx8*5 zz+cmIULSS3Mv{9~QEx-SP-O57~O#E&co_$#Ra98N{2Qy^<^Le zk782;uGwKYdPQ4RaeE6`G51+thGA?YLB~~Odlj+QMr7eh1-KN(7Y)E^N04}_pO(x= zlyy#JM@loIe#Oc{GvN+{v7Uj112ACT&e>ZA={28)c>6bi6G4(VHz`}n> z7KJeTiN?v=k@Dw|l+qJC=ErNpvll)L*bb5xqy5F+)Z$4Z9ZNUBGUzBGT;- zoy7j^f(VY~$v=;TPbOp5(}>u>|6u&bx<&|-(iPX2RY8Nzlj4F{bwvsfhY_g{miqVM z)zQ3OAJTZv3beNy79J2Xs=eyi)Gjf@#WIEy)&rOXO?NCo6h0sEJs94=nf;=O?Fbha zOH&|gSam4qajn}FBfl%zzo+uXDFD~;oBY`~S)Y&%$I-yGGv5-(3{ar_M0(%p)5>D|h(t zshtL(1?GPw8%El{U0`PynXXA&7kf0yM+28o!|rdJTpBQPAVMcB{wiItl1j)8Ag(>N zDqY8a%8u)o=fFMhnywc_hlw=XE>as6O?{q^Uq8#bbeiiIF^!FFi#yWQH(`jRw=+2w0{kknXjN6lwa3dug)CFG4 z@A7Puuh1x1S%{gicE(!&vZ@Y&OX;Hd<|tUl zT1_MO{5>5PX!|md&~~dejMOI9yyQB;#H1{;@O zfCNw+UIK=_eKcMglU}(dnp#cE3G?l%e4uH4=^XkiGLY#PavNEGW7T29{)d zT21AfS1k&Gxc%#9MXQ*emZ4RMgcxqe($7XkE%s{9R)W(ZNFHg)q=4aQIg!qVp=y&p zn39>x;KzOi`EOnj%Lf$231>Ep4d5X9&&5F%%y$$|$RFsx1=P;swOmfIvF383=D>}l zhb8vngQ~O&`UBa1D5%JSAqFVpB;hU@fh8i4kOF1H6jv}jW$v~II~#%$dK~F`Vu&Da&D8O2u=c*Ia;JXghAG7X&6~oO(b}_grQ^&DjSFDx?2{vize|NB{cvt zvKdNln^nb=2Ep8XoxAH5xYKha1f^kd;5>E8lNO9_WAR9Y^TI7?Tze1D z(%(VZQh863v9Ta~HXS=+Ee>VQ&P2F*T3u0>9yqYK2pD&;f1zLL6*!r)EXeFnPZmdR z6^G6>AEsr%XxkhvfurjCSPcWHFEavIEHREpAjGl75dxI2V7S&+a%E#_tr{^l0$Dd0 zu2Be?aex}pQ;aSlE$t-YVMate*KdU`9)`eRXL^ISshwq`mztB<;e9LEh{Rq>IA#|2 z-WMnETXska9-DdhhJ%TwoDYQELMg$}O55T;3 z(~r~B4=)Snb@Im zx$+@j$IP)=lAI_^(Tf3E~+M?KzD`OgC9iQ%uK#fIK)7du>JG_e`m^zy9+?oOoNvi$rf0soL z6Q;O#mU_)I=`Iz7XZT-`?qDlj%RBDgeiOv+FI6k>!IMRf3|PQ&E^xq!CfuVPv$YF5 zpvXuGDy4FbJ_1IBw>~*`e7WVQDlc5h)lU`gefMZ`43Mcdg3`Ixt}Q8us|0uY|20C( z75-tP=cNSi@{-IWU4hY_6-frWIIJqsxMtb@ZviM-gPNIQtEOxU~7gHcson$R2F`|bhmAt$6`!bl>Vw^nPmi&OHjU6 z_L4;tojRbeT=5@KMMU1~Vx}MVw0ZZg*bP>u1MuH3s=s>9D+!eHh&B6vgwDkOKF{on z1Ukl*G-xbAUgDQ^_g%VUsu=pQ^YP3tDjZo{caLLU6yc}=`+2A>l@|xmAF&_-^Ex#v zP#;ueU7Jzmd%s4Ze%gn*1|G3RfR908con6olk0-R8(6&&70g+m;$z7VN?uTf58}Cn ztr|IJN=x=1Ii4&FnSamynXi3C0~c!C0{f^ic_;^DFbLmkk_QHao8@64FbJ+E`9B0S z_9^|b5f?8fmJ-qVmMpz&c*{)0D(x)38p#Hx5b#^haiB&PJqO}?`?cMxxz@cAM?!x5 zgW3(i_--2k)q@(~3k%RVnK(r#D<$Au@5I(!%0CsXF>-Aea3Gz1A z8>I@389w4>d#DS8E6nmKH$SX9Y|1b@?SBLRTPqlt>~wV3JvfTq498GJO>auz<$iJk zEeaXD^Za|U>5Z<=^CA2Fhswib7?6~9(#aRr)^d1mw zw0rB=;vy;T^l~O0ul(76vEsdG~5gzPaZy#mx}0>=13f^nyxoPVco2-fB-0X7WYq;IBR`f!9;b-JrKn z>vov`-TjpN&%LOpp0-0`RnPr z5H*-haeASjT9v2Vu)xrsYY^o@WkYwqw{rP6X>OgySVu+i@t2xWmO)h@lq?_04E23+ z(eQ(t*Tx;trN7I_C>D3=`=9a62ZO*Su7IDKO90TY*ZzbQ{%HL9e)cCtfXftetXt<` zOsU@y_Tmf?44B0F7T_W3{_r%<730>PSIq(Z!l;hgoiVdJeGw^NiENPK-fh13 z@W$3EV}?8cfksA3dNWCVj)v{1r2Qr;H4%Tc#En%f>x0KQ#nGt2UREnFzttE z6XLXq7M7}wxz>deFX=QG^k_vF{=>M%k={;_`2>=PS`O2GPkg-WIq`%K(cU>Hmh^E1CG&cXoGJeZ-y1 z96#v*zh{JE`o2;MV3^g+?26ugA1)Hsz@KrTKX%(BP_x&7Tj0R>SXlC}WMgq=4gqpu z*gsGxT_YvF1#9>Fyv`Hh)62jem>&!#0$QKO>SvqBV5*%5L#L2CGnR_t*ZiV=i^~K@ zJN@MaFew4A5Mn_Cvh0R?CFND%!GAqC2Rt+4tZaR!tu8(A8a-jlW813KwT&g=`BIG5 zN9(GNDd0&U!O1V}iGc2STdOI@Sd#jWU{SFxK5ad*^Y>E0Ieb0!F*m7{?pI2B7e#Ng)E84#nBT%)DN#S((!U;RfkRyq(eHiC=OmK3oIna1c-$(Ck3td^wl z1{W$1dG|IfG(0}=pb5H;)t2Fc-kYHLU9B`YGox3~T3kY|_yGN0+v0}rs(%+Feru@0 z5Ct5_FnS~+An@hm2LW9jkQa!Xc(=fo#$I>(hZgqRN19<+A5jxOn!t~g5|n(Q$iT=u z-xHHy{ROOm2?@8%bJvrwH`Fr!NR-xBrVSp;q zRUzQ>0cF8-BADBA2r@!IX%m}o+%jL6uYrhm#KZE{@eoN=@>)cBzS8B`$G-dk=7BI9`uFw$jjg35R`BUnr64ZrgpxWeba$Y?RBf}g?J z@tD>Sp+l6aq0-I3$TNvO5z2BIGVDwPWN51scO z_$2jDx4PPW=-3=yl&-ov{y8(_3&lW!&Pcn6)pF^!n6loS>YIS2ui~~ZBO7ciu1>oK zY6-00txhX2;jtb~-XH|`r8+`G zL|0gb5bu)X`bCR&?^MN^4PVNRsGy=*{t>Go{?Q|OQUbeekM5LRD*Ux!YtPwbOAx`? zE1~ZcxfcTl+-f)X#dAkJSvTTGWB4#krQj7UDavs2L)a)Kn=AU98f(u32UIjnZ(jN-{I>!?`%N4`lxf3mL&yz?OX|^>u}vd z$i=U!N%5-7PCEX2JJ-)yRvlkf#7VqxGVk1-e;^0U%js9j1L;caJvc@cCy8zKzmIz6 zLhkFtCr8yCELQ&mSRxP$w|Vu&wiFT8c$6N4 zXTGBO>eurUz(j3+E<2dUmcQV<()co0wB-A@oSRlp^w+T8fAs90kH1~ixFS-^y?dvb z6kX5@iY?;zeg2E-kvGp1-Yj#;LIiDhHTo~z1xEZt#rROBE%0j)r3+X|y%gqpVRN4k zxafFmVqus1kX?tD@~XO5uOoDBhmIVuVJwH0ru6i=bvBr5%ew(u;0X8xQqbN%N_4@z zEu%(WXPV@xUHZ?VqwfjyDJcP<%I>`qwhg~C} z2OJzBOhGd19s$@7Gp;}Og&NVblnlcSnizs;YqnW*R|H>$*q*?Nf33Yif}K1KORYF@ zufMC_7#fB|t)_r1WWWn33tr3|dcuGaq4K0DO$)oD@T*6;V%d;3Fvo{%AaA&y!UoCq zyRw|(vdH|LqnpL=zbG5lQO~t*i=YBG@DGMK1u_t&di<};8=$^f#%x8$D=jeBJs1u6 z&`Df_i1D8n;~6o2i&2Bhuf-+58-^B+di**a6wx`eDyXS?>`GdbirDhu=QKN>yV>+n z?!QX}vZ{z6_Tv-y6A~dV4{^EtRaVo-H(LEzOw8_FxIWpR3DCk7KrXCq0pBrm(bsHi z8hbOsK1^lBw2Iw26B!YImUsPJ6f^qi(A};c{SP#r238K&#Mc2AsErX-_OPJmb`!|){ zJJ@$U3)bO|w5FJLyw3!9@w=LidsW45RAK(b8N+%p-O*@*j(gTXu8=2T1FV7vul@@z zzF^hFOYfQu<~6~&1oZibTxmWmxgr^?>`?eaRr=ZC!UfJVfKmkaGii*PLH#>$dW`fy zab)tRWc{p;xW&G}@%sZnRSkC_Up;kMZ5*vVuG0+9z`rOMK(`xN$rIlQGMp)k;inIj zkEP-esRDEx@vuuJQ_R9D{pTdq#y&Q+XG9y+q)Tp^6SM}O@TF+JzNYgm+z-R|rphnm zOvkVIw(uNU6pT}N4l+k>N2&vQzSkkFwM3KbR|wpoZ3ZNE`(F42`kdz7{&7d~C{A)c zKelNL)L>}ViHmebq;!7b(hF~)zXmITB%>nd8%flfNvT_aSMTE*N#|IgO64!@J%lZ! z{H;#JpEMGi=|CWO_rlN06^Z+kQ%xstkM%Y1An%cQm?2QP4Sptp8v#OX(aq~;v)fOArmHQn|8k4?rlCBR7mAGf-D<~-th4src8y8n6sD6dCOiJNk0Qa(%^IwvLQwnB)`%JY`rA)u5N zy0j#{blM$6YS6KYyE=1`d@iC?aXmr_O?1^(;7-m+VAY(BW^<^IRx+!_H7?Z9B zG$nC9spYD^Jfb`c`8!p-rbB_s0sCN&E`DtMi!O0HaA->#96Ohv!vBCfO`q#0&{#w0 zm_7ZmX2RXn_XW%{V)(BRySKGc_?_!{tS|qdEpFFS)OX+0 zW8ZerpR8CSKIXFcP5lFZAA~OK+@f)y{ofZyRyy8)GNSYK%-PLvb}Z65y0Uh+(dEpO zb1xz>4%Q4Ungq6P@5%4?LyuM5+jDH+*AF}PpFAro_uf{0I`CK|B;6^dR=*sK__gvHn0}9(^+HV7omp|Dlv)ahnM9>T;{}scTtqrs)+b`TJ_2} z$qS+{^1tk`z#CnH-yb!JIidFR$Kx&iRKKN&wBIXb?EB?mr=8!N(vYIMEXA*#DW8^a zA70Y_<$|Js&9W=a#2kZm7XwnzzA8w7p}gK@mfqO?g7vD0M#5Vc?r$`+Aa|xc#|j{AcvsStze&t?=K(sj%tKfuIFGtbqg(k`1Ahd#6%=2 zT$q)dy*7SSJKAWq@cWPGhSk)1uKa~F-9F9f3Aud)sCRAs#_aYD8blS zAEAvk29KIS^j%kU?voMBeK{Z3Mwd1-qB-EQ%)25wT7!qSiBaqZF?*5mvV46HIiONp zrX)V7%o|9MQ1S)OI{&KOOhnf4*9qA=HsECqE8Q9Z(=nNA=lL*EbSCHLIq7?f!!&_g zS!%=$n2;|erb$`8v%GX!4E+M<@50m7T0ecCAnrvFzNI0fm4Ys_8|TUas-*Z->T2ypD<&8TK7^y=}Glh&Ya|xv560#!1|!sBh)xLqmS?svcN-&qjg_$2+}P1NB2w;NQ!wwv^XR0^SXnop7u#C@5R#{=6z zLR-yC{@>%6mf$_l{xBcEn4q?l5EYwO-TVfjkl8kkBb7yy&~~ilK)+?pO5WaoZY3(b z1{a5Dahar&d*^4wsWGL1%aOa06!5;6DVH@gltX4WJhDXcPu_s7t1WSo|G9nDswLR+ zhf}Qe0X1LKp8(V2yuPsTK=*|j#B@5@@0G?H|E_zZvQX9fx6K0Ua+^5(^$~@xh=NBrI^K=8z6b$HL_X5}_shn7 zeJdDP{i&Mgs{w~l_}=4{ffKT3JJ$A$@kjOtc~LRnWo75@??Q!_ZY?n{@PAXrhqChr zl`1qtgbf@R?Xeg8uLxa$tLXH;{=Tol&V2 zC1=8V6=6xje*bd#zR>b!^yEJ+irKD@EZtD~F%KFNeONq1b-_v)Y&>}>A}HO^t9JYX%0Z2FgZn1c`!J?b45`o_uh-u>6LGG&Hj#gO=`chD&P`lO8vDY_ zI5aR29cG*+4;5DQK^xXm;?Iv;l6!7<2JeL>y2LPLP(>U2#iGW3$7Vf`<8&zfT??VF{-#Sv+5gLTqM|BAs)Q`(| z-p&Qy-#B?f-B@?Y1o-xCB6<G&j?`=C%fUs=ZMv=9ky?50WJb| z$j(nU9LqCq)<-B2(+<#vwiH*(95~Nk%N0o)@4T|EuB>U{TidseQi3=$aQDXjnz)3W zj4i7w-Yezat$vs1a3;y&gmT5p%`Pwncv0jHq$3EE3*9CUlU%D1gAXoAiUN!GT_@=Y zBzSfXgBL!LM9DX}qk6G))FAT~C^{QRgf4!EXqhPer#pFT=+g)@GM{ikvn= zgy(c<__jw*+&XYgM0ndgWkE)H69wxyQ&6G2Z6hL*4W^FU-!hDp6;0RfCHamcb?0)* zT2orNS5;g3XC~xKPE+zbHG~YLWo6n#vt-kBc8bU&##D-^NPMdCcK#$jy85Sd9Dq)5kC7`W1+| z?`pV4NLz|^-uxOE%S1CDCqeW%xC!#;tKH=Vn*U{&PrY+l@m6t;p!4_qVZ zW&BC&@=g8Tc4m&-VNw*($Q#RFH_Maoj}=~m*omXe3=9u(gY?{~u# z%7tMkF2_}ZEm*x!^DPpR`%B*5PjmX=^hiU#4#rHT3x>Rghv#q&7U-d(O`TtY=tN;3 z)D5qDg}L=~;t^3Ctc&^ckRsSm6)TOv?FAq9LKrd5K5tZPz$-{j`x)6id8W$-;2kp! zNc+RIVM?IN6t+!Lwy3z=VmEiRd6XYoVAuv?Nv&)RMKG-WQ_y5F~(-h9^RVxJD5&wS=UzwLgOw3yhy^$TS!TuluY zwZ;g6!)>b{V#`S!Sh}Ajl0qedt85Ub0(~*IpCf>H)peNl@~rh$;Ln2^>ikp46;z06 zN#oup^~0x&Gn>7xD!u|3h|#sH*6h_69?Wgv;t9@4)Yzq(QV)D~_g|bZBeh)kKSvg-t$h5T{8swnPMVe7I(3(l-r{w z^6(K%>^@9VmfqY4|7KKVYVWs_(44s~y3%0SzF@`R58ngD1rrlf`@F_#tGe?>y)05p zX>OB+Up-!K=NxHG-*_`2t=Rt(5~7Tx21R*4Jv$z8+=-34ZtTL!bNXqU%ZG=jl&l7j zqL(j}Ej6!2Hl-9%>bA2iNp-8EM~@tD2>stfoQp@3*yX#dBv9XD(_fYnXCmtT_3;zm z5-7Yyuyamn|M3<7a`%dDaA4uOD(*QatccZ21+J(D6}}wW&2T39D&Xa@-1O%X?7$D) z^Z~fXGsw~&R!d+RU5X6&ajml zM?ZH+z>?;Sj_RE{An=Cfb4P{W0VO9e={uSb`*Cr1xOc&e{&gOZdPRwcMnAXik@CG> zn;GTY%8{x@oOUw`8)mKAHZok`BIvQv;_cE#xn^_aXi6kucYD`Hu9*RvKYGO*0Vw1p zgmC_*KIz}Mk|IcZ)3@obWyDb28QpoIcPe=4!QnGE40jfLb!0~SHxCW|P~uSpbQ)g# z1yng+lTStZ?Nt-9_zh0}JZ#;0tc}7Ort#+Dfvf*aOFifU7}g>2EanXB^Y*4%yQZ-34UBVa|25w zgd@6r&87A0dRBZM>!0?{JIUD`aQPs*r?cl{t2kU9 zsN(gKuzXLJZUZE$8jA&}f%X9s0#mJ|kEw5K=gD(T>Qw0sWOZVpfEyRsXF-M)5ET?ic2QZf#_FS8sjc=fT=9L=V+yzZn1B7!tvwaEv?Gfp03IkTAg!FjrL*tK((=k(M?mB3BEbV?z6o ziQ_Vck#s_n>8=Y^=;vPlb<%;L;CjeYS}PKh2`hP@IV9|gYMoB>s0Nt3Mki)UZg7w4 zM2p*UhSk6l)|p4Uja#Ea)H@q$MOh+_1o7|q`(ivz>2=2V4#qNU#12{E1BKuC0`AT z7Pf-X@j+#4mc)M~ZceAEn>^z!pj08hOBF=ltJDW#{Y{Aj3|X8?6LRMo!dz#yl>dnA z2Ia_SRjuF|dd5wkTMy9gSMD{vK z#0)0GPoL~Sd|U{~^etVm2HW)nQdIfZ)b1op<&0VR{;IajC0)L+*JYRVSKU>%`gW$W z%==lYxCICNf-c$M{`SrAjU6V3y!9jXJ^{XOn3^%6B4}QO_6~o|COxX02UXSEl+WCw zx#rqG#ubjC%9Ck9WU>GQLv~1b!(IL%F&EDZ9p~oed0mlYmEOO|JP;4=Lya2X;t>v@ z%FB$8op`fZjbNB|v?v@8=ZKy+yUgRm!)hASA?Jsh`$<7C4HlHJ>^HLzMjTX8W{O-9 z>8WC53HOB7nD9>R%GJ-F+~=w_dPoX1#k+rDZ$tXIL5Y8=jMuA6z;HfHXVvB!FJDhR z8HqEZTaEA#t#b7_`|`O>{kDjKG^j4}@T-;*)cEB!#*2I!F=brq@d^1c$c`M{ewiXz zDdB^(m@4iGaT0{78J@(FVf@sj zeWv8wN;2xTc!H#1uiF75ap!kN9?y|c9$mO0DRS1#a?bw@k&-%C9K_vr8IncK`TDw; zhGF20gboh-5{SL5-ej{ZtD!?fyx~GnNy->xzr|(OGYS<^19@G1CQy$D@u@$zQPKHz zgm~Gn_{QDGgK@+`WaVE$8O@G&3mGm~)Of>?bUP{(u8caTD0$n;mja!y1yVG**q2BZN zTy37Y$;+P%B{sxWC)2!4*H|2}eje|rQ0t;?%1ZiZwvj5lt9$oM@6b1s`FL1dL%A18 zc#IXEp9$4&?S9-TrNlm3+G*WM&dE89dL}(E3GJ;`$=-8iovh$!5H=vwYfK!9!#8lH zwG;){pZ>4;zcSk~)Yi3sxh-q` zo$|7%XURK@cXbs06y5kXSPS~%B24#E$F6PR2mQwz4i5TYcdEFYXFIX-vo)MqpO=gm zW5F{dQEJT`hB*jX`JDq_@+byjzlAH&-n?H&_sbLCnrfF|37??~E1RT&WhnWc6hq1C zK8=?HyIiWz!b+MR(ZGH4O=G$B{Ps@;mN8ey$Eu7WZ^A74>ca}7h`$+fVxwa5!(H-% zV~1vi8BNX1DA_{&VI;0lUoW}`ajNAjF%!@hn|krSf%=so4nw3p<;sHm0tEk^&iV?G z4lL)}fHK_RFi>e?(3E7N?Y6-LHTbgpMcJaGhu`~A1SX5CK5wul70K!1>RaY?^{GnX zKea=bAO7wxs@rvrE?65H4PzEE@P2xhx558k9jXheqO04a+_x>iCZw>D24d-i!^)kJ z;QCUn+k)Nq?dv4x$4^|nyG;uaWMTGX-s+>I@fe^|y3q-_)>#ymQ9W-=e3zY8d3Zr* z)Ay0_KY-VDR)P6T2o*6IoOvZNuPN>Kd6m!uFX9&#U;ozy&oC;`|JwN;UxbRl7(z=m z{d_RGW^>=I5$Uc$HNp+@xh_l^I)3b0Th~rv;qVyjjQ=_5hzJk>NK1;#F$!k#@3-1{ zm`Ua!0055qg*VJ&sy?Z`>`dhzy;u5iIT0B>=_tj3Ev=mo&98cbuXHRo{FjcH+4^cA zrH)aJ`;WoCcc(_hCzbnU0Ps+1(ICkVy#{a^!LKv0nfrNgqBh#%*rbRG-iY~xEv_D& z#uVQ2uqHahf;b|iWzbTrymL&egVP;IPDEaJ++_xXGF9E^wQDxE0;L%Kx@%M{k)&D5@ry5(BKm_kp!zU zR}rs1>mQ7#lSKYj&sl-%x+=e(hA@e$THP)d$;Lzl+tHX(3CEohd{o{0S;r<|1(3n{ zwv?MWY7)e(N5%f%(~dbQEbd-9V+06%j5!$*qZZ$m5o7VNCQ=b+lj5NGRTN9c8)&e3 z1`4CvQi2!UzG*T zrR|deU*Fp#=|)G5pAi{Mf}wX@#Du}NH|{Ke*^Uog^=YV33LQCyuuG%`hgkk{N+Y%0 zI{Wx4C^{I!Pzbd3s6zi|6omcuQp5jN$>&%DZCwvmc@_I<5`LSI@xL-C=(S;lEc8Dm*-SbN2rJqxz0OcQ6^Yo^DDqSH}F?j)VkJEhLH{ zH9WR2vUfA%0^ZpacPdymkeF4sQi%8a#x2Z&r*m6WYsDS)jwyLPdBFX@R%Q*h?v{QY z();-Xt8>6n`{L(u1$23rq6AADI|6|p-s^8LTrB&RP>^>jZYF}I7BB>4uUpCgye|9w z{M`4+n@s(PLf8hBch^s3>jTB0Uufux@a@nQiVi2+>N|_0S_`Z?>Kk3sA|!JHZ(D;- z7BXYv2v^Wz3Rlfv8dQ8=85C5oT5Uqf>^|IFxu}8DYyJ-@^tutmU9hr8r{L*HcR=dg zJ>G3ncq+J6Ms}yMjN9b9b8=~@$*R4~kJ$P-U6-z0`0&+s2xf|26j-Qz3n&|_F)&j~ zus5r?LzpMr2kX72TtOn5wd^@MPQg1Pbr;yEqWQ0+iC`^u$<#so`AK})U+r%_it_B+lY?H7W>Kj_hLm@d|Fo!Tc{td}?u`GVqLU#z?q zWiRT{U%jz2;4QbXu<~oftWQ~)=|q~6m4qUUv(y$7YP+LsqeATGBjUwc+RSyWo&n-L zlN-23_59UX!h<|}0I;vHnowU6J2N)JF?&0#V_x9QKf!Ip4D`SpB; z&5;w($0z0}0asL%2lPERfZ-1m=FOMD{brRuxLyOsKHKa9R}JnOpV`&vc~G%2fMi*% zgGc!Txe?l&bXX}Qi!cXJyEq&^xm%z|uR{f?pzD`GMeDcp?kat^NzWtSw|{Ccn(w4j z=vETc^HB=tmm`d1ieT&Z?w{;^VfjLJ#;lT1v*A{qO(`tS*1&d%E_@0Zfu!HrYGXzO z{3xpTYv5OxSsG*IHmJcaXTlG7y!v=H+X_O9fk86l{Ou$mMiIC-xT9St`@aTq5Mn?2cmpW-^Z`3eK6?gfzji-qYylNSvN4jV79~P3yU$^=E->xJn%Fd2Z=0 z6|lj&-;GAuGe)vFK8S2Z9o*e zR7o*9O+pr#Aq}fTV~Z5zsB|BbP3hm3n$D*VqmtZkkN6n7M9PS7^7ob7HjKn*C z4RfZlbbih{pBj;$yY)hEIa4QUB7K_}-t?kABMfwv*vHOhIjcQ8IpIF_o8f6k@UTMd zpA}+sbLaMiqV25R5JxUrMFZ7p1?>yMc49JzqL#YuAo$s)Rggm2Ij=zB>5Jf3o9;$} z#1Ijag)|e81wyHyT*8G5+A{(k!K}SBb($}a_w>``v19&nm_GW8>CfwE&Fu zd?JXyQzd}{?m8)a_D4Lb;Gq4t^p-FP>R;uZoZR%_SH*JLuJaZ!OR5mh?tu z2r6|n`!N0VB&)Fjwk@09c`K1{vgJw9lARlwd7KH0LEF7SoT1p{R=(Rbtzl(>QjW)@a{f8i9u zC@PwknkhZ`=I#8hywlp8_vup}Q@V1*Iug<1(Uv;@t>uJ^Q)AJIy125SK1%-lQl>a0 z%G^*kH&*`>3()M3nBw8{ha{=0b750biU<@rv4j67_X3lLd^wAs8&%Ya_5oM1g2K)` za(eRM*w{WfP{{8ib(&{)*RG9ZrbaDj4i0|!{*%Oa{UpCqowz(XL2`a>a|PM}VOJ6s zCIU_*^eO_mL@{D7Y+G`l#4lF|amzycwZNH}_Cr4DBB9#R1sV;TVK=Df*%Jm-CFi2MqR~<4E zW_*!0lHl%BFk1utC$d=)*q|kJf5?ilWA#jxaUZxp`3ipMad=dNWb<_cMv4(jE(Q;` z1h2qxXt7^~^euwVxC`FHyC(-4>hj zpqv##N`~A5rzWKa^g61&mGLpdvX*}-_If=V9f;1U7aU0`XZ6*t}W>%+iQ;r?r!whD87!`Z)bJ|%aYmf>gtr#W*c0;AvhTRoz_ zQHe!>WZ0Cs-%WK8oWGmLU%@Wp;t#vOu@bEwZG~-!`l0kJgGf1!zvaE8E zA_GBrlgaT8xKLU_r9kZ(*&8P%)O3<;&w~rB#eRC&aJW5~b8d2-EwT9^=v~f9!*{oX zPO@j_ub8?#P)kssCpE7F47xs|>|sOd+!4S#SXhpsHA?mmYP2c5uJuH|wFitX&Tyl* zB|1SC(hXPR^-%aB7w)NTA<@lg@ksO3rR(dw>{)H9lMW60#qhjeur^L-uJilw`*JKu z`11#jY(sqO_aMAG_f=IDF)dqGetAi0|B)xr7A(0A?9?i4cV^%ceDl;aX)&^pM*EH8 zlb&kbGmD-}@G^Nqb8*I>D-1Q~*-o!0jN7_h@-_6Og7{o|(_1>rAgAeI;^_1=ho?6J zCR9IR{Miq1)CtP@a$5zy{g)shXL3x;=w$mWQ06E1Be`n2EdE&;izb>1VKRnjHQB9< z<_upcA#sOatQ0;d%;gkwwhv8Iql^H7k^9<>i{?yzeM8fsJ@lj3ZrlO$rU(y7hjOTE z*}^I?@HAB&?GRTZDYSrR>zXjP&+@Ox-3VwY|7^v-y=r}71qet&WE1#QFPpOdz|E{9`-A;&N>iVU7V8y3J7wg)lr{S}wcMrli z)CR>U2Gk@lKBK*q`%Da!pIpeg9TK9o5G(87Zk8&8uF3&$h!# zu=TpPT}!SKS_fv{ieP%<(bg3BvzHA5Axe z?)l=TpE&hfA8o|*Lofw*bWR)6s>w|rK_UWK(_J&Ow`ivB`kVS5OAjmCA6@wV7bu zI=*2Uw67nB¨Q>fQ89Z>&v&frQ4`IS>f(ETn{~R8Cej(%5$OS@dqVnZr*@Uy6J6 zey~oGBR+{|Nx01*_;AFHj=3`CdP3)nd9pF=v0(6`h-aBAf{I_X5x4?Ap4CUhsU9RB z?U>yYF|YqM_V5&)9O18Lk^q0ptUVLPL?}|0fHg~o9tqx|!nodd z>l>&}9F%1dQK{0`<+*)zQtU%q=T}u52pI0XF8IDvkIqow%mbhIqTa?;W%jI$W$D6# zll-2?Q#nEodfkjr!an3|-6tuAq7;`L%4ua_-DN>nJ`(q*Y^_vOAXs|Wg{AYTqDGs< zu35qlkR*K1vho#gnl~#ejFm7D#jBkVYlx6!&Av+FUog8H-a|$Bu?KTkyjYurG*4SK z5CIYwvg%&5GR7kM=OvyiU?+qyj}CS;;tZwsCStf^S<9X-Hz#efJwu~m0O@;8IxRA( zfMG&+Of>|4#B;1bas0~cPi>L3X~~IRQR4nGn~Q1Fk@cHwMbG7#?M2!9Pmdg6-mj(K zfp_?sWD~g9?$o{k`&$xxl*&IxHn4neORM2blTaD3VOt0s_$0Q01-2&0Kp4twq;Og& zYxl$<64!Lv;o60Jur#D(daf?kwxc`QVb*Booi#zws}v24GcqHn9{eEx;2ZRET`BU# z)VLfdGI~fM;$jMv5)i{}$KSts@T8%8Oh2wb^@3WXRM!^c@Fw0x1xfBxabnM37*w=E z8><}tTomi`4H)cE<+er)B|VV0fGOg|r9=uNJs5lF0l<14JtRLvgsak_tl$TG!;-T$ zdP!V~FfS6LVD7fcM;pTzzxN9Bz9C#tns%^sh8LSXVczMoAWin9x4->fd?Yf;>7H!iHX1{LcXPmu{t{87GmfG z$i>g?H);^^r(#jAn05WeER<~m)u!SeI#&)+jU&a)rR1{fMecz@NYmKluX)q_t`V;4 zDc&^`SbgUhLOt4j<9plFEd~*Hb;E=nkM`9(9~D=#C)%~X()#Yg86~B_Px{9Q4-NyH zXYn;GDUP}0XVPbzWn(|fUevhcljo%D1l&rzp}v2C^0F<`|C;AbyR3o(WqXUFrp}~8!n3b#jV1wh9Kw(fd@!%u_B0mZc z?n+SPLe3v@nVY@&S#{w=_a~>Y?OAUl27e3>cA-S-zMbw1udZ5AxIbGJur&dLw-hTu zU%2N9X-iM=;5rb?6SK~-1TyW;Z_UXgEZ+xxVWktilK|ct(jKXs*3>e*Hcqp%>m2^S z#EC&J}DxJ=?IX+>W@ zeDck>dbVy{OyP1Bdz4@EVCG?+I1C-Q%gmW|LAtEKzQW)UyBN4CZ4RBfT^6)MOAvI- zf465;fpK+Qfl>MWFA{q;b=|_vb$-xyt)_;bGXP%L+AQ;U)Oocq<0(ucA1*!9Q?^Vp zW{VL|0DHR5G*T3LEJnb_zCnzekY}nJHoW)P+&3+c%J!}~tA>99#N%$hQww$z=IKH; zU8JqUlk$kB6!y<8(a#=6e!P+sA&U3aiFcvlWUZpn0vz!forl=~%vcR^`QI04Q3Hbx z7hwD-u7YiE1^xEbEdPVpm&T@_Qq&P?;wFg=k)K4CT!_ug3Ve2EP~DFH!XR`G5NVRs zm;Ea(^YRu%s1Edy%1>@-0!dHc{QRyS$v-Yw=7O60@#;>HY7+!I59J>1ZJNa2WH`^I zhNZtGn`~$C#h}U~b|MER){x|7VeSZ{Yi@PbNyM6e%s@Zv7NVF-X5Z2N+jV_HwkUS@ zGE->4>gu}a>+M!r_|Zc~cP+^}sR(Qh5XR>W*=)b4tB^2FqsFZp)ja z*Rpy}j1AVk3l+?TK4*{`iR}9fyZO9Myq%K2=hLc}D)x>-t=O2~pX(_1_y7lHB+sA@sR*5Q*rKICf79^Jps_tXnFEKQGjRoXEAPgA1Li zVp>Mu>H`W2o+-LWXvz6`e(S)R56&O*qA%trj=Iv}+H6Y?nE!aw$Y1S0)r5CKk}8rF zHSTk|=%FUQ=-w%zL_~f>6)romitlKTKn<$A7&mXN0M)b-|5!Dd?816huYh+*qRq(? zTxreBv#jgYR)gRZT8C+$U!W;j&;v;|0&@zuw8 z6*QAe3vr(|Kno+P*c6DWL;@sTp(WWW@AI`j*r21nhETC_S=6a3+CE0*bP(B42=#UB zJp)jU9e`tOw@m%Vs;ca5+O zam8P2UZd=eb*57I`$0vRWk#p{x`p|#GWMvgf@ah32`6zJsM5k&?YBw3(j;EK+L>yv z&dM7hl%rWD?Y3UFxCFQHLM-1nOz|*NhNS@c;O+QZZDF~-GB%i?2hvFrurkSGyS2;&% zApTEgf^z5t>GqiK!yjU9ygAU5H~jd<4=|O;?}RPvvkN&*0H)K=Q1YMBY*%cTrb{IPL_!d0DS*yQ|E~`}$3?yKjOPj3TXV$>-jZ@VWRG+_v8$$Tz zWq1SBLkXy7-7sxi<)vOaKw%|V!+Gc?t6J>+K$1#LQd+5^jrs#{g$oQKhaRg0K9gXzH05Gj{3O zt(Ea+s=(vcg4>*X_@6zFW_fr8L!nV#RlHPMUST{`1d>7FO3Lug01DnfV) zeWegqLi22dY$`bE%79nB`sNp!Gl@5?ETNxMFt2X75|SXrKl%NS{obax8uhAUihr!o zgzz0{`?~Lq4COI9yMDRS_aJ>ukStaBh&xtfxqAuq3v8iI1Iu!?y9RmJCIKqBbh4NC zi$2-x>0cI3&(W3@xaStn7N!`TKEWR>TUs}Lxkvk6UswM}j^gFn-tduS~&$`wl^Z^w|z( zBbrc@=amTDrwJ=?uE;yn-2{m#uTS8OSU5Rlr3zOyVJ?i)!kd!YHQ!%GZ_a>g^)UBn zIt=;X>lrwPcHgni0Quh{Ei3z$@C;S7tP=1P#K*MBG&s|ozc7Hs9WN^5$9@B9br?YghzR!f_QwW zRKgMJQqWH*2~ycH&T^~u`7NUpR(j*7N@o~YMLkK}D7~u);V02`IrI1DUH|8&^TsmY zsfC(^%%^uaeeij|XzD@YC8(XL_3Bhded|-$kNs{G!va|LR6#b-$(h7X_#cpcH7fEsq05Z)LwIbaSAFSUS~y#kB)QVISQ7)#qj8-k>g$w zR{!l_4`Fs|i$$p-lf7Gs^2*4-(r4|ElbY_Mogb%NV$Npf4vUsQokkwLI1&~L?xlwu z&RItL3!5f8VTAxdErXBrWa>2Mjugl%_W_`v-Wbnok_ZXzE*x#hqyOzlQ^E!}Pw&N! zF?S2<@467&gXKszc{CT+z=U_c)@x8&Vgyl;9apk4t_7)BlJXM;u;y=qNq+YLtVW`o z;@~X3mEm|0rkck879vu3!+WnJsGYz3>_zLjhNg4ogm&=KB;D|b<7=DA;)PijsWMWo z&#q~{`W3?8gjIN{MkCGqRg&C%8&m6m!N@&RRS&OU^-|cu;)mQi`l;;qD<90~ z{k-YHm%ktPneB&fD}`xjEDyn}?LCo_+#5=GU_6D)-5#>g`|qMB02?<|{up_G41x9F zB&hV}*nhDFkn2fxYs0|t0NtRp8dO0$+EeT9DH5!;ygB-W{)tD4xpsgX>&r8xp zo-38S>UthQ@l6${y7U|Dg^hN>dBsW#jc6SweALKLv#;B|2 zh&-OV8L2Tozgu#$XrJZaM}lezP&y0l3ucJ0k0jTmPdL9Ymc)H9Jp{;0Bmo4O@Z@c`+Uwu#;f?O^3E;^QvO47T?nMjsQQIj$Cde| z6!y2DeUrfpha#d9C8&OWVIRo$bT|jr3WDrB`Pw}2l@Cr$Z(&^@)D-5Oe(?0j~^_3%`m8nhziuez;G0aM5`GW5$FA~h?fPLG}(q}=`#FTp)P$rJ@{uSJlG zH7UPr+iEd}*XQ?@np39!3Km>$r4>_yi8@yeJ;k7GSht~vUoR1?@{Ylm$ zusQK|Uzc=Y6JwzGWp@3k`51Xnb;~SJo{Am)wnghzu}f;J$YA8vzCb4K9K@{eth3S! zuh)1qD&A!h5_w%U1E!4;9&bFeT1gXlVX!zhvS%eg*976@sT=K!VJ*@4pQ6ZSJ$u< zvtOZKe!aHey0WWl;a)@pU7;2ul^ppoc+(DKl<=$#BUOchv+6$&!cf2N4X2_L_Ag2| ze4m{?r)oFnPa<>Sb`9z&vRsM-nabq#UemelU0S<-k^4+myEsQt|w*|?0H;L&@qZ04*w`-?LB zFm(fw0Wu~9alV8$^KWN#A%u?FVouLPdVSV!Nu;^^?5Q$+E$rutnG-KRIfd$TK4b=M z4yz4O{`FzRjd?1M!i@o`Oy;PnhEjl@2hnHDs_FTVA|ltt){!8V`ydSwz+wfgDmpxI1C&frY zZ-7C&6;k*^6(V&2HQXBr$-})`(JFEpgU9;TE93X@_-eO;SbdX_yd6a196|s*Mk_0 zWjx}nLt(%4!~0o1d+gR1naAsATd~GB$M`yuz*c%4QCvi~3Bh**i+hT0xJ-oG@6UOP z^r$_Z+ev_K@_5nSY6CTdLY9twSBx{~8ozXaqXE3cy;UEY(@M4B_vAC@OyQ~y{eoG? zLyW|jEO^r9-X@;)#7YAjYx?S$GGZ*jWx?AaI9vcu+@D{sSDGe*Hd7~h6G4Vti33;A z@9(}aPo&O&9(GElb<_6&jkcD!U!JaOPpn*QzP-M`xo<5YsrJ!%vR59kG#n$hPI*E2 z_Bi!h6Kp;NHWMHE9yE90ZlXnAWZhA?@bauhxP^qkgZcx)37YuyZWiAT_1%Jkm*X}Q zIQ)Loo3P0gn?R7pPEGLsmRNUzA4}XH8@RL}gIM-P7HcrY__Qfy#ZW|Cl zH$`~+?`vg8=V)c4ig! zQVPPkY*p@f5Z(D%o{7^Mf$aEuiN)K?hr1QwFu*Bte|?T z>Yxn%p2G44=V|J=pkpCPtqOt<+%C03=BWJH9n*uiMe*0NMCG~!Xc|;Lz509Z=`T%{ z^*6&zBL=O{?l9_>Bk@Y!KQFXnwOx||tFL9iAPE+M)qda>#(#6(FVKcqzO02XsiiP+ zfGg0_9C~!n;O8wi6x640Y@dyspoUNl)naZgt36m*tY?op9)+kt{`?`Qw~uxcTVu@jz)n5V_G2aR?_YswT(J58-`inm_@3F zT#a3cF>`v*a%zcLUpoQ^*q3!1^(C6UEEaBq)MDe+>D347Dl43T?7>?QaJTJ38yl-wo3p_``X=Peoc3;i} zJGGTu`O?}t@-%7hgcFIx*w4sOS{K9JKlcHQ9w6p8<6e8|m8K1Rw2zF0` zw}>x~6?iC?u3%=oTj2J5d-ylxJCB;Y1$6#4FsJ8!?b?Vc6on=VDg2p;Umh7kA%m-d ziERi1g#COU&ATm7j@q%<=|R&wM31Ou@mtexIVq%L%47&}ra1bFY8|03g%GD5%Kj@- z#ggoM+{=%}50JviEXRB>Iyf9b6bl;S9f&6^mFj_b5>G>x5dMZjh(X+=P!rdUs}fg> zv|ff7Y8;nh+r|_+`Mn#Ii$75$Fc!9nu@ZnNK_=unVpVZcNsUvvRKaL&$@Q#r*WG8_ zD(p%2t*gw@d|TeC?kOm)G9@K=9sWR8khh3Ott+^5F5ZiWN!)&T6nJKPu@VZ_Od?G0 zn+FW;F((D*@Ef4cYxe$+ryqBGg(N81cl0go_7ccPr5S&po3LJXrm$R;)i!gmu2lC% z6Ua}{sJ*Zzd**QX@AoB|#Kp3pg@-S`-{vMJKF2K^M~9JjamfR&xF&AuRY2 z!d)o}x3QYrO{1QdIgtf<@=&5yVcR5#co6crd5eNvEyNEIW+T~G<;mSOfM5o{!(&)K z!d)Q;oQE(5=HGa%e7_Og-s;qtbEMODbambJ1bzW{l;-hPN6RUonfxOL0nKQ^dL5Rt zv&C=jD;EARENq82+YpM^xNjR(;5pKbNeshutdB%^)@#dAZ`t%njT-{k@6(pzn&~6v zi7{znjC3iWuh+bGAgr9_O5Q0$jB8xjUKq|b)BMGb*K+Vy|D8iZg6}{6x$Hmnc4(+# zm$ta~2I2#d8P`dmIwxvm?vACE`OlxK-vfbkBM78FPhwD5ZZ2_xO^PktCww=JB_sIM z)O5Ho`^o~XNDd%EhB0MXH~%kLh+(cdO($fiuq*^(#=AN=z+I_bPH5kWkQfJOtGIhm z!3=6zu4K)yn4JhN>d>o%)Q$IddU&)6i{qIiEdw#_6t5Eiw77^W&;@VoPF;bgY8K;f zs$ES0Vhe^qMd)52`Rb?vz!9?^0_Rk*_EpYJl7azm$r5?rD+D40gqXP7%F)sg?!S_R zC>D~$I~z0OTxK+OFS8onr;uLxE+raCk=G}S+iULLR`XTh@2s1E1OQ=UL1IWFd<3en zcTD5aaC;S{K3c**q5t1I8b0V?EInY%Ipg@)h9mf&V~Y5DYZgV)Gr+xH!53d3eNU?Ef$uD1lpGuApkFsZ@ z!SYBjf|RI``BD^a*?m&o2HNkvYO+f(!=to{F|$VzjzqW+5AIBYy#{|7%H7V!LMvW? z&D4Ir7s|2#x**2RLI8vr>iDZO^XJj+V0EshpDW9PtNMVQ2;>CdX!+Xp{6>7%QLJMl zmX~)l7Q!}Q|9rI;W{dUFwu)GxFdxgyuBLYr*?qu~U40 z#hv@3Zw>pmM2pj}A%?Q3xEwsipTSNad8n=G%|veDyS|g;6#0?1Or{Y& z$f>)$r}+zhP?`k^O&y~82p$ml5$aT#VP;zuhy=Y!+xc{aT_eCGxpwx*Bl&d@jc~Eq zpwNz0=xXD#Bdt%&?jM7WAjH=oiiGloq;R40j{S)gtZ%1jnxTXiULR$9<@sYlR;F~{ zmzyvQJCS(7kjR*ef-96hDqb>L5Gj=~^RKYI2=$<)@twS~h!)87mrg3!Vq=odiF0An z;GSvt50{}Z+cyA5K31C6DnXQ=oqKy}Nc(wn-(-X5y2MV0TV!aVmr?mKlK$!K1xnpJ zhmSu}4d`qrCk= z3!CcL+)Zd%dI;6zF4(|60s`PV24&!UU>X&peQfXOh;)0NJC z_kpk|=_c#M{DQc@8ve&T)7*8aM?TYBHo#&G0gFk2R9MmG9x}of0k(V|!P(~4;zr_) z^?Z0eJw4+aU`FA}=8bD&72)gr`a!x~m!tPwl;su`>Q|S-&U8uMSa_nE)ph|5-r-1i zTIz-eywMG>Z&s`x%N+d+JEj{hv4If&g&5}a z?N<7fZ1SWcT=`DZ`t`iJ1EP?q0Y2akw(U_CRO#uQNTP6UZHYZlRKcNuIbDN<`)uu7 zYI=6ZG7D-DIku~@xhxD*c;`-K8-c6{l{ck;=g6a zmS(krB9%*KNC@HGqIjW)tt^C#O7WPFRvLV4Pi!K!4rsaxl}xjes%&WAvPd& zheGMcsk$Aqrawnk^jseKA81K9g=Q>G?Ruo`HF2oD{QL2+r%oTuzUXwx4?->q_*ZrW zr4J&VdyQN#XYE9-j}Jqi>@}=pb6b0ppjcKNdwct9`!_P|JuWxDr$Gtli%V{uWLUut z#lPXq$_4T1qy#DG5b0J&njMC&;)4qHNd5&`B2H{#lf`ZM4AW1gd3jBLS7vZ(<@`0a zqY$LAYH{FG;VOOXuTNq_;EfJ?G}thjDeFMi+5Ukux}KG>(e?;;uPCR##(-6&&Zv() z?<3HMZ}H=WdH7L%FVmd9@$A1HM?DO8Iud)XNM2Eu(hG-@1?d#qoswQ=Yr?2l7`p%^#53z1#Zj>I7F9I(k(@;mHGNmGy?CAwK0ugRzw)0jzs5cR{rnzubrc| z?3)}-N_cIi7uEl$@q1!Q(2RG~wEpxI_!(z!%y(=5s^xr058v!p8#4IoW1e2clhac6 z#AXPcObn?8YGEC=pF>W2+$C|_-0yjv-^fiV`g42*?&xV|CrAh-FVNcX&T6_hW;ihO z_K0A^`$gaab&&cW*9@-C6qbQkCzyr(oiMQ}fd{^#oW%GOhjNoD;wkwuW?|ll)_R8g z3zGdt#^pPLSr3Zs+1YCmUm*@0F30xBh+uE^!VmT?HQfuQ#1bJy5f#)GirW%_tgS;dUQ{)5&Yi^^ zd3yHZrSD?fZ7IpOtH644ee&Em%)hNJEX?^53B)tT=z zetQTbd<#B*$Jb;5_(W%6w)W=G(60cD|+$N{Q8y(;r@I6snenb=|WhHPe9AkM8fakC>DiLLDb)#Q&q+Ld} zOe3JFq5%f8SEb|Cd)4$sxT5iS&Ovg1hbXk%J(xBKMc zV;*KhzTb;IFUFb?C#6lZu*8CA2`H777?l%?s5z6Pn-X-b^T(B81pawXi0MXRqgZuV`ObbYfOyI!jzL(_b4C`giuNIp%5{ zVIahA6~R4^&_9sshQB?H)aiNz8xbFQ6cgzQO$ z9RhM@#qbJ$==cIJ^sAG_;E-GR>ulo@_@d>Vv4{S5=Om zMDZRU{z;Y0xW{`hAC7kf2LbRvy7gRMqKr5Er1f=M@oce!uddf#IEbA%YwRr_X$yp- zi|Vjm=zwJ-iEp@quu@l$ z;8tuRrd&somO%Vw%|@ePP!#Jd5@WonyGYigga|47Wflu*pTM}FKEm?``WsKAc{++Q z8Ajp0Hr0!orIzP@1yRum-cl(4D@~4A&3T`(=+WQ)>-kczo$iybreb!uCr9o45*ZB0 zyACR#CvzWwPsxYB5xxbiWFqT*z`%+Z8YOR1V~H=a|9zJ z3BMEP%L4JFFDxeexZX(j*q!hZ+56f;_@0DS^FrLMZQD-UsO}oIs;1A*ik@hL6_m-E zgDvGYB>p;xISrt>A34{uXO{%=^FGD9b${D5@*66r#4|?`h@SJ`*9stsLBJATZk7(< zWJSz6nRyGuCy4qr9J?BfNv-|{ksg({KxIjksuUUp47uiu*P2&}{x^_hY%yIc_JVAv z<=ymnl$|c?egu?v4b1v*!F7oKyMKR657ae+=$-+%pCxUHPwvkOq3$BZNm(ErveYsgiIp?aqx%acN!{C82gdF0Ek90{`y+KkfVJN zGv52M^)p)IKrH_2JgAB6YRk?Xu)y=-~n6! z=ha4raARrXN`%l$_2^*Q8tQ#W8mJErIl5qyy6y4UQOWaPXQh8O5>eRziB|1Bd>l!1wcpA{ane{#0h$CB}Th)x$C8zY%_svjwIcFt)IaW`dO* zLMF}MFR1NVSp1eRBIB}c)~?1WE0s3wYWMsbsJNe7hwk0t%Kx@>?7w1?vbB5X6hjQ} z%F{P_ak@t4tNglv4pH6k8;ynj?P%}3OMp{Q&mubj^rDm)ZRP0*pU0&#pH`H zAprKNDTcfHItR=F09b=sHbeY2m?O8-H#nRc-Q;vBDIHDdX zZwxUVCBbD&c-7#s-|KTA5=xD6+h`Cp$^BHKA6J`b&4P(D8O&E3+cE3o5n7NyzsR#r zdcO1^_H+rc@3$QsuRVJ9VBs6Lg&Tx|$@%f}d{d!VB>0m8Uan{Ag-im&J|!c|TnN?#?xXdA!uwG}0Hm+nI`9}o8|5tco5(T>EpDb8(;^o%c^*|P)&m>}Ko z4=pxp9};=iXTE7~Ln-WvKAO$+^kpyB_$uNoGcdnmn<&?7H9=}w(ZEHWy(VRaS;b#h zG+>;l@t;3Ia1!iCj;co+v~^kj8W0RI6KrXGdys}4x23%Vs==%4!%jT?0(TEk3X(X( z{FcRan+4^G-#jWx0R7XD3@7-B;k&HeHg}r-lEY0*q;|zocqfJNiep&AW#E5&l0ODM zdvU^Zx0E5$9&IT-9*^M zRb_`6N82GExH1D_i92K{ZRh=MgOLpN4T9B4JOhS??Dx7FmVGMH*Qt;C-ca=?8r_`D zWwY{3;BS3TyI1h7!3g!Pz1O(ITLr>WLZvnqD5O7^;?8H_;>a@_<*GAI>c8Zq}r>kv>Rp@ z-5X~-$ylET_VYp>(XuC7<(ErIS&$SsAe<`!-+SmaXzRWY0?g7|Y&J~^(g*@AX8iTH zr>J|U-xgN!lk)Ft2~FM5OzgJ^ekYIaJ3n#%Jj>f?dbvF@FU4I4u9yaJ1I2Kb3$v-w z#R&J*!h#I-V%8He#zuEmhCag6@FewV5!>Hr$(@bWkG#B3BWb8u{_^6L( zsU|(cNbDUXMvG3XKP+;!8$2E~RD>j}YU6zms#^2qQ1MK2^Y|EGk%8G!!*t3Jl#2N! z_Mcac(a&B+YlZ~XM=#1r>?iNG^>)>V3ZUc1Q>-MK@lvG5f9x(RzlJ5=4TVS#>2+B! zmCrtEEPajQv`QU*2rP{Uf2{d#a3mtD^51ZHrnk1}u43j+IKc0<`3A}!AIC^I|;X4@pmX2Y=e8%x+RGD zu_>qhh|doC;*&^llbi!(N^W3Ky&3m}H8@oQ!uziOQFb@J`^3^{2a|dOoLoESCrIBB zds|q!n?S+U=tMOcNYtjpL=gND4>@s5>cjX)FIO@7}NE+HK94gw@hrhatltL^*rM6qds*+5&n&{ij_}cT_TD}9ecQ6ltMqd1>Wf1 zV$1MXZr&zuS?9V@`-}#4C44}=0~f=GHV}8>0yxSKtx-l>59naH#=|fvVYbA7M(N}L zLZ`_cz*qhR|DvL4Wb)JK>HvEE15(){^V~is@0QTY^VvAvH?;k!A&A zXX#Auv22ofEZ#k0e&wko^{7G7*!`Rrf#zU>tKev@GNhj}3{!Z)8@ zEzA=_cua(MSPV}Gafcx)#s~*Utuz@Pj)L%SN5+MH(*gP(y1>KHzVHYu0%=ClrjL{P z`~Nfah=LapYt|>i2fO@^vWk_=2Gt_P50QL?;5S{4uw!R0Vo1Vk=xp^F9|ijv?FW)@ zn%uVnlCK@|u(QBr&d#i9k-#P^LnxB6u&KE|si|r&3Y3Mh{A^L0gXTvf998h4zIAXg zwEQhfHHfj_n-MV$b3Q0GIIIam+p|}LtH+{K) z!q?)#gWvpldYZxpZ;_78)wc2mzn9Q|+VF=eeiSEjB07zHj54U|PBl z-GEqImgdJ|UW}SO9}z|!fx>gA#=DwZ?`e{lA{tF5%RLDpYM0%ECg z--aNkqvxWl7kP?Zy2cA7VFtj>GYmFFVoWVF~ddZeZB@<_gPW9D3M{w1B z);9!GI1owMTgxUGo7kfSupAAmKzAsEz zt30NMoWC8$MJ4-+Xl9u(O~|=}Zz+bSfUfcTjVvr%({JbMhkLe<%~TEpvPWTi)*H1* zgXtQl=h|@p^;?X6thH?Sw&4*N(3= ziX0cm>06=CC`9R|>D%+whfb24&0AL-5D>ul6Sx*kM;@Ku$j}}1j=QLVJ?xMb5S5e< z(Jh&$dh!mi1vLEnYOoB!_w~`ETlJr}oEdPiZA#fmc>fid@lwebZ*pC~4Xg1L;Mrfk z@0U)Uv{JJF+U1TNA4_7&k$jaz@cIiE{w1Am#sfuTkyy1x52JO*J7zvrr&YDk#VuJ0 zw&^IVO&I=qUQSF3e4QmI=iE7p@4dXB3wg`s;Nri`pI8D|{hI?x|HPRbRmOiPv&T+9 zn~SB%{W<W2GCV~G?Au33v2 zabGo|NE;9U%rzBQFBJ`YRCCa+`*ljK#CuG18EPT zpvLXOyd?>*j8eYwG>_H=Bx+{)#p0HD!c^?l9PXyAczeS!Vs9?rEQ zbwP`3$@PBRTz5GL?|lzNxDly!@BXB3X8T~uFN78AI(p`eiarpFZiA}CS;2`Ja*@K1 zU}F*cCg&1$SDNl#oYC&1tLd4u+FB>;D=I)T<-A*QnmN7WNO4|P{oiv7g<9X8T>d=J z8JG7E-~wtU5!T~ z49RS`^jnfdxeu9`wJg(u#RO1B0StfRN{H{XI<7hBAK8-DWZ!it_cs%hiftGYL-T8P zD<$kY%z`El=iC1Z>-Yz~XhyQVZ)~tjZ7XX&W4yd&&s+r?v5N=+0Xnw9cB zNKZgji5+-8BMO)ve$g4&b*U>(e{(<5$Hf$ZBGPhVxiLiDw=-o@te#banEZK z;?UQIANG$Fc0R5pCZmv1WN_@;x$TDW!oFJFt~@={tY`cSKgH5YSO0kus!C!^ z1uNs+xBEyu{xkRGScQ)wF69EeFd+m2+(Lj59bM$S`tRVn4H+k%&HODytNTqFnd+4~ zeUoX{8YRX~Y^8fTr~N{GTFUbvqqq?hs{^vG9E@|>nWi9^D2yP`U2PosYo!FWK|mIZ zbJQe)Uc%)IIuV9N9kzqPG)Gznf482+Uo8N`(YOmV0p3^)6=E7t6rR|v0H8%sP!E#- zHYd7@0+`#s=kB~zf~MlQ9O&|i+jK*O9Q5A=B8R`~bv4-8>?GlPDPRj?zkyvxov8?n zDXucIIMMye2v;Bb1}M=A3YhQ#CZ=5JvuCCh(##r7e?=#}*%vJj0xQTPUn&9~0V#P6 zQ#^m06ylsRco%@I?@^u~T+~D)+>>D2q&3`gdZD3L(%$8;r{L9Mge}}VunbaZv+GQ! zP=zKQznqA;>J;bBq?_j+(bP^A|nJql9cqxpnurPv(57^2BKlBKeF4&4UEzn*( zPTNZ1ez|fo>f=`0!Y!nkJ3YVP&E@|{n;u1#(zpCvx=Q6 zZ7#F7)Kj(My2#&bE7OUtXIetB06#c z`_-eR9hlbBOPjB=d?AF75^l|0-S8Pn@oC$?EKx#yn@9zT=RVmHA!?wdbAwZxO;0qtX0g%#sB73eH7LC^2i7>Wf$^}=jCnlfR1|s7^^s-i2peKtP`=HP+_cDhPx$F^kbl1u3wI?&(4lX!`sf|&hM0= z(*(1Ds^8X|6t;3><{(jLJy1S7OiJ=7q zrAJbFKte!3N?<5O8iYX!1(61o8cGHbP*Pe_LZk+e7NolyybIsox$nKtJ! z_u+mQz9o!XOESkEZk&M3cN_gByop6<==s9n!Ym&*w!VZL z046&U4~n6_3L)c_F>(DZgboNQ#V~lp$*FneZU=|LK%P@ampZ{_{d~@f$>?Iiv)~AjEg7*HD1o4u#?@7`rFp;ve)aq`C zdq8v>v11RMb!gCTK+5S73hHo<%F=!pxnQ}IXU6I7IeisQttk2RLjFreJ%M3^GmHoW zfpnKH1TNo`m^krvPk<$;ha_xX$?Bi3YfxewoB-l& zUJgAzgj(hFQQyA_EF}5lT+VZuL5m#J+hu0;udqSaWTqsv*){bHafXkk^+EHB7-)+? z4C(s29_W>25lFoUg7}8F2oYsjkbf(YCr45K13!Rn#6BX*=!|0q&a4o?ki8OX0!m^j z`&b+1H{THPphOR@Eyt`RJPumPKt^BY_R#SK@D~7{-Fh!s_Jqq@vs7?!0e#%Q`0WqV zHKi*=5W6o42`*5(0~k04QV?yuNP!cZ90QIS^dOlXadv__O~8l0rh(O21f~fqG-jEV znFo^O0G@o+aT^MtUh&Y0^a{j?Et5)M9*N75qKtE(;p7auB{PJmQx;qShsl*s{0j2U)gU}Hs8K-k493lF1{VY5$X=!6u67!p7VWk?V10R}e^w>qPTK*3gPd`M(!yy{j})f~<^tj;BbJCtpV{;szYO?)i9 z5(AAA(bxl;vRM4P!1{7@;*B)3l zY@=tSo9^ddhV`9XZXT&aB$vyDTVt?%*NWb6w|`vWlWIgmR_#v8?&mS*M?L#lB5Vl3 z&qve27u-OZy(*r*(UT13sdXEFYS6;%h+wtwyPhtT2WaFv!9))#M)NKkz5)6+5CcEe zp+cBI5u1acq+23%b4wFm12ku=Q+l`&B#A0#0U>0tyQ_A$5)-b>?f_)I`v@4S#6JKo zU)>e;4nW&VUY<8Hlf7nE0~bWZ&HEqs_uoDJfqEe}put*nrAG6}9DrB=5p9A}u9lY=h-eWP~3k|PHKnQ2tWqH0t&lf8c1 zcb6SW((WI^)yKIIp05}|vMfB}M4)L+fzhQvU)taqz5*a?Al5q(baZ)`$^Pr<-!tI` zU?6??UC}8J02rTKytAzY>7^oa(M%z$AmmiH1P>EpjS5{Tx&T8V&qc}?Jk(hI zaVys}1xR7Nh@hCv+DE}#M+W}2wWzX@1PWM4*7@!!hyzTAy39Z@hOdAwnZv~Z|Ens0 zpwYiM-B+oLo41!Hq6iqm=g@PpYX9Dw2x`6~* zIPjYyLx)e>yvd|W|7d`E5r>B*0yVN_RQ9qRCC1nHC{#U%7T{D7wr-3adc-zx9+u@$ zUVb5ZMHJvH5>9kHg)QN$Ju+}qU1F!m&9-IVz>{y~V5G9+o(L%Mupw>y0qD4jyEk)u@TLoRt@ z$U<2LXdv8>*T6xB^r3dG{!U90!bm}AG~Dh^J1 zupa(7;j@C+=jYdP_Z->n&$FTDYj50=KPY>C!Ho-h3`BQ9dZOt?D}PPi6jyUL9*QW; zPyu3<-=)zRALsb8fyByiCh%to(_NND;U|{lr;__;11VGRe5t7E#iMGI28Nyh&?GDT z{r>)o60jBSP{}bv^VVJiuf6>C!Yqa&f3pwp3G$A#)nWjDP^3#nw_LFDzfFp~SA4YG>{vx}ezK(jg~H;lr;cZG(kF0&FNL<(yf(4yO zJX0-!!vi1^K5)>4JRJ)tZo2ada`5!e{RkEaLVfj5%m^<>sWC+ItcZNC(XwfMzINYT zv#gJ<7x&qP5!KZSEx~PF* zUq#j-s5g`2!M}vpjuBy+(R{8{=xqdw3pgcSX{98=$s^`ot>DOvL6C_M#3CND0*VmI zfq?CXp=fN#07;bdDog1NO4DExFCm#JzOX|t5(FPz%M^ehWNk_dx?sfyw3u@zBE&PU zQKi=^cm-lsB&hLsEEWyowNgFh(xc@(Gee(wtDY9;7jTz&v2i0@>7Vx7y@i5U9i2br zb;=4XtVyC(ap=KqY1M*}!UwKno0!M}w*Ime85JX4=seWEM1=rRMmK^E{e+qWBwxDd z!|IFqZ*R|LoHx8apMXIBLUHPJa<+HpJ5bd6aJtYjww$~E_T-20%W#o%jR zs>ySHM#zDy@!rClsvbdEeb6NB&Q@vR*h%=Ce8f$Q!S_b(uC4JE9C~m7Yr`OjeG#8I zyqD+-F(=|KN_h+3l@`1!5>y+BDsvP~S%14tjhI~TB7@Z(dWgp_1k@jQnFdIEBoy-5 zz<%Pw^v|)h847?eemTVVTqya9b*hE_obd^A@RbP>e)V_Y>2QbOhp&$I-b@6#@P@bB zqagTh+3FC?UEg2FfPp9f9fB-`B3iEpy(pEw5-H6k2DeuRJ$F~zcd@{h95$>ozD$gz z0VI;R)Hk>&%>kw)6|y8XW&sN*_7}oKmGP?ls6m7Pz=~jh6)0HV58E+we)@T&+1-q) z#a1j9uW2wJ$nY@N`bN&*5nx+J4OvK00x_-=R1>c?xxEGaU(hQY&>6CEAhN}uJ*Ce4 zzM1A$@q;0g7;!G5pe|1nP8Io=3>l%rIFpHI5x9#I7utoQy^*L$-}{7Ewk-&H^E$C% zPb-JiK?my8Wv#!JJLChI&LS%vTv*yDnFMI#ko=@iPK&@RTs3f$*8~Ql4KHY5SUU>; z@uHM_o_EjZzi$!=2bD=AQX_bk@mh?3q4pSU+k4<2AbsiZ%p+F z;4A*M18~r^d=%u02SPk__?rLj)p{3y1#7SY?ibj8bKb1?pL(BFKa%;khEZaeapZeh z{3fn3h3kIE_ykpDk~AZv`vHVJe6>-UoNj|^BnS-^AcxHpksCuAcIA34AMzm-A{mW+ zR|yE!W?l1h*4fs$hZY-bv{GJ z-G**Rwi7$t51}Mp%zN%RyUcYL- zL+}hCtDq&*l)P0#0jplU@fAg5lyZgx+g!{z-_3ZFasB}g+$}BbK-702Xzdd!g!b(T zpa5s_;fP@SfcwgUl?`#>#^MISO2o=XeU;_Jh`@P)ZiAbR}w&-C=XS= z5Ms>Q;`z`46n3&8U)poTeZW1#d3~zMr*!_3y}Sx&8G}6W=yc^S*z(uk#^PiD+{(Fg z7BGl1xP24~n)x2JHwZq5mqD>ZE{DKbyp|uuVo!(>6GF$60o*Sk<~ootQ?57$@YVhV zHgx!m4BMiV>pdLF7CTH_b+4K&E)0I(=Yy^>ie<<)1Z*V7#E>N4GjXO;NYWb`Ky~TL zVnUeyX%*+=g6lN9qg(d!RdLXdq3B4&LhrMDr@r0WiYEa3~QVCpxRNlwM#!S05?YVCpt-IH4K_IIsj$x&JeB_|T z9fRd5K>6sjK02FVh!A>&Nn!Op>uA_cl+>Y||t(1k$Ug(^eeXM|`1Ihy5_gtd(Y z&~$MFD}U)hF01C;L4q~=XMDQShBUFnoJD{MV$X)On@{IJ+udga5^+G8fd49fT2JUW zCAtj-423uPdU!y`>5T#5z-x>YAMxEO$Obx{CA%U4+s zKr+;eCCeLp4I)MW&Dptf7Ng4nx$F?oFaQ=6hByRtOp(@xa~oO%kKoK?N%3?x{X>yo zJ~ySvNZm@W56Zr}ff!;UglDug0d~EU3u2f{fFbY60g0`)>toO7Zylalu2&6XRI=|> z;Y+@^g?sHnDuI!UDh|)|T)8ihhEM#U3@Qbz@XCA8)fw;{{c;dtR037>83WWHSzZ!Q zWbvbeHvl-=#^#0WrhNbSeJHm1qq-sv5HMXCX(mCx9pPaw$~aaX-lru&kBG{dX6))X zb*yC9mjfNi6e}14Vnm4QZmIU9Mh{lvtyTxZPk2H|evE>S$a!HtL<5bpdZn>3dK(=$ z@NeJnYCZwhIQDfl4uiBDi24Qjy8si3#g#(&_cI{8r>KFC6xby27{O-i=!+7c3KGWw zspWS_WHv1{k&CyLAu~i*7pl6Vp@)8RMbV{`+(ogduQ**Z0f8^eq5xWL>hMJm$m8;G zBX4%&!Qz#v<#|Ft_gE=GH~EMNZEOQ?zO;OhOn@nvtr=?B1CWYqWi2MPoMnO6>2_Qn zP`IO|^1fs3Il7~`Yubeh3G2MB>}5_%r?;`hhxADyh+0%y0@7}JH!gTPApbaM>kkljC*OpwG_ zfIShMD9zofkFQFd9JJUmZ&0^+Z$fOy2^@@B6!pV*XEylU_vgWwI|3Pg&>?Od>T<%j z`n|se04BgnJq@SZDWK+_-Y!5JP47`4#D^DNY!bQQEHELe76NEcbHJ~P7ol6!BdwRY zJPVEN&0uF-?Gl8`&(Z@V*IxjOo9~YSD$N*^?V3oMMxuMYc`K69hq3_Q$iep|+B=bntXc z+TKxQm<*bP)H>)6D&_c)Bm%)e6N3TaDLU+pFKGnWE%2!6m1dr2@v*{B z2Ah`lb~6xqrDxJXz-I4X2_I3KSz-b2qI*{da@2(IW_tH4CK?JnY)H6`XcU|fr!dCeinJGr{PpCFR)rTJqy+NemvtK9XH={lNW z0HtZTj5m|_@e2-}2d(^Lc%C!r!#!a1kkC?|AHJk(L<{h9qS<(>_G}0v!EKVvd=Ww( z1U@@HA{rKg6pq4$Hw#bwN{5Axp-d=pr+xEw(FY^}$ zf^6>Ewa*_Zma|BE=3R_~@meC4dibNLCb69PUxJ=<;UOb1cOQBXtOnQMLqG@FX1UPk zqioci09|(#CaoFiS=7`scB0BatXh+~CW5Z@_3Lvw$(Y}H$XL`~I zll7$+O!QOyWsq3ZJn_?mzz$bvA*<8^L4aU_n`m(udVq~l2MM9_Id=4OO~gtr4$xAj zD$f9p&!~)y8YetvG4!cVl==|c! z9Utg#up#JxD=aY3Q75EhF#@T^H=XhQesVxuAv9Eq2_puG`pTOlcy3 z=cS8uN#mjf8e*-Uij{tV2+%@FrUow*4u-c(`cbD1fA9o;?|WWsY&8T;b?8ZegxpvD z#0>-T@S3vvB}%wg^Tk8(c>LYi!skV|Z7f(2!a_e<^2$pS01bxn3_D2P#@5q)Pvy*M z8q^?D-f9;=n!p2UKS=wd)Q>ok4gHRQxIBX_TpU6IWR-!1Bp}D*W1mgqAlr&1IuSsx z?}I8U;HcB1)no~j2*y4!qe5&=V`eS~lBA1^#Ic+u?a4qw3{?iS;&|?a zn7sj78L_t!z@}#2AD|E<>1Xi-s)`?)&qm!441{1FumB&58FvJACh()&h=aEhXMLz6 zLd;Qh+r-5XVkpQFE=0pl_?X+nc&o(}o+O1A-+`0;7$xeoov@cO`0K@&7~llO3M#rc zA;`&{)dDMHumT<#ofzOFX6PI;P3zR~0hyhJ2t8;7&)YmvSdbK@#h~gg=C#iEWt+b1 zfi|uA#zK7f2YW)8`ju<|loYcj9ui*~vy1~j@sK7p~j(sk!T-w}2LEu;j* z$$dk^<_r0@}n0eVow9%YanUt)F&lqXJuYwedoMh41F3Ffu* zdrcx%+0fPX4}*L7Yod#;pbmySeanp~eb|f|)Z#vrd6juyT|b&vomoqTnC|a#h1UQ{ zM5yGAtM^O!5=8i!2>%y?5|il zJXlUvyz&tEpVW+E`Hn+Uz0LpT1CBeI2>n>)(|daTJA7cxSbIX6iG!gZFj|3NWbhGB zv~E{fN0VT@o*pN=$%@3G%xk}tV$tlc&0upcoe|5-SoSet1qQ?{)R3-VmaAO z4?vElIc_T)5JRr=;~jP9_!##Oy9*uf`KZvk0w@7}NagAJhxk2wdd6KTiysAlr2x=;vb5(-?VY%v5O4<`36}~!t0XEr%TmMXKF(uH%7A~Iy z&<6LrI9-v!1rT%+IQ;!fK44D?oQ4U(Vk`=6@5)GnL~93NPbNWP}X3MZz8;b5rIKn)W#GZGbeL7Bt< zX$32ah6kbX7Mhf-tu{bwdIbdtr*BN6RVq(x=Al`>>O#ojVTOU`q??MEA1-~RbwO=Q z3ibUu5>N;SgmqefT%e^?scu8-M^KrHg9QcHQ%P8naAQN2dElz5g&_PrxjlhlITJ#- zG3k9dD*jXa&BJ@0xZO-j`l#{OQ2LruT(_0Rsi5z&8$OK_-hDtF?=cysG1Dc$7>b=e zJ-!ipwTaWxgF zqep&yKJc+o^;gimO7WhiL6GApvzGPr#@7z!tMiS85OBV%zbt?>6_o z?|*9@riB{X#I&RH*`thPx`1OKe>)k*P60jm{biQ;^^id*;9U#(6cQsuRTF>2z|5(D z;8;(#;Qj0(kZnyBzU!6F5C$nv085lyFV8Zwq4Y}JaxSD&Yk-#hAX#LOjKp>4_1TXx zJS6KDGhNf$K54Xe_*KZm4`=TAVg8=|^CxNmw@R`4V&JBfqFUVKwLkx2}w1Z+SX~q)PFEeE7H;FXh z%?z0vyBWlYi;P5FbOw$*(8UjDaUsPxpmaZFOhV{#_-?(F4%a-y0XN|nUiUs(Hw4rt z2K_%cjU*()nIV#=Qrh`71n}sAkA$|E&`r`ucZjhzX>g~6+`8AGWIB-&(;$z}8=67i zb-mzbmaiw=TDgFjj=*pc?-p%q`7jOfom|-)^^bTVg;bi{oFQiU5Tri#G;bhDFk325 z)x;LQ;9s>EP*uF+Vx>icF|KGC)z_fGm?Yj+4J;j5t@f-LMO#WNcLhcD5y6TafNnJn z%n!a(b=BCL20MNG)Z8DO!d5Ks97?QeAtc65u(2n?FOH|G>W;R)ZozwSw{HL4eKeHA z;kuOrS?wQb&IDS$|H+M6Ezgk`EeZDg`I_Q=bPJinLJCc_=Sr5tVUx95W9CimC^Mkv z)$S~SKCGq0l)z^8Ec6;TwoZPr&7NIm0ISnaeC+7@{;RF}9@s{P?a67t6GQ={P6t(| z82m*M9L+@d7|tqte}WDU&rbl97+dYCuUR5PxSVt2!_GE|_)y})TL+R%t6x~>Q;yz% zejI>}aMsm3-~yVG2ddTyuP9&t;^36%23mUztY$Ckq9q~SY48I7G90kpDdV(5G>2(P zG3H+I=(%O5Di%ej>sZp9bcjG!T_GPWnr7$HlG031O9*N&l?Vm&hgE#&^q|2sd51TQF_)BVXPMXHA&weH z3n8n`FLh#Is8gn^Hux#EIufvfdxs%jwXiK0>w%LOWu$(rq5`OHeE?s>K`td#Og$kX zk$fL4N{RV4n6T9Yl3beAE^@d0$iDsIvgwm3cZq z$Gl3K+2I;E-N5|v#(;?C+BMcS-yiwT^Rvgy}VIU2DchF`!TTYOu zp{GpV6Yv-=A24)}DJR1YDoK=lMB@i&Jg*_h7sBXpG2p_CnWcbAl5}AByux~s$G#!%zD>s};EV%7 z4kvz2~Ru3i9oyN)c8x`tYU^ha9FT|9p4%Ai?5rUh~|pm@jxLsFr0R z;OBUcMRaE3Nw8ezEDedho82={4|{9Zt5@zeND`@AcQ|iyUcHi&;}kXYdt%Qi`asVH zX>aREB6{D;#`E7#G+eD6>`6pToa{UuImM)I-XsydXYb_T=*cNADMliy?C#?3asP?6 zE%;*Zb^e97?6l6Ie9)q*n23uyFPJuvv>34yh9?Y=H%jO z@4+dm=3?z>uVQcOZU+vdZSUp)jw3F4N8%=lf&$5Z&e%6?BfU53@prGkYcpMQ)w?6H zs#4RT?@-^OsE9&^>bqN*l(LD+G^8xs!rPSNbv{)O2>gCzqoYTf8_MlS_Wr@6KaXD3 zzvAh|EalZX`1?OLY${Ul*OWZ+%LpjaO_y1kJPTAL6_Z#kk#Rrpc54WQKp@Xwn*<(? zIed{AiNpbK|LY%0^~E{;|9As|Y?JMp{P(+W5}j7i|9;!Y8I1qm@8n+o|LhM@?Df0d zg6n@t|8ot}|1NI1+1$NBQVd4+chn62U%&Zg1HUAJK;V=&MgH^AT(m0Qzk#u9{`#LE z#lB#m{`Up3_<#O0oNy8|m48D7XL$2J4#Mw99rACSO#cu0GPxL1Lh;B3Fw*V~2P3s! zc+%TnX;)>Lj;{vkT?B#7d?|R*Ip_EAPMZEYmFLy(2@A_!ZMV;%o~}j}w|9A5e9wPj=%V3mPMv)lI$KUiLpZrtj(g z%Bs598*BuD+-9f}V=nX8%6jyRLSup@90-atXP}(p-xGvr-}?&3;S8>%V7p84?~~xQ zN}(BZ8o2o{-l+8jJrKN_M)ZAuaEMXo!!rM_m6pT;yrwBY+CKrai%6VB{>-`<28P54 zj2t&)*JQ1qdj8uVU6?0y*F-C~FsZo)3`VEp{(3}ZHu#v~j+{s=q|>TcSv?jPTtz>A zrf&Hwe#&F}7(*&X{HuK&9qW&fM|QS^q3u&Un|MChTLSaYK0b8wT@ZB7MjH5?V5 z{=(MI_${Tca6p{xXEg1IUL&OKmIlfsvMIPtHM_Zj@zc;_9n|lO?#j6Y?IvV~wz9LR zysIp)aruAGLg??1TM22Fbc(^3_1?qhWAx>U;VTOt?#-C2e1`{%mbwAy4yo{rCBK;J&Cc zaxs^B*94xBeiBg_mMi4o;IPtnowdJs1J4qbCjP-?zVSY9-#h%!UXjPHjw0p(mywqy zW^9R!dC50LO+II;dkC_zu}N3Zq&}<^kfm$__vw5-^Y2M!(@C%UAywDNpYD0f;{?SM zT0W>TtmEgo(P>kC|F}p$-^obI-{Y9S+rKOGT1iveRViX}*Y^Ymt;iWUC+4+w?=JrN z^XH+VGwlme4c#$?g<0!rBQDCVyX&d9-4y~3g)Y3ZV$VCRLZ)-oZV6c`jjUQ!?gYMJ zGCRU_;XXg~TkT5Vd#;=nE~gvr`*TTk(qOcecmD)m2=cFDa&Mh#_5ztO{N+?ML-V&F4j5 zni&Md@ISZS@VgY~QbgY1(RnO$n45@<@Gxd%WOQ%3@WxCAH8oUlTxi*hJd8eEF;Vz4 z@Sb>FLZUKxr>n}cRM8C#DtZ*Asley~XE@@BhT0B$BHbyc| zdV;aMXsUD~74huXebdjCN+gT3+zRCV4(9mI5-Cc9T){@Vr=835zf&vay=`6Tt#_YO z7d3Hwi*@ahb+YFY@<|m*HBEijW1P`c>$NtrvmbL8m)K^LOT z_=CM;JwF6Hm?5W6U&v&np6s+z(tco5UaT5r?<*OZQ2VL*KJV+9ApY+v<6qQdMmDRh zVZ){8<1J@lh}AW1u83Y4@6PobK0aMR`Z{A3a-T>FlJ(Aw6Nu8kjju|?#&%lK&*dwU zSstBrWlZ|0PHR7DjuV<-uq4l!kfuN~&U||M12|f!^q0c4%?#)bmfjU2M+@=@qm4g2 za{L^8=n$+XBM|8B+Lvi)H0qdUNRi_dI_ISA+9mHOrb|rH%5maIwH|$Y`jx;`Y2#b0 zQbeKqOrym?RCHlivX$khpE72O9=}wQ>M9apB(AoNG80FJ68EB=W%99e^z;7 z+;T+LTd-{uT_jD93%7gHBIbRkUnOY?2E0sjaC9L#QzUdG$=Td{>p0$fy?IT6`9-M8 zB{F&XkUun>GD2|XVJCeWkx27ASxLrs!Dl3O5p4PX< z^6!j9N>P{hc=c-3<;cUio_mKC7`gn);53!B6MOUXz5j!E%Mx#1x4!9_kVC|plD_My zN_5ibdHlLC5~-z2us;;)XFP7)JM2AI__V3euIjacN6cNA`QOE+x$9vMCdi5x(({Md zJ)A4=?2kOPC#d({_>fSb_2YCEM5qr~JDB`2x9g9sE$%~l5L7lq>p3|$baI68o%`w` zuS3s=Z?&>WxHZh$;IKWasQS)0|HAK``G=Q(LU~jiNR^c_TEuHpEw`Pa&&C+ynzDOo z)2C4nBXn$9K(Y5^Y1Vp(6}9n=O94$Qsg$Cks7-^&BVaKa>QSHO+Nnr?pzY z%1+@{BE5y1B3{hl5!QWXU~#b+YYc>!dr$Z}azE}#*kBByOatruhw7ti@gyfj#LG8w zBIb>r+E5J0~^(-rDt-#n1B1~ zt~Fy9FA3wSfJ9MUjSJ~&b74vS^hiZ)i+H-C_(WNuM;&kWglMT%liS?RwcVhNJQB~Y z?YT{t%tvfyR9rcFliX5_*iv4m?n6N^Ch7NXHy7SLpon9rm=3jo@%ADlXmXj_f;K8g zTe8Q~34b(zksnu{)PCv8IEBT}GpFr!-F?Y%&WV2C7iZHkZY$C${L(c*mbv%VCwbo1 zPa}(E!fxsGt4+bf$%;`4eKKe0#@o+DK4nKBU+hI#=NZ#LjO>la_^Q$`KPH;IW^|jX zZ7;InlP_5o(rD`%`9;|=(3##HAIB)uCb7R^5=4m~5WDmiN#1E|wegKu#+viqcuYvo z5EGNkTRiwBGIiO>>5rYQ8gel+aQAhk#>4XG=jX9wQbg}MGy>cmjPE}iJNMi*GTdk> z6sXC)_4g<`m%31jds)A}gh-*H@Xt=#;d7sIqh&kw3DzLk9U^|NLSEt2bAGAXk94&R zmPPKPy8*B}N`dP|lAJME{1ZRJ9!2F={nXI4&=9(xiXFl@f;0LXomQ^O>GLNie(pWm zv1je$>{c0taFG`wl}A7BF?>rYQ(B%|_R9VII7u=^Cy>I5W@+P$R;ia>uaZaahKEP& z+xQg(D~+diO!K;ExQo}-W^miK$HZwMCq>jjZr}P9%^G_-zp=X4Q^(fNwFKR9S$V)3RM2l=kKbqd z6NwZ_eRL@>vseBsV$hMeV^fP?PIL2ax1_LLE#@#L>7;p;M(}l@9b@(2t9^ui3047@ zLhEy~igBZd$+oZM<1N_<)`nQ2`^)$RwK4?>og6a6_{AT^pl7FRrHtV!CA_W==k4h? zryEi)<&N#GFcsD5P9Urjv{K30UpMS*Su7^sH;L1Ca-_)G+cS9jB{h#SI!KK3Rb`y9 z>djhgI#T^ofO?|DXE~(iE>S(h_Zy1BHfx$XWaN#!Exaj>2u-?*q~hnAX~`~n8FI`l zXKkl~cBD%kMh|NH@*fTQ)hyhQwu z+bku&qbim^PU_;O=-q*{pNF2s#z~A-J^V*4+iRswm;Q!bR^$r^Z%pnm84WLo*x~2& z^mH+W>Vd7Y{8!4vSJBz&p3uh1_vbb@D>e-qU#Tgpi`|MIWB4L3u;Zr$@3n*GG~q>6?cFDk~Em9RyQ5`7EYw$xm#1 z*IBd#iUs_t(kezV$=@R9CpGKmHDJG(`pd4lt^Be*Y;f^rF?RbVaAL1zJ39DaU}xuP z6k{Qs-$LXx%kYR~VPZ?cJa)FRu*aI?aGw7iHt}NQ2Nl}tWTSTbBl%0wUlT&iNaOc7 zJ_sS49SGIZ>A~8Fni>6R%pEGj8@ncui@Y;?`^aOBYSQ&pZcc5T#*cwtV*Z4gvw_WYBsW)Cy0(~S3oLBNSn zp7)l`DtYc9eZDxW)uA1BqBO9IflIXMvomFOrsKs!6|(NQ-NrjB%1OUzzdhn0p~#Dj zZCWi3y1t-A!{*G1Kk)MNpv41?yN4HF9&x`2Ff|>a*ev=y({McQ%E*Z$*$K_XvP^lNyovc@UF`vXj zq7Y4(3C=Fy`gFVrnqzGu%-(h2K*B!^N&Q2>Uc_AMQu87EA^c&sla_uo-@09~VI67I zr`oMtnhP?~1rdyih<3mUml=1yPeXb7^(U{lg>xsV&yXKgie<2Dm6?Ukao3rvRD3j@ zCD@7S4L_^)GQ`y;TbUpC_u#Kk=2VK`#7+{%oAju1L+oCs>TAzS+ahod?lnxY#5L_k zWbr?7K}3As&RwdbdF%0H6^7%O9c-fNDl~T(3G3JHB721$1}^@^}h4U z{Pl=q{aOo4^pH_$+)aapZMxT~a@Wr&@&xD$SGy-%qLSzyG3f+aS<&PiZd8rkGIKQx zIGoa^mK@tJDXA8j^U=$Tcb1*#@ShOn#tXj}n!){asDR5aPpxNjN1(5x^`{lN#X_-p zwSSS7(&r#YAvfOGJ5m_s2R(O{G~2$2q6sQHgV0;wKXEOVi5*%Em>*uKL`up(>2f#{ z*r*C_u$LTY)wE6!c6f7tLUm^oyPBIq7hQXkOo?nSBJ*-T-}6_^Lo+qh!M)vmRF)xS z!`#O&bh-zmJXt5m*=bc8)Z6V>g72JJYScr0y}SfK)Yd`ow_wxnYjQ83_055-ONd~u zjb11>y}~Ef!QmRh)FzMkrF_X(8*XXbZ?G>PqVbx~NIrejb${NXB%a9=`K#M_Vk+!s za!e|ZCH>IJ4>NrAZIQdSXH=D^(7^pmFT;i&HOi=g*A%XzI8ln@^7QH}F53sw_S;CVe)B+%q9@Qr^kc zw3Xi9VlVmHWli?L+WAB~40~u{aX^#xFeQSLBWSma&&zvK)!*#J0Nhv7`(~=#!YZOM zZ>Ga6BaE-UYx$#R6}iMMom1~(%>7wUvBxG8;xtKQHVYzmf76crvbA+3*v7ed7>GJ4 zTDEQ1nUXBdA}fyj$i;Lg@%pIf!mYMfU&jRJviR9JFC{X|1wbm7)I?%7F+Cl0wo&-0 zWncI8u7|gO+Y)iz_<{s^WsVX1MXB;ntA?}9I@!MsNZ#0>ch#?qe+k&C78_X9F?NqI z_$N0O>E21yERru6)vHrUk`pfT5^k!p3+r6T<&O)x9h^@fM7^_Z`^Xjd^GjVzg^F{d z`0mzd`36xu*q88#=Z=Iu`+E;EW;ZM$T!^`LxdZv$PYjD?Mhm5FqMcKOwnlfp1QiGi zL_BY6EP5XA66b|;OJ8i|O(GBQ5jAo> zSzmV<&oV01VdSAumJ0W^=qVK#Gn&UDH4VpUj#Xt&?{HgxmV2s7Dav7X+1+Pa^XPd@ zbS3l~<2!XF;jf3?X=6O$(pO_N5`VEQY(AT^Jcj2R^}@*HmSFxIE2Wt@gT2;DwzKQt zJ;!qGVTU$rc`k?i&6`4FNxPx09+8PilJUyU4ysb;lZLR;Jb_^=bKl~!ZxZq?rBZ3z zztPHVeas8(-l~X2wY0RP9Iu3vqlbzGa*rBmORw=!a-c%JRMtDne{sXDF9lp*4JH=H zj+v|!X-=HfEtocl{)@x?aIFm9g zJiK2Z;7>QbwQx5>PEIG~tHxu;@&y}8MZY^f<(`q>#-ErOBlPbiHBr_HZP;XHM3Ts* zof}Q2C6#YzFSpj7=pMJ*UoRX#-V^kX;#O@`x<&Sy#%3X*n;o{bokB0AQY$ycS{|R; zV_f-HbK@DVD4B|;bE1lL*L^|Dl1C?{LYuE{w+fMU3UP556|K^X#Zed~8zPFke-3da zrNFy_7ZzIsX0jqn7LFJilXY8itxVgD-)}s-$Zc;V3uGZz|GPOm_aUg0(25+p&1h}? zp?WEnqXw-$``S^1G{rF&qd2KTCpF^f6Y294cKE9)$ekfHf8^sjIX<(=* z=8ve;WDB>bGF@)l=fW5ihaJuj|2+%-TWb91`VA+b^^HGVxGpDb;Cj8gH)7{$RaInR zi*wJG*`1f{E!b7Z_Qsmco2Q8?2ip>79R;d(8%QV83SNe4o*S0$qmsG9X6edaW!q~B zbSnqtP*MBb*N=#8(v0_g;1l5M{&SpQZ=N|HG1d{ha39$NczgaIdI++vZMXs#vCFiBMF# zl(`y7#}mqS>&F19Y*nNtdGe^G)xJUl2=0#Kk{D96NabONP5E?O?tb_ z%gbZs4jZJg>HYh=Cwoh+xiZXcuA6z+o+{HTRgN}x4y6XZm+nkn60jf6e-deOeLgTj zjY_5mo_9SskL;6JbGcx)3euky`A3<<<4;HQ?|{x&qxy92cSWVD8t-B^`q${BcG@St zTw7FZuo#dK{9NPmD_GLv6#&>DcbhaCh|IUQxA$ATde<&}pj-4(?T7W#Q8(tWfJica zEYV33`=h@}oO3OA0%Zhrcq0yf@jFz;n3NE0nmF)an1#Qat?(<2Fus3~vwh*H6Wdfc zI6(hd?Wgzg%Da}ov01heO4okgeid6|5b{-n)^x4mB|1QTNQeh#qTAT(Z&IUg<+QtK zVJ0|}qNdZLrn9;x!4&c%D~%mcE`r6~ER}(3-g|KGwNf<2^z`LsCC4L|+8xq-+^d?EM~>}W@93$lTqwByL; zBA#!FI*RWL^WWY?I>Z$<+;USlDjH~>)qW`>6Q|{r`z~qhVO8OI(jv{9ov$4gAM2Hn z_V1{22%F9qM91a^th7E7-V*t`8k=8GNu0`wg&_qkNWxf(6@ux9Q)84YD@JgFNE|p} z+LJC*`=4*I-jS7!Vo0?+j1$$UPY)NoJ7e>vqXbUk{`}>9+xpA8u8oSWQ3a>~r`lm<`Y0sGHz2Pmj1M3pw`iE8YnGbE>h3UjH%;57M&>V_K;`E7u#3Jt)nrp`%)jN9 z;jT4P$qHd~Mnm!Uj-{X3PPaB_Z}U-TdowKby9m4Rx_?lEsgLnyl}lohy_QPJx=bcd z8Gb!}_l4E$#`kT+_N|)OD%r9@^P&;nrvr(ve*1bpksJc8+JZ`X1qWkY5bq3OKa?41 zNIrd2q}ptzkv*q+L^h^IA|T|U^V>9>u#%HS&~Gp!Jzd^+8=YHX9p|yPsAFpGmDe8* zmL?Xi+-h&)bgU;RYLHq*CElE8nb5({84pM;i3?2l%hiADZDon*6Hm|iXGWlkfqN%3Z5m!Ow{^XuJDsWonMy z{-C8aQSB~~D=#Z6D=p3cNzhluSWzp>KT!iqf+hb6J_tx-?Mg{vFwKWyz zfFB9jou4Dl*GZJ0@o2d0`8MxV{a?(zWl-Etmo^L}I0=DZf#B{EAi>>(GYsw!oIr37 z?(XjHWN>$P1`R=j1$Tdb^J z6z5*E*S$cbtTatGwL*R^cgVpuna+o88A#`FYEJ!PDbjdm`4Mm}u0WA$?NWyO26P=p z^@1$v7mLkY%)-gEwY2`wONY>f$4K%Jf|n$B^AWaH%x13l{f(ui_7CJH%~0YsOdrjc z$ZOB#p4hM$CROs71pGgkVo_P2hN#NaMhZNBV)#Pv^iqmkKpsAPqT2VMB;j{>=v`e~ zY_yVpo|#UU^r^#U<@#)NGSKj)R)^#OS8T9b_&o7Mz8X*l%V&MXC3e=VHJG(33|742 zT=}X;P8G83a?6%8-}Ey4k8YF0iGEi{zuIj##DfdA7OlDmdRCeoN;Bi}{P=WA>HH3} zF58hxAR}#nNf@UNj`y0ZyT2g#gA8h6610f#R@~2I360%E@D)EKk790KY0^UP_IuSa85b4!}Kfk(=mRek&e?m^V0RQl$%>4}Mn zlqonI_}*BbHEQp;Xqcn`WOZ)i(31|o<)77Q#xf|i#MPJhwiCY_gu+)psR749v# zP?S;hZ(`u{0&z6`Y;mcLEjUk)et;C!HT`qO6xTPOji&tEHr}kD!Y(H9Vj2{hWv8W--v)sB#a2Sg3NbSQAqg{ z6BE~-eIV2Lp;iDDZK;MRi7d+%ecNO>kf@F^P$)^^A5mL|s-P(4)a6Nv9u z5pB=jDH0PBZWPGwMq=oP^R)V!@qhg_NDFUbT#Na45<;cIaKr*SK5=s!APFKuq}v$4 z*gT2@U%)J)>5MI+o=uWMJp(%6QksDq*E_SxL0>xUN4jM*7>FH(6w_}8>aSr7!)qEM3p7e5V+6I&E?0+ zFJ0c1RZF*h?HFDy%1JNjoxr%0>*-A@xajEM={fc$>#Mv8DEaNy1kBv06qYjfDR9dQ zaO;6M?Lu5Bry2obU~cyH3bOj(v^?7%V)HhM8Jvu{DLZnB5sme>!LP2?v=?|j_=JE- zyj|C){8Qzg$9ct1`8Blpt{FNqIh)}mL#tKReQ15XBa!4jJoS~rq$63M{o zg80boGtR9ks&`#Vi*3cuovT&CQvEG`%rgG#l}YkhV@*<)nA-T)EH zxVh;7_wH6o9d43mfRk$zbY^Cbm2OddS(+=3l0X`7nS1Ax$Arzb?!g^P_j2Im;?(WC zK$>>bbWi^Fh5}XGlF|uOMpm57iVU8Sd(g-fzAyX~!k?9hB?%kDTiP^OdA!e5vsG*W z;bnG4pf{>;p}7RXoV1XE-3z<1pUDVW=ef1r`gE0uGts9+@2)I$ruG34Oo}VzfofzM zNV%>vyXKZG+~~s%5*ddj$c#?OlCcXLab;6vV+?8M&m}%#(9r>8jh^vZV(+5d~oXiN--3bR` zGVBi_H7NeN=!NVg_eW7PbF5kq;}bmuBqd&fYD}!ifE447J#PlC zOgeJq5uJVD0GaXSoy^93dJ6-lBA}wSDC_a+@&f-{jW*S@K46V`lYVBuowu!8Kv?=| z9qfs+XVd0-y!w6M!`m#x&0OQH%A80<+@T{V%bMG-yA=TQLl5CNg*74d*_E7>r+q-A z@9zAwKpr=0VY-P~Tt)(W|6Z8+dwqOs3Camvx!$s*8KWIx3ehj7FbV# z#ImK*P!50i3KB0df92d*pOG9+(p{_1zz(g4B;v)%MLxZRZ(Z$5A=!DYy4P~KXpzni z7arw{6W1P+YUX>|Sf1|enR+4cbSBV#)p}&6LH=G1hfMN4mszzV^@__jp|Qj3FXKen zW|}^?pFMcSQ3@Ew>nw+dbj6_kTP3HZC^KH`*-;&YVM@ri+OF6`MB_3{?ceyRd#%o zWu5#Ty|{i^oIf{d$b{<$!%GZ@FN8h1U8mvqip8pZ&u#BFC!n; z)=+_O)ak8!+tTln7me<0skPH`ms4M*-`9Q_k8?Ipq`_Mwd3Bsr+}!d^v)!*~9B^ zf6PeHJ`4t&@zHrN{|LIDty*q&JkYS=`ZC!l(u@%+nhBXQp;>CogtT8mDu1?lxDhrn zz>OlW#8S%#P&U^1)GE;q*D?~Ef*H4*rmEqKv$?{vD;)L3E12Q*{fuM*1mhKW;vE52qW*2+XYLiM!}4ofph80G}#&b zv>O^Jy9(41xAdSfAqWyQU(!Lx_4_<0l+45`g(<~x%S5k;IiVCA7WWZ3?bT8Idv5KV=P8< z_>}7#TY|NQb{ALGc8|?^o%lQFwoyX-civx>kfn-u>-&2t8j(Nwy?(=%A>keg;U4j6 z+}S-gCF17{eOU$?Mc;1U+p=6Ikc`{ZGUi!$RdwTHe%ugoyvf!imPw)I@8$sMHbR zet5w4KsAM=QgV%F@%d`DWIIr@w|LO4skJ#h))f*!>U%gl7x*Q)s|%dgjt?qvB!?>4 z9K22bXX!ysO)*)Lm&IE4)XwY0oufXm4|0ryBRUf`=(Ew_86jC@9*R~ z4-W|xkG7f*9Gq$kB)hdyznp*@5Y7+=AXFB*@i_}q3pJKKJXW$2U6m zTJbe#vKCu_4)&$fkFxseQ-jNW0|#FBPLC>#YNzX51dDxgDLRQ#G?hKi*KxEi7TAIr zDoR(98VSjx8svnS<=k&e5MK#AoGWKYoXTpYTa#1@t9r+UZoH$8KC&PB<`K|?`_|s_ zbUKI%mPE~P^R<*^ptalgkJlM#Y3IjqgoTU}op+4s8CXk~Hu3@i+R0CJYwuFn{1|Wx zIH%R<-5DWWDi6G=;}t>B?(dp3A#ss!n82th+N-}W^96N89?hx4?%s{C?pAtZ*K`_| zznT#IR{K!KVjdF|tCI9dGU;|L_%)YNv7tqJlR^znZnmSXD%mW4<&M_GGz*{eZhqoU zv6CZmSnngJ3q8)v>p#Aq`Ia1|nU1rkeV{1caZN2Fx6m*Q%1d>j)!(Glo$aY)zH0%f zAkOnqC)-93i&|K|mv1praG76d`mDoflZ{L*6wh5YG5lFvcm70QDNKLR(;knnOaoo7 zgsnSSgV&T^luKGBwl0Uodz*M4GdZNzsV*mr{WWpXha{2I3liH)SqZ1~CeTlBe&QwD zPjXmj_#(otx|Dqn3#o46&3K1e^|uRiMl6_)B=;Y}+l>q_x9KR=O84>cb;J(M*zE&T zjz94>kPH|P=pJ-03e2hzpzUDn*~|;hzyCA@)*BtlB}V|j;4oM_yrG>8IdBi;el@2S z8LyCmTr>j~1G?czcIXo{hE`lzFMrOFUb|v_dI=z%fgFO=+~Wo;p+&$OLD^-;2TlYy zr<;SZ#821#HC?_HQ5%4jpV$4GWx&c}67gd_G186UuY>tLxN{8T)XRn`j2F+fqR@QS zWAUevm?m5&%4Wl^P;Pd+It0M4M*fJ}r2V8`ViOW^Jq{UO-jiOBQ~%U>#pQJ9FXOUq(D7jiDH|5{|V?f|px>EWmyu%?*HMPuv8{vmqq z%y3jY*-lawL_VeCrc*?O!V(A_T@ut2CaF~{^*k2dD>NheIXf@J_kY)W?$`UQQ|PKX zb5y$_p*IOLi9FI(Z0*8Y(8F21;mk_N;y9s?e)(MGzM%eV-$4;ZZaIvr(3E*TKcLfz zgwBt9z&Y8Lkw>xI3Rxw(X<$GDJqwXA8oGOE;;$I>ml4H%p4sajvB;4@FL;J5tUfr~ zb4bd&gVOk?;|%-)uqD`HXIofFW}$Q;%)}h_$D(8;G${Q?PWy~5y+?)c6p5bn9P+b` z{>XnflG3`o97#oJ-dp28W*D7YUZ2IQNPLuhU2Za(YfJEXUf$gt>Q!I*;z0qj@ajE@ z9yumgxNSZOFrQ(^3;J+XaCqUN09hnd=x;8r8{lAq3FMhj>-6;{FJnacAv6y|L>4`b z2S#Cof$2cXB&33&_nvHUR-_8u65cOX;2Z_oVYS9h=<4rzvH%Kj? zkyQ(q_5OEQ9+8C@uJ1qN@BtvZ7;QFp_bejEs4Zcd`c}d6ijozwR$v(clZ&zSKmqWt zR65h5XAH}C3>40S8kFsg#2?Lr!`z())S876{+V3wK*>$^zIY!%Dp_(`GDROzyy=oY z#JHAWYonPHVK{|Ei~z{`f99Fg3wsW;9;*6sk;D=PJ$k?_j2`|S42+(ri$E|y*#fbA zp@^4kZSz3dStb)3kglL|M1PiK zca8IcwF)q*FgC(ndLGPQFIMvtbx;O$)&B}N&++{%l0_!Fz7=oQt1g7&H^FIr|Hztn z+*RzK``Kr{6jcnk2aq&oX68&jH>i{{Oq~9R_`KSF6O5@%pDfAK3%1VGNu5rIW7xTlYGPj-kwcecJREOeS( znutwg@81%TCqc$=FL|*l4Y5XX7W}(r5&oMnNTuInbBk2r<8_YrY0SZAxwtepNED6C zAYW~4Zoa%JH5Q5xc?==pQ828(M0?wCI`IaXz=F~n_TRz_$ROqoJxqz-OD|ODUQ@uO zA;TPDN+7Y#asw$nupnJtNkyis@dWxpM!h+a2s%V4?C>|Fg#e9hD}G$BS6*Q;AiCRBMcE{BcE2%Y)4@;kSO5E^v_L}ls_NcNh*MbZ5R5J? zBttj_0ohCL^ZhHbPJs)}?l8-k*fyvV-N}NZ@Y+AKY43TCTF99Mc3w83-IQ7#{%R-2 zO$vi>5lg9!Ll(D0bnh>CC%}+`+f7}wGkJ>C(!)$UFuJw` z0aa*DtZ&x&nZOK-$O48a>OoDf{FQc%T|?bBV7=u!UQ0RN1PHgcf9XhT?j-37LVY&OhO>8&V-SYzIJj+ z6?C3<_W)V82cn=e3y?+10&xW2pW>c^ry1xoqJuuYf7#uqft?kucUJ2Rjy?@Dr=HUMeZYNEfXmG#Yz4XlmV~DUjQW5w&N^ zO)CHUS%o=>#T;I{^FEXj@b&^&yjQ6_6%Qi8NRUgS1V=Hv`QX7pWs7_v-8X&y{baPG>80ruiqj*y@P}LH*^9QQ ztplv)AC;A{OoA`%63zg-+(OAGe*TEV+!Pc0o4&=BYxQVYPV>naHRv!>R>A^I6;2gW zw8A*z!dJ*)-NA=K$}~!1t$^VC(mbsk#eR>-j}TPV<|Wy@DdZB0;`l;|HKUH*meTB@ zmeYLG#Qrbe5JGd6{p9t^t5MHKD^`6RTJn)zk`i-`>%#9}CS`41rrNa88r*yC{4zEw zXMH31L61!5_7jYWVTVSCOF$d@ud&63U=KX=>BqjRn+d%N71UkR_H6DY%i#q(QlrE3 zPHQrmJB@dX7FbvX(nOtIyHD1I@Ax-rL1K-GjbP&;{$$5%9{+TxGlX9q&#T0_PKc{`qp4QZQ2a z1%kF(#V@HAeFUQ0u$W!Lb(SmzGO#S|idmQI!1O1CbdXHfx{)s0i#C+!JvKCAr+l3 zi}%0fORTzb-<_5h2)Ao?1;Fj#YZ88qD*IVef>;@_vpJp0qjcNDh6R$1W&OEgmbqL z!_=>(HVzo7C`}^L{KQXG;e<<0;Eu`3NkGThZHo5GB3G&BOdBq#f8fkss^4hXP0n54 z9@b)pwC2uU2G_f<&H<9uj<{C-+uVB552= zovi-Fbc8DlWcOWi^y88|Z3mT;GS~>-(Lc_7z2)I@>D*R#8f(6-+5U5d)aR2I(4KW( zqL2H(PRrrQCh!~k>o=0Zk8Y2i|0lp(a zw}CCSW%t-ZUrOWKVC`>_78#y{qqEiAniLUm=5oZjoc$g(P461Qn5)KkOO95HwI^H- zLHzu=E1-k(XFTh^tp#kmUqN$#n{%BRm^$UK1)p@KDV?GcDJ1Rm;2UIXIHf`nkUl*B zdhh%AG8Lf1d6!J8o0ZU)H!24>S3N?M?*phD0ljRDdX!sQ5a2o~I053J4#TR)`NB-G zf(aN>&iQ<-Oiw37WI1i81NVIiS3?8RirO(K?fK1L#?hWMARiI@kLiLKb%NvQmfwLqxntMm%rgAOMnvDn zLpF|^i|gH^+r#a}%3|^dC9Q1~Wg?0-;WO|Woj>4WgsgOp3)6c9HcNa~a{uv!(p;4w z^F!xGg8*ir3QHoE1>$zJ3q9P;)R+IcKrf-=!2L4Ykg$SZdn>A0robISSx+FV@SnpF zr=ql7h1bLmMbhe&)Tcy)eot;`{fut1`=@R6fc+Kt|s1z*a6zoF4(jPX%q&HRv$W@b^9r~WP) zf1&v360B{(+U~chZvRMU30?HR5^*F;CqBnn3g8S*3Sq!0rA53*D19<_BpGR1(&!jB zL!Qg_TAEvn^o%(vAT^|kzMb-LbgX-bJa9@<*tdR%rKETen~=`^8UUPeCVc*!$x*}@ zZdFZJdKnd{=!`m`J19Nt>{sPThH)>OEyP3A_DO9?Fexu_P;>1q&5qpJ`_kr0unR<^ zEHhUlv?T_>6mDi(9obQTm?}Tjz9{dSAelTF>lP27Rn?%=7@k4}+Q(=Y==h_}<&UJY zg>BP^eG3a%fk2Gy>;}!;%@9!2X;N@c#9H-)s_?VYwYw0K#B3r!O84kGw_pCTZ(wZkD+M z56b>67SGhA$kVS>bqP(>fi$GqLlWtBB^~&D^%6SQv(b+h*vSfC;|%a0Q`jzl^jXph z;H5{rN8#eZ=vU4>b$LhF@I_Ge~N6>Tr%j zPwJ12-g6*c9@_S$dT%vjtj`L!JrIR;?P;_<@jD-r)QJ1_9TssKer^YG@JI{rYJ$s; zA$27=s()7p09Ay~i&K$V@QP2u39CLdJPKZC{NdsNyFG8+>3Vx^Ht)V(UH6iBY71~A zP;oMdj$#3H#oAeRE@6o+BGJPwvt3lcJ)1O7iafD5z-2#^y*4#yt0(X-b!Ro9y(*#F zQ1mv=WPp%Ap~&7Ye7^&Wney6yXmFE200~$buqY zKXSsKvn9r=N(l)yz)Y&Y*Wdr7^v%FLTDYi+DFEf62pc$nh_BVU-|iOP=u%f?TO^tr z-_VQ8(SCKpR}d*mkNQ9d_ZTdG1WQ>&%6w%F5}5{Nn?yZx(LJtyI+f2p*ip5AiaBOX z3{3Q@-6!?ZQUvah0OF<9ftJE~QOC4xBd*{o)OvS1uNAhxzu)tIMRID4j+%GTR^KYp zT+%Xy?cj%g%H-DmuUVFTT?<&yG?MKZVRi{eygOp>h0KeTk$NXp+i6J)c%=9Z!-KZy z&H)OgyB~Decvm)=sNmq8Q&H)7CXAa>dZjRJ9i7uDX|&>*Q!uX>p2|TQ#f6KmVX@z7 z#@bjq&-xIYz)T&I?GEZAW~KE2Jv{1PhQ~wL z+;m~)M}ZOCokHlz8++++XJ=jZ0^Lphuknd}FBW;hjgUSlpIaX(g=~du!2Lz z35vQ*410WBP<_EY=ooiuQbI*@X;r36Ka6mHKy08<8_gm%E~YQ&bi>TntlSX)slv!l zccb%b-@0v+ppLb~<&w0eTg2CdMeqnWUtY}T)`uy3D@DGto`QdbSzd+CL0``$e}7n) z)io@8_o4!bDlBmAEAR%4)8ONNV1yX`)J$u6(7mB|@WDRDrsX7HTa0*6ikV!Z_b$A- zq_*ZB)S-RoR#n$&T~=O$i!rPEwOO&5@TJsMn7XDhGsX63>PL~*T|9I%7ZX)r-uK_f z9kERnSNBMFyVI)5i3tbR9zdk?hmU2XO+G7f^F2gOMP@UOYn4V6VV3{h6x~HpusgFD zD?L1JN);ME?5(f+1k}=*fAp`h2}VREv*!MGhNZg5_~%mOjAS;P;G<=EkKlqdbk7qx zodrclKyW+9T*v=srHA4T&`JM4`;iCf-;q5~Ee)-F37v^}A|fL2Au^#u`nTK4qr#G? z-FHuKbAMY}C9&Q#Tl&Z!sFn8iwChlayXb8b*pwMRy$7~&Ih)X#5R73qv-4R0+PJvo zLvCXOExfkcG&+%s+AG@;U;WQXReI z+tt<2qjZbm6X+I8?m{D7;(l=|wy7KGz3oTyhN3Ai7$iOMckX@;;nCOgO&i&8C#&jc zL}d1RT`87E)9aUP>SI;teLr;t$~Sm_SjyKp_$h5l473`yX}wr!AZNbXeLerEFWkds zCRO3sCG*CkIaxrSGqg<>sU*Fwu21`lh$hM)DMzC!_!-78s*&M1sZ6bB5SY$+Qk6($ zVz4P>YLQGK70K?v{b-U;g>K8k&bEh%OuvEFYI~&OG9c%!Ry>#`%B<=9A@g8t+I&R@ zk{G#~eOB6l<|da(P(nw?_X&^C56TX5y-+RuXDI25bagK1&cNBHNcv^t$moXlAfGO; zv3HUfAGezyqP(J}GA*oz4L#dp!c!*gOc4(CQK6jjnf$Yv#8V{{AA_t!w_+rBCG*QU zys+^z#P?tso60{&FB$#fkyhPYnfztN#u!QBa!Qw7Y=+v1!xz>~;uJgRnRKpd3Fi3b z%S?a6Rhk0v&J>BAy)2RwGaCb$``@qnqBpIeabd}QkSdPDe+bKbnT`bsaG?Bqkj1uV zuJkCsDb+YJKPse?S3tvgjcQgWh++TJbxDCAVIUjEL7+&^IKc$)moaUSQ9C1}2X@@58U;5X_GO7i;TUDIF8wn%GHto?!o?kJ* zRTB=j9=xfQZB#rjDMc3VTmVU6m~hnK9Dftl`sV1!IYkeNtJr18{8ndIy3*{#EN9(X zRPIV!FF3ciCH;3hqo>hf0wVrMwVZmEUDm$d@N}-S-`R>TnM-!S^JqV0_o4r@^igP8 z!C!4(TXZL(H|O*WG-#@{2fM(>tMa?)3`|P!Io&?K4odQPKmN45h}O&%Ro(rxPt8NB zc(%Pu$Tsg-t{mUWh88-JEz=0V z{S=bjcBYy23Z&qimy)6-ZvurD>wkH=sfp)z=F_Ehg<@Q6hGeZaMT97um5%HB zk8Z`b&X#pSNyhpkCe0Qq3;x7aN>w3&uJ$_Tg0PYxBnT6uY#n~0l-jB%2H&S0-J@j!GwB2F7 z|3UvJb2q&pe>sQTnE36#ducJMJ2@dvK!Qs9Ygw&LKGk&~pIwtAwA*2UzwT;27G*j+ zBjxjBBw#Kc`+&xn1V0@gJqrHjk7ftB$u^&a=|(Qoc*xCZhMst%#)47X48(hhgdgd& zj4c7)_N?YKo#m@_BWfw+CEV{ZC@t09nx39_1V!2kBOAPDT2{)UfAwEj*)KHi59OAa>GPPL+@7f2?(YcY==5ic>zTiB10yF-}|0OG#z_Iql0<( zPd;H@n!Blt!0pqaY8U@O3DdIX&=wfDqHYznK<`0CUOp@dR&gciL<~g>aJJ^;6V#ap zT^ck5WiR$ZgY4|o-$bUb{fG#{bYedR4^4Oyu<@WxjhSmSWiJ0_51_&{;?R$+iU?&L z##HMRqMQk7JH#>w<#}8sq)~!FX{*uZL z`Bh-BI#+ai3EhA8WHH9UT7)j~%g-D7k|q|#%nZF$#)kpH5LpLbC-K>=z=6Ks z$G;tUB^>R&;YStczHBeK{8>mg+$k$=oBMN8{4b4;caj6c!^6vCLq9jlqV|)L4yIop zq024xivpUm31_T83vaV>NGv@5ONH-{x?&XxnbIrNer_Kf5(5_lS@3qB$f&MAL*7G+ zvYvGm5V7cby-y&kW8CwymdELE-nHFdAIIFP%Xedao$S`R&z`uJP7PHJMM`Ejn&STE zrm+iN-M@x0-D45dih`d|`#zy2G8iz$*fXZdHnMQv(09+2W)+>kU}qU+!@E4F{{@}F zV(`Htl{8|+*gsx?J?QEpH%^&I?60uS4|&ZA+=<$h^(><7jXwRdgK<4u?exuj`17T% z!UmRlG=8w(z+(HzSQXU*w)EY)dlG6mrh0WZo;3Uz6*c&q$Syy8rhu1@@sikk2?J-V z#?zUEWz7YRV*68Y`ph4Sy*3705Lb8FHsERjgR9WUV!)xj+>VZKKHdof;A^Bbq?X!zj34qmpiClZ13N!@<9A9x^d^w*Jz{A9 zKXX`O$JYs>AoME4|G0 zbTMMxs94Dr&cgDrs^lFF9<2b=pFXc)@%@`uLTP%-n4oY&QFiLKu`S&E{I8R54+!S2 zK&>gisfzS)i9?l2C*KG>_+?Lc9IpxmQvjiPgx_9w(G8TSz7>eczI+`XoU=F#OQHvU zVyliwX;mZmO@b6cY)~W)D26TfT>8#_N+R30fW7G*3<8l|e2to>{nmtmImTe=SC*U7 zbOoh-Ak?71?PR3nLV`!|ow+{l&MR7YK3&AbqN$zD%{+_85Odnk)kXFN0|SH27#Hvf-c8ssZjQ`P)9{*17?$grk$V!}x`JpJ-9kof}|X4^?00qi~&R~gerK0p^I%PGV~;nngJ ziz)jZ6e42zuoS5!(G!W~bhvD`fR;60CJu$86B?@H-D|2el0IUgx=h)t@AxE)xm+3Q z!nD5zQS;K)JdklAnz4)y`MJf01y=SdEVB3NWw;xQD)=ztkH_DLlpsdrkR;FD&#e~H z(Z)}EI_w;uE(rutj1S^JM9T~Ax!9j8KRDrn_Nk%Yz(E&F@hOZ?5{yxcz1kWY8oq5u zK*01#pwU{(^(i*vVG$BTLL<0#@e2Ry1jMo!1eeMwqMYwpsn7QXqwSq~}|o>MTF+#%Wz zj~Ej_2rINBo3gSCG(Vx95mad+tk(SF_4r;Ao`AIyeVB;mou1cMGq40=hGRNbUQD2M zxos$THeBQeU4|ADzknMAIcLh0Xk__wk3HT3u*Lpl9il;m`?Q)5bue+w{^r8KB360UDhW1EbnhAdmQtSmTE3D6 zyj~G)PF9=>qeNZcd=Q6(3KJ8P&m_fnI>xkfr7uak?9?meuvM|{{J{*W$V2_aWiRp~ zoM*e0+XKIm`G*A{i~Isw=D2pOQU;NV>ROM|XgZxns~C9YLo0#2q*`-H8mP{}H=GcA zh>lyV;g~DDOhIOTG>4LN=e7Yoh*qKu44AFfqg!2sSUi*T^3989jaOG%-E2Q(vF~9n z{oZTku$qxmE$O=lfwXTOO|dv0xH({5L0?lm=DxrxNCIbAgDKw@a}Es&#K54?D!P;7 ziEm6&V9Qyfi6s*MO{<|r3SB+Z@ZL2F*@N#%vRuc>xhNKMCnseo*~~rYi!9KL-66Q> zJlEwBvZ)uLfSIIb_f{h}zYV;})s>y5`*@l-SD{TXTjSv%?(!WC7#wr@MRg9BOb^qX zXEMhb4Q|27VAx^<;b@;RBmw&Z2+Mds=F}GZWId>4KpW`?w>{CH7}TwM*9Zh_Y`JX# z;*~K%q{}yaf>S&aLf7Wm*8u0b$>k_nd~V%>#!ILQ#Ril;2!b@{bFR5 zKY;R}s*148_UX~X@XEP&32(BitY)ltpY(&V!^@*~GCW*c<$&$GUr(MgIcCirNtFFl zAxYYgV<9L~2JDv|#dCCpTDiQGy;;)H_qYp{`cMt|Y!rm8E_Q(Mv6qUMr#e$8pXs^H z^Xulg8$D1}+^G><{H@Au@;iwL77##CQ9=J{L=L|n7Xd2NDY2k1?9(R%ZvG;LxmkHR zxy0a)w(n!(zCrK=FqMe-)a~$i0KmPO6+vVkg2P7NtC4B(9?M-n+I~5$a16!~b8~v4 zqZ0^Dwc!>>Zg*c$YEZ> z+d?mVlrh}RTO25drU|mY^ecf6_eL9^Bd3kiU4y2+r8uo#Zq;kim>!@=SebLW_e`c#bA%raIuA~;RElvPO!oA2jZ-q5 zFaPQ7VxyI#_h@MQ?L>vttZxaFn^yHi3)(j#zaFh(`Hz+3$7V-+n^S9zEm*;Ogo?H0lg_nPwwWvppBG<*JbQWOWL_=IgkQxq30+Rek^=l5(w##mza0oh%WIE3%7VK#WH`5oNM`Dn- zav8TYOHL6OY1zndkDR=&oVr2M6zNxHv@UVI>o*pKX`s#88sdi?36(#93x5&&{RsdG zNVHIaco+i+#rd1|#c2#6Mr$04rM)^=O9;0VWl}r0fWQ~E+ytCjnm_*580g++>!8TQ zu4|TYuLJf_{exkD_9mAzlTS%v(&jwfVZxig13f9Y+?IMYCRK9^{p*%I@VgBTh@Vb~ z7i7BfbH7RT-bz~BcasY6BttKto>5<*uc2@#e^f&>?{qLBbNDuI>CmluM?Y;{qQQ&t zH)rMvuXsIqC{q?l=6=hL=tiH$?#YN$6mUHc+O7mb0~a){$n4%@u@K+~-37Y>5snEy zTK|wl>R`aKG)u_$3T%A6l46bkz`A6S$()|MSqr(PRW zj2}psL?74`Lj!a81tj>vn}&XMY98f>(ZUA{k8`4PGlKXHGn zwjnjR;y3hGNs2I&mSF{QfGi&Vr^!{4G6vv6+I*ZLJ0+y>H)t2@ocO}20YuE_hOa`L zvZsubCFd|!J}HMi>GeMt8Y{BaJvFmBa*>q#^Nxwanm_)wbCJSL-L{Q8lcs_nKKrw~ zZJ64As~XP{jT&*SV-;XCS*8-1ck$i1UKV}R^w75*A-h+Jr!En=H)Bn)gqXXRu-B6x zGo*M>{RW6S_ySlZ8$)xt^)2B*VRH++deBWMz2DCL~>d0C^ViH}HZ z6TJI4E$}cMNbGqHG)rA`(pz0b9rYT{-YO2!XM&Eo>1ODCUMv{d#%)`}zB=LIn-Yqg zd6nS+iBe^pO3h7aNl9tc1OJrNz?He6p&{#Ip-iYl?uu3_n)PNTPCnCzkZu7Dd- zh-|>)UA^iS>PvJNR`bLX4NtSPn4Ty6p1X9xEF2*m?mOW?pZ@{Jr? z0H+(1R&xeZd5XtcVtq~T|Edqk0O}2ei+Cs6ddot46Frx{EJ=XWQhRV~FMr^C{b-h&DaUR9BfKhB$pw2Tb&1D}JzLMF zKcC&O9aYM}(NtqQ%Y)j%Ip(}TD@pFAltTQ}ZiBaQ8lf;L+%_EC{8GykK0z>KK7Bvh zd6sng%T>&~-^U-$jlXSI5qvE?gk^~yCJQ(&LMi;7UhCui6|N&9CP6OTqb|RH^moPD zwiA&e8aVs`IOF|`Z3#kjkCCS?c)w*R8j_a&;nJHmCrq7O6SX0=$dlDsp)rNyQa(7W zP1yU3M(;-~~4~H|89f zhXN9GoFe@F+|hk{8@Er>IS zcG7+%MyrsaL`;CcC>Q}@)ZTu%p)!KpeJ@@SnptaqJ6O7gn4yzxxJ1{y>&y#cKeb!? zK#6kKbGiyRa329%H;U}Xd-sktp=Z1@fIc%EN%ZqkK(Xgp`@k?dR*AR84Tw?Q6RVNi zO&RvBkB4jY{mr7w_5NjiZD*!9xn!LcJmM@u_-Wj0+6E88WP13koBh*MyC?yHqx+qZ z$$a|GWNtm`yB1#O*k$~B$;!fFDZG$rZxLz$*&$2V`A@Ad-kpD%`ZNSz-z6kWo4*z~ zGP0TCAG$zEeIN8KT)gaaXMFJs$F6y87h(<+fgqQlkxrwf z!Ng?7Qa-mnvtVM3Qt_FvDt5t>YE7014nT1J{dj*#V}JnvAt|M{3)`UolX#4#$_|9` z=O3C@1&py6fXe+R-Cbn=IfPY&Dm#k2F#vts5p{*n^7HOT1pa^iv;~95=e2dBp=_Dj zLg;7es7Np{SrH}uh#S8z-v)Ef%D&fIN@)n4DeZ!0sC?-A#lk1cd0Wp0-QnJzW+`T%v`+3e*Lcw zJ*Ue8VY`07|LgUL=M+NoSa8EV@Q}d2KBlMVyVE7<|4ZWZ^mNSTEWqrsUT)B5Wd2tM z7?@8CfU9ljN*92O^=Rn)JN>KRgnq~AJ*a2v;NOXY(e*2?r7Tt#_c!1EKA!L&UwN|~ zwVcV#{-)>U|1W)tE9T}3`p+>3e(KFO?+$Nr^CTRR!1=#D(enI&%Kz_Av`Enn*^8ZQL7AwN>h-YSac2vsER~3MEis~hlY%dgiIQnp3H}g zCdXS^F)x=yDL+^Rc6V#8xyB5U*7kxqw-a=So1X}U#bty3pk^j`8&(XbOk3qH3r!r49=f6#3_<#4mq8*8oMQ~uT z^2qc}t=4{xgRHfD-3W$u=j`Spw);u83gKLQiPioqO|tJmchRvQ@bKM8KTn}%jOkLW z)?hbG#xj1}yrJX&V|=eApfzwRm$NV3%fBCpuBC&AW%5=0fs`=@7=vSl$;i2=yKQ6n zZRU{qroq3t#tycG1+;=Pe6(n7O03{|T0h=j_T?Zx4pPqeS7^| zLC@VUC4N)p8B~31%LP={)xGz>W$kHQ^K>(u^!@kmr9L@vigtzmXKM4~-}YG@n!n3& z;An5H-T|ug4?OS!>e6pytG?A=)4zMJNv-1Za|ixuVgmi!=jN*lkf=R0xI3>N5aTdv zr1j-&dU>WPmL}L1ok7u2qg6-Dj>;q0L+J$t@WXEOG3*$(A`=Y4GOhyg0&9E?S7X zlber+C&5up+UVua=7zm?t2bGWZHGUE(QqcQrMsT_$$%x{t8$FW!Dy1ZRV6b0 zXp$N+e@KS+-`IEx@&M@4bqgs+wggh#|EiIZ$=|Xe^wM-Bkv^WwD!Q(@=4`8Pq?&nrxP*X zNPjIqR!B`8RFRzOVGfAgVQ!4{5-0l74tg7j=Qqv@*AnhZd zPv36J`4MSwo8gJ}$WO@ruDlZeJHI6Vv!#FY^qa&poL+-@kJE zF}_(ApUsyMh3r0UdeOS8Sf1rh+}>a~{y84zr1qrox(sl;Y+fm07RTp1d01ziG2EMa z%BGD)gn92jNQ`{<_q;q{{w(r52Przf0lrGf-+j8+5H^@8vbc0!_v^Dh*?FZoy-;sL zwH&$poscKs;=2jBz00Vbx3HH?Sy^IR*Mt7^Ot@qJJc1H732A`THij7s>D(;YndFmPsf>Aip#a&^{c|f zX;!v2yzg#6;gj3ib)AEI3)UYY)v<3lm;c)GeioTIox5kdB2fh3G5OIO=lKSYX&HNX zUlhttiR4nbx@wDkqM21ZRzU8BcUAG%A9R;(q2~F5oyLs(Yb`Bm{`(I|FsiGWoeHDV z@o|6=1miU2jg_51Gj|y%IbetP9+POO|2a(;vKPzPy%^<7pbfMj+d&gb=!bqb6&blU zqu8Y~gI-t7xls%&&-M%U=rU!9ZHSLG|AO`=2NCQ!w5CPh5 z_4PME6{a7528gf*);}{ENxhQLH2kUD#Nf-Tdq+0;L@LqQNJ;>WWI~*4<>vBG%78OW) zzlpK{R=Ccn299LG*k=X}lm%mthtUN-UQe9)<9bRZvVTxAb6A(bE5%O+V6DU*I`iHq z`JMhb=6qzuaSR|nlQ=h6?+BU6N@Q}P@inX_r>Pr?UZs#Lb&)j=9&rCuE=EWQi&(*Q zo^U2j`FMThYA!=(WJJ5)**2@K&m$JDz-;b^dcNT>4bJYEI)1kUuvkVqR>;BK5y(Eq zzv{qoz!?9Y!v2dh5ITd{@-2=ct^(z8R`iu=@O>#D@TWPa3rhDcYJK&fwZ{oM6UZve zjhyM>yc_XM#^)bd+A+q70<4~j+SMxmWFaO3+qsJMD)-Y*qn{*(-psQ9(pv4T<37h?S4TQ%T?QhQ_XBcV-B5(sk?jItWeKtPCL#3 z@KOcR4aks1YC|ckIIlnKb#L4u53C>}T(Yn6eS&KHe`w>d60?A6+_xnaYW=y^?WSN> zU?>3egfoP_$GR6Ahq!DjevIMTY5U_+LtC}*)PvJ`0~aB`>WgwC^CDPtH{VuRo-)NN z;ncmX;M~hHJov6?QDbe=yMtXNpZ2U3wWTH>5Y%(HhD}t=?o1o3hH}Ta5;3ZLvJzY` zjEeW8!dy-nc%h3&Y?0VnSs%qpI1NrEvW%T#U*1G`?nyB-RjB=nCU76`bO^SuJ|`1_ zVZ5n@W_vUZ4?Rr-X?QbbOdfq;k}xXmo{6@b_UZ_76XFd?WBl` zb9Wj^31JvLKV4==me9MJl%rBbw9XXdfleDXrG)Mz3~A%1!xKcn6=D0+HY-sfm-n(( zpM9GhI>HDV>)8W_J9G;WN%- zg)MTYd1#~Zd*p;!a1X1S!%0?+##eB>v*ykU+^EbO{EHE=rbxjLLy)3rxz>LwH)96Q z1)iIcN=Lls(eL&p^_8{LORKvKWg*CZoalr{3g04&aoKUKWGUtozmaM%1cEw(sF%aI zbE@qrs@8gubCYrp&*OxbZhY30sL<2A9B^-DA0Q_a7?8td~Zq zq?Ns+A(jZ+7^$Qk!gR{G%w0*(-k)I@s%EcoIrBwGj3t1eAk|A(WyKi0iuk+EU5qqK z?*(vry+NPq%9{Z7N%}b`{Vk6@6CC}prR7OZpS$wY3fuOTo~C4)nBBDwh3pc1c%E7S zv!yum8SJ#a*&JDo^b%p52UkXdh(2iNUwMjc#|f)1;#UE7+u176kO}9(*v6C_mV3wB z1%i@s&BUNd?|Jaa2Dt=Q1`mYPSr2Fu{`~zyUTO8gyG@y{Yc^>hMP6bCi+#$mTR%LH za1q>tc9!T4k+EkI4!ZGIExvf#5Cr^`^hVC^<{rS zfA|AGMN-o15>*YTWI`J$wk3rii|!P3gxdKZJ3RauBW+-I>Ohjz_)1^PonKTavGw~$ z=uaAX;|U*PrP-Mqw4GlG&vB-<@U%867*F$g7c_JJG%+wrqjsP`rTkxB6NuLf@T@iZ z+#xgjxNtC3WypxJN)<-2+Uho<-gW9!Snf%)wr$m(5an5qnn}m=?^h$`;e09J`e6}w zxZbMPAOCBhVh7gVhl%L(`RjbZ6Kcjcj~hy1aF`N|ja5;3&!#*3c;^Ref1h~4n*aM~ z#{CzgDP$K>h$RhQp^hi5h+<;sS?>&({Et93gAT^QOKS4T`m(gg4kWiJl8hXRa3kn3 zloJ$L3m8BertwZ5TM7jW@P#QA0B;a|Eh_u~?Vy1!nLF;x_yQ!>5iMgmrX(?uP$E*3 zC_=A%1>na-{jXmx8SaS=nBLfUPwFFmgOy!~Naf;eN}IkxgD@UGxCD5ORkxI>v7dgy zQv9bE#X)tO60xj4RMZH)+ueHmx9cHM%I>nYr4drZ=wzh@`l`9Uea( zb|9L3pU_|=tUqkT_B_BA zf7PRQB`jI15LQRZRw(3x2v!^-@xD5ofi@J*<~~kRdn|B#V39yUs#Vl? zI^VBgtJg5C9%ZOc@O%wc6{Zbhfh~`%0`dZuPYood=J7k8>qCU1u5n(U4k|i6P_5qx z0Wqh4{_B)^;xq)_5cV&c65n<%3twu~Ah(rX(n@FXu|RftKe~a@>%adj%Hp()raW{v zZVxdUJT(TECXq?U^xRudX^e82#-V(HUKjEb3;TVEk`O2bd`A83vc?rZTI9o;|0c)@ zq}h%}QX%I-#+Bj@kr1v@0KO;RrLDtQUH`nFR05E@F9^@>3i3ni(Cf1r!bJM%wBJ%q z@GGr<9-sf`rD);lG>TfOuQY*xN#uqYJtV}?oiM9DFXYRFy2q(+mx7fs@g>wXN>`4D zRj1`eP3Mvg`@4Q@0Ne3!J_fj@xDlWp^(P)=waUs*eUK(@;b%^zz;!b^vAQyti^x`3 z{}D6$dp5L=q3LM2^lrQ$TAFfCFD#!|{0fR~p1~AQ{Q4Ru3L3_bj&aohw*FOYV{*+Y@ z1*L$2BZmP+0x?@fAd_1!47G|YQ<;x&|cpL4z`>vydiqPN$wr)k;lATq)ofou>$eVPr87}V7p6)xJ>k75QYg zZ_C29o1i$K!7Kk3NtE4QO4h_Ey_M+QZbWMn<$Kdrk*1&m0AvQE!*b^)D`{Gw_*0v; z)L{`ykuDbn)RpvFMm_3iQQot4T6qFl8YpXis5Z?RVHI!`?f7?yT3Hzx(0fw>sLD1v zUJC_9&S*hY>3O;@M@|(iBNN`h90@yNu}2ELk!|iBp{!{YA5;NsBFc=bOxH@Pd~yr+ zG*CWee?|Sfh=~GR9GG471(^J%Xc{AyC^K_$P|7q##lG?$As?DRyZ$*OVht9^kK@bP zfNsqWz%c@bo|?=cpghpIy>IF}#SUyt8(t*zg`e?{Sd_uAk=MK#&t4W+ev}(1VUVnX zxNNk5+R^YYqA-_Y4tZLpN)p&kH4k*p=H~uD|#rJikaJdLWkg+^m>=9#;R7 zYP4fe)oZ1G2H;B!6@mP7bUi-2DbrYzAt16aMv4xh8qeiVa9 z`WT772j+!+?gnWWR4Z6ZP6!MXH>Qo{2j!tA`5JLNpZRkoP+^6l!R#16^to0rh7Uj# z|A`p`u?lSwJ{NGt;xTRJ+zgjlUvy8TVljCk&VqC9=xnU=e4_9Opx4ol7#=2zko2Mq z^8qat_7^2sff3y*DikpySmqwg+Cp7HctNNHqc~{k{*%3fW?{Dk4$l8nuN^m^RKNC) zVdc_CJzU>>FH&z(mMnntsagscI+G`b#UmR>negfr59+Ca6t0MC9irFBBcc9Oen*5@ z2>3}U8g({rvVd#^L=cd+8y@~8OE&Ri19za77+Cl;P#6U(qVLEglGcY*neR zcfG!jOdf#J#?OImawk*PA|ChT2Yj7SByRON{z7CdmicJkI?@cyY0fq|97BGn*D5L| zcc;>^uRJX$Q`7fG-}X`HQo(b0yl2Q{uz9RlpP)PBgT=HFzVf`*mN%~d)I>%R3IQ=f zqM~}mU7F}~_&qMnTEO^EIgDZEhYA5eXQ-=Aok_%7g*8Owl)>OPMmPQ8G_`oV>}>kK zr&xj9OR3JElz|oHx%&gPKoDP%df6WvxmHoBV_7$h|~Bw+^HS&Xrm#= z!)DinsxV1S23{n*zl#LFkXI&`!0v(Sq<1G4)XtijFA;gqJC=7MlhnBsHMTF3@<6O| z?)Mv_7SqP_1Gda);y{h+SMHx;W%|GoRW!%kRK7D0E&Ipo>yUQ!;ifSO3CG+=mqftL zTovY@a!p>2`?)kUO;!&T$oFlUlqlin%Gs*x>ly%WAD%Q&90lsi`1kEH<+RY+eR4Oh z+dq5W)-QN*dcZDo8ei;RK{s~u_O>U9Cf3#Z2m5n6vV8*%l&$dCJYdZKqiXC$RJQ&pDL4kDHrCdXGDTsJVDsDVo5 zP?o~q*-Q2WZ9{`Eo}0h2dApA)SBYi{EOh?(T^IvR$N&Vg%D~LR^WYpreoM*u@L*F3Gcu+p)4RuLlxeD{C zvW$f~Zwj#`eGwXQ+^7!f5#xEg7YyORoxc|FE8eoX^aXbTzuZnzXy+AO09q{sH&Xg6 z*mXJ`-u5K^TpqG(G6N23JkU3z&Us;69HUa0LXjX`#74P#K;IHC_X2U%OY>&X^k+zs z7(iqS>o%m?GD3edrT)`-AH7|I@L)LPl$`n)h1+lq%Gmk2pL>;vj9dd~&?h!ci?aU8uCaDGeVctK{Sy=u`kc%}Zl@{D z<7ws!jFfz3=`Yy{wtUKvVwX*TTzbEuqmDmGLFJ1{$sF-FHQ363#wjIUO>J2yrfRT}-%N|PLUD4(zSiJx3{lu^+ zYKZ^kNKOx~9x!SYH^wn=krR%1qjmof4_$wjo-;>eG$CRO4#^00|96qySr+P ze7utlBzSj%&TmLQ%)3s6RLy@;1X|;IW$$AGAv(|~kK-+HxTwQMphe3%>A$$O4X)qP zarj)i1QC9R&ZJgJ56SXVYk9Wr_mn(X!_Thrhn4}#f#WI-P+DE*lc>+(?O8nAr~Arc zaeF-=+jtmxF&4jM#+5g8Qwn;`)Xz4mvzI=vtvfRUbvMuTA-nIq5-%UeBW#B^AGPrZ^|;DFO(_{GZ;H|(jj48KR-0zqEe-Es zWej`+O%%did2s`*_ZM+)rE_djI$#@k_k^*1X_m_c_dx9xCO&XZcpg$+(^4!N3}Mh- zNE%Os*r4&_5?H)!Lma^EV`v)PGU09~C@BDvttnV3KLYF=mD? z3AoilCwZWFX5D4~QoSs(jFVYD6LthhQM~NzeJAZr`-f3KS0jo6L+{)l?_u$e!9Wb7 z+02g<|9VOf%exR8))5~}Yo>l9IX?7+M8P`}!jbv3JuY}2&pqC9TD(<3W+pl2<+mNA z2sa+5TMsSJQ1f5ZkN%bJeuh_gJEK=H*`i<-}bI6 zhlNt{EnM&06UV_{xpY{A z=_yL`i`h$s+c9s@e8IC@0B769a4>PbuS%KF)cauuDW&PBTo5vI5l?^xu*^PYSQh@z*y8E z5MDJ1k;;N<9%LW`t5~7zlp}9&G$nbmLPFVE) znB}hXwlxP1j4cG>by<-4En%OoAwbiP3WKx|m1x4Fw;~{J@rUw(!p*Yg5kcST7h1TX zYDQ8mcYaG?XJ*X;VcrPcTU?XnRmem3Tsb7j#Q@Z1nF$|mdvd1J=hlTZrqZycBL&LH z{g}L{i2@RWRn_g}yFQ%YzDLWR;1nD%-It_gJ*-PV&kY|e?}~l?q&v|&#w$OOUc$$4 zUvF&q?bO%nQ0~Ko^us1?R1ih9Q>#{Cj=3IGBO^kon2V1x=*;DSj2XY_L?J|Gq_j44 zPQ?zA8t4qwKxuEjGw`-hVe><9F%{DUE^2rHLG8{xglHo$1C;O&V z^MtTWM4=>Wh|6S*)Iv%x!4qn z$V~`ypufhHG-AxKMkxe*ZizZa5vl0X!(i<2w4HEIEU2ftE6N@Sex109MK%CQZ}5lR z^c=Y!tpt9a?wZ{Z7co~k{1gdE@r9cR%lV%nkC~qkju74ly%EG=NRr#Ia{shtI?Mv`@zw}gw%d*@9+2e=>8MIZL4qUg2spNj#H zQ{!fp(hOhFAYT0+Gtgv#7i3wOZYIN9pE>v%wbWi=7+kuc*q6`*1qMRsqUh{bKT;e0 zt1xU902kIN(zt=(%Y>pW2v2Q;SSG`R=?3M?ELhU{{$gpTVDr|9Q!)d3P2f2#GTC83 z?=Sh3?63=4ZqDc^6~siD1g*qB3K#-0fXL4gq}l)a@3-ROn#C!FuL+r%lq*5P%dF;o zv2VoqoQr7K&cc<^SDfU5CxoEs1S4QiNtm`hS|G>@F=~sEih3Jma~o5Fbf_PGsG21N zy*(r$d#Fa!2Ptg4Mc#@aw$u0}fNAB>>7gS-hHAcB|F4JpWETIPzbQ_(6yTMjPzs8N zX&#Kb(_83zb%pbLm(M*cbDz2}w92dnk1lVDK!cd?G4gj(Mll`nCx@rc*~JEG7=KXS zouHcxA9`~(=d?tQou+}RioB)WTH(+*3jV0JJMxhNO?ru|0rfW5YB^cQi9Yaxh~`qd z;Ke~`n*3#IG^0gHH1Gr4dui2u^lF+8Ivmt;JV zNfq+u)I?fBX2V35Ct^bJN)71$%po5f=%lGdu@IlGS@$dffXO;18an#5b`GuZ_q^1vlugd_s zN=#oeI1{ubavUVfRY;(MZ*Brbi+2Zqm~rZMR8uoOV!2H^4|>kRPvD?v>N?5X(*t$T zhR6tyBh2N3IeZ{5D=)Jh$1r0eeuTbm-C5XWtwzHs{YoE*ly- zP(mw>9A#!Kat`e>?=X&#^0Y$&UtZ)` zPlc-fMSrt>V0|;$9o1~Q_JWB2fOE5D^+mHwU|ZNA2qav)HJsaLV!2;l{+6iQTX--e z{8_CCkC?f&kMi4T_*{nPP|wf|KICks?rUwhA84G~?pg*YSzaq2$vu{YnjNEC2B@YV zJey3n3#H1vL(X<*r-Z9Z5MiwsY){D{qk|e5{ZVpu*YPI)UBbt4+rT*xx-pBDB(QZ0 zo4pM>6JZ`Yh7vU_$n?Wprgae^@{V!I@ny@jUh(+{hZ^Mpf4(tL7_xPb+1>Je8tfQf zAHN_sm`XZ=t5(7`kFQR~5Q`{ea$N|(SDxo4;x;eQ0+>A|AIwzJ#VdDkhSi#le6#1` zXPBCZN5}k29a9H-iCWz`3BS#Mq3p`%$?Z_s(fQb)Gpbw+_;?Sz>fanXn9dp#LRCU7 zHU$=%DIJ$T<^xLTLF~G0WLI2Q?GblH7{#mtfBa@;zj{xDn~C&mTTj6&lBojfjGsG@ zloU+W%#itMe@}$o#%~K9v8q}@EIG}iYXLnNLgd~2L*0NR_D3=l%q_ALbmpo9M8|NR z20@LP`E@9ypB;SQn%0XBdqmh;RIWFc^NjdJD_aZ@M0_9DyO=A7_6^pGrT#%E$CTuE zY&=%ysM_HSya?|`<{I55vLl-sRwNsCdJB5BsVhSj0GJdBMS*Uwv3mXB9uLlzk#t3; z*J1E!K!Cckn*Reif-l_Eo`@v=27-i1Q&0!cVS&k0WZ!SfLu~oX=w|U1+b=|rs0rna zfe~dsc*@rLG(Yj^$PC(S007CNMQl|988RjToS05#nV4oRgv_X7P}R?Q8}j3D+3z)0 z%?;5XWPzNGagXlr{?JPTv;S>NWJhz?OB6S`;5AzzD&9)krzKc{OtNUN zEQIs;78i^W>cH%{tGIqY5g(@(lqGhRfw54@yAai}PGs=TSESr9C130oCs|zGS-$AW#{(e} z5RmWha!PlqdfgTTspvRGzsm8ppjb%N17^SXM&d-nTqEiHlWc%3;8BJRVp0T-5JG=> z^W3in?%&=g9kWdwh3|@EsvuJ7#k}y|K&6zd0tE~eCfLZ@(o+W3G46_ldr$J#X|gg#bv=-S!QF+VY> z!t*DPpr(&DhdqwTv^Tt&8@x}edOPUW^OtyI9M25PVxPA(`=51+a1pg5lCd1{ zCY4K{LAJcfwaCIt{L?AD>X+d>{1^`7KI>>Pq=cUf1b?Xlokch3w*BJYsQGCwf=wt~ z(Hkdqwdr-ERc@jj(%jA|in)HdsoiIx&vF1Bz78s}ByXNeEA`kJW43UX6ruW=dR;P& zUba|DM&D5&JmOmia@`qaIwh(;t1BG^D*}Bnb*+ZoD;%N0`mhLx^WI+^EE01_tdxfH zdfhq1e57}bWk=}IYd(3#eg|hO*pZl+k>pdk5-nd(ezieLEk-_H9S;sqg&a(LgEY+-!oi-{Y{+3y)dGLAisK2t?{FQZ|yhK~h z1&71uW0q6_*D}LPVAsCg2MXsD$a+tnD#NZ^H%@p4Eg#z;L2(B4!y& z$Et3|r)Q0i;s-qoVC5Z%(+e9q;B6V;l%&z5L|`!8wq1DWg4h-bhJd1E0IRdYGQhmN z4hXPivyT>!T~hYc&_6S`5rISmr+Xcc?soN1Z-Ia8-C&K8mxtkobrengp2FR|S7 zWfWS-uDtnqZ#29<=bMAOqMy1;Ac6gi4_7!9=IxK?ndyggKsbw3g+($Qma6FK7);n_ z8&?T#P@2Lors{D`?CaCt?1 zo5EFfXX@ftOtCSsb-pPI4;^dXqA$2{7lJF!w4&yUTj@CaQ>z7mkC8hB*_jsan) z1iCZ@=?lg?kvxx5s!~IteO^Bq3c=6~UV$@~m^OGPx3ct-fI^vWD3M&=t zO`oSD!Y#`%z&P>=9W&>5BEiOK1{@y2w1j^O!*OXZ({uRF@({>H*mr`Czuieo30vlJ z>oEF3;49~Dfpr0zOdnMg!W-L@{0lfCDvF2ftKxX zmq!xl0KL_f8;kr22!-$>*XmBur8-Lb1&QPAhv24?)`M-i8hO+P)Y2Cu#&f+7h-AsM zcbSN=^!@*1-w>>yu6F1!2CE;0j^Jhi3FVExUe-{;o#_Z801;RtRDrA*WT6Spr^_vR?GHM8y#J|O@91{{UIc<2DtzhF4u2hgvScFtTm7mypl z*nTT}`_t^ghvkE^9nL3yJ;(Tz;x>awhyZ6||A{5B`zc(QSRvJ^tpQS0`sl>#w1(M} zE(okKkGgss9HOR=l!9SoUy}*w4rkl8o1H3j34oqi;5xDtP7CUWx3Ofd#l1Fv@IGQK z8O(cqp!C|&zh;DQY1jX^rLjO5T{e;qboq`lSeBs)T6)Su0dU^9ywM6Y!8Z5GY18a) zIMMSU_>C!09vciSEorEfk2z5=^D)7%N%?IxE6803VH`vMpE-xE2U4m58qQJ9UUMHL zyS$#DGsoG}J#Xi#;|HqXsUsg3ZrdSK8NMX_Zg~3y_y#qK0Q!%y9SY|kWDgItJcs-+ z_Qt##xrP%~J{AOlafPJG`k{mrTfHsAg9qK&d~*t26!5>{+G4h+;M0o-=wKNl%K(8GTQZcK-%9m>%9?Sb zAQHEFO?_kKg%&L8fyKQ0Y0t)pq-~TB5336QJG>p_&jVU}<=5}3Wub$@=a0`0pyWhS zQ3JxUk}+xdtm>#^B)Sy2Rn|SHqC1%xjNr3)B%( z9E(CMvbOst{nZfpW^Vr$pKXg3iPq#=JBU+sfXcPq`uwmm`NVmz4%(LT68N{p;FO_l z$YCDGhwqYAfcO==kl1(y4PZ7}pZ0@!X}RbFS&ui<%@+=hPkO2>yK=h;N7G<~oV+I* z=cj^e{Ix{6N!7V$gu-kKoGRnD+_fYPOi{)||xeUu14_E{l zz9;%CzZdjxontKni~_yRwX#j;zZ<}$F;S2qFQ=&PZSnHGMGF2(M4jB(3-hg#kNA!; z@Peu(XXDYm5fB}eb$r7Ei{4MNbyxoFarygBy2!A!UNlr>GyNUkIQmYCfRL*DIq(;L z*AvUb!2kP3TB+0UUNbL}cGz#6u2{Nvy!>mZed<>mxH8mhcoaFSHUcW`Z8KumIN>c{e*N}tAaRjANzrg~>^-A0$UbV3@aO=Ly|2i&3EKwiVn;~I>=UqnL zX*_@WjGk`a2zK7v>EDV|Z8nt6NF-Y-ev=A_9U{|RlI>PF+{!{{$O`}Y%J)zWWT=+D zli?2#%lYSobsjL`WQDCTQY*7zZy2Wb5cwt^`|aTLpTUe(Ey81kJH5aJ+;LsEJvbLm z4sl!KxJu^~VuJcM2LtvaRyZEJaln}s)q55^c{)J8rHw!Hs5Q84!Pyv?fRVC+{=$N+ zLNF{R33U6`%g}{;G#q)bjhxD0*k%3?ONc?NhV1=1YeST7APUky6X(4(V>)tRL|u&w zus&8&vZ4Pg5k7Q#UKFF#F{npb@L>nB)GHll?6z+h;gB~Y26HBm9Cn0-5s8VC2--1h zvqT>lol%gYg<;l{K6dhh@_k@sT`YLFeRUxJFh?b;pQ3VFAued`{-un2SX>j9TjPUE zG9PJV;R!YY7Hp02!@}?#IbgN}alsNdfnNR|Ez?g`-v?m7EAGHk=VzE_QZzb@V2MP{ zQeq0LmEa2HT3nQ_*OLR&`qDf8J5DhuCVxA1ltk*U3+ArM2!^i?5=chwLJHCuX%| z$lplNe-O=S3-*uqVb)||#Z|D?9zPkLW|8%G?`Z`IlP9R1$$l%tG#`Um673P8+)e%4 z#1?hNvVeJGkSswf?&aBb)PRzl?`DPl8-x8yKw;@!Wy{`k9a!yeb6z}?!W%#&se0zV z?KJ(0P8qTyK`Cq6A|-Ua6y_h~@ZMJf9Lfs*ltPekovd_NqNF_y=^fhwaDEseAq&LC zk8Hn#U&{%vpy^z&MKBKSk>e9L0CB@GavgNx){y)q4J1u(g1WB}q#aastzuc-7frO-t8`W} z?FrBSp;C-rt$uo60gq@G2e2=JM9R9eFV&_IDw2jX-vy3#=-;xgm?X4(D==+sAKQmN z?V0{sH7XmvE=H3uT25r|CRHQFe=eBo9w>`Ls0hsdWLEmYVu?1fRA&^aG7Po{zN-RE zb`p_aaX)ECeKSw}XZ`)dlkz(kyeH#s8tcL`z=K&)YqyZXdvfX^)AU+J>X@3tjQzPy zDxs(FfFs>RzNFc-u7|c*K$oD?*-PwQ_?E}Y^mSShXwN9x(K1=LBD#t;J6>(s4Tv~2 zle<9f!bmJd5_mjZEooS5?;yL-#LB&GrL`i{c^b}0$WX+u+hOP^ID*OBrWea6dFG8J z1M^G{D+HO9FakMZF4bQt+J|#r9%=Piv})!CUk9W2{?O(yJ6uRJXT3)rWU#=F%^8Kj74fd7UBW-+~w0xbpxMm;$pWN16rioPV>%lMn3n{diV(9g$N! zh^aAX4r~ZNl0#b_M>ih-V64Sh(TbM*ATB9hVf5}Oe12Kd@_6wViopjaP??nMw+=OM z0Uh7;DZi?gbCbTNDUyO+qM47x24D|sZSwrnAjiF~a5MwXS_^NI68a$Z6~jPg8_~S~JE}OP zE7Y9kXY@(`WU)MYA>iXfw1o_NN6mhTh6BFE-EbHG+`Qo|bt%7&ObH8_UoImg%7WXY|a8V^keSk=f{S_&YYfm#&VKbvJxmF}$8<0;c!30N<; z)6Xa=6~;^h<1R_`WS`}|G0&$}J%C0S(;02N$B>p=%V(}7rTMahI~bl-6}Yj_A_82zinL? zM!y11;jaGAiIKrQZcC|>NmfycsAFLUR$H{K?9zJUB%20nIkiPzN4sg zpC*h+9YrBmo`I^`o}vPA)`U@hTK^h?x3E@p$IDYU6GK<-iL;D@Y1u)8yMFt}+L5Tr zKR(Qc>4$!0$KF$Np>=gjnPk6bhM_wbZeS?s$rHi^|fI;)?^ zkeO<|(RC)9jmYN58}1!QbgdZJ_Ru9Wv3+`U_n8uPCQR2jK31mQ z;g;mt%F6;?{gh4vBMsCwjxgRucXPuWs_WuB3ZtiiZP^F9w zjEDhUNgt{np}*J2QoK+nT-l}=ujp3X?|6z46=W^WkX^(@DFeMLMa^y$Hr2J>Z%ume zDcDEO8PODG`+LX8S^QUyDqtze@kG}m%lv~nHQJYt=kb%(MONc#5|oEtO0`=`1x%0- z>xZ1&N}8i|Ab$2Gi_aq4JIv|pgO_!ceDJLWQz%SoKJAZkqiVu5_}@rj6Hm+$da6UD z5u%%5156?g#}V|rnG+;O+zHhaT3zH%O<^XOhj+>GQJj+9V<{) z2{fIG{AnyqDCwJS;u#@P6ra76Z)~{G%_5Hq1fA`6BgY&mXx!29BhYgHtl+DeqO)px zpB5_=sm5@Jnqr-g47#>XicnOx*<|`7pX`lKWp_0!AT9>I>o4a?7?FLyn`8tnEXMUx z`g^!e?ANha>HJY`YQl=uwkBP9?s5eYjl9%5D_M6Aye8Y+x1u@cejYxcN5quVl)rjA<;>b39|A+aw7t$L`*iT6%QvBkM{-2P8D4-cfpXwlo2WK5J?U zZ%|+OFCKNHKJ>j)e1nQD@uZTd6q7}iMD9zu${3Es@xDn8&wFZNCvhZI?i|wG z51rvF0gNSt;1R4QO!x_S-c%BZBqSRXfE=`>9N%XcbTaF-&%{%BXRtXu@8q-Ovq~(T zJC9^;=tNqp{saj>gnY3riGQS6bBs6845qY#tk-e$raU8{ZMQW6etf?5e>pT27+M?t44I&lmO>*Ql`}4hFy4Bl<=V>udIda1*$JBZ7>ft}tP4 zemi;K^dEYQf{(aXw_}n;U319Y?G}rjt}WA!OMFB!cOFde2WnLIr?xgYBsRjlf_8Bo zs{$F{sjH!cx1Nb31`+*DcJ6ps?mA;b5#jZsacC^q>8xT*2c?-Ex8WN$x+H2pXXsS(vDHYbyR6>WAuTuk!>TL>O~Dg0{K9MuDoUD67zaZAHpQygvuVcha%%z))b zq#{3AX3gyBn&?o;Cfm(BQ~VT)+wSzo{@#kKO&Jd!A8^(^K4S}#e7Rs=Lk$Bvt}wor zc8Q0zep$e09b-xO_4bhYj3wz?hIIcYr_3Jr?olDbE%P+Pyegh#qRy-Im>F)4#27lI4FdSBw;1%9gvgbCkI-Mk-m# z)o@s;UHKR1m@oUCu*1oJq=xF4F{!q){Zr;q97f0X7T;fmD{Bw3sp&+56_5nX`j6Jx zH&J)lH~W{GB6p6lRD*79$ecwMQ99)tu5FL%G11JQf7GVHE4~fs?OxW%euA(IB*+hz z{2ozQd#=!uDur0)Pv=v@BBTRKFQ*Z!UKD9#MRG%W8HZ`|M`t{Ax`EJySD5DUzawgZ z4@L_^Jhph)!fuJ1_x9=3JvN{BjlcibER+s8`*ujtj!mm6a1?i}C8$)ew9ZrWG56@< zDC_cHxy`{ccE$JjAvZof3~HM=06}}fbN7d@g2H*&qw`P;pldRuUmxd+ZF_Fm9zeLT z@Rxi@u9EPz2D+*)Fo(9e(q)Ls2F<5n?+6YY zc7S=-;m{{L;R~I9gm-pYWqxGJxHt&O>0$NO>b{#1hFM+%2wQUdu4JneaHC#Mn)a>_ zd!vytK$o^xs0t80NJ}vbzPGETcB39C=vxGnVlyIsd8aW&x+(zBmERfBE%^g{7^!T?9 zgy6&>1J$51ZU??u5&qkG>`|KW;Zs4NCP-#(geMy`pWf=CEa#TwJ^??S6KkoW7qTe)6AGp)@HfkuKG;EGCRx5Ovbx;_&0Q+-ILh z_V<;5*_GzXF7`z2CJk9jsW$wuR)njbWRTgQ#u_nSbv!q94~qbX9#Jz+P!mWt;JmiK zP!Py+S9HhG8n7Crl;OnNY?s(+($Fs^x6jz+;dby5HLvqHe0M$z>*kzwFCS`>MYRZC z8`(^04Elf6y#-j5Th|6`fPthEA~jMHGB7=~bfXA}w8YRbbcce9AR(cMgaXonN=ONc zihxKDCD`yxK}g6 zR4*5|1|%&_lXRNOCPBSXIuCEPQ=~KU7V1k=4(A|}SX8Bgf=FsBMQY)3JXfwVf0_L9y@=Z=h51CGHcc0emuqVlpo_Cl38kpO3RjK zS!Tr!rk5=I=qHqxA#llLDsWE90jA z$uCOh*yNRKNeX43T(C=Ypldj<2cdtZIc3k1C*eVPfb1jXovW4YE`Gsyx%vGq#B^hF z5_2Rk_cI)MaPYcP=^d#xsCFesN>gLH8~=WeRr}m&4jT&+ZPk!B(Y~hZ(y!EO?}>e0 z8NHnt9XD$3_?mdSWDcR)rk}7BAsaEBZIN`_N3U!`@)_y(*0W)9`tu~sr1|fNA2<77 zY?UsHktoxV4zkh^zuu~R>Bbz}!P36H6-c^CGotqEXh^M+yWlN2T#dr?2I}Kj##o@b zF3j*coxz^AZ|GE(pU2+dR0=v18G;%@q0i82Wu)vmu5x`|UE`)kq@!~1(EIGiKCXT` zp*tRCqmRT%&&COajeh7^j{pE06zJNBC%M4SAhWJ&Avs%SD?2E;TwlhT>#9lH|20_WA4XRXePElWB6m+sd`$;lWF6xmrE@lT7kDL@$ z6Ed4)TbxbauU1`;G7Ybo<3ONNsHK*?6b5-HoNuLe8n2$wdJ@l?`@(ni<@Ke7*Z5BI znk&_IO3O~9Gkbs1j9Me5&NIJg_LkNZj~9umdh4<;=Zcl8_>=B^-m(hacFbK|rx%~I z=&>@q^-3x{sHFm?m&O~d!zC5=N0NOC@S^dYJzh65aamLsGae_`P&Dfkrbsg5|BruKs`AGT?6zS=2M6TKBWO}~* za9oG7jrKN2|5+;Mwa3>D^ib(6s$>(V9x?V&qxN+|cslb((uPrEH65t!B!e1|0K8V-nQ*j@hY9ei&o?!`jAc(Zvh%bA=vGvk64H&zb~_4I*? z47`y!ak`ZkjVRP*-w+S`(1=n-PRP5-Ql3LIo!lYwGY?tZMU4<|6j$5L=Ghck4_S+P z*Q%eGWJ{{97BN*GQk#5y22U+J!rG9wy70l0B(aKHmwS!grU!7rIdJFub3Ja#DC$7r zH`JK>_dE(0Xl4~>Sw@?TwT68&irPNL1%Ey=e=5KK`a-@d)?EbVWHkhS#?1K+dpATN~={nXZusqW5>I`;)N1@Wd3 zyxhgIHkn?&P#ea}D9&lGJF$IqQNlW{+4;RCv@Zl0wD&*HX^ruSU(che$e~z!$Y`aC z_#_g_QLp@}5#jVG>a%2)RV zy%Abf|8O@w8KGXp8DdOfym~oK=nRe>Pu z>;M@y?c6|3tT_+Ir!a%TD6cPK>OqGaLh0@^`bYXckiqP8n0r4R+T_UPZuh#|G=;P6 z^)VWaiNS7fe%@+X562m21to6@y{B(~iskD-mh3TOO|{F9T_{S2t>tS&p4@Cdf=po% ztJ#2Z0$y0FRAgWtYzk`7vJ!7y8dkG5hd+V@Tt+8NzNb6 z`e9#+7WOXb&#BvpTGNj^MJvsHnf)eQ_SQW)>gdau*ma4n&r@?$6lu9oei4f~z3xkV z^Sp0De1}p*t^Ce1u$_+MAW?0(>r;u(jky~^JR>!#LPfu7AMd%Om2&^9p>)-;S+HO0 zCBj#c-##{UvVyTZKO@((fr2|Z8%pcNR(maX(WN9kjb&0G5bC2casJ57N!4Pq{*>c6 z_NuQ~toyCJaz00A&A)i871gG3q3FR<)J;Y&MYHN|hu#y>Zag2nzh$GAErdmab&R5A zo)=rzgLB0@1m3O0CkvU%ia$YpKB@ZHAnsKu%XmvTgYtr?^wq>`HBAQD{_Hjmd{2U- zecAnTywg!fzk=FI3LdH^iu3~MC8OcfnGfiX(oj^fPeRPjss5-qkz%|V8aXIq7O=AXg`T0@Uu(_bTnr)whtlCNevvV@zZ?%p^DG}zIx{m_rO?qOEFniVjGJAK(m%F)pH$@$ZKqI1%G zMFzhmq&jq{R>8{fe$D>uI0P?-7s~KJlLW&1^=Za%tRT2#r%} z_$ym>TazVYRnSyCiX0SGiWiOUY<)8mdFLAY`vT&JE;-~0dxgHbIrYZv z@sZ?)ZpVX`ly@|6^qC45R86O0!p(OiR_(_Ttd;xpRv(-WSC%XJ>A?BG?kgsC(#(FT zO7~~iGMnmH8bu|368X&8@@3tAH;&ef`QIKQph30tjinacjI+Y_AYvKoXm%b9A#I-C;Fw$`{-PY&f#R50 zZlw2u8f(wq+fH)N%D)vAk>-gM&v2cVWnZg_(2i;LXGUnm7mgTq%C~o=_&vW@IoLD% zy!Z>3O&a>sXc&Gdid=pm)mMY8bKoWMaFOo`r<4Ard#N2oiQs+?=brqWp}HZ!{CT(n zmcIcJ^Kd?%+lN5)AN#_a`0_@<44xrkOk=i7viKeo~Rs?tW+}YQj^OL^&-JV^Hp|CX9$TnnX zm5u&78ICS_V-_Eouo%T1b>gMIRTayddt{4mLwqj@_Oqxlw^m2=mQ<0po}rQZ*=lY( z%TUD+s>`nlpA&+L?|)wAU87#81J}e)e1OGra<6CJP3k|2oS`Y>8FinB*4mDKNcNoS zzy0{u<30OL>*=0fZp$iAt~e!Bm>oBBUorNxHEXP%=6So(15Ex4uX4CC&NP!orOMCS z#rZ$@$IxFooBisHFiv>&bpiYtDOa715Ha2?aIFz~BqHB*24lWFtIcL)uUZ|N{d%R3 z&i>W)lW`vrP6itM;l}tGCVt2$w zoDORko$86X;d|G$+4!km8b}10CTF+V_O0Z$*A`e9yeM_f9HbPq!jxpJR64_4hu{Tkyn!%H}9bac?gbSXgX48RZ08V!-L zTilb2EdWpJXwEj!*sb2J%6ecyccu=4ISdlO|dplax7QxMtG!&uTk7>m<;-d^Jh^4|LOU&NC6Uld7P!Wg);<+ zCE=IC+u$A5?Tt)u5PoT#tECC zA*2CD-~7fr_6$yR+fjPlUS&D{S*MG{DD@L?m7@z_c`bceAzbI(ldjc+Qe;u$-?wBCCHJ^_rO#_Ss1 z&Z$&Xm}l%%gu-S{XgSf93Xv6vbq~`}5z%?t_>8sbgkT9z=A#-iiTf>2FD@NU zk_ppx%yK!eaEvPeO>WKjChzd6+T84irpGL9C7|CUW66%)slCuF`ZV;3$#r_E4&{sf zy(ekrMy}O-6N$Pv6D}ct9hy9ff<)!C{Ou}xF~+B zC6NwKQOjBEAwL{Ap&BJVI@R>#RFA1)Xi4+i+|dkCOV7B{`KAYu=!z~k{(<3y0+FdB zb@$z+pM?!SJooAIRWj{YHU*0k-6B7p<|8lL4(QHBK9LHd^A12?H=ba--9dchqC0Wk z_nO5$Q$2b1G5rH9SZls%1+19~{^YO7gng3)kLXZA4s@ch4|Bh<_X?eJ2tDCrb^ol&d}iCgG==;AW!=Un z|1?U-|8$h#aMYiEz481v%dw=Tv(q`8qZHoO9&d-UbB2JGTh`LX8RrP$m$fl+#!2H$ z@TNEter24Uxw8cX0YeM?eVlrEqX*@w4-EVOY3u_*m2cjd*uxGX;pEp|u~OC)-#E^g z$9K<3=VbGZJ6x&)`RmBCcmw97NR9E^>*{4rW{_~DwsOte@2U?{{r+EsN@?#mdu&Lu z1v-vz4KI|S${8g<>Q$cj?e)V0hyC|_D(ac6c=2ML+F68onj(r_;^Vj&g=4+DNS_V* z#?xe@MH1GP+1X?DkG>(;%92>*QnZpQsojJUD6?y5o$vE%AAkj@mQ>Vu7xaIhM`zW< ze#Y7r^_&R5A`MZ~V2popGUjgMNbp&D%lGrq6oCPQkJBWZa#9-GXuwMvAEGtXs6Un2 z_1|3AoJ!RoAD^3Dd;~kql5{5fyLa=2eoa65lCR4`S;_t1*(g5H1TIcxNA%>m2qm;x z&CgY1FTwLd`Q_Qp7Tj3r@f;?Yc+!7*tfFp%Y!2~gjQ)0 ziw_IDYGS^H(JIKyhud=My)ViMj=dEXBAXJg{`xG1-(DuqqzU3mz16HirSD?2bR|8L z7uJW;4*Nf7?_wop7RD9i{*)?+CbK~kyUF<lq56`^~PN!cix~! z{@X*VBx5pLOG=`nFM3@^>)4^U-2y&V`LYI$G8Lo-RGt}xU7U0fDfx73wx;}*;A<7Z zh7m-{T!8*cK=SmMM_*5L;T(zX!-L+=H}zNWgLSFr+*0IUN6XyCrh zr?rn9dH?206YtfoY)$aT$?R`CmRd$!;qG6+F^$_5SvNTPJUnkBxxOMYzv9*KwAU`s z$h}wbi|zOLw9J~+w+9tPE`1;;i+v~ef^)i5o5bOUu{ZL>NzRV1s8^aImelvlsz>TX zCyI_3_g)%v#7RBiKGr|ExAqKEHN zXi0LevC*c&E5SFr%{WOzC#ZyZC8{)B@!kIJ;eilyOA87mJ$sZTP4E$O&N)6$XdhRq z`N;stIj5`gk{|D0HRdyvyj>mhEivJ7kMD~jPZ{UO9SFa#46PdYdk>W_)A~ zRSOBSP&?1O{-`44;nmO67N5nU;x%}NCV7M-7aEL%SIQ9!PIb}@vcDn9G}$)!X3 zPyDMSIb6NY9j0OJ_L#hxR{VC18;6&DVmwZNklPwrOmuxzy{55E&+pjvM4}|M)s+>E z{tUSEeV*0Ch~#s3En*Mn>}ps4@2!vYj9MAfpBzJ?qUN(l2eFU?W^ z*8F+=Vrid*s@GD|@|lnn>vTIO+K9+c$lQbhXcxO=*F>NCfm}9@)={6sbRL;dAy6QP&i=aC+M zX;tW1iatKZTdg#vSV^?nlj>F@PWASXmWJ}^D1O<0@azXYB6zHSS7UM+6{~S`vmxD+ zr`7mkz^|7+CLWvCIMJP5`gu0xSy6}Dv5c;vD>uJoAaNA!s1X=tq*9l<(j(6dM%>NV z#THE-ITdf;C&tO=sUJBksVs~|`cQw5dhK&5gR6?6d}i97M{$)+Ne?GC_~AWo@2Bkj z3i0o3@%W!7tdFLDCA0Ic}9(^Cwp z^?g{Hr+l_>z9Z5~1FTVRTjpu2juvBITxqKN8dheU%r%(do5IyorjQIdRQ%zg;CudP z10$<$qG!~KkCi!(q0{YJ=b`wZ?n$&2S8khIq~%xHtWjqn%X>4uMqz5tdBgS{`tZfE zHn*S5!v4KB6OUGQTX3>PS#RD#(LH}mtL4bDm}l_g$NXU_-SSg3ZyU~(y;E*u{eez; z{fV+`*j?nUACdTq;na%&7Ng^X-<8wV3zD&2tG&zph2|T4Huo=@pY^snZ5OseG`-V%=DKeD1CT!>3&7A##yZF_<@JEr74-v*+spD zw$!Y=)A??t>O==0*qHxR#kLjd@KwY&8$1&iJ!OGq9It56c)RG0b`pOpB*0zR>{#-F z39INp`VPwZolb{EHj@t;bCaP?MseUx1`T7}*VDmjR@id>X(W-Cw~3%2ogsOaOs`wO zx0A$7qz6i+UPIKVrz_8h)}glx1rYiH0fG5aC+}GQzvv@tFhSqd>#JK zDm9gJBr2T8a?fS$iwSFdq0}+vOc@J0+ZsdjX&-r@RPRD7)2c7ai-lgh>XMV(P0RLX z`K1Pr1D{BzUF{e4a?(Dhs+z9eyU>2212^Ts_!-j>IQaFlU4~_7`iRG%uuig4V zR(pZtSBQ^=c5tqhb52nR*x0V`W?Tj z^I+O$Vz^I>i?oYB?y#lE0%?gvOnod<%0tU;t3v1MYudM5b33ei-L9{Rsl10ZGL{>J ze?_=RwAHpj{BPYyoYR!-u1$63AU&}EfK@MLyoy&+l5@rPSsc>kj6Ib0NV|02fZ|(+ z_gRL)pQmd)-Y*RVHadK0IhW&SsVu>dPj~5dkGmbh8 z&w7;gw);H3M;=R4Dxf;p|9~23#!pUP4~)B(S-^fQ`$6_^-oUMf z%Mr`if+Tx=ZsA%woHMF+WF*}yMRSyUib3x*t%|PMgaEr)and0zultu?MX;UL%BG3& zz~Tjt>lv%gu2PNbjg{#qshdRx-C%L`#h*xjuk@+t2U*ha+`Rv^ z2SWXiJ&-Kk&KX1$U5uSQ>_L=K1AGTDNJ%3n9N`rRzr@Br-i;unoFm>D=VZ+%iMKH& z;g_)kyBbS7a|pkJDcJQ`I(zWRlYlU#lL^kw)X2`6@OdYQE{K1DM$hY$@N3{T?JNm9 zArQJG{AI55giR25FJbHa$GiT%iT(o`;XC1?j+XY$ct`M2%*ID|1@X^rNhwGZu0!Y@ z90Vv7q&4tz3eqY@_J4uj__ex+lQYg%!Ojd15fOp#pU0V7IypOfKt#-NW@Z8cNSJ^C z8VSC@b2J=$p~Oh|&pMjo90_*VdXwPhn^52pCm?_!d;t88@Q4uvA5eF(x3|IB5_XCk z`#^pzh^_!cR}e-B7sF9VeFz*5(M4gg;0Xp85Kh>+qA=h`1RDGZBiIxC0!{d}0EF-} z8V1*gAO$yG)CZQ9*81bhe;Suyv;S$_zsw3YtiU{~Mz+8Oem~-1Gi&Yy0kI1S!WcV4 z1hI&%0e6PL1%YMNf%PsxUs}Y=@=e-#v+z!!X-gNXS#KnugSd z99|YUb~FaZxm>`16UOPSgJy{^<^1;gC<<2R?M-iFCM0H4zSb~iTgQeKUH>@i7r(x| z(#Rnz?J>s;ZuWOHEPOHABTY}Gdws6HV(r=5wbUTG%8mf>qlqL{4`H=R?4g(MGg4HU zyd?g4VOqQT6y4h&hI!8wqh~>F4O>bQ)qG%J$&-;K7pg;#0w!FhT&KQ7WWHHh>*)O6 zw934KiE6g5nYk_VYSCoML_KNoxJwgRQ_*xunv{A|Ex7uVPDLk8=N{7X+Pkr<3L|Iwty@YS4(1%WH?4J+GY6cT zhg3ATU|dx_$5Pd_D8ODFAwwOh7W|nx>y|dPgX}1cyctAzzwZgRFLKoPFF(q$jw|Ff zNocc^KI`9kpBWbFw$Q&-k)ilXUsjoQe&jVF@#w$<$`1JMA)!_Bim45|`xsCGKczq~3GTSZOBGKikt1y4(*60H|rbki-ZRbv_(Ft|Fw^H|QD)Q#+ z#(Cz`A=Yb48X8KXGRu=rb#^wjM)f0Gb(@4+O_MJ^@xr^Evk|FwHIX{sCDa(x6+=aPgzl@ zBNM86F79%pai75H6_*w~EEzHR?fux~f?Kz;_Jx%%kEOOfp1g4;z{b!?i_W!6xZbeZ zw)v3u0MhO?b+tkfsS58wcHCgH|4f&R%()rAdDg7bM4v)VXY<^iFAry;hp&VM%8$s0 zN910aL7sEHF-Mts!=T=f6Uu@V-K?IexlKS&y|(!1CgIqqK7pf{4Qe^)gd zEAro#s*QJTEmZ{d0V2X1=m_8cT7DsDG$HA7{#W6(Ez1922^%b$AV1(hxS;Wm zEgD>f@CgA30)v5|fL=mwyh8XScH`pUGjMQu3=E=+zzFC=un34Q90jfi(&yk2;1B@f z3nlTdM(BSIcEsA6d6w1oy^ow)(TB zqOfpK8?bHi0!~nK;4(lKyC9cI~vLIK|`a0P^6Bv=v=cS)lZ%le`b zojo=5jJ;H0NICNOkF(4_7@p#fGlr|yGT-rGx%?U`f;yUz@Ji^&{f?=K@Cm^uvulCh zy$(UhIv!RC2{AIYtgW<~eiRR$oln6+`Z-&T#Oanxo2N@wD^QLTBh35c*WDY3E;;w> zAI#lTlXy^m>8rc*I`!krF%FY)KckhUs{^xduAY6cl0H>??_PYu&HD$AHTWowT-g&; zee#&~K<>*6w_a1SH}~beLKt(b9qREisbpHI>MYBsX8DZQn~V|lVxoA*ggfaclvvmI z^>PmeE>unHsJu@O>nMI<_NEB8P0@O-cd~fvbZq>H-`POF`5QlUgO(~Pe=L_LM!Om9{u@^WF zi_-IaAUDX9JCOe5LW;QurM)KVc;$hdCgQkDl-G^ulq(H74<4kly)=6ue&NX?S3~$q zySobStNo6ADNZ}o?0eYKS5RSzRO!m=e)%g*9hDdHSQP=Wg)sjgki)mS$+BoC4IMenRNN)63M#sA{;>ROo z&(Z2Xr9046A)zN2mLjayp^zp=J>6YDmxy!Zw0Ct?2srWagT&MNJp(^g#)Rcx zJWsq4e6<#HYdB)K8MLy;@2Vg5m`KXa^;=@k5BorMd0TrU zRdZW-a$2h$V9j9=kota)yv*R(2TFpQ}s@)s)y8Oj181gQ9(8d} z^G)doI63JpU-K85cy6u?e%nzuF_+S+ueO3d?N9qgM81y9t&QK(G#H`%BAGXusbo!} zMXcAZk!JX0Ykn1yr&oxG58j zg6MFYa;AM6EqOGt@`k^_fs>e9qBREROG9$1R^o zHzm5xKKDEfr#5@ZL@Bi4c)JC(yz|@lsfwEVj;pp~lluN=tgOVA&gdUqzC2;)@(`;t zwvc+5swt}OL7>oOgPbcD`Jl$94(~btPLFXvdxvT?E3rIvF`S3=)a??FBg68xwr^&N zTaEB)&RnO<8zxh}T6Lqo1kas6n_9H+sCkUm+14e^EVNPlS%<28Qq;xT(&4)xyc%t1`{X#AZNJ{#L8YQ?v&fNV9X~E+Xlk6_tH|@9Pxqvf3{na19(rY;;(I1_XvfvZKJTgGhTR^y z73Emg6}YZnDK_op%MtbWdi(g$`{K!COr_`U=jf?VWU;?}cII-e<(q!i7ztv{Jy%cXC+}0{hCxrUr(%rBnVhhOBSS}{^BhvOU!D3C z%z=wRy^@fa>b&QzE$Ld8otwh*!88|d&Yw4M`Vku3w(0nS zdc3c&x;CZHEe*AAv^iZUm@YZ@fJSq;N{sc%L@`W6o`3O>UlHG6Wu(Hsp^zo3xSnoh zT1JlXc~`9o+i@4Cm7^XMh1trc{s&NRHAKzW*S^vMMN6gJz@n#T>XBEs}1pLp$zX7%$G}? zCZFEVunZyo98-cay|R?x`965M$lV7*p$3tD@*}o+q_6&D$mIr&*LTd$GcTi@JWsQv zT<*4$S?~_ggH!SK#j{bZjZ!ThJXne*Df|AB&t~Gp&!xl=QPY#OkjAH{?zb2B1fA}C z**o{6@F;JhH;0;4v}z0GGO^%^vNIyWL4xHz<`XV549jO(`{aLcHYj0W$C4?k`bu81 ztglcubPdJ~aA4&<=2^)}-K3XpWIa+&ZU0JKexm>99$l|fE7X34tY+oz;;qXP-B+Hn zEoll}`F4KHi#*Pmqm=cw>f`SAfRV&nNKDlH#84WjR|%P>55dfc4>w2&Gie9=2}jty z;9>2R84RAQpV4Q|O}=9Nvd$G2lhXf_ruqGszWJq(Z+NSt1Ba`hxmfe?5SLhBI*WAq zbSF`0+k2GCbkw0Pam**`n8nLV*1cN!Uwr*G?)cfsXzuoM^g;z(Xyp}bl1WbSW@|Lf zR}u9|Ywu%;`+UMMu3YNP!q4qyKB+{Us<`7aReK|Rs)x-oVvQ+|n!&Q-(a57Iq+3|> z34`n7Hc4Exv{r@jnz|Psw$aj9(dE;7I&sG(RnJl}g`E4gpEfDg@Oa8_-1W)kl&tC5 z+t*`bn^MBFw1}pHFTJ%9Jfy2llD6K_OHTX|Q(42bznX51&iUr6`DXs(j}|z_b#q+; zf`rM9at}^C>gQ;ye%V0AcH;h1uYJXm?c}rIbd@kC6Rcl+67kTUABak2gZ(rZA_<|l z)}xt`rVm>XGv8_8vm6*bVg|j+!1i_H2#3SE7wW9E`Lc0^kM6Y1q$;lZ>0DXQn$aHg zvMOA`6Ydu6--||neDP1aL&DBrOXP01^+v!2|E6m7BkSw}1Sn+|)=2nUWr(mM=tJE6 z?6f`^1uSPKP8Mo};Npq>3=vXCGw(cc7ICU}J1$o}{Nebd$J{5`F8`5o^t(!AUp$fT zm2C8BDm}|FtylWw2{<*%qS+xM3uW=VydjY#(&pN-So{yG=P!@k>`T~}UVj^35pFy1 z!)%hD^pZ%pwx$EIPsUt#SCQQw<|Lb*49X7Qz614$&(_ag5<5!T4P{))OCaiq<$VGt z&mP1vU8s7Q;WyoM_#L!-WsEWH<}KzQ#X4Lk-(64)B8rs1HA8AyB*jCL9B&aGO{T>d+hxAD4Y;=Hr2cL zwIy8Ne5a<)1e)i`Fwq&ioN)uVux6k5 zry=<@2eI9dfKc$?D`(5K^zo)BQlI;V5$5bIok5cqCFS{gz9B5w-4D8QJS2X);ujRP z9NS|ll-i5?R`>qr5<;w6b!ejX6uU_O+i&K4jMii?e1%qhtR$hR>X5TFl8lI`tBo)2 z`>t`W1YsQ6(O>jVNmUyPNF<4hms8BfG_st&4cwvgo6JEDe6jdlUSQ{0wkj3a}m;JB{8OqdlPZ;p1%Xv>olmg2?iA{m-rs zDxX=gv$=H>DIvKI3VO8ZOSF(aT$P;TFc$j|ae$Z2x7o2AP z)C#XI)HjGEj5Csgl2;easV8jxy2(PFd+@z}f9U=JmJ3XEJa--VxlZ+lJJT9ah8)P0 zfj)8LzDUw^axl62az@5Lq*{t7@u4=fkYY14|aK9%j~~XAh&v^|rOojJ_N6 z)$bskxQ&y6b+$7m@cQZE5J!l=(hU3Z)m!uS`PP{@@pp zr4Su)*{ehoXs0FowFKl3pBp}7tXlkF2lIA9{J5ldFM_A^w27VmovKTBO9hKmJf9nu zr)RDQg|x30U9!W%To`1|$_h3^)?4Q5U>4&p2J*586N)05PY(5DpH9juwy&(+S0apY}%>`(?&Qysfz{dPeOgG*Y?8m#M5vlLPFvD#_3D(pImP z+AOsLb$nMbby;bE%>_-ePUnG^;ykzr_KXABm1Ph3(&PGv=vWI`T2!izn@>>!tT| ze7%btPs+bMQ=p}$(`=PR`Z~vJRj=<`tV+53Peeq>qiwAXf5hg_8JXjpK+py609(e$A+D)^)-J5x=Y<4usU$<}Di#6DJY@D2P;UemR-g{raku z`rlqvmr^BxLEK0LAd2A2ibPi*05v6X_}iNZm)N=-;qf;gQv0_bQzQ8&ll_u;`_&k~ z2DtySBnkgHBS%7>aI@lD1!rn$w2|}M$X^Pgpl~b%i-bY3f*_76<%qZc?TeB&IGpKk zU)6B5wEgXi5{}NleN75PVF5rV5S08Q%Lp>QPIwnb6P(jV{`Z_C-b5Ye4AJF3CoKz- z<2ZMa5m&GUULv{qD7E>hu;CrQ*aY)yTv`%O$Pp8=yx>0}KZ|p6hHx30;!Ru#X<$P~ z;3!U(csnQVU*guvmUh-80FVi2AB%<}As~qi#lQq1Z~;Lm7K?#k1W-_fAc7Es-iRzq z*xBKoe|1t2^Zd)h|7#2=7#b=d2nP|`O&lmVf-r(R!}#@vg5SWvyW$*OEpcw!8vu=g z3JRhiFr*+9#32C^EF6kP6TIhl7WlO^|6evu=r=+T23p%}ezV^@H~y>m{7vIVCe}Ed zp|K6##M;Ed$kOh2{TIX%8~_QX3>Z{6K!n*C36vmI5Q*BR|G$c@{}RGqcG!fmWrrO> z{7SUH1L0z7>1=3=bGE>nf}7sVJ+?Ol91cYxF`!NY3&n!^5;Ot>g@Y*n@BQFcy8dq= z{AGwu7+Z$e5yda`$^RP^W|nq@q8dXJ8zUztOEXIoBWFMi+gbx92>1XFG8za$C>lw~ zi6Eg!LCiMR_?55!S8xza0tbnjEht+S*$D}D7c5C2N1U6XGe|dVZw3qo@RJ~@1c5;X zQGlmV;0Xq^4L@Rc!H>IWozQt03(EVw!hW&9h=_;H{#rJCN9pFt~f&{7h78+$KP_o z#_EVdz(CIdIfB&@1|CsJK-=(bxDmSxZrnA5KPSK@iY+_r2x1r9xTOvZVTJ- zfIwpi0HTK=0r3lBw;?;hU69=_5o{S@3&fTYc7(7CzH@eTaRO2p)JfZHOLqtiV0o~N z!>|}ALGB>HBPg=jX6$!Cce`jD1v-g@!9c;yAMJ1UeW&I@-N=rvw>jDQOb7uOoTHhM ziL;B54WE&zsUyzGiOyVfmeTlU%!*v|a81Vp!Vo|- z0@@^$ks}DP7=hojCI%E}@5CPe9@3vEz@|F+TYn=JJapIhehx#;OhX!Cax{d+Hn|nrs6GBe+Xc_qZ6O8Bi?$a z$tM6do`4zPXcSZs0S7m_gG~tb_p1>G(D!crX}3T&rkeoR2_ZJYY#C)oEIU*4mQidi z!PeZ)oDXkjY3Bs)YXA&oXUd0j1);oc85@oTTNJQ#!U=&hP_zh&?Vt$s?^i60z|M^Q zUtszZ1{MKD!2}2s4g*4bpb!%dcFrK0z1@V{xLIX)wD~X0^(T-`iy?r*CWJh9v>5Qd z-Fno&fb}PgKP^UBXW*c|bvG84UI1sEOFo5JA0tq5T|4A?Irey>z8u-&uyzXA0p4m8*{ zV9^_nF9<~mzyWiCI4fFkTgTr$rT-gjaLgu>O`9Qru7<(UyRg~rN&Vm8`V+^WHba0> zgn?~EZ8r(v zyVvsn65s|$Y@pe+9s*1ZP@2E9@ql3bKQ=f?KH07zRul3bFwt& zv%ur6`3Rd~H%Ck79efNdkSLI&B8)2#7C=J7HnOV!oEO7@Y{CCNkj=JXU|){dkndpr zfe;%(W(a^?`Znr);||x|iHY6Yh2TMi<~J<^Qg~2sBknG2vwMQyJ(vxxjsz67iDt`V zb{wePvpOM%2o_|JLfau%03+mYLG%wM2qJ|TfC=Q0k?3t?I*=8+^_Ja$AlL%v643r1 zIJRuDBaGeCwHXlQ#vr%KX9Au$gX}n;sgbi0fvYXSlbsT3FrWei2%-)|v$0qZPK1Fx zGX}YhPzRcMw-)->(EdULk}Fuj4ZRNHj95avlaTg7VYU_Q;MS}Edx(GH*|Z=*Fe9-b z46~yJK@{`<9NwSd+N}ZJ^t_$H?Vh(y@wOn1&j*+RY!1!&ES)Y8d`=zwXawZK_9PAi z3oimBa0yfe#utS0L1hnY8=VYR?cEyfU*h@`3KE2h&;+TB#DI7!xbqGMGJaU(wo)0f zdl~;P;h_lmCW8NOT5fAVcQoAYIi3)N#5;QM;T%o)TrKh7Jii_31C#}zfrJC0E0B!< zJWHqx*rrYg1CDjr?J)jFXf~_^Ds*6*fVQl&Bc9#!y{(Ilvn4@fC~QVT{u7?Xz`8i#*C8rw~u+i_%(yXSvHkO1LW-27-bx#0FYI0&SZG9@Mt%c3A%_cz+=R z%mxbWfcL>LU^Re&FfWD>4&Q!}2aCu5H!%Oiv}s8sD0C3ml_7V(Cj3{1{Bw`CHP%~> z2uOMRk>35%;Ib9}1<5*>jfemtDCPv>!h9R^hafz+^+Pm>9s-8h*tNmI4d!SNF2ioO z;3IdxQv5gI2s^nAJXjFO2dh4yK!RpRfIIjF2|3Xod!i3`c?Z4~B3^6#^u3wn?0#cE5c5r+^4XLZCnvcMH^(k#@wi`?bQw4wSDu zncy991V=Nobmy~oF$TwZZBK3>5F`kyl@V}4K@wpU5dwfawo!Me-LDP*DI$U{K@yC# z32MtoJ3`w1YG7gHXi7NU4uoLrTx|L9_Bh9#XCDgiDI72+0tO-spp+Ye763Kw+mte6 zHjdNVU99XsMYQ2cgxu*Csx2$+h-vqfZwXEfv<1iCIpaW;hw1jqBMKt`a#~=^DFE{A zNU%Qu0c((#+-5_(aai2$jI&E11e*vD3Q4xWY}#aJD7&X|4Mz`|KWbg^cCtp`*gI3c zEf&Dpg2Uyvoo1j89(WF+?hj2U2LeDr^(S(hvS-ZSj!fE~!2d0>zrcW11q~v=gxoSn zWD$4@g~EWst!>i_e>*nm{|4b-a5nAt|FHMn@mRh8|F=y@R#_RP(6IO3p<$0~vW2oD zG71e1QA8n>&>)FqmK0f)nH6P}J<3S!EM`vHX8ZA2d2aFr@|6EoyUXYIgl0-Nx$}2;ku51UBpNLqQQ<7#6_f zT3#_Q-x2J>1jb_iGP_(1*$HcXez;B`h#!hU{ouf$oU93D{Sn;D)yrdDe1Lc)1g4n7 znRj6SDG|^;!2g$-=3-!K@cJ|2H6cJIgu(kL!2D(`43vpAVXQw&gO-b%2N>iBRlYk| zfVLN1skU~72Bshbhldp!SQG)w0JIf=xBsPOjjX&|pQ-$hP(iwoSyCu699?SzTYmtD zH5r(l=fQW&(P!Mc&vXSS_lAt5>kXk9Q6KEOy6iUg%& zO&n|I)YzHBt4`9#PFWTLOwS_WKpnLFPI*U zeK;!fnvY&Po?84iW7tCQueCLp9>di^Gmyq#^-Z{=zxiV0`E=^VP+~)()L(JQ&K1G$PT5qcX4g z=(WS;znB;LtMY|FiU#(8Mh1bwbSNQl&>s5Bgmp16Hv1pzepLkj@PI>s<6&(S>yLvT zR(7^~!6IaIpw;c~i`Kwc7g#<4hybI70%9Pq5CW;8#9yYci>+h5AQ}wUj|DOVn^hEg5Z>P&3h5k0bb{z{3*LpA_Gtvi&dpIien$KQ4YFZsT2Hso%dKphx zIj@>dV>J$jpCrJLD~N}n6B|zM0yFIYHnS4hQuyz!jdeX89aIMNgcz{fI69EgvK|izr7(NjA+bjbxH*GCq{$nW6Uj&i0 z*;q6vEo)*~9v}6PeO@%ZJdZlM{)RKVSup!0a3#$MXHi zvFB0q*K_m)FXOS-|{>|0Ba*PVbjnZPn3D}H`(DZdCf zCkkJOB8n>q>-&V@dH4z6a)R6YM+{kY2_RuNRRXX6I0SdmfjySUhUdsuI3`d?9d%c!_hyJlVumQaw+(W)``atx68lT|baO05TILDgPN~9v7y9A5`{=uA9RFTUo zH6Z|H2_mEx+CHQaltVv3O#+Q!(41h!wiKHobZ9!@#B$&Gtx^MT!9wF1Y)}BEvGEL9 zBMFYM@eEm-2##=);zBf5Qe=L>+B#X@Tv?%$-)(2f2XK`J6by}ZLj241fYiLd*Un%O z_;PDsi4Lqv1-bUW>u2nb{urzNBX|O9!$XP1QHdiROC@$EKQxyBeF0!3?GHw?V*ToW z&Ltoe8rI*r#KBv^ zh?8Z#R{op23L>vKf%&pHn8&`%Uy<3xOa6+D@u_RL%aZDV znhgMKca?PV~q!4_^)Mipm#N6BfN7GRt*|e7FQ#98CQ9w-c>e{lfMF zWFBqI2m@5m@L;(hKntA=)*Z;-@-zc#0ZITI2h|W_lu$FUYQ{;8Tmz3mH3+qboCEiS zj<;mQ@LKphcpiKr*WjvC?7Jng=TIgQ24S^|JbxVwu1En^>R%9<0FF z(&YqVb6@}tnlBU-=4dzqkTTF}gusy(XhLD(-*03>BA{6#C|AUht*5m)H zW+n)M0Nip5{9|?kNrFQB!BP-G;CVmNq)pU~p!QIKaoQHf{eH<+P|HKz4?g4f zGTd(bsc2lYJ41-E9y$X!@4X7-r|pu7a?=G<$&){IK=Is zplFT@g@Az3V{lFc9)og3SV#^a6ABN@5Gw=1|Na{&Jn|dxiC7tqC{#hn@8CVbc~mio zBH%H^1OMPXz~}NrV>P!!mX{y9(k$5IA&M_z8u^35Qx9>UMu}T^J*gfDYXgbjm<7V2%XcT^OyE z|8NabvEaf7Vx8bxgi!E1#FCekunrp;l?jZu*0cs8Y77zumS?&&q^*~a@rMAv-fH<;P$`!n)$js{L5PkQ{(^NwW|n1O{CN3Wzg7Bu4>4qXHsi!E=yI_zBKI zq0x?FY!C&<@E+htC@Jt0aWhCDd=7jb?iuj9rF(#~rF;B#UJTw3o`=5$R)&xb?+34g z=b+NybHI7TwZZqLdo9DWt{}f6y~lP*qm2`x_2pJzkbkur5|R&qFOd&`u9@AV)(d`z z5CBL-Vh0c&B?2jjf}++7z9Vr35Q1ETDh(H`ctwVe7{othVLf_HvR2K| z!F>M}@eLdzu7%cA$e0r@7_W$NzzPsTp_QQ41YHQR0GumAHv{J&K})U*tq1-=w*n_n zmxf9~u7mf5>-3MX;*pT0%&w|f|mJKk8 zt|z@%(OLkzQ!UHUz(VPD#m-e*3kdN*8q`Xc$V7poq(Z>Z&A=ZLk03G7+JI0#ATjz6R*b~te?4;@70-&+0kXHsKUTZ4%X_tk`HJmER@BM} zd4M34yx()EC843FA%VaW5R#xZ{YDgOCGh;8g~k0A5)Q5XFADmf#6o1p5*Gx25Y@zaRVS$!VVPQKE(HH~_zC+DJ!4dxlpixUegj{ABXj-z= zrUbuVx(41893ZX-g$MV8=iqOaTo{xgac7B~wcQ0QK1QMo)(TLYz$UR^kMZ@y8srv# zY)m8W0sx}KAnpRRix2?Gfu!Jk90|xcfnlIU+yj2XU<}M3>7s=K;|N`{mL*~TZ8Zon z@cLyv@T)b9vCTHr9Z-A05dmhst)o8*xy9;4z}f;gy#uZCmk5A?5ef%Q9RkK#4x)WX z0<2LGL9pkcE5LJqpC$s%FZ&H7eLW>5?RHsaJ;)di4BDvRka!%?h;^dR17+*7s1;c_YF{`q zz`il-v8dIvZ~$^e`w)VH+D5Gi3IW{M+;V~QdjK3 zvm$sxS6JSbLxbm^%zepS5P{YKd_@KeCNM8cq`*4Kb!lML3>Eu~nI%F90EQB>G;Ium1;C+DNc|6v5uu?lIDrvuBP9Gyt2o#=t>O$2 zS;Dh+?Y(M`uMnu9md4m{dO*Ag>JS{G`hee|7)TEZ;2f#Zm$=7@2R#zrOK90B`)|Xe z;Jt^q*$l{jK_FP-W)tEj$zf+RAp7+!1yZyF3MVo0Vx=`DUa=j~3YSAAM$rPn{&z-4 z(J|en(a}EwUUfWl#U@275d($%ujvSgi|A$7EpeW_bU!qL!smiQB=3e%8emw_K3|Qi6@8ni ziQsG-smdN{8x(Ee;U~ypxsSaQ?#R-NGf;+#|w}`7Q{)x0Wg5h<) zb+r7`I$IWvS0iIZmV?a((7r}d>;%-cdWpbF#Z{~bsZxMoOICym2{i|S!(*JKEF}!k zVxSelm;vid*o;IhU>(A&$aKJBqh$#LSop9mmxj0aqe~#dENcy|Oc?$K4qNXbG=W%z zH8ju|To;_x^A~6k&~u+SdU)vJnG=)jHr6en&h9{tlKc z>*4w>uATO8qfT3ww>vC0rSM*9@yP=jeiESsX=_RXXFi=ZtY7z*B3Je=kNLGp) z1VaTxJP2qIxfk>>_xxaVR@95g93tS| z%j-p0h8#oXz&{`mk`XUc8gh(NAY!fX9E=jUD1!VB$crc#mVrOyKG3QWr7w3-oHl=} zLs7y1D5@yfngBF8{xyvX`O%;47(hT06@Up%e$ar3s0?v701x+xK!)D|WJFw88!S^F zx?ts>wIW#eL$!y4jg9kbYH0be>me@}@FH)1>`R^5xxp3%va;*~=pk6L4-N&g>7QqYfpUV%jlLIYZW zMG86%&;l${utOqRfJF-0vuFVpDQJP<3WTvpK`RI?z#;|ajTT^$g8U6Fz#;`X3|fFQ z&LyP6SfrpPMz6pk1ydE!0xVJx;n4ytQczu?1z4nD^%$-|1d9~7AzFY%3L*nqfJF)> zilYTsq#{d5MX*T07H{YkSfpS*9$J7!3Krs{1z4mYCZPpbq@e2`Ex;lLi{o(xqFAJ0 zdLvqZMG7{QLJP1+!DgFi0TwA(K8qG$k%GNz&;l${uzv_zfJF+n^+5};NJ0MuT7X3g zrV*e8Sfrv$NX4*7!R{`&E5xu!!G?Kg0TwCP{sb++A{ARgDuzW0`WMhEut>o!NoWBU zDcD5=Ex;lbTS6*^MG897(JQb>!4@sJ0&y%-u=N63fJF)#`Dg(aDOl=*7GRNrtsT$; zEK;!O9xcEk1&vU&071HZy&u>V2A8OstXzY)q6-f!6oz$^_=>#)vFjv_G_9S$=0zL$ zbiJ&>+I3rYK6Mu>d)p0sYPOE{4q*1TAZSJ#I@)+TfK8=D#W(ONg1y$XY~7W>26b+( zV5bIlP^JXlM((bA%<2gExiWYY^$}a0eTtw<#Madw{7#f#Tnx!Fj)K<}vYYU!g6+X= zm2KfhJYeeq>=!Uq3sydeobI+Zj&M71uzNc0)*kF&^~fp@_HuFcz(SLiMVJ9w41u>` zZ}7P_)ZrZ2CZ0{Km7X%KKk=6H(ShFUvmahxe3Z(X&8jX)E6(-v>>FBbJ8gEF+hcfh z79|107!1bJt3F36KDYRs`Hgl0aE$xUW~{Dh3wnV2d`Hmjva%=$^RjJa2?j4D4{v1= zKB?QX8^d#in>vYCUPH=WNV&3Ple`b}$`baVG0~MJ@|gbuTF%IS8CuQ;2J>GVTFJ-% z(941X^NN>l^!2Uq!C<*zA8FzRVQk^%r;9%Zo12=!QR%r<#}kq+r>Kkg^GU#QklxhX zsV>bYh427_xg8Oh`_G+_B1{nLf5QWo3EaQ`4WKLN_-_@nf)31o>%5hGu$PvYSS%IE zb9H|D6u9s!|A+psH{(9-KWV<2MiOVH6L=ntOMS?vkc6jG@s3T@&CTs>nbqKZ45q?$ zaj-e_VJ65~f~XJHk9fBJ+;-B+oeJJDeQ0{FG||pib8o$H{D;DYCLbeX?9KLgJIu3$ z5?8P*1-4Y{VhW5gm|u-@%Wz-;$y5EF3~97-@gJ;j%EP0f{%;Djq&4v6ze(b9HZcER zrO_)q7)wK)c>Ey~iVeUJsoHv$$Dgg4D7}xAGx;7>n|IB>gabo<(qX=g6jjR@;p&uJQR4r4@y&{cfzQpF9JL!FY`f3UM!#9j5 zacFz(ahUYk0%iWM@H3ekO%*_8pJ;lSBsL*uilsn$KH#BxxS%WtQul{#JlaBH{z1y= zXSm?^vo)p-O|!y$m5m2?ZjIyJT_8Mjea=aU?`vnSM|ZdYSNY2}!mObq!hn{Zdy-dF zy;8Zmhvj!p1CsJ@f8me8GdkCN=8HpO_7A;?sIjSvNSnhquQS)>k`KBucsO=RMhg4P z+ptp!$~X@DPSOt~lAV#^R5H>|N=oiIbvte$gks+6iGxo8QFZnul@oEiRcb9=B3@tR zTaR~@i$_^^yCn3tGe3ApSOFfq)v9@JPgnq{8;Kxbgg~%u`(!FLdr0+E1t26OByV3d zXI1NidLJ5Ik>aGiltTe#T~6@vJ%fE$1SgX_siZ5~4erZ~E;MM3-(VIDp{Hlcs9DwA4D*CNLPHn zb7ku2k<)y(q`P+sb2jf|Yk6eB=A#t0kVQu3HvQi9L|97uz4kt)#BX;w?rnS?<2bs+`!?~b?@$$rVUgkn` zrbx939aoMHJ@C+lm)TSaM+Q(Xw2cU*!;heb14 z>Tgh*^Toeu|CL)DVs^e`w_tl(-$I*6?Ual~#$4n+pPN_u6ckNn@q&Rl_=FBr)9h*D zBp`bPed3O-s?r|&v-kvYRbT58?cRlqKi&F36|0t--Iur;`LgK;uPp9TmwK-mz*R|- zvzN+UET`YBmuN7vVv~WM!=w3`@f3}n4{y@&`xx}UbbJl$vaj~+{$W?)4h4rX?d^>e zr_4GYTZ9!DT4SQSRYj)T9|@cYojG)#*n2qfAzzSks^iG1KE|iluf4j-+}NJeM;vW; zf+h&x_@#oE9fwDXWc-3|ya+!A6K$zlM$>n`x;-stx8)`e0hjpBmiwnj`<$gP3mJP! z+DE6)WJu-FHu&Xtrx2(teOUKPD>g_;*TX?xK`HsjkzT zeprOR(9yGR>SuQq?e2k5g-)lxh_Qr`b&ODmsY&<>*AG4UK$fR9aTm-FpbD6TnU8b0;Qu(y`Q?@-v0ak{vj>K!HZv;Mpt-Gc;f z%uiD7zf#>~CQ38d_qbT#rfa5WL!OL`PR+aK#;tR<&-`}mKg3kw%IwGCf=NV`|gZmT26Z>Bf9)Me{SPeIc~pO z$6j7+DEOtp&@k!#O`WWVGwynw5M?F5JZhglPXbNQyAO)Geibz*?ptt0I8M)lcZJw7y1KUx7?_yxpd6+LK6pGT5XSj*votojV8RTko;$9 ze4%Qt9wnQFgi@@OT#RKF#l%#Cl8ps^9143_O*uO8bSoysu?o+=iRDw}*6kcM6WSw2 zcCztYw+`K#50Hy}|M-qEW90Knms4FS?TT%@P#PbRceP)ds6_Ir8-D?Xp|i zQ;eDTLtG9UG`T)&oqyibANqmeK^VVIC?DenVvUwMQn%?k*ZGFeJ}j1m8A83{ZX`il zVm~*!%Z_evRjoVO$7LLOmZnu%)r5#9n`DE&!+lIq_DfmQRu8kUMpevy5d;$1K1v&O z#ozeQ+&7pu;>~}UdiKfQD#?rSFZ1s@GCp`Ms1r(cDDdbhdb7$V@U#=othr=i+Hs^} z@7Nk+2X5sNlzKE=Hs;LB?-ooM*U~-Lz!-7i(D@5FCPB5F(tdZC56vDCVQN!kY0f7L zb(EOe%<)S2V5qV7!=BvdPq-zFcD>y!dc;2KIm32+OGjVTGcVh=KKDPx%b-f4{47{D zt@isX>w_59WSa(eaW&UT5oT@e`12H55?iSo9m_CV9Z25U8f7*K-23%7C*R9AA|^G@ z^pZ)@#`jw00&+>Am+_<%>&{Ak@~jn+QNMBLhwuyCGpm z&X3ek8qdaWqA`6NGu6MJ>(BY{WT_?+kXzvqx>~hj}8^HtBvr6FkLB zB_SqiS9ZC^*!K>T82_F5W{0l+pm<;t5K^A|Eddb69ZvzDosl);rL>uiR#B-ndXCLG zZs)Xzl1@r{=DU=W;w-f)Q)vdexsC2wCKg1}s>9~7mrp8LPnLej9q0+obDs1PFQe%u zcF#7tbk%VYV=82Ezt?}^)P(5JBVsT9b4`8M_p(Qbab8rtNfOkyN4Af?Rg*?gh@;g- z`lGO?^X0@|)~Aw1G?gwQGGuIoD(M}&`TH~#16Yk3b`}+ldFxMpbuO8v7f+$>Cf129 z*iPP13JkzoD)cr(r3({*gleD2_D$u?iea|=WSG3e__egH?jIgzo?eXT^|{J?!x(WN6-?<71aOs+XZpub1}e+0T@A zdttUeF)E2JQ*gieiPOchUu63jlN+g3|3h|6d(Rj*Yx0Yp9uMEk4c3PgHT)f2Y3@n7 zJ*(}Xl(<_V_!~tSq z&9~K68zfk~=|xlQ54-4msSG90WDMR{BNHYTa;(Ng0W)*?%(eWpYO3z6J^R%6+NG9t zpD{LTZ_m4?=IZzA!v_+btKQ7D^MnjdPB%}Gx;4KO<(b|P^oT-R<_@$B;ruH4&fFzsvuCDV>HZ+s3nB zK!DP3Pd2)CTTlC%H?!hC%2LTTLozpe`|AwSZ>@PO9W#WaUsxXu8c}zRiSm;nsLI|# z-<~4FBbtm~{DqR^*Yy+MFk@Ty56|j6oIEtn{%Pk%!zw3|%U2I4i5>$Ml|P+kQ17gr zm8Mp3>gr{tAiK~D?1k~I!n1_hyZDlx|r7Ig1 zo1bcOzm`k<_Nh-%MM zwp(NJY|<4q!Uso`NOJm<8h$?0ycg9Yy8r$UE%}s=PIaJO7xL?R-NSqK%mvXKnUF~< zdxg=97jC?r({xEUv}Y=)_0H>!9_xJ`w#ECGWb6 z+EZn&q`V_Jg$qmLdqs-408u9wK~1T45IjRBnqk8RH@7+NS9W5WsH-#E~M-146|j62m!ttIzZv8 z#)8KwMs@3A9Eb>;PagSL6X|rr}WFO@`HzsS%Rf3X4R6O>#KzwmOy}#L0P*Fruklf?1s2 zU3`efO;wYVPt4N8PCzTZXseaS|jE}PvQPz zVHfwdAQzS|LzRk}8@zs03C!Ymd2!4Ik-BBR&8AYTYSmzf9-xS=WXH3qH~0WehP|*p zNDq+1?I)$k3U41j`9e~E@Q$u|^Yj_h-HVlj{+~Ozze}*)st*|(4<6Ipw0ZSato%r@AJgl*|wK$Rql7V=xkqX_B`Mfmi#ITlY5u; zk&1hPUzndt3Mlzh`9%<=v zs1G%sM9mkIx}9{^7|@Nz!qkMPudFI)>% z@23!3N@&)FhUUe5-fii+%@*HfEf^FGA}hDI@pd?_!@xc|eqCjLNck2jl)M5d7V zy<5kh^8ux9{_(wi;M3TCt4A{%@0?D!b*LoK!TD2CPVOV}ud3mDYZ@g64Mj2Y{FgHT zTWMr)BTq`lm6t|SxF+SyQoCBT@T6iWzIsX)6&2mB5ggyDZU~#E+b54_Pjg>e zG=16s#`hL?gZ=OczK(=9+T6C1d1**x=Ks)uIDjm1uJkI21abd0p=ryKfce&+yP|C; zh)Opk+$1M=BY6@=^PH1|_-=abyZdZ%$_<#!VpAvH{jf2slgGTFP$W^VwKOrOQDiHm zA+$8w{vda>u8W6H_GW6j>pSO&DgT)x3uQ9tg>^jj`!&2nhO|iLs4rSB+{id8z@K;5 zU7Lj~EWM^nP7TH1OfWt1e!H6- z;ik{$kKZ2i=5*#xa&wV5H+@Mfe1PJVhtJm1E41?FakPrP!bmHVS!-tqQK*d+a_ z8Li{)kKPZ@(;Z~2s48cv5W6;1=Rs7pi>Qsf=2Wq{o13@E#B<%jHz69rC2vLCx0Ad! z-JAdJ!dZhodLqQ$-=0%{wvwN&RXLH;sd8&~%w9Shh3Aj@$#X{qx41Vuzvk-Q%113& z-VkqGE6hrpl%$wX9DFvgK;p*G>vLQuY6$4vGD}%Cg5Ibp9Nj0vPN6ogr26v5h3W@J zG2OA@oJQA$=x$5zu+I`n9J?)Dd991i?aG6mrfzx{ZC=4zgD*ji2Nfj!Z;2nyeml6E zV3zUt^Ff;Hk8ZhGJek)o+VEQRJddKSO7hj4yJ?ATwfWN}jXt#97<9_Sgu>tauI%i^ zOSSCWfm@DWaDQ9Sqv2aJAba@Xmb-~p9Y&_rLk?Ws)~f7~HXV#$_aF*6XtwJNe(NV zA!SL*-gYQCf3G2TWxNl@ke$o$8Wf(7j>R$mhXQ|8-7{oZU%tJtr&_=|ZU(MH2) zaD;GRzWG?9HS_y~$Dc;;HGTb|MAvpbpz*PK3H_b2Y1gntJ~ihD&W|((TJG#1aeuSZ zjCX(NEaj>CcQm@&?XNJq7(bh~n7u+A*td(Oy!zD85C2OH4ALERHy-8H2^KAW-uT>p z62J0iO4s9QUZQ}Qk&d}s>-a_UqMM7yi%dq?u1ZbmkE%NDRV(G;pPzH+wul$M{oR)8 zZs5Xf|EI}COS9}J;OmL`Epzn*izz;S<$+nzBk@oqb>AOG%`^R;i{`Xeire8qXA&eC5fvw*0`9U|xTxGw_6NQeSc)`NQ3`OX!tYs1U_)KG>WN`D+~N77tF7&(7SzdF}|!WiP>~vh{9jQtr^scZS5YhJ4<6N%qA!YnHX+e z(Dg|$#4DvE{4ny7AdP)t;meHXv-V!I(R*DMPQSRv&#M38GUatojAh;9=wja)( zeQy(+V@jp^ZJzy#iTjOnpNFMdq=+!@0gsfr$7Uw?ox>RQc+&6-eH=Z}ZSlyRZIH=w zCsS!zYIlk|b4wAM=ME-JPK@*9$w&8!I7UMw^lcYa+$k@aYWgX)kQ0>2wovNYt34K* zH*5wrsUTaGJr{T&rfP>a(*?F7T9H2e0jJU{eGCj^7;1s6VACfBL-p@329Km%th3m8 z@y^IB|LKeSzs$xG)M8?cCR#4!#po~-Bj9N8iApn5#bYNsnr~0dnH6r8lCFJDJfn=a zOIlu#NH(s&1(S32MA^wsu0`%6Ubgz_f#HQ^9HUVdX1p;$@mw7T!>sPdCsI32o{Tk4 z$#B~03F zL^ts|dz)X~@$sYnbOMi^=_8|&>xL~K%|GJh95KFrsMYX+zf!O0*xrwfBimx}En*!B za;eVefOOa6=HV_yhLe3nd){to#}37a|?^PkwU}l8;Z#SQk0D| z9Xyss#Yyt4B}slit}?X9UrKJ8t+?*FUBK{JfkxiUE|#?ZSf@%kN_l@gw7scjFdVnGq*MssAlwH^L1joU$O*KG0klhR>KxO2-Ec6|%`QdQ8Y zDUfqVPT}#Xq9=vd36f4~M-x{+i=AWK`{qGpxiXEu>u6`e@zH%VDrpY>CYh0ayiALa ztu2Ligd5jisxb|HS8z1=g0u8|{FBy@C$ct%aF zy4Oc9-|UU>PdXd?{Rd)y*0Iep6?c0QSW1Lj1kqnF`Na3Frs$h!`fqS=ifQvjhflwz~~;JjTw)!a^BZ4h(;DcvQk`xa%WX zLohurTWG~wzDpkQl*hNL15y%_H)77IdJ`LP+`v>H;(Ea!H6PF~beu7DTWQfN${FQe z(PNoB4xAsGNj4cjlKDziHDjOJcFaQk`RlrtGPa2EI*Jc5I_*yS6P+`mxr1#Qo9kn@ zz2>MR&!!WQP-9upA5OXE+V)6Vo#H6Z7wKWV^StCWIva~<(}WnTJe63^+@igjCO@w_ zU|2X$*~^02bZLmmhNNBJ#{<&N!%?3q-OkdsX8`_WF4$lK6j!Oyf6AADa zDE~05t8zc=aKZg+tbDxUbA1L*kp>Cs^L^^D;eQ-i`+#s@iwb7OX}Kj5xPytVBiX~X#*<4^@v0@a(} zM&s>V#}@|@buvB=2aXqQ#w1^j4<6aUWD(wZO4T10ZE)}Wg<9VzO zn|FkN+>z1VS!7Z8agKU3SwcOn?c>+4N|lL6U-K;ds<1l7rPY7uuqAo)>v4jrynC0p zI~NvHUyonfj8Oz~iw-ptzE1kQBj$^CuQzoVYZk9|DBicJ(&vR#ghmzKrH7N5b54I! zF*tCcDdFevr;B;k}nqY#s-7-E~gnWXcEA^orQJ_nn_G z++uCH;raMT5%p=dYqb8N4720k$C!mTK5$-qG_C8oSuV@Jz(%)l{z{qE7C%WsOc}ru z4X~&llT7!iv?=*C>uq|*TF8=I_vqsgE0#!}ETT~YynyRzovFbybNKf8PS16!J~Z(B zbP+mF>^`^np`uZF;(ca-%eEciA_rb{N7!$@>D;4wIaqZh)0JyF-`ap;h`WmLL2x>) z>c)##4aHt;u{b&7avJlX+~N6#PP$L2d&}FV{4w(4*+TCU=HujDbgz;BdLLT{>YJ_; z7x#!u^4iNu$!5F@IN{hZz~etf-;Du_U*sxm(}4tSv2C7gM^Yp$NI>h0c?oykfrDXUoj< zHeY^tv>>6Zdy~hlfa}{z1L$(C;?0j|rswym>gI0UH?~{A?>r0Fk+4@;;e1Jb=EfAP zc6KvS6;+*@hrQZAyZFgsU{!mrG~nQE27$dXlfM04&Uml4zKh&JvBOuBG>0=5-}EE- zGv%I+sV6u5Ms|~RzMOi+ClKTFBjAEboYxaD6Gn7V<-~b5$0KpA2S0ktoZppq;&ByM zG5wRB@4nGriDjzU!%dg|i|cAtD}ieHji{*#IcuA2X6e%Ev9OBFjj}~Y8FQAj@HxwZ zmb;8@H{vNocGU8Iy3b?A(_e9JcBq?^4~j1enkFsQmKu_IE<)(m*%dEzjpwt9>wP>De{Ry9RsrN@+^m>AKQ_P)g!=8K0pHfe4-oSA81pW_N;jPl812efN)3GFb37tF2 z#HTZmX&u)4K0I%D78B%PW6!>GP9(U2@UbZ{`U*FX_BS7hzwW0?#&j@ztB_8aV#a4`H)kEw&fiiE(kia4`FI}Bf3i58I~>h&u%&`=;22x* z^E-}Ysgzdd9q%Xy*i!Fn(dCdWc4xf5#Ot;v7PM*_Ga7IDtMGw?k-pldQy&~mx+g7I z;G_Sq8(n!UXIniiRC^3+e0m)Tt)^#cb4T3q3OswBZP-gBZPLy4!d_X9i~-Zwucg!z zt1m2Y*8f)3BZ5@L;FEjfsH6FHqQgHKfEIKcw#Je7pK``$ET0Q`v6pOGXe{%fGnt?lh@&-?<8W)$3QT2y2Yz4r?HF zu8md6&WP~C1|Zbe7Bme}NU}2>KkxaVAlTv64omK-COMv=k>Mbz4sz1A468Y-%~spH zQ*T~L`C;!@Zxx;9?zcreU}2ZB*PHLs*6c*e%!kK`E+!v$*Sf_O`>k{Ef`7 zZ6bNJ5^CN!llfUSw6&Rx?z8kDo-kHru6RFS#j+E>VA?ugDM8HE7mz&Or>1*kDuB>P zq4YvJ9sZ%d?Sz%2L_KUozhXCNC2Wur0DUGB23z<#r)206feVLtNVd_YxPxX)@k{&u zXN2suHI=@bVpZ)LKzJ0CR0`?(xtU;)aR0G$meL-oNKU)$RkNpac?o=5ZN)lBI%4r|S<{egN#Ix7RSH4O8L#BV5 zo-=6!WysI+B)-}2zVBO)1rX?F`LxM$B9-63{gp0{UEVT64S zbctY$7$Uro+ObJJVWF()<{rM+xO)m(a~Be2s=a*|d)V+6t8I3xPU#MYoGn}!yXlFE4|CMAb0wWr zSxgq{NP^4oqHwPL?5^97)$C7CN;z(mY7W7_ZdCGaf5LnkrsPIcdXbI1&eTg$ei8RH z<4;;tQF=L|!V%2;5zNPmSie2+ah&Y!FkW=LxyvAb>pf0Y3PRb~mx{L-$`9Rkn`Q|TXl9-dO93^wbV*_^aPmm-;z@`rXO@0NGh4t~BxB0za|@q0iR{efY|RCTB2*bA5x`>2R&eU+ zP-W08R3$uixA`n{Z~_Gn-Tn516hu2&_7DCdsj5xlXpWG4``Sf=A77=AD(w=6A=vkmNo+gK?h?U zdb2-`*7kQ&z3@216}vU9`e!I{wPkSYEls>TN46XldLJiwDBn)?y)mEh=&n7+x|tv7 zztHijI-7Sz!Sjr56k zxRj3RewQ+oPLWg_BfD;jnc3BP>Y>ur9gNWxx-Gr#>ZXOmQrt+aO?yNrnw+}}W}s&j zooFQaNxLr}{AO0lzNZCmCR!%us6vU;1M^<_h?gqt*%{Z{jz2TFrt!W1<*s-Z&&-qe zgOr73%RbB+Zn>vUyTvW>kW(3kee?A;%o84l)@-r|Rm!`!TyG;%>n#;el?ZbrHsL=* z^tu~BCodRa4u7I>Omw1l&R*F$&tX18`l`ovrp?=g6!9c42z9%a&`FlJ+@vuUWw32^CoXh`MOO_fn2L)*8fqQ>uHt>cfCbSyPgOs*Jm!U>U{P>-d0me z*lNdEqz7UQlHgqz5}otZYi<*~wi)ExJ(01AA*zfexJ&Q6r&XQU;D?mwX>@Y*y!d(a zkJ>wlq#}r%xLE`kK2}xjAKk|g{{x>OQm3lQu+W8^8sXW0zYk%;osk`o4hGNCEJAq$ zo4phi`vr-*X#I*0$FP=1(edJo4SfO${!h?<<|l{$K=qxanZhBa508VVloKW*>D>wn zH^L+UFCcjV&nJu_^0MYI5w|FTs%VW&h(bcYJ_o-zxi9-3{cUC;t-jv|GTwwZDU4LoEF;r><~*~z2{6{+-mbcf80iDw zD|-DqKZ?i1TMGq!(dO*o(OrBW8uY@KkrY$vO_zf)VYuUNLQ14Vs_!UzTkGBl%Bsh< zrMnb~qJ+!a>XX%X5e8}5*az)ski$@EDaVDs9mc1-iC5ilb3BVD>bcuy%YIw-O*(1u zPATta9;jFhsC^-LT2x#-6%ev{8=c#IGQt4cJ~GUYUlyYzMsLHYp5NSAw!g1TbPoSZ zMEtiy-aEs2EMYw42$I%w?aw}@sAzMc=Bu^U_pGS1ulpjzOJ#OH(Cn2P_7zhzGAG7= z-}0;DeZvg(u2Ak$`H{40`O9O5+@>K8wf#@%2rwZ!c4Wl-RoaCv)0{Vd=Hz|p?M*jp zmfNZ*R>RiWx$r|SP8*Y6S$kB&JC*eZRjJ~HHg7$hiVvUsW5z+JC%0xB++0rDs7xMx z6(%zxNVFr$sObmKQyCAUhL$XD3u4p1`M7V z?-nBC6J$>h|LW}pW0x4Mw+o=}ogw__#<8d<+G)JB-6uh^$0qGKA~ziVV#K{;?b&t-hSxKRTd(nj$@fKRk3b^mHk&bngrX+ zPbKZKr>Qb4F7_t>Iv68Wd5xsHQh2D4n&HCD6v;TIMTWi~^=)l8nI0AtnrT*$m%24y zHI}-a!1M4{(W1*CQ4&lLo(do2#IO95eEzF@@w=V!gMk^1=nG1XE)>}6diU{;WD>X@ zyLgm0w+r%+*%vB5)mvS7;c;{~FBljxQ#nsk5_#aT^&!c0rMG#NdV9r6;+|^^IC5ez z1(r{}LH+mRDoZ*W>n`nlN=!)auRXVKyen@L_0Q4@mSM{~m9hCr5zSXMZ@Z+4kG|8R zdv9h7Rppm#oN1zCIr>vmx!0T0K5|kPy)gEQK^$DMQr|bCCw;pn_yo*{iQ&F02yIn}|;;zQ$AM`f(RZ272 zQ!}@tYy0)Kd{a%M?IM}FGfvf#`p%559v0kr5@ey8ul;4j`8LUJcHf`sFWkpT3+{gd zRNX;D+V^JXNHD*Smi{7@XI2Q$iimoEhDi^4%@C#ne)(3t4}C{nGF!_&U z?l`~n&vtg>FAe)1mqi|6>ndlLI-3M;^{z3XL{2INK);=Tth_BI{GesZli?#OY`;cPh_5yD-bD+O@s$9(qWaz#(fj*9PYci`y2BA0-Y8f78P9%y+h|`}18^Ah^fl z3wgr{EdPhBw+@K=#MDF3&ao8aD9Pu(5?s zKJTi@bnkdxirtuw>Q8Acvn0p1h%1+S#oaI5W9vCgX*_>%`VzGyD7Sb5nsaATrKA`5t0RY=&qHp$Eq z(11*YY`K=9f{!5ihPa=tGcnWEEg$SilbQC)Q~#<$6>gvx&og>v|?!~S+( zeW;2w*UPu7eJ(uhUShMemrtarBRREsW!-5KqiBW?ZF%~o(g1H2p~_2rilm0I51d<$%8{o+mm8$N{F`v%6rCcjhV6kj=6m>4xnkkma; z8F5fswp;DKzVZozxu6g74CEknA}(AIgz@{0U^7-WJtjjCpDoHDaKSXo}K4*JkN z5E8Ndda@`v9fr%SDVfqsQP94osGJ$8{vaVr!dYvE;YkOdQM5%$O!Z?{ythygu802f zltJGR+jnaIct{Ll;#GTKeGj_}`6!{W@mepG`l;4ryiU+8X$Om>4(ppl({ig@*o=e& zKd&ZA*l32Pv%e@1?(Oxf$#@`jEy;?$IP9$jao4j48Z-EmLLu7w;1Qk*ig_uF>H%4f zwQATLbG#N*H3Y`}(dDzzTG;7?|0*thowQrY$A3TdiwT607&SEvECto8i6TNvlt>aC z)gsY|c%PLWNpSDBb}3ozAwo#>GFj|JQ!;uyeT3Eh`}dteWFL z$LCHQsH66OVA;l}N5!Sv?VVt+;9yw2f4Gt@TtOWYf>pyUqDeR^ahbnH?tG|uVNlQTnU zC3gCF!9i<4?)3*#4hZ6=dbzvp9XZdGvbZDO(p*F;3!50j#S@Tj!cbGK2Is>*JxSI6 zHK$e_2ime)Wo|TOdr13_gtC*O+rz@OyV4S*!}XUmUya>MA!=EwMGEj*(j?A`RUR>f zhy^bnS?M562r2}+LL!HQr<^zPI{#S*KIv)wwJL`EJjLlPl0_?onpLm#dE8vZEuupD z98)++BI>YF(%9BctQ5?WpBN=C3|RHYJa>R+*6fNUa{3U=waZVbb^3GL-dbdQvynGD zkd}Ydi9mBN#!NV1XDrXe?i54q1yN^_($fWnl9@UT8OfUcT)av8Id;;>>W4rcCJ>nm z4oVFe_82B$lCdk2RE&~BqvW)jRYZOswYnUZg123-3SjT01c;Bm5s(PKDza~-bz~Wz zV)i=x8r$rK#$GFoXu@wg#LC*x=N?sxzsF173LNP-hE1oxHt1(eZz0T;=TE+&5xPd< zgxZWtcew0l1`uMDv}Tvwi|9{r;6P!&_ox-8WG8=tV%3|o5azQrI2Ek%_Efp{&6@Xt zVqU<%y+3VQ93z9#F)pZQ*Kspj`>hx{n%M%f)oiJ7Kd!C? zrRU#zr7$^Od+by(^m$Jnd?;}zyQAnipftCvBWhQCcT&_jHCc;y!COIkdC5$@wR&tX ze{n9_jAhh4SmnLz8}nN&e5IAY1c9HDXn^uNR|Z9nm%aj_yr#PG)7-6dz}#Tp*X!_%qU}^@I6=9 z99O=*JBtzqs|e4Gr?&eoKuYK{HaJ%mBD3;Fa@AzMw5QXR?Y807yhAmvB#7!Z%P?*P zI|gF2@<@eF{XE*SdG-bS+X+Leu5rqNZ(ne?L~!2MM4kSOws}kS_Tfd!x36_xOZa(v zd!NZzTx54M4&R*PVS@Ux^!%{AqhUAoAH#}r4R@+k`e=^Q28F&~4p;RYxZ}P|vv+Zt zJ0Hw#lcMSEk=aE*^SaZhgxdh4+px%tOn~8Pb8d;=oxJIG)2xW_*5;1}m&T*>tR#JO zgjiFrb-gW@455j=(Rl2DqYIVBcH2_1CYnI?3GFD)&7}n{>B7=SxR2x0-Qv>qLSian z%N$HCxWN7X9_d3S84N9vt1|}?0*RdK zlXBhnH?BM`wOBE*u>P29^#$7!)!b<7UtV1D@f+J&Czx83JLBbf&Ro2YZLzP)2QCKm zCq`PhzFV&`9L7bq`24CRMd?1q!8;%P+r8o!NkiypdXfZVUe=KUT`v@mDiL@4;*#VF zg@8#D8ptFvH_fg5tAY@SGPf&bLi*0lJvu#Afj9-z12<#&0IuRhO;fZ1L@z!&Feh+dd*Wkk9DFNkyAN00^AB6>0~V!ueTW8>WVM%GnBadDZ}#Nf@{ze|3Dd8!=(jd^!Edwz^IxyT z*|ke5gkw|*2@4Ue*>o=h=WJ3@%&U$A*>K+Va<|e}O29@qq*9?xPl$?>u!$rtCX=K! zljLZ}Sbs~y?ivEYKv^Wd^m4{KzFDWlU>lfCy14c`NTRWR*sZNBX9iwwiK!md)aw@Eacv14Pj<)ziI zZfPK=M8QU??9PWviuXrmvm_@au!f%{7#ZK*a02*S8}N#1SZ7b?iV~!C^;J&9%v?-< zpm8n6C)%D?Ew9YJjqB@Nkvnn|90k7?uMRd0xvHUf)r1avVuixOdMdSikC8zYAf59- zbQ$H&tDRMO6iz;>Hmc;4e4K=@gayVe?0Q)1%FoIT!T3 zUQ$g;h)*WR-0B(tNNYVmym~!W%J-62FxFjVW@T=?g?+8G3q4k$^7Q-E2^NZUYt_u< zGq5W2^PO85qV~3AY$K9HluYz3?hh38V#`s1NFdX3Y!$AIQ*RKt)t1h&|y|&ces;h$oeJWTVi73%u_Y_zJ%z>b&aUW9D(}TNHbAM;quun@^Poj zPdk-%KZm^}E}a0FzkAI!lOly1ZPL2npe|hYfHKbdovMo`;|--UH;XbM7iGhDBTDQ* zuOo?ZZqHi?<_dji0vty^A07#bq0-Ftur!VFA-qGw)9B?(8LxE#1el@^C2#kkd>+yn zOh^_b@#tke=6zlo=o0mf>Z-+RH$Tyy+N<5F*7;cfzEH*WhyWj?Xm)zp{C2%ccTh8K z)zz6Q6m!|0H(@xF@Ef|nAQ@I>C`0T70o!JnA3u4IO>FQu_unon~NZdE7 zc%SmapSOm?t-ddd+(&3%Z_b-`tjJD!Li2|IH8N?FrhJR_V!43WRjY8%)Q5c?VL*cI zTG!hix~i;UEkIe;9MMtps=k)|K1Q(FF-6*|ORwUTBM^c_cZ#sl0&u^j%A(-(8&;eB zVCiSR^irN$^%ou$XY^I4FLU>f=pF25V(S7Vr_zgg8L$pn?#tdYZwPsC#s|j;n#l1& zIX*4*b7U7pJu}fPbJHyoinHuPOCXQ(UO}I6=I!Uak9MHTF0#q&CPV4Rn@D@B@V*jq z#g0V&d#uT~m<`~miiRHKwI7igR1Q1KIWKvV&f$vy27QVr-C>>!`!o zC8~MgzklnYkIaT^ZNV(kuz)VExMGLh7dn^Uim!*}wX{ zTBk{gyX^#HFT~i76lUXp4(@3E#iMUIP_IrDU>3%wgY8B)hgH5-6_Nd>vor2pw$4}4 z{Fnr3;>xYz%IDFo5p)7ahL5*z1b4BFiqj7h*!L$)hTU|mL$WGh$vcjBH44;psZ@J( z_vDHB%5*HFN_{V%z`|BkcRxCD5nzUM&n;BR6>NcTzv)^#@z^hMuKo#pMqT^XQkB-ePsv<$yJ$ht zOcUz3Y1s&HVRs9oKW%UY$^2a(T%8NJ`D{;P4rxpvKA(`1rMemf3B7@`^}wd-W4GGI zQ5FcZ$Y7TYyHcbs*Lj-K`3jID?g93)r7y3Q-eTzyKZX(=*|1^IcIZ`#Zefh!2!nPvRh^1_zrfX4a@^=$x0oxyh2r=p^3R*Bm6xaDpcKW;0mSDO!frEkaJkCM>z zu=*$@%)p-~5><^gA`a#yOsC0Uk?ds3Qdc+u^DchdntjCEPjGaLn1f?JartGkC*Ob=OzZyQ`;*hi7#&LQBD%L(DesTAdeub<8F*fa8xK4KIrycgk} zIe*u%Q!ek;$==FSMm6Q)<4t$}tzQQNe#`;SA|KdRaAGT7R#Wb4PZTP@WS)XgXt$hN z9nowg966jjZ;DU1K+;o?KN-+(Hz|q`dLR5HJJ^H+tp+Au38E~y>$m1uwMYWOaphT_ zl^sSl6I*1#^dCIB*p$F#&uK-oqc0x7x5;%=-JsWzvYdsjeUPGO%xq6pLM%Pls3V|B z^D#5AdIMJI7|@n=WTFfIA(WE`zda|Xff*3;?RnF)6fuv_ zdgL$%4v!k909MmJj2xeZYPX;7r__IPe5y&g_NBdCav$~Ma7tUThAa8m-99oCH zw$tb?`wLXEa`K%r>d3+M&onL;Vywg^ipL{opHkG-+et>&y-M-VjKw*-;uz7F2s0Rp0?Q! z5_5?}lqCJkK?+F0Pn4h|^vkJt?brNp@Pxx6{DKM<|(c z=@JWm80Oq>wJeh70$Fi^vw=qFL=K zBKbK(7hZ2qwo+QVv={?&#p}CwZYM@PD|ciWjY(5dx?WO}7k(XY6(O|8tG`U7N6WMe zLi#KpIG~mvzRuR`45U9=m^92#o1TF8XZs1%8|XNCG2F!)%1xTLZ2lRxBe5w{E zXdcIJN9C1#oHId5Iv)fY2JRI86FumS&70<@L zuO-x7|H&d1!+3mQKhe_RHKY3L1ONcvt&WI*q0J%>mcZTioIC{SqY5L|HIp5E5p{D% z+qX-+*s{DkRK~Rlmr_S4piC+KhRs(d#-2$6g8Qg#^2u7h$>cbmZnW;GQM_9MWHAky ze;g<5LjJcD;CtO9Jt?=q__=gWwG(q5ELbfzS48d_(D zOVoV3$ocuQ30^K^VKs8MJvwiA>PJyny@kScPO~|i*FOu#IdOE&c*CnD;9(mgWO?kcX^4(}n zJysGtMG{TcUjXvs-#t)zQXBwG9!V?+7%4gnwR|!fVkXqV)Z{ME-*)SB#ZZ{VRLB-p z^y2>b*t-k!3}3T<@@OcWH*@Px6e@l?Q#d(t1)mrhIPVZ0m2?!%I;s)A@)Jm;$mi)R z8*{?JYj2|E$F4exZ%2glDSb=5(*2;cx*Gn44Y{0gb;gt9*6m`qtriY%HBJx7%exe!@gJfNd6G zK@pm4F@y8D7sg3jzbIZxUNAgbA?aNnWE!+zal{znh^lbI#nzUg%LK zeAl`2d9O+FbR~FAHbT+N^Zae3!f`#H`?d7CduJTR%BHk$Bi5=l-SgF8M>+~mxoee5 zn$!t{OUba-#<-p@-@0=PQuS#-FC&Z&eCasmh3Hx*q06?Fb!Ah6?6E+9n8Zku1-`pZR>u7O7sDqvEoC@US42@ah8yyF%9 z@e$dJwv96sOws7W_45b*TQKeS)Uy?^%qJqjWy%I2q*vp`Pj!2VaKOev^&Jg!yvr2%3aYEzqnx+| zpXTFpWfeBMc;!G`jl{nGhsk*})@g+`1yy5BA%W96&5ElAm09IJI?iEhs2-{y5PXy^ zSarC{W~et;+@{W*8T`hB0?w4;9#vA?B@uw#pj3b$BAE_qM^%#DW}CF49U2I5Lh@gm ztfl&Z1C`YPe?Z4>_984*7A5qRI{8EvRo?#^_GCK4qGxVFD}8JQMMBcHg_YO z8aVobE#TSd(R%k;6m^$j@LMT7U5&HCjfbVi{ma*3Csn)cU3n(Ya%a50-D%8Rpz=01 z$(A~cmuSL?7BXWDCUegFUMLtw6hbrxnO@gzNavr_;urCK)-LkhG>kQ9^t?Vc9mYuT z0<|jtxl~^AqxcgV_qq2&2fI!zQ3DDbPe8ba^mwK9Q+kq~%3Yyd${E`6jQSsvOhO44 z#}n2UMl;*^<}q?+$GMLfn?5+R4Xc@+SZbdQVXyfr79DGSf1^{muq%6culwfIGmzE z$(UnFHccWZ_WK~n!%BKw1Vo?1`X4IXL`6w$#THj|>n?jLTLvW7e&_mv$e`|Wz%1cu z;xRljt5eKyzaSM3+|>t3)seDhy*lcoZ2J>t0g@}Y(uwbx%n21-I!F+@Pl4ymZ;Fz# zv;E4wd5=EhisVBkNjQQsEa-DzvT}J*MP`ehO2#JUMGn!Rr`!knDONUY4^VN+KxF0> z1s#-|am?x{m3}mapZLf*6&nsWfd@yu3nOfMebra0371rIsk zbxH}N6C}Lj>8M%&Lvn+-iiKlit564}Zn4bfo;+a|^2#Oo7LXgjlib$A{$8&lr!sKv zOH>WrrvZQNedYW3uB`!0gGP$?^w*-UJp!4nyu*mQ_i&HnYvHQ0TKq=7hu^)fn(C?- zD^|_DFcBHBNLH$OC9>a1J#nIkY{T!nSHe2|(&~+5AgzhkLnU_lU9^=4@Ted0PTkXww zLF=-<_Q22PCXMlWu7(dUu#Qs)xmdlakBrwsemmQmIS-ksH4*pZX*JJ#eV8fJcp2k< zTsj>Zyr>5$?&9AAa4A!*^jP1&DaEi$ONf>{{J2w4P?OHNkvMTqskEW;bo@@<_S;W7 zNxaOj#(F+wvArafAzSa>L`0)>iS-Opq~!W%J2uDC3tLl@U(S_MTNZ1pAJK}7EWIJW)cL($zW%`xyPLYp(nvk0 zVvbFB$hD5Tm-(_bNC=@6^?ule%_?*OLmu6MuI2Zch%KV-?-Dq|*cK-NkbH8{X zuH*KXd{(=)q>nsqbq{?n_^02^7t{}nVBY8t0NL3U;>o$TF&!<$OQ1vN5~)F(z>DhEk>Z+!$9Kh12cuuyP|FHKVjl zarFhRhQlci#lbJShT@&qIfqFOS!Agd;+U@pk8$60v!qyIf4}v`VdcA+=<5;AHT?0?L2cX!H2O7MAGM%F-A5eWizhE9loXDoCH#A~3R@3b1)|lSSyP`p- zDVaJ0e{Ox*nzx;I&4MScklcyGGk0ERFY{paP3z>diIW}Lqp25>nJk-wK}o$Y%g3As z;p`hc-`wt&T&pN~G(~@0to1k^oaC{}^dt#5+tS3lg}>TfSkLEZ6Nz?xjC6@{Ffo^c{vK=7~qP4d|uEs@)Fuel8EKJfh88Z$zU@~cntoi>!sU{{U?4bPkUJM_zZ$+S%amAyg8 z0Wgy}S+0_ai^FHGXYGd$twTYq4LCMmnm)Of5_eY+tw^|E1_;E$bu=q)}r)QD~995TaV-k|OZkgekKMH8ij;c-c`-FeJp@+TqquoC4eT zaz#Hhx3jtu!$(HOh>VoDnM0U8Lw--FImZ{0XVI5t1T$S$^oF7rV-_4TkMHkV!L^q{ z@Iodhrk(*`y<^CGZcwj6dD6H~o9PXo41I~y+xY%k&s$PX6P~~yVhIb=x;0TwG!6|Q z#2f>vda2AI*~Iu_?eyv?kJPQpT^#BHsAX3P%(I!T`#NB*56QU@N$kRAcpr_4hiHh} zv$5%4)1c#|tX1BZ^*sQgV$(`3wsMU$wO;zT595?kr5P9;-5>X8f5rrHX)ot`x;VEV z?}?M0I)7NNCf8~yzm~6q!0+IMhPlCQ*xg4$fKrsxv2qGk6`~+O9)Uk&xa2CGYPOTC z7$my8F&N0vKxrdKsT&oqOgGfE4Z-ta-4t1u#&1}1?9=FV2O8`?HN%tfH>wpJM(150 zs%IyFH(7k{FzNKbO)!4EUoUeL0{m}#D4xUsVmVTsB(mPXL<+X4 zODO616ZJ!^?B$e^IO5i|L^vqeJy)qq7rV3sPg8EMOh)HB=i1H7Jjpy9F7MUq0~gF= zPUMl78OYupVlYy)quwR4G#;+4wqBHF5?~ok}KMkxNzH1YrhyoCqU>RI369Q8;{?#pyF$EHR{^ zi6M;3idp$YH1_t1@9o7OZ`VWym3a42?(R~T`X?DBqxhh@lSUBkX}e85u?gFxb_AE= z)l3Eu!kO)6ZQ9_$SGOqJ#2U~e1~{xJ2dlgm^Nn__oZpqB6C+PwnGUAmiQ5 zpg-CIp|?uz_MO%d6ZuQ|E1Nj>Hy)#&`v_qOu96Np9$(Af#Dx=bmKP)e_?e+44Vim)^`u(-W^%>-ByY zIz2u4^c3qAut!-mVopDnSf$*psh{25sE)aaO8}9?gZ<=KR9V`~Mot3yi5QD&&dGVB z80P7ist^?#Gq56uUD51rC91Vuxn;%3x1`;Ac#p@m@)0_PEYi5CF`iqHfB$h@1c-lf z0ZD+8@hT6D!kgKYM)1yi1jK-cGfT-sSlx(Fj^Z{J(;fKyCUtiNF1qX&yqR=D+6e;3 z*^whGqbl9`5R5a{9PgAxTxO_o+Lk&wg;ly+%iix=x{plD)&RJZ#+sD`g3CaiR(l;H z`l;KnsWkJ^FEW&o@D>P|sAgk?5QtHVug+gjNx1V|Q+@Tm*mthpD;1gD5o5ih zOgrWg$W^#sy;#7Fw4vy7Nd!kLi)zdJ)LH@puQ`|XBglq;i?f(eFd?HJ{r;+9iU+?z z>G=uN^|f=s!FX4cwN{Sa(>N}Cqk$6yU1Dg|rpIihPAfUgct+p0K{QT!HsCO0bW_ke zH=TMGRY9`qjGb`zRGWL=*A=vs>D@SAX9i`mM0$X|f4V7YSSI|iXMu}?iI$_IALYNK zH_<{us8AN0F2+g$FmWX9TlVv0B$j`fMKQH4Xev1q#KZo@sdI^v*12oflSLEBNYS-J zc*>5eWn`y*kvy=urNs3!g+DsAk23lG{#Q#!r%~0|0$(^!GBXyF8hoE)=36tBO?XEE z3&Etf{RAaUA-f;iahj;xXq=TKt2T9vuGoKPqV>_g0?T&qjC*SnWwV7mQ$Eu^fcIiU?PXGCetBOyey^~9l_XKH7pCdj>>qEh`@Z%? z_oZmY3hTALD~6{B-x|HOsGL5ib2ne*eqY6`246gU@0I$bYleURbn0il0+J7Hilr)6k`l&z-VPwXfh*;8 zS3($9id~_POuI(nLvTjoxTj9gv2nkGy_7eqWE^j-S?xXN%)!2+;f*=*IC_+R>@63Y&B5snVZtUy+k}C%)F03NPag@+&xT_XaViU_QL`|9c4Y>5 zS*G1>%$$3`CKaI^&w*-YWD^UKy{#E=kN&24-jM##o1r+1IxH1@Zh^!FAOoYT&vz19 zz*+ArqRwE!CksuF&hNg`t^Fjc8Kv?{clf4m$(H+S$am{0@yx*p-pY(iB3s>TW^;yp zeSsYfH)}r`e4jbtgzAp=er(MSo~u5plTz?EzE6v*NNs=1#NclAbogD|p--z8`cg}; zTvN5~!06s}1jfi$JqfoL0}>SSpxCZZ$epFk;fCPm*TFab$Lj}|t`KP1xah3BJ37>f zlzWdqGT+`^$k=p8x5r>~IM<0fU#3K|G9X%BNa^>)?c*^5*_hOyvmj+bD}c=m9TsnUrKgUFyf{@ z1uGA5KN*lCg74+;zt24IoO?v4c)cipM`Ka+9(#FTo{TXeCPp2vSX$*fAw8_ag+U5R z8GvoPKVItLLm~L^>Cxy3UI(Knue{CAv)8LbMtoWyoEzUzCPd(ihpHjl}n|>@WTTW0Psso1YMcK0q zs2Xs4RSC~2dsH7-h_oR1F_D#i;1-|LouG>H#x+|@ROts3rb%ytG9d(JBoQO2exqKZ zB{4+c9kxf_O@UnYd$xXaN3=a!lU2~mgT7J)e&l{_ye8sUt+LpH?S0Dv^>-S5c(tcj`k^fc zwxdvGuW&WWVUBj9)Z9#xC3iis!{v5F<*R1TH5-WZOZ#ARyhdOASd%fF`HYwA)EbD4 z4ef4f&xZT)M4~3G3F(AlU$5LBxbB;mwPP+ev)YZo=IUsEdR|X#1oN8dBxzhYUN^51 zHO87qS=e-#RL6Y%nr$kD2)ikTQZGzyD~#hdn6TBIphcs$-xKo@bZPG90{i=~FlWB* z3W9c&bE2KZSJ^5mIRv&K$TtyEN-#+U-g(MB|w!oXRG{#uAZ5}f}P$73WFb8=eVulzv{aiL!=z-(4TqwVy18eoFlO``?n zj?k^2V+Q*$Bo)*iMz#!C7hZyp!egKRlBDg&IY`z@ELK&IQ5ggns8E&d)e%}i$dZ`b zqbw;Yb@V_9h5?6uH$9G-nPC6_(@`}KZ)DwWD-7KsWqTg)cgK_?)h(QYRgmHb2zAZ| zQ1+|%ot})Ixgz^-1>+QO;)(arS5|=cRS*Um{HGvY4YF{TIskn9(*pKXcdGVY{7P|$ zkedb5c?7-mPzKY}za3)RW!h2bon1C%;w6N_w~btZNpC~o{hP;+>;vU4CrCh2K=l81 z*ZT=X1zO6g0-$irc~#Vbe~~xR!9w9rkB%%aUw=M6^yfqLPRZm)0LS=m9Ou-FFXKRG zmwg|;$`y~vC3xPYwS^@`^Q9Zf-s>6qhEp&A7hdHNQ}JVM{Gru1rg(mLMS|j9a4EzY z;2W+Zb&&!17FlBWKN2$hE~0JI=2$I3k0$Vc?Hb!}h#r4-bh|e02&mC3ehH25?}mI3 zKqR-xCfxQ}8|stw$cO_(_%8Qaif< zd9R|+|IL3G@ry?YvsT7h6^wuCgCp2~m+>o`+7u0w`9Y?#3izx1?H222ZHJ|}|SO@!b<&DQy&R@H@{|CGQ( z4?f2ZeofN5tN~~YVG0pG18H7=TWrv8DjU>){^DHl@2^Z~e>16unT{!AU>h z8Cp^PwB|n`zU+1axpsdVg7VkQ^J?gs+uWo+qG|iL@&8srg!{@~<_VbN>qnq^px^JN z%>0{`$e*GRV(>RL(SIrXL%w;xvpuw^|7ncezX20I@ICtNz3&f{Mz0e)c&%Bgxqqe-InxrTpo%kE!&IF$GD6$Q2i3)q^pD&T391O8D*3^L$s zQdj}h6%J{eN!x!R1G8}a=APc>kKKPrPZIt|z)$=)DVs5WY4LwQDw6#TxY&`y0{MSl z3^1ChfoK~EObP+$DlL(@{4aBYjRACcL~(1FCX~fFsc40CU+@zJPfY!7$YZpXnMa$G z?O@YGP+$bgQUFTypQYpnCDuS^1oQu;V}Sx78B7ECU4%0l+`r?2&z)zlKO^(f22)#K zdNLzf@towYp%v`qX}}+&@w+ddWaeOEZ>}fTnMWxX6$GSfQ$oQ510npYvkN{;lZr6P z;lGg)vWdNx)S**v4-)}E&GJpQV(4*@$?1cs0DI=Sj(>#(f(j3p$LNp|)3d#{Xg6Ra zMyM?SK`JgFi~e^*;GA#RopL&)vFPFXm>M*;R~L(n75bQqL0 zeAFOu2`yU4PxjUSXgMa3llU6X)EBS8I;PK#y2uWKT=xe4u67thj4SDe7{&B%#PcQs z^KOK$yBPg{8Ks->n}2)fWxf{eCjvgQ-R&4g!t3|EX7OJuPuSO_|NP@ z$mLT!r_02Z`ookv{E$)pwLv9N>9U44{}x(!6(p=cTJ^8SC@tm$|EatIjG;|;O~-GH z{`?Js?z1#B;?iZk6!=AMJ~ZBrL_y|n3QYd*Y$15)L2`hI+6)Fby=$HNpQ=NkJOka# zrO-ETZDIz=X_*HR7vFR@_+>y)=H?GH*_xS&!~VKCw3&1Kr6^w$|K(8M*UTv*n~ytR z58yU!hvIMtG}h9RndeK@s`*o!Sr`5xQE8niwXK+G`F@lL1aTdUH8@b>L&F7t8AXeJ zo_$1Ilbg1{{q54NuZlnVW#y3a#GueoZUFyA_fX`Vx?`{a3FiJH}N$2+GhK+3M-PDy>S{HqHJ#Gpr|V zHbj9p@ezE)IM$xrW<@yzet%`m=zF0j+{dLBaGgIHhw|FIDGuZ{7GPYDRngM;ngFOO z5aVa$5jcOQGWsFVu*rQCGO-4W@G^tLco_c<1EId#)(m(NQ`CL^)C?bi>Lwu3R6 zqdGVv{}$DS8Wy6^!UiB|Z)JqR83kSs5d0p%=EKC<=}a*D6VnO%>M!aIJ%ZLuKtE2Y z^DVePQ2bpUcny~fo-^w^QJEFuw5`<1v}mMLEyUp<#qZ`%@ywC79FQa=(m|)&1I`lv zdiZ32QgA1K?rOh}oI{&Xq*K8_FPN8+_-GS6FFD1-C{ZoP*LgyO4Cr#=v!F(6`|sA( z*N-YJ8;3vMizQ1~YoNa%4YdgjcrR7E#m$B$0hK(Subg-N->MseMvg%>ns?*o3V?gM zj3I2x%>eWN%hZ?A6oi;aPniT7I*J9hJMN%0Q8FfGcV3ibTfu<>;qNhb9<9QUrxJMQX<|OhlZ@d3~BtGw|{B!Ij?L z&Kdfjy1i>Li?(Z=s7=om2l3ZZpHT#I!jL>a<#(pOr?44y2vTNgFbq4oDsMhi*kW?X z!Qi2Ojive6g3xNrf(e-Av@-cCDhF~2d6e8eukoSlYRXj0eYYVarUn&r$MQ!?*4U2c zN3uZ;U#C04#Ku2oh0H2UhC*)0k|MPRi8F}`wY1$VXFJ=zy=+rxFD z+D~469|z@pp>@qEtFg5{#Q;gFPd|4tD^1kFmN(t`%VPF@LkCzX*qdn7vq6h(@M0cP zs-+lQ!yhS*<2rixB~ndZ2I1v#Jx$#sfK1fUYdRW#x|yo$J`eJWNW#(`Dyi`6H(zp#T27A!80?+d_1T4y9$lk7hrc;xVp5qi}jD+ zFp9Zx25yQ^zP->hkA-awC8YyDj<_`&S}g`}=mR*&Qsi8T`oUf>5Cv?#wiTP`t14^l zlT)^(P_Fk@ciUfayHPI3VSWv)93Po7a)y=C13YjueA4fTSE+)mAHz=!CvViaRKZj9 zX$>FcS-TvZv5|V{g`kByUxS0w_mRH)Oc=gxT!MtsH$03|9PvuoU_mq@#w~r1T_w^* z4>APOT}vyz*kMA8_q@~i%jx&@p$t$Q+d{z&DdW0mx0kY7cbDEIGMb&jud^EqQljQ+ z-)}m5XAv#;uJ*R=FLIr_t(-emmkaplEq1P3QjB@*Env8+r6=ZHgCmsl9Yp{@H+rF z_X-E$Qu%#LV&t+@U{Ol{!x63MBcAm#`pJQjZ8B@FyHn)%RzRH_P_}t|E!rnZFBvy? zRIb{BH(^C-PYOfWDeWq%w3;J~9JY-q=0vV&{^8SVkKwe&w0EWZ-nKv4Tj59VJ9vVG zoIUzkbg15v7|SHrD#`_yKZ$`kPDdWxRHd?2Sz!Qs19_S0hW_jU>rcM2Dlj9A=GJ>p z(9@D=OPJpbkc@LZ7gZLJo@20YD(VJU_G>C9e%W<^7+wP+S!~ftCbV~dueW59ai@)$0(ZA&u5d&*T-z% z6l0Vne)M3y=<*`HiMqSE034b7nZU{EOj*@1sES+vde)UiI)%ybT47*VT4?Pm#4biW z?;TmLPHqvjez4f}z)cW=szOci*rW?xh9TYCs$@7wZ*)%_UfZhsRGP4eeU0?$l3s{8 z0VH}p_`%bNv@194Tit-Y)Bub!WR&PVh4o0rf-WT_eW+CrYn06Vd`jTq^}VaN&I?q} zgXBHMlZY)fuJCR%dzW7X$F>#yEZ$ha_Qkdz`OP$~i=O#}U0@fS9e8U>Jp+#LYDP*` zbE}^kyTp>*@%VH>J`<--kl5#wYt|J+X4Qu(McpX>ZW5wqE>MPAve5-gQR3eGFf-q{ zH&!Sv6u#k3rUIVqPMrN>eQ6Cnned=mld!ck2DH=t{_avxWQW);1L?PeubV$s_YfBx zg-|^(cit(HPuRI#+540b+wsvC2j-vn4R()Tcz^A>>tPfahyh)ZOt-B@-tKY|3Tc?c z?+7D>yh3O|{6T{79C=R|+ZEl!V#yG3JG$=&tKYq|6c!Itz4w$fEdMr18Vu105g=#OwWOa%D`rd;Ml~90K&ZY?OXYW zV~Hz|D{;%D6^&I?oE|-vz99Tc`P1zno``04Ffw{yMSeKt2^LD2P{xj%7YetDxFpF$ zq&PVn_GS;%MTElbtK(+}mi($H7jbs2*1>_cjeaSEv_shkG6;9sPdc&w#8!-@aYyKR zp+P+3`snv@_a4^5_htEjHb%u$*m>azT_Q&QBrEWUggqRSD`HN!1qi=228z^}M~W5< ztbFAw$D$b27aM1A%5Ko3%%_5e=J>9Kvmrm-gHPwH;8nXbhpwi64D{vjdVAPARPh% z0s?YCy1PX30Mezjlpx%N|9v`dXRnx|y)({FyHI=LM}m@SAP_UHxYEV>ubc2V@qQz*kp%g4Xj_$%3s85$q^sJ4Q#&bBA1 zAVk|X^>l?V?eFqUtn*;jCyM}7M`tA4jHY7|LTxCYE~MkbU?112kJvLFjsi--l`w31 z=a=8-wy`IrRLtQWQ-zyuTp;FQlzX^cG#85v6+dBVp>p7z;58IC)eLGYW+*?s4^gAl zSNKS-91m)~8AM$tK;$JERo$6MkQB!^+6ve9pGHQFt^BhO`wL*zeZq`V%;2Bna5@{r z$wsTz0thGZZy^;y7T{mxIdgzp*z{?%P1#|;j2L;mG64^O>E1F;rqZ8D}tL`IOoZj7M(iM5~nxuii}zsi5xU>R`U=2iRLbu%YT z*ctT3A^Tbe;f2++7V>-NISya`LGLV2gpf8~ZKd)l2HHj=fvKHUHqRxJIQNWW06H|X z5dwT;YPM5q4C__RLdWvcAuM1bLpN-IGZA3@p^nj)FPM>~#NG{n8#Q=?$-x0E-UGF$ z{6UWutM7>OVNtqm?-xEnbVs29m-Aa+5u7ZEz#M z>|k~90L3=7TVrN}n-DTJ;l#lngPn#@Q)F}5D&VjTbP1x2bot_SyvON0e@gl{Gy z#4Z*fJQSPR?qv}hU6*Cj**+sPfoLOK-&>ZviM|n_@d?srbVi+^?)9+3kwt*E=&Z@| z4tHjbeSX{ZlunJwPz#a#AUUE-qs({DQU4GLfM8^Z{P?+#|7qK4@RJ1h+_qBjBl>Y1 z5XIK)Z-Rh7a!fNc#{ZUi%t-if)LFki{Fc|}8K{?5*rgrQOI7{}MVSl{(6RgPc4)PI3 z>WHVtadvh%E9?CE*e4o;k4h_NwiGx|#B}*hpf~;|^6Hsy5#j_X-|E@Fe~WmdBqILW zO8jnr{_235?hhP#Nyoi(dyhr^6+yl>?*B4AE&mfA5|j23MN>TM_E_&;V?q@v7O8fo zd=)PMC3gvF-=|$d6@AcTJ}=EUNx$xUl1Rk@aU74;VD=J1K8g0(X?v#?fC~+@}rLVuoAyeYxm~JC6K2)3hV@y8ajm&Z- zX1@*sf8T>s))8xjU?%jp44x8s{=?40e;Yb4E+4!8=)06b2qrA-jr2D>ip2lK2OVYG z02wwEXXQB!q4Di~HmIO>eVcq6Ts}A+|E^Cl^>jAyO|)}&K+`?`Vwy#7bZewp zKL&NU=VCd-_cY@YhL3XAC#R$j-)y}AOI4D)4?gZ{KY#n!!=npvXsXz2svrc%gfmgN zNaSVRQTMk`R{cFkuMOJbv&*d}g@Q%14NyB;z`xyJet)0Ur9%MojSO;D0$RbnO~ZF( zx8r1d;bU#@szM~iM>rMx3l$9t+F)I`uBUQH_jJhMx=2?qB51RPXlrdNhPRSfuW1Ji z-{*8tOR?Sh{<%AGNye+N{y(sQ7df22^31bJ$urXMgUF%R>pljqlwjLF*Ikd==z$F% z9o4T}@M>F1)_#O3eP|-s>}a7T@g&l+vJ`@T#56GZ6JOkwoi@LHUt9Gz==Cet6Q<3% zmJ=eud4HN|L(UI27BHIjgD`?a2x@$|9T;&03h8rk|LqI}YmFxhlujSVh(3K{Zqb)%0ZvlalyvNQ%qOs@=L2xA7 z-fI2Zq_<(QMo+MMFKK-oabP;zu{t))5<1%_w#@TV{LML+a*T{Ga(-@kcjTvn89Xbv zbw9qg5FtQq1g`|o<(ikA9L{&au;%NF%fl#db*3MEcikuIjkidAL5#3kv=hm+#RJ9d z$<4958>g#f1gMe7#%%}GyIF(5xDC@qRj%d}iw|D=#AB-;W$qd2Hz}d{38-nb2VjCR z@WG1=S#dFX+hU)HgvAl^v2kQSDg(IeI}e-24mPU`hEEt|H`4SbbyqsV9Aihv28tIi0F4VkOp<|9&EtcsSq8`pmP z?eOd7;w43_3(_Qb#0o=yt1MS?UO5J%W?bl%W*|Z|a`4!{IZIC7e%{ZIQAVHiiU&R0 zZD1Fy``G%KR)oNl)ROAjHyt4}!UIs$!S#&c3oT{gK?gohS{#2^dJ1q(F=a)r;!HP* zOlL}{R*!*E@XT9kP0Tb)3;S|otnSg&Qb@n#tA`KCp^i^N6rqQWeGP0*Rq z;2mGjqaB?qU2glcd~4EH46ypiN?*SP!kla`k0zs6f~zm#`wdVCo}YJ|B) z73W_rp)?=IrpZcnMhT`3fH;}MuHEkhV(Q(Tv2lm%q+tfuPS89Gd~fP;yAuTIcXHVz z;=$W=7t(C&e6q2Bs6SYiH_)L#!&51)(Ds<#2i7RGvj1Zj40j^+waJ|#B@Vv%8C8-% z&9{gCSu2X=?#Sz=3>XTMxwo3lMyo<M~i({md9E?h65Q(@`_Kb4&R3uH>!+?5~IZ+0vDqa(;lbX>o& zzM%sy?~cJnoXPt3OdoOX_;%oB>to-GFM@e{P^QQt_+6TP9&W0&!I+Q-8doSJCD{-(x%-xkMam**^hAB|s=Vom)jDte z{+R>mZ&}YoDbEr#KE3Ue0p<%Sj@sy^H(`=H307)&0HE=GD;rlf2FHbVjOH3mZ#KLh zo;w{Gnze7z^y2nOn)zH@8#i_ReOo1Q`y>7Jz#MM>>y^vHbxE<_y3^#(xQY^XYw|2( z!9HViMEy9v``I6=+iu6%@3K$u-bzR+T6EhrT0qdQoS}KW2vSRI-AxJ{&2~iW{#^)7 z#w&6Z;Omst*{0R8S!j^+Bwj@YhGO^9p z{rc{fs;ToS*O?>Bm*;equ#o-D+b{{_CXzq6FMeFYEPwTB_h49$Y|5JYPp*FceRbmU z#oJB#+av{Kt7SpJ!FbY&#BZGo=6mZUantwMzI9YNLY@{zpU%|dc#$LD81iBy-%XQ6 zWFvZ&7NCzOZd(?V)^*TCX+}(^(cpf?%4plYS9X+PO&7;dXG~YgcBlAK_R}c+3kw_r zF7mrFfvY)A@D*(BY04>l z*DJ_ooNc+}xjk&NTF!pIp=BdLLNI-T^seyN%V)0Q#k2#Y&;JDQy&D&t0lHP(FxGIW zPBCQ%IgJu8FVF2gjQNyS-!sGD6R}4bwWp%2R|U*Q#}I&Cd4~5if?MC+3?nHi_uU4F zz3`ZL(92KgEM^;Nj>)ar;n-NZaVYy3CONs^_Aw34&_Ko1>-W>|q4$2I7?R)e}r%zL;+cHy2Eok_iaNk^cOO8&(cnQuGZ+N0PHWF(alheK%7~J0N zx+VG-r85cx&mq=EF46JF5VehJ&VIY67;CyxY<`V9c1 z@G`GCp7hAS2U7dvm;c%L+f=9Hj5sV|sWj_|gp$29|q^G%p`E(uTyil6y3VipGP&u&GH@33O@yYQ!OvGJxM~O zO}y%crz0WEi#+8NVCn?WPOy%RTa3}Yy2|f+WtoaTy_DV>wGac1s1O3Zcjt>2#Xn>KzbP9>s;<a;IB}n$#*TPm?kHYIY2)hb5lDl#(<-zr$v- zB-%{Baoq0LI09|{hb}lVj#6cel;>CFJ8?%?h)oxc_E~;u= zPi-cV%Gm{NWq*BFIP6>9+#jWt4U8ieedrW?hJt(0#`&Fww46u&2+SZE+%F7o1kX)w zu<;+|ZD8Pz!;ZVLZau3_mlaJMCe(HP4c&hH>4LkC64F_MEuywoJdeFr6kB*>7xfUYIsXd&SxX zD3G$ga1;^5`YHm|J%l%NowOZ|IX~iDdyU?CdMAIQkocpvvpj>LodalyCaU;45w~%D z7rChM>Hh*+KNOC6h6yBkJCnV2h{Rac|E8|7%ZLzgWN z3e(@>ma!U(-}ISYzQ8>M?W4LhdWQ&v4-X(c0^w%Scec&&_2_Kd1ezBnqnDa;L28d- z`>a0rMcY3&+fRSn&^2JwyZMzOLrJj$PRMx<>i_qXCpq=eOclT?1Sw#e4BTqj%gZ;n zqkg|;BKH0*MsLQI1D?-_R>6jVHHJiE)0dIUa;l zghQ=8HSgahNjIGw-~=0lFDy{Aa#0C;u{8z$bP)>Q>!U$dw-5K*ksyFyj}_&`1L+tL zYD#SA61m$>V$LZ)H*O@?b zP$Y%NV~6HJ_GZ^tTY*NgR|OGnLX-!;uK*H1kLt!Vj$lIKNQ%)YGsw2^?mtST@Gq52ks7Fp=pEpB}pxzA!cR2?s^{BK{t2gj-4xht~+_ z3UB|5FeA#y)MyJD1Emp~vmu=ynJCaHXh<>|_2c~=5{>S+2B0`7F(uc1)1~Q6W4y9--RvKQ_o6rwZG;2ASF&VB11X-(tP*SEYUTpdLBJTnGC{aZ{gJB zIa|XSV0*E_?$DO9i5$Ox`9zgJNCTn0O|=-lSA{6>ablWAw-4>!SDI=DuPD_id>u+JBRx_81Gw#XEl6XTc%nm&%3_Xj_ zX*h!L<}VFU7H4Q`UZOaBQ*gUBu*eg929YIn2X&NVb5~~&9D00z5WMw?WO=#qf|1FP z$u|+3AUR?$J7sUg{hMPamP|NB#y!G<NQ?b;?vn&>2`XIuW@&IN7?tKvk&op4LK!9`m zub#MR5oy<_@Hf{^(3X78Sl~?6u?V9dw)>^nioZH@ijWHcIaw4g1EmgUgX}Zmd++)9 zozOO7kKN#>U|)ZTn63$%onwKQbqgyXmbO&lBRM4gT(o6>IqSPa&IV3a2rbvN@RR9G zQIOEV8^m0>XPOKptEKftO|mm{G3mO#w0K%q@lytA4ZQ&+y5GmUlWJYAVw&dccK~f$ zMzdR#*+BD;_c4Wmy%yDRS3;Mrm%kaTb~eKN_| zI!T9bbi?XM$O&ex5Z^ms$}nbUB8FjR`IF^kZ~ z;?LG!PILH_%|lis8nZ?8>2bl%Hd-j159cx!-toThQz=~~3iaF1qtJ#fprg6!yk`4# zzLRcB3i4P^VS9_8)+ZZo{{U-j*crsRidLfj>4aWDHuj79662_oFM+bB1<#kO8f>k~ zz>}{&>u;&>RBntE2c2mWvK%pp=n~TT2iO*v3~%C@zOiAj)@K72&Rvw zyWj_{b}>uT#t*T=B0r9CXy!E2jpHT!&6naCtE5a!Q{MKC)Jsq=w9`^9et!MP&g1Xk7(_+VLnzJ^G_Xu)$j!9=!bc>FS{~!t)eeE%} z@7o66E)S;1m%1<~Fp9*b6kKO;_Ryu6Ufnw=lB9wIxXY?;c}yO?-OJR|O;1m-45D3- zLOGk_Bc}70==+)LOGl!_YxZ5GcanxGUgYF~WX=Au+eckUZZC5 zX1Q%?c2*t9cb(8q=dK6uXM|TV0;?lmSTVkMLHTHJyW#8gokJhQgN~eHej4S=mb<6v zY^Pre@ZqmUj^(Ir>1W1=HPFGS!6%2 zU80`9LM^Z(3# zCvfh|_cTAYG41+NL=V@>0ueiLOtIwTd0OT8YH4A z+0qKXdemg)iu*bHeuKv$%Ro;d)w-_cg{5k& z9lRxYNQoyWB9p$Rtz~t;0++?9Ij{R)_V1|Lb}}^mKlfVyle4gz5|~TXgM9 z)E5!w`6IO>d0`aoR8Q-C4TNhM-50jVv}!d}Yy^Wc{3L4Lr+e+B6J7+hzxMYRZL3(K z3ymeRzA;hmfj}jVvZr-Uv3SfG`$n#Z?o@_ZaP+;H`6$=KLBaop? zNq8BXQ#;Crn_o@(=QG^E%Sua&jbCB8l0eJG%($H##T8>ViG+BQ`;FS0N4@sl88>Ax z$|)sNRaFIvNN?xE#Q`e0Z0z5v=T|~&0WG>}F4277<>DqFZc$*diis@~D2vIU%E!-q z;OCoFMzZE+CfVmdzh3nrp$C+Rc*}d@Y<|7_Hai&uSR4<6iKuXDIWylho7u&S6a7sV zdCl_St4Hz zzhn&(Z4-7lzGIH=CM^>beF!Mfm*cBP+uP&ZTvN}DGC9-P$VGxej8x}s)?<(kv~&E6 zL}qo@%yJu-eHQa&OVc=3GUEw~_w_c~SggMOB>OdVN&D`#Z}zO9g#Ej?cmtGKC+8+W z4ftF?Vz=9W_N8FGto*3RglLmbUnOLd5+}+QUP*Gcn$&s=6K7J>$7A|VUdq7kcvGbx zRK;aBHb}gTY74)=Cg`X|==kJc+zwT4?*ruJ3;Zb0E&54dt-l);=+OGC7{3Q3Vsbx@ zRR~k-ZU^P48B1D;+{KSne)IJQv~}vqE0-nuaZ?zj-WPJ7I$C-TgG8hlKgO}IIFft4 z1>>jnFawgjf`$w3xb@>X-Joj;*8_$f3!Tqyov~Bny01#&rkn-89v}v^Ct;q&EV+v0 zgu`A69`arZTfA2Ox`TdJQ%q{&hqs#fm8iv{$2U6kwFWfu6EL`MtcykC7z8&yos^B{AtrT#dKN^<$Ll>gAzCqZXH^C3<-Y5-Y(oNe=+ z8mxKfEM}7F)U-4aa&;7IDptJoBgYPJ$fM{-CCtT&(uY~kDD``y`A+5#n&m)5$zVovA zSpyP4>`(h{*KnQzvCbsF7$IDgjGSRuDJU1ot6L1TmMcBI(&+v7;$y~dL)dZY3CJrL zuA!U%C3>Fg_8c{|4lkw>_($(kb;#)0fZQQ2OO{>)+2x8yZ70H4s zT8mSI4y9h$&%4+OwVe_k$InI*yfxobY%K;FpyZ+0c9d)gOrbeBQH z)2l}qVoPLUr-A$kcmV0fJG0uz-CRH;$YqJm&L6FYc{&qVlEZ+xfZex*G>z}E8aMf) zj4GQc)-zb!JXBpD`V|=RT{@NbM) zxC!U$Tk$@A{GEus5vuZ2>(fI8aWd2(%a@`@Az-5Wb?ZQ&HVzus^Gm&53aiMMx8ig2 zoAxy$c7}u4A~i`QZ@V?H2m^M#3Uy5=yq>H4Et_rNg%a=fYMhbyK>rBob1+=|rs`&P zbEw*uB<0f`NBZq24AL=dj%V_cIf7Nr(H;CfrqkK(HjBL2Ge>x|U#LRT2e z!7&odhTLaq#hWVFE0YtEB|hx!1;z!+RlpmfUZJ;V`P{ahU_>==S!VTkgD@8r+k~*W^;5hzwK& z*kx=8aHm|_a<0eIoos#;8{*Mr-|#v+He+ymZFb@t-ZYvNxP^>oP2V-@K4NV!kVEdB z_4D?ZJ5TG~f(DP3!Us{7k`CDo*sMOUFy~sNFBqtbO9;(7-s6B!Mvsr@%VbdLx%3Q# z5G{8*CIT3puMRE*TOW4Fi&Uz6GFE?ny^sf~c#AkLF9QPcRV3&@YA;@sEK_V6Vp0JEQR z<7G^@2thgS!mP>4_1@?O#NVa6;9)PvAiuYObNJ973ii>l2^Pgl?Uy){|A{h5315vDC16JhNbuht=6;riB`~=k5yl)ar)~x^h z^B#-nqLDs;aKB+ez!sG7v_;nR; z_u7-e?)3BYnb_D{S3pT;7+6T1Wcthw&gUG|rf!edz%?-`Y%gP_J9OYn;nP>*$zf}=QC2v?_A=cij2c zj&d?6^84z3XXGO&TG12L&l(F^&r^uhl9#Oi(Fj>v%d-i@olKtO4~;qy_{DoZ6M*7f zFFsGTaCqTWhy?NXZI(%yOqvja^v73hp}t0j$4Y!q8H2ZvzYEx84=7m)#J7VmxhID< zeJFn|J48Ny5$t5JRYO=|oo_gE(n0RkymS@N@E7*=?|tkAYDvwS0ims{UFZ-CibMqh zP9yqHMRpRzccgd}vi`epKpdyyJvKF%8Iy{td>pJxg%kDjjJ3;nRw(hl9?~(|%Z{T% zwh-Igvm0JI^>OX>-y+)rKM2zv6r9gVg8K$N0SqCHWNBRHLHlGQhb4!YMU)AmFlze@ zk+(r8zq|9%-aP6uHtx7N@5I%Iprp8Te`Ft>de@OnxNHj-N^loBhBNNHEOK*xL-_OP z8$@Vb_*SjvQ&vmQ6q-jDZ`9e2u@n>ga!8k4<4??tAE59qUvSc`3#6N8UW+I>i7f~s zO8M@G!~ULQ+$)?Eu7e0#d4>Y@H8%m7;?;f$*x{(VDzkmv8`SsP7Z3A^A0EVRzzSsh z3?WEn{{E3a;vypW4hlGsC)IrXj~+1pJ8j3hCCaiL7j9%L-o)-*o#uz^J-lePS(=Hw z>}4ShEG1ILFmxD4S40Bf0f0(ZCRKu6U~_$*)?YwhW(HhmwkFqpLvLnv!2MAn|NF;J zyln{6Pg^$J#Bj`lsMmB;6QnBQo!?k8(S!6PA^Mt&Q1*`|(uU%{K{Pf=Lf{5lQ-0(E zaX7h~be6vsftahm9G#o4^Zxs@{fBl?C^zwD?T=w+n8kanxhpLGKHjJ<58?c$L3jv- z^ZQ<>@{8N2^NFjx=b+k`QHsO}RLMav3yfX_Pn^UOzVLA*ua%8{9NK*Q^vAOS4j z?aO-E#PW@@2pB?i(dg0nijC$!Em$zM5yne!WuY<@G&Ijd;_vndeKBGkV*Q*7G5}$e zaIg5^!(-4DAzL6}op~Iz3z71jMC{&l|1O;hq=Qx*(&YygvNuAQ_jX0f>--H8k7`kx zV|q+{(T$fjyL&Jy=}_753kus{b4*L%GvP#abM#U<`g?m#DZcP-Z?u#Ef0%p2;){M5awCwuz#k3n z`IURDe_P`9WtCSP`Ra+|P6!VH#BA~6%d}J1U7ULz4-281Hrj3;fC5Iyah-9yh#5wc)8ECVnA3o+*M1JceAxOPgM?bECE4~r)p7iC1Tab8p8 z{3D}jV$Tp9vjWJWhbs2xAnW+f{ETO;lV5KW8u^Ouj2k3~a{pA(KA`9iF&e4;mh!_X z9uSE_J7WiatJ9)XIOn^ceprODUj%S@*MC}-zI>kV8~VOOu@4!#912l{JSyG+F`Cu> zCq`>^R+Iy_s@P)du~BwIsx(u%-NJD2^tCpqgnq2$?BQ{-VwN;C=~ z3JYR{aI0Xt2Z2QB_bk1OOOGes+Xe?Oni`!XU6{wous0Z5TG{iMpaA6< z@jvy!OLJV4^6L9+l-S?ttebF*g@{1*en376bUutj?QoZ{ZYsUYsayO)p*wb2b@N&u z)bL?8-y?)j{RmcGl$@bA$#ar^VQrR$(QQcQyD>0D{;dCWeR7T#r@oVr?H#BqZhm4- zD8-D*!28WPL<1Dm)I={i3EDJCnhY5?YgQ0!hQ386lM3Yzlau*yxEPL+EMIo=kcmN= zc%~Qny({^JLZkntVh>cxQb8Se;N~eCB9S`X?5MDX958CC_(NUZ#slS;&nA@3FfN zsPUkbr!Ar~TePM4`;1GOaK7tn5WS%Mm3@0&r!^$9hTN-Ostp?#npZ9IxFS$s?wG}_ zEFVJ91n4e!1_temY_qK5DWS{^*}L>=P0gs?>^v0O9bi{cn4EK3k{%#I2e{_tr; zfE1ZA$A`v>dP%jaCu0JB3q^Tpn)SbPKv4#!Yl%2t8VwXIc}BgQI}iAz1q04Vn`Bz*T8fKq@OVjGBMn@ScGFj*B0){eTHT(E@%$ygeb=jc@=|dFA}YMmgNr>cd3*U3kv2!Ti;9DXNU_YY zJwUaRUPnqMJf;|HvfAYpl7>pz?q5@Agm%G|noU(W)T3A90Ra?>w|v`op<&+giAQL}P#jQ!0YEIs=7?=0a6D`@VzWnoYwmU> z;2oP@Ox{(T%d52%Y+k5(h-N{{gPhri93X>Grsi|)FChHyW@`wyr6H{IBAdE<*IEH>PeaMKuENpnlD{|&$2Fr+3A*Ki!$7LJbv7Q6cO?MeB=%8-hZh2%SmhRe^N=& zKKZXz$`K|KdIwXeNz>f*BKF2f4v2w4^_0Cd`2M8vJ*M77neZ{3}ihs$v;b*>e9o^&#tEosDqt&Yt~P=hJrjX62}Iu+V@(gqB^ zHKeifXgQ%ne;IVp%v8Vvk#dDsvvG$#ca+~dcLlhdL}F1rMO@tZcV(XAQroc8k;|K8 z+sEU0wNIsR-z2RR>P9h&s&u&f{@a5|P$SB}&rqK`BHiq|;Qbu}j~2X@{Qfi4+N*6Q zZ=ElfZ>T$v5N`$nAkhNG9Pkn9%Xh%9Ko?UZwqZ=tbX(pxUA2hmtlKz?<9s;Z@j0SJ znQ2y0vRSzp)P!+_s*ynRs(m!2K2N?tO z$87tzB7$UsP}VOy*$y>{#PuKmhGEJ)m~%#3KMgEF6EpR3L-#d*Fo7|ZJ5Z=9Y(6ug zFLxb|5H0I-%@frB-(Hwd(SoBcsU!hWp`l5eNy(_ErWw z?lm|pDAHeL&$Ft^7rcA>Wqy!HI~CWpNg(q%|-3O;!Rj571$%2xhWW3NOXx()l#Kt zKE5(cq1n!`psk6lard9fttp&FKV*Y;!jI0CZ@_B}jOzqnl4J)RR%uiG`o!;ChUMp5 zQsa~wD9V}C3=|>x>LpWv~6)EI_|-7WW<bn126UF3>QP*%Hgavyr`{cESRMKqh4f6|y3=1DC#xpzLyEbi1?W0;<)LPu=yi42f)IUz6 zdmoK_>hvXUSBu~{?s!Hw?u**Am>jAuOig4XLwaL|oX@$s-`luB@ZLt7q_{{#78lsb z=YwKz=^jc3dUe4uc0!QKO&zBmGj<|7@;Rc?p%dlC)D>icjxb~DYujrBbZ(N)Ts|$8 z{t|iTbc-qezf4_j^Hyj=PyO=MQ`n+U9%|I%oSGj4+xg%LGNcDO5Yc1s*k-T=+;?Uo zw+4G#0IYE!i0XNN!R8``^D&1qsQKNEZQojGKy7a8WHc!41S);&OjAsC^A0bbRaCM1 zNM4BFZWO4OdXiKdLAIC9TbLZm9dNQbdGX1!3nSAU8F(3sGUbrNF8!$P@~7=6rX2 zxp$t)pRQ;8FMoN{_wI7qJ?|+Wu6$W$H_VSZd)>R{GK{(g|Ni-}AgQJlAZZan>QM3V zC-U-_;-iNZkd^cCcN41wcU8u?fju5-|E(DbNf+|Ld6h}sI@d(BViNQn=@R5t!q96q zP5K_ctIq4Yxm# z=?ak&rzcw4_JH zHhNe+gsk!euVr5|t^JO@G?wYJ0C929AIcIg*Sh&=mpl4i@p=}S0u=T$Vap_!Ql(pu zCqm<|9bymO6rMtCG3mX3_4GF%H`?-T94`^vMS;#>yA4nWYdCDy3Wi3%xyNdov4`b5 zABv%o^6~~WWI0H`>E$1t?c)%#-d5RS)=P>;<*$StaPrQMw0Z&$O%Yr6EZVQN4 zSF9Jp!m$rlZBr9{%*@N;Ijc5>8os!wE{-V}3)ZP_6}vWAMa>>fE`L{!xh1s-`pTvs zt2U($LM7|4&_ux10NnzX?;gH-<)SD3eH%Q^9w%HSGquOahN+OfX3nDr+vN~4;H!d1 z+t=%DO@?pg`Y3A8b}%dY@H&RUi1K%O3hj^}c{r}P5-%Da>$lfJl!)iwoIx;L<#*_w za#pN4{e@wO_smO8I+Lw`N}R;N@7II}RIRdY^ekNqr;>G6V*kUk&=s^VCTJMb^#FjLY`kXIa^>(*Q4pDoJ{MDzJ{v0U6bL zgmnRy>^&e*l>&V#iAI{mwWyqtIot&#x#!|AI(_I7LhB;`Gv9C68Xu9P=}0T&8lm?l z`AI4K1H{`V)q_M|;L~n7`s|uhCoG-#)hXDz?73x)GA@K^$d8mBGJUenbei9#9gU{M z9-6kWIhLG$IdXLxPvifU4&2PT(9F%}CuR|`?_OlL- zgh_yfbXzPUYj%PKfjle_3E44wq~{~`BgYcRm}&fBeIWZhl=b?19Tn98r-KP>-|?7- zYd5y#^L6&Aqw`+8;#FL<_G_c+VSjnYK6t#1!2y5bm96FYra~JZ-CjfjhGEVa~F_M0rGbxKjq z%MbpnQOS-t&xfg>{KzER{vG0biG9W)$>HBZ^IRQiz1!%`cBcA%Lp}Q;A~!k>E#wV4 zkMuZp)UbAPuV9q(RX)o_$VZql0RBw!Yf;SV_wR(S1Ougw+`p*=hBpkp=_)T7EEhbL zvY?BqUKrpC#CMN-eUq^C(fw0*)QZ&z4tIc3fgCA8N#F0xsKMoNXU(}9S?_Zfhcf>$ z3Z);TTe7-aJf%Z6qJI_FvD)J@Zj&!hG4s>Em+}VkzDpAN(8M!3!vE?Y#0*K{bir5W zW>Mm@1Q`s?A$9E>GwfXUU~AHG_xn)a*ImfR$ILg?dV*-Xpo2X79KD|PGJU7zVY73@ zU-wY&FoScWpGSw$rrEjN+o(uhV{jYY=0}_L4{b1gs5ZYBf7Ku2VpAh54KceaT5mSQ za-M$ViWBR+ta>+T+kF_PrNSB4KS|VD_iz?%XIw|ml24tej zV`}^X8J>s_&r2tAN3H8t+DFfGe<4N+NP_uA*bc|I*TRQh&Fly*HF>L3C2g%sP8AN7 zc||b>65}7^&Iu%+Hz?=}GJUIvU)8>7GvahaZg4In>N$_xRCiKjZ4uJ@Q5%rpIZ(Yo zQB``#IRGQxKX%p%$6p*Iq1qmNF}{!cYxRNgQ{2Cn3^6m8kPcG|RSq|jnBxc2|FQSh zQB{52`{6_&=3B1Bj)Iqu`O)_`T+c-uR3eYvh9hIl|TxU2P&~u4=!dPM*gdo$1)mM!EqIZfvnR{`k)rt zS$*cES*Qf{(3Q1G;oAG8WtpW+X{O0%Gb*dQqG?^H?L1wkjO&rnb$vtu)5@qj3iDK} zhC18a&4^xBei-sNneRtU`}UFRz+$(xAg2}eG8)~vR2c~=Sero-DFZd1?OG(oXFmQF zLuYRgSI(CRT}LdNcI0`0{(LR+#NABn^#p zB~ddjW2-D>K^q6L$J}2qUZ1a<8op7~uUa`_Y(eBLb43f_D!}31w+%?e=QUtlCNL_0 zLEN0!Idlj{;AjftO=o;W zAeLJh4IT^JF6dDialbihgRG0Yt$wW=NhG8~LI8~;(TSp~M5r&&dt!N%0u?BVZ(Lz4YG^fnUG|nB?t;ySEnS9}Lkv66QrU z*FeDsM}7hqis%akJI|Z6g4}FftLMCoFJpm0_bGli5x&ZPx?{e=^T!pIEWgazuG5i< z?eKuYqr!Zj4@d<+L_zmP%|lAvBIPC)p(rwVhLL!~pw7Egh*bQ6Pna5Dv-jqJ6iXuz z|M`h13*5OFTU|!jKKRb=av|MoAZa+I&tzBYjoam&X6`N}JGPr#thoVZeH&cerG8C3 zvTW_4g{k!q7+GgIwqx9^1*w$}*XWq6pNz0dusi4D#uLdsfTjJ>yB>aT5?`?G+~6qtUk zCD#C+K|QL`4^=wyJ9B}Q^hA24s{Xbbd%pLm?a0d6^vaVqb$)-53Ix|0Wnx`>7%%AWoo;M=7_SG|_;0gLK#fFz$VO)rgtK7U zSI{6?rDUn@TNzLaxa3H3#Xf%)x;*|}ppuaR1v65s4RJ)$wIpNzTX<(NH%>OY;VlnC zi&m10WWF%ZIY>;y(z{y>0h2GWz^04d`G>v3IyL+&P$AIlD1hW2b|ZxZRgB6@@36eZ z?yVPvTAf+7WI`sMMwrBB)?jop&R{NZVcSD8}B(++TJkJ ze*5@cgIXGB`H`Sa?_&_XoO9i?{vGOaZrpcu6obU0@tr&0Vc)z`HY{6`0eE=1eZ!Jp z*qUpT<+5p^B4){F;OU@k;gK85%@eHTTYy{@UKLPO3;q~L99bEkT6r?crc0ynapMVt;vxSbzV>^;l{IBi#{|!JbZvZb&xuiz82;UwWJ_${-NOzJD3WTLI#;F zaXHIEeKNAdD(_vQVzgzOhYW&?+ge#Vve2P+5O=UdfGe*f5nNo6Ftq{Xo-&|H98$&6 zoyepVPfy)g?=!wFFuz6L@f#wbd3muwtzBfXzs?4=z}-AuU$OZ9s9blATY~PUqEoQ3 zTE(cl?gQb@_bg^MIySmXc6o>EsMRMLeuikP9(>8Pn{JZc@@rxz?B58-XsE8jTtR^o zEc4!IQRpPMU9yq5*U6r9-f|7Ca<{!72}68nKcjnQFng@R{3`4^wm{%jqB1~$&*rHB z>jBgNc;hPjGfhr6SP=X<+}7QCMjcaJj+Q|Y3Dl9B?!D#~Ge zU@1JLU5KF@L6F;-_uA?=fk#rxInm1o0WG*LyLqP@&N+0em&lJ01j^f3X6?8lk6E&( zP2&uGp?5#;<#mQ$jJV$JtyCW$wapG-B&+!AzV`RBb!=cIgVx8K|G^?q<_dk^H17LV zi=uL$a-}{%(aSijIoLVi0fv#u0xtFxdLHW>9_~m29g4<{^+C+t-2zca3@lDf3B`Mk zQEt<-jh&<%-hb%4Q<0w_N3qlcy~Ip@$Uw5(E&{qYw|Sgs61q6yNlJ+eUrIX~PyNjs z4dmS^z-X8CttPeN8I*u61+x4>CNPJC#dDway0CfRNJI@i`otz5H7{pynS)01o&6*( zcfkxggJpD43wf+J6RL68uev5!|LP)2g+K_f0_lgc|GP&B}o}^JiJL<|3B=vge?Z($#oAx~I&JG+L%M0~g z-7(r!f*trC=&Sk%q-(+bZXa$zjl(mLzNj3-;AsIju*bgT5iGFIx|iezI07*qu!vv2 z9JH)4B3=;NTWSZYDHWIsN9}luGF}hAg4Nb`Aqit!c3qt_Kp{yV6Q2$vDSWX|a14B3 z=ZWsZFW_3vyrDw2x_Cof*(x$!ZRH~IFn>>Z{2)BPDdn%OdlR2 zURhBI7}Z&1kiPO(=8!pNPy0wL(xgn;m$a^z)v9rwqtR) z)yME0d2jDm{VM6JDg$HhYiYs6E4oPIqJnA}M6-xGw`8aq(6K)+l9iK~GjCn-Sk_$2 zOr}4h-XLK6xOsZS2;I=-rz7ZqceI8Ns2NC&(oJpd@q{BIV9RRl_zCWCWRfTJB$8DH zmPtY6>$n=Op)pk?WcVS`fNZ=DZ2C@b2al67fkYxrSBi0yf#)NO5owqwz*xFhJgKI5Unawj%DB zp+IC*JxRGzW-!ckxXNd?f=yVDNyCDnaTswpPks3U+B0YkMQA$`l9Bu}*BT851zNw`LG z9zM7qW}-sQiElNh2()7@CMzWY8^KPp9X7;awh7|6JX@LeBjauH-T6guh*q5R{S^?L zeLbBK@mS`!faUZ>iz)l*m)u#i&__0c9dBe1Ko`GDA<|fTbSK~-BS-ArY#F%s>POM* zC%VM6IgJv{(>P=8?HiirouNX0S8}yxrtMp9k}YbvnRB8N+R{n4In8)LU8>sGj^|qF z$@|If9?t^K6p*ZjljZA#K1vhQ31)wXPviz|01Lw)5IfZltC2MZE=bCqAxAXZ{%rg% zZ~S8;pz863{HlH9$d5C_g#M_Eezua(j(U9Hd*nydwyY&;o~`nw6LyCxpyNqjvL*Gb zVy)D8emG-B>7J&uhq?boMfEy&H0$KwnFihW|9#5=ws;mCa)+bt{Hx5M=`iPVGPnri zI$Ocy*o(K4(xs}G7ZU9&rS>CXk2=i)*laj3aDjS6bIG6CLHu8d7UNVeLVJtdTV?)z zG)4k4_V*RfW7Tz2x~(jW4bL~sS~`qZtxA{DTb{|$QVC#M9u}SUw!GO@gDBeRp}NFo z&$Sfpo_G?Ot(cT>ib1)R}7O&uY9&EFnVaAd1q;&V)Wl zIzM*V*E2=JnoG%nT|ce?c&Ns|UBmoY>Nye0>ps6XZrFmShf&<*d38s*E`@Sa1M67N zkf+~|kf^>RPRlS65WKeP#|S!Ot^~H%5r+f6$R`kkN)i9?;RCQ+BM-neezPoI=!-%h z`D%n`qt&yx>_yRHaH5c@jX^K4Ed=)YUo!MG$h%ElxPzrYZ!iJY~7)}at7#9wYE|>m!ti>?cxUf&G`gTPvTx zzLAI?hTrIB7`ho!8q(d@%b(akGkdac8}{0thQ5b-^ZafE zu#EQiV-{Eq|M}9E*c%Q|_V{~%!qhKi9ZrB6MgQCT&Yz*)KYV8(3=q`D^1sI9uRt1x zdoM~cl{GpgfI8D3$L@qV80B`_d>=p@P?~B_gOpo>x;2Qtr|+*g_i=F?ezPpq0N*%& zq`m(Y3JV2@%2c4i-=2*A3JQu$fKO9R+&TcLw|$L4#25{Q&*#NPGOn1VmKz->Syn(;(`W5Nic0 zTm%?sf2NhSG5h8ED?A3^AN^vM0^Y~oixNO-bp1W$eH0<4cALUk zSdaz)fPZFrfARqq2{7+_uK#5D#-OO-2bi()LGsdh(aC{=cR29t9kuPsut1 z`uvUg|B^vNJ3O%(;LvISYm$FU0=WM{!J3=<{bASx9^bBX{Hqo3;~CGqs{mBSImsPB zh28%eJ%!u%t=pV93pf-)0lb%ck$bJ!T&M zjq1N@UPveDtd)Z1U3mi#@BWq_;LdO7cW>g{yX^YgA$0Yh(JJuQT=6Sdje-MJNbrBF z)!6S^HQR%57S=5OmKR{-k~Q>x=nDa#RsXnO_{&5>bK)}K+5`z?|J&WspE0~Ezqt^5 z7n>K4o9+Iyfd_N?-YM51Sy60)Xj=Z=g3Z7~dm{d?hEx4zr^wlkkMzF#b^gM%U!|2I z1I~j66aSZXCHnfST|)>+Ky83Df64}&c(2wt5__Zldn7@A8NRXtctiIO`)?0re%CR{|Epa zYuytqotOJ9?$-eSF#^*7r5w=b>VHlw_o;<=!HKfFR1oge0YF6o=eHNXKeKI&^!2OG zUI)?KYX$##_x>b}1lUIe<{6cLJ>HFPf7xCEd{%|sPYhxIekeZy?lLzf|CdUK024S+ zX>ofrZ`yxNqm8Vu>rjQ(|D9F)Z|neAw7?X*@%dlP)B}9Yfs&_RmyA#SbF`U?*j9*ck#c9_=VtGQ~$FnWYxbPG~gu)@aBa3uVe@LWQ!Jo+@P&X zdBBO(-;eOQdp!YIP~QF>Xe4vo2-(omz|P**P|xE2%<8QvG8YF2;4uCEjE|3uNyN(5 zz|fXViy64btc}bhOm=@)#l_l?j7eDE-o(lhnMs+9NmWS-`Tidnjj_GGwH*%=lb*hr zq2XI|D}6J4V?7f~Mtv)b=g0yAKx~J%_P>(9G_f>8W>PZLwmm|5Ku+rIr1CE`Q1jen7HvJ|J1S9+0fu4@Xw;{d4p{o-HuT z1Co{X0m;htfMjKVK(am{+yXx!+yXx!+yXx!+yXx!+~RydxW)N^aEtQ+;TGou!Y$4R zgj<{s2)8&N5N>fkAl%}7K)A*EfN+cJ0pS+c1Hvt?2ZUQ(4+yuo9uRJEJs{lTdO*0v z^?-1T>jB{w*8{>W?gxZh+z$x1xE~O1aX%p3;(kE5#r=SAi~9lL7WV_fE$#<|Tig!^ zx44-f4sLNXKOEfRW_~!h#m)S1aEqJy;oufG^TWX{Zsv!BTinbK2e-JH9}aGDGe02Q zVtGKg#qxk~i{$~~7Rv*|EtUs_TPzO@PB`Jbeej?;uh7p<4fFXkAddYhE0!sw( z(FE5*2^V~?e?36}h7B(NfI+yO$$86`V5>6qxsI#--nd$(ht97dhIX;d3E zE6ZjAPTcJHER`@K+nl*Bz^}I`J8Ma2Gta;8ndH{LpX9bz1Fh#54xKDaj(!vv5Tjh)D!l-Wry;U|{Ww1bCX5J1-2z zs0-|RH&myeccck#HQyoHbvX}D48_+Nt>I!H+|uGqp05lxa_qS=kx`H@r*iQybAE6g zN*pwL?{w4JIJ9Uc8!YEXyWdR2n@g2zbV(GNDq(C!eR6lGV(D!9(ss`#4&5#s2UDBI z&vRt;+hOP0fsrJ|C4uJPKna0v=Xj5(8J(H%(9;O~cIi%yTbSb)g3F#z14e1{Ogyc2 zw6_%JF|bo%1{)Z(H6^;Rx-7TUTX-jATUsNQ#@n6a=b)oE@cau=RL=DQCmZ`mtO59? zQo0yB&lZp*F}eny1;Fer8x!bCJU5r{gnX?MNrt<%B8RKQp8WE@Q?f6UNMl@tM3}U@ ze^@ik!hp{KYiNXWB`YRvpLN9Xa~f^>YriuiMd%*yv2;Hggi}=-CebU;y!EulptNgLiE_8JT_Smb!DJF^6&bVOz_9-?)wAW6X(A!(R> zBpbxK`cAb$RW?@Ln6@ClnoOlaRjWYM!S#IvOVI$UR$-N^+xtvRZtXoP^k9g97umNW zZk*dx{JSE72seY1>UbyY5`Ir@$jeTtbAgZjnd*b6C#0H9sOMxljhrkJqY4!xsY+gQ z^-THL4gpkRVZk~WH`yEG8S-tPzsc?3Kfw`Xyp3=!dZGG5C6bnqwnptp28p3da*Z;U zVqfxBnKs5W8@vg%Nx12-De;5jl}eSmqvp@ToiKxH!_=7WMJ*jo^)0$tD5Zd*XJ#nm z_&eo&d1xGImVTNcc&Ss{MyM&$A+;jSaj2w%>>32`6`@h1p*H+2H;TeFe2`(UJ)hW% zmVESa`l0&8M=nr>)(31pVRwE&IwO@bLsEzi2mN%bl`{J2g6RG-K!^rI@COh^A2|1PQeEmN=A-WxY`3jsX@;2GQ=|XmO)gQt^&GYB2gL zs$AGqRHpc^CV5-}HR@g1xJH;YbFx08Scq(V3p*?mP-`(I=!?Z?BCT__xlr1}y2k8~ zNv}TOLKCs~wt<&Lo}TMoO`HAx6Y0{)KDl?F>BrSu4>AR-*V21F}P8U2hr? z-xPDO>O^^Cy_?q8lTp4yqk$=El_w4e(dk7lpWxoXih;g)zY(L9>(hmBd0q0(bI%Tq zC7aLA6}xY3Zp$+=3A)^D=GyY|&QHwMvt5ZhaYiKU6o_dk1`T>AM6j+F5-FefQ1{;@ z@Enk$mE^qnM1tqkSbK^ni@gmCt=N4wKPe++!VVuYThA21?pBo}(r00$R1x3%lGU2* zv6Xe~GIre*!dqM-xaFZ>{&bB1H3w28_>YlCD=q0qLFGJlAzTs^Y`#^(;k~`v$lc{> zgo)$B&CCtn10ZG@j%_o2r?ajxHtoY0aQ(dV9?TxC&INIWnY`W7H&$mZQM&hCc{0V- z(W!~btDauchMS?!m0F-0E8$OweWF(unv6jc(1@+AajI>wgG=-!Edn-LcK6{6~=*~m+Mj+1K>)M=h;cJL{Nij9$UKwLL>2&Be zBlC4;gHu9+yiC7)?U{+om)s(YM7}r$Rl0-8ctM&1H5b4W?2dEZ0s>O0KNJV98pDJ) zW??hlWUFRlFHM)5MCrN)&&#}YZ9;(`msaTf zL?>uDJ45#D%6dm=*|LR_pG1~C%eSnF&^}?o8yFDg{ZzT$nL;?&y z^o$ZKOterDGH|rb1Z@a7^{yI;fjCp*T^b_pULf#;}$BaGn8*szc)ny_BHjp)#& zr;wClMyFIJ)SOK~4ue|bhcJ}?3`pmPKahy#Td}}|Iy%viWQHT9PD9Yr^lb&1nO%JI zxz`G#VUB|OODDIwY#&uG*`NcW7vNbHfvab}_sgRX|A6+bMVmaKNeC%OaC zHz*lXu)Pz$1S66=h@Sgw*YLNWDi_8v;7~r>-Ffoid9@mu<`&>LNB6D z1xjvK9^FpIf86t)Az_g;34FR0!Fk5Bwxd=vDqzIf!*IGF+?sd>o#Q~PPh^MA>B%yo zjx|%`y!m5^GZtTK`UgM%X4P1m;c9iN`)QXIQ)*;qCcnqzld7}*fWdC%9&b_M0#+5( zEbO5yNlfwv&x?!o*yX?!^D1g#Sb^`5ukN0f>gzST^{p*Ueb2cMo*Eyyao@=@jzVmWbU{rmo(buAJA2IeLqIV*4an% ze5bFs>Zo>HOgqh;D(YOIDmg3LLD8^hv);Q&x#Dd+cP|FUPkV4r?zbMP%IuspVRc~` zH4ATOMX6+s=A~@PJ-RKtGxUklgyu&~#Gk~iRtLyfdCFe6i!G3M8P)UQqxOc0&KGg( zp+;y0z?kAeLJOM$77FCt9eo83Ckb8mX1SM~)W0;1;#69l;wr&5T#aWxOIPn3xI8j( z#q7TP)HGTkveR=@(%+aYqh3rO5jk7KHa$0;c!qOpQ^;h;KinbMSxkjRF~%=ezjyH{ zQ?0~J8hRVMWm=@=kZxVOudn!cgkiqPuiUV)`r|=Twc^|cE|&vzu5@JE{4&L;3Lc;9 zGa0A1gHIeM9?NK%TIo1kK=uko7}kp|f;8}Dl?!jwy|jy#_mfkUZ)5@~Ac^$L-$XEcrmkvE-cdT>ejLh;)zmCP_%gCstBp;p&d3UOy^0*xn zwz5y^6N%p}PJjMsLCe8e?Hc?kz<1<5bH?j%BKoA*1Pn4Y`S~v~*+0j|erCrgcTbq3 zdj=nOR7`R;v~ZmDwtK?_n$&&ZcmZ(=oO8d~fm{7hQS#mkA{25&nh*1YkK+7|CyrpG z^J3RcSoX&3lf4|}u-!Xrrh5E$^^znjGC>I%9%$wga<&L-;U8LmdXiH^MfJIT9_fCv z@a82RE6kE(DYc7#kN$OomAbOB*Fj;+uC25YP6Pj8Q_@&f&kiHLSqqQukrP3pwuzOagshl!}yz4knF-r6Md-rxq%&AQP9|u6CbzGzOoD<5uA2&2xf4SPF(J&MXj%< zFDns$h>V)DUQvZc(Y2;(+9+N*3g?;xQA@1=dCWZ7M2rVJUUGL;n19WDHmgo*uDQzQ z^o`Mz;AgVt8ia{^N{#8Wth1Ai?a7*6vRP0aL=c^)XHBs})I9qa^hjc@yzDE!X$@aX zF-$afh8Y=`D)g@=JL4Gn+xu3_5S4_(OYkgZtkpYv)Zp+@Y}I{Fx?0@urKqLBWJ{ky z#g$BO`Jeo><}B5b>5_ygr@@3+38nSC9^(msrZnmdI}jt2kCnSoM9f|P*kG)O^oK`wN#b5Ls1k?74wtFd0EB~113O-Z~r%h4Ps!>P#2Ly2c{2`9eR zKZNS?pyw&$1;3)yn5#a`*2X_2jY!GuX_jsHmY^n4&CN@MzY_zGf7eKN%dqD9e$H|i z&CY5;(!;}h)l(-Ag|$U9VW|?lz#>nF)dl_7IXk;u^^tf}_01dk%J7z%Sh%_Mv6P)M zl`ReMo%!AlB8QV>^WLW7=}NN*$7n=MF7LU706FXz(uINjuHS%L3obpj}~HX{v9y#i}K+|q@=Cc$ABS=ki|US zAa!4!U7YP@0dlpkB_6(lu$wy<#<+uu7cf#>VF8<2A2KDm0iWiD=Eow~2MTFgkIuRN}*Y7r6L8E>py#Y+r+b)rREP(VRxE804J z8eWP}qA*YHX6=2wRq83M9wiylCL3{a@u9+~65$zrF=?H<%co^~eTr?3IvK)4pxyxetjQ0A2=L3y!kz7ctLlD`Ib>vB@53|!!u4Bz5+(AD#*NmHgb4; z#`&g3VpAg3?WP?rui^YUT3z67X^KOqnyf^N!CA(JeKL*0FTtg7r1_ndObe@%l5~ge3CY2@y9Ikb;nuUS`SfX6YLbL1>OIbF_2*1uxO(xzS#&21 z+e^(cY@wX#EtP3^0j+wct&7jf``~FlbC^3iF!atmhUeqY;h*5L8kdyFF(Ioaz9&qu z2_mc~HA2DX^Hj%Q3F1p7(qt4+_ppr#e=I)tVT8LR^qKQpI`@Yz0$u9D);=PB?k_|a zp*s?tD=hTESSqbelFD_ApLvH64SXVp`UtgpmCER2?)Ra%xW|Hik;YiE>DV;>Xqk%a zAKxt$9+PqEo*3hQeIz=Iq7OfaAz$4zAw|IXDQAdtq2Aw15PDzqdIygk<&@y->Ki{& zNQ`wd6xwheVa)Fr9_&HhdPd=Ay-YD_ zw@^PQy-6kfg@~y)L>rzSq@p>`C05voFJC4hY`!KKMqqf+-Ett%^h{lYx?Y%=zwlMz zzgGy06Sp&W#kk$-*5Mgs@T90XBL5=aa(+e6S1^ zLQj@#hK|+xujF~R{A!7_h}Jk7I%@1-5D>o3gqdPXiU&1FmWOQPWf2N>q&@yP2X#*r+{Gr^GZ1nm%>Dpuv7vMQjG23W6tm0DOWlq>g_H#74kE!-uTH>7->7f z4Z#h6&fvSvomRc-y0*UYLSjbq6+v2zRL(p6KK|6G|7kXgoBi)g`oGOJiCbCPzc94Z zw>7c0x3UFRaDZz$Jqy5e6tkWot05PivbCPRp@glKy`h~MgNT*6!S6W0N{=Bc8TYS+ zA*J89L`1Bd$+Q^Qxycw<0p)HMR)A&7!py}2n1%wDgN*FR*a6E@_J$T}WWY+1l)aw0 ziN3IBBV&6qPG%sY#(yr@xxjxj zGR4jQ_YHvmEJ?Aja&iGh|35BC8IJc@PKy(KT&yn^>9NO@w4;J*5sI*cY(P1t>toc5K{zmZT~wb$)*D=5&*f@yg$ScJXYtrTS{u<8HCT@%asKJ+8G~ zJ$zw!w>Tg_FulFbG`_8SQ<=JdwY+y|Gk-Y&f61-u)m7r*weU4e-s0-o-s|pL^6>zs z7ex1J?r7@e%lfakj(wH$M;F=qq@f)h{w$(BB$d&-nD(e<3gfCUGiT8JGNI(o$Dc_C9&hn zr$??39i6c8p6x?d7k(Y4lK&QH)kwU8>iix8Wfji3fO-TE5uWqr>?A&bcY&EB`|p9R z#H%6BnGj5?&zwuMx2Dw>wFTE!v4IqU(pXYh(G-ysv{DpODv^?rc@z;8ic;iK8Idm{ zUr_#!2rnYDC;};@q_CtSBY{*70*kUoR1m2-KhCbi11cBnISQ-h#1&cRC;HPeXH$2bHxJm&UMX9&b$?iyIU>3)od(t z{jJWt*vq@f-uOoe_MU#oPP^^RXo~60D zE(701J3777ti}Te@=BJ$8O88fc(`FPLiePu3*C0Q@k|h>SryM!0aM!2>YC;%M}dLr zO{F=+!Ii@@`@7b9!?dBu`5Be6i94oC9nA@)4HXI{oiZijA+2zJ!*sWZiK&7rMho~g zLN=N)Jx&Tu72V71+FAN+Uv`Nv9CLixCm|o2^bBT%{8M{HnQKyL96vfqI@I`4Tmyj-K6y3I*C{3viPr z?uN_|)tg=V9a^j0@2ZPeJ50;{x3pTodB_(1=N!48HKoxO-sTC;r925#q^~_>D?)1O zo?m19IC#nG_w_ZUsAP{g=h|p)U`KbINa)Kh#1E0r*G$*E+v}uRcqp;ab0p_Wc=(mK zzuZk%xZc>-S%hs~n>8NSr1Z+K-|l|*-(JnHIJx31n>={@zk$Rb`;%I%9PDJ=0PXhw znT)ZW2>DI73h1_KPJ4%~-< z0hz!6-JRoJCcvD_efeDfrOZF_yZ_|?%szmDtr`wMJ^9x!V6uY!z8=6mFhE6Q1!Vda z50K;joa??`z`Z|Ih!= z#@rw6^#5j@vI1lAk97YZ|JDA(geEup-?!oa*nZ<;0|T!&|9RKpU}O6~+VxbN=n3|Y@lfw30%P(g-5)9Q1O+7)JV@*r zGnGTbybo?h=zBx5aq?uJPq9SWoLWLwl{MgJ=bN80$ z-o78k)FJ(+J5L)ITbm%SC7Mq@FD1PL7;!{Wq9I!CM@dh}NcX>|Bit+rkFG17cCEC# z5wq&>%EN`Zv&PnYhn~S7%h1R-ee)gfFaGRuTETx~jDs`;+udN9gz%mIno$7tSpbjt zu3y8O{PwyC%z`1*;-6$V^WwN0)Xxda(U!Y|zP|aM&WI%g3Z@`xYsB?}<4`Wh!@I%d zSWb+l*!Vw|$@W;XH(T^j(3hOqD!;eE**})`GD5q6#HV{DDMy z7_^zBpgto7BrAB6yp~34ALGZuir-M4qq8bGrO|MBKUUz)BVB16$h2M91YOcxf@+5R ziT4$=&3U_tKhzA$@9M8hAfav$XCH+leMh#(rg<5ij+}yJzav(;Q-N56_=FGc@_l_C z3(jIPbe*?HX98@jAA(j?viz z;~(Mnya{K*I7mmwM{ipeosgDZwEPg+s$(J_Mq23X+oMcWl+?Y9nLAPlrkuD2v9$u+&66Uo)6+GLLFclrg3Vr z6!cO31b0nn<-D`1e8mve+^CM$g3E>b4X(KHi*l~cso;VaZn4UTZ1gl7rW5j0WGJp4 zlxOQ7A2BJ$hJUW4HB$?gYB%bm>5y6OsH+VPD`8+N(f*nIs;OagSU|90S8i=Sl=Nw? z3}~bn=QM4ydCzC;r8ymC75}$y&di?l1bmK@VPTKk`kdxI-ZTss^tMH_3E0kT*+AVA zZm5STjF?AiRcaPImR67>tJYkFrV$n`5@N(RPKQ-3()1BB`%vC6pK4*J#%1kxipGsLT#Z&;t%LVw^qp%p`-c1$PLqw!5cBoTJF>=NCpZrT59mO> z`bR3HR0TBo`5UxwpRFrwOj|ylz2|=u;%VOejkfvv+Hj6UT@Xpb+VXY!^$49LwDFt6 z@6T~`Q5NJg>+%Sy3zPY392Zu)U|L!-d7VNZ4O7df@E*nwByl+%8N31CI=jDfygqDw zw1~j7B(Oj&M8l|xGV+1ydAp0#?)8uLJYK=((`|t`efXpikS>WZ*_#$q2j#WzPBF&P zRLb4GYh`K$bLt#Zghcx$+Iu^%t+m=U>2tuio-`PbtMH^uk~_jjiS~9gDbqdFdYpqh zISuF{*9sWmO}r&@5G)+X;y;Q~3T5O?eEv}(T?97km1efBGLPac-k+KuOAI)9Gzxdx zqtQ#hc=z_!)SiN5Pi(4+Nkao;j_?!_^=Elk$r^l2Lz33?Jh`Q;Mq@c{+9K$n8|uz? zsgxNk)z$QaCfoFrJgd`k{uTOTZ&TjB*W4VTy82ZJa`iq;%%U%puqE^1wzk3|aLilr z^RlH&1G{9kqed}w?9W0!x_(5s8I=u6a=E6p`;2F%MXW95Zx`YC^2$yuV#2zbhD#+Q zVkr?uJt$w=LOFRU^cDV6=^&z8#)}Y>;!O_)J6`?n34DtwOIlClr!oDMC2n7M`Hc3r zH+PA1P~Hj;e4ehGA)L}CW+fD@tTVZ4XuOJW@ptImMMHP!z@?f_`8gB%-0e-8jPcIM zCQnFnF;s?NS<0i60hz^?pvmMWzu}u2rHKHWYbd+t>M9wQ3QM{HFv~BCU#ij~d?FSK z#v2rYaS7rSMK72Xim!&2$w_17SPa+shI=+P$6=M6Ti9EC$cRuI1BtHMot~{^F!Q+S zY8CP#C)_3^40$0gvDyAK_ghzPR}3QEtZP|)b#d`H<5(Tthe-2~5~-cXrjNe5`lYB< zH7dr+8avhOh!C5(mCuiAnOiOW)aqL=sNR8#h%@?Xfc)x{S&LoOT!W;&q!IzDYtC$u zOtMcl-ncDBZv!1HF-A_&a`B@~r@hMQ+`74a9qTu#jDs|fex4zG2!SFwTx+dfK)+D+ z){cBC8i-zYQ(bX0rGgHujz`j`W6?O4t&>28q|?7B6saN?Ql-?cgt*NSd}S7_gylpV z9BFfykCHE5#x9jui2q`fMk8#RMa^p-ncvs_eGJ5-Yf! zXYKN+rD%7z2=MN@vt!Lql$G!6fLT#Gl!^Dl-9bh_lwXtBHc{-IQ>S4sOU=ZDJ={^a zy5vdEiSw4(PlNcTz~$wGbhkb3ldjC6+w}Cn!1VOn4aLjeLy6E-ZbvdLg7_qvB$-}W z@gquvP#=;2HJd?c-xWe0Oj%Z(r%N(nvrhA65fS{#%5LHTjnw^*FLn+GTTgP0uwbvk z-4tJyqLop(bt``-bx(15!`)kpl^7>YmhGuX9Tjf$;t{|qJ9D4?Pv#I-t6{qE|(9|*YlW_IbXSI9j=Q$rDCa$ zjPXM^Gq8*76#58T=*80-a+H-68<7C2c_GJv?)f7{A|;mZPLk*_@lR!P~b6&Tq*- zfU6Mu+wQmpI`CFTFpddC*odzFL!=(mahmRm?u>M!9{XeuXk3=JEB_&VIT{ z;kd4+mSPhm#AqrB+K9N!7RGoUc8XK`Ne{?XlfijacAzRy+}gyJ+ZhULY$qM&b|WRF z0m{P7Bg(9Ll4W?VY$aq2p7^?~TTL{IZf-{>gTc;&b@Gi@tgIOgzRVG-u)lueAlKL{ zWqn(^*I?Am=#3W3v%J7g*eg(3XrH1Q7oWCABCThl=A#c|@==7s;k5|waB|o*qCUS* z4KzsSnyH_{A_)^toG?zjfm_0_;WPfwkr8}WH;$ki4q-m$ zSSMC*HCa8%tZ z9PjnjI2^30Ag4KL0m_>2^HJVFBZ~P(8@^`9hv;7Y-WH9X>qj&uX`izBBwlwbN|!BU z9tNMZ9fp+>2zI%XoH1jr!MqKjF<6mfe6~IpNfxgtEP{55KT=t_<;A0<=D1R>(^ipp z;@LJzhb)**Hxr&-u=$eoNXGAtvExlf~>r`AYbJ?Lkv$P5N$G(EuKb~G% z>yy!M;c-%%jN4Xom9Ll*8TXdhtBsvbiv4V;4VRr_9(?iDwlsc@qlneHEaejg$@rJ- zqaC}tT&PMQYj_D^$vv8S&3G zKoL~*`(a(^6X{IFpf|42+rNc&;^Q1e4%BEb6Beu-vS`&G$;U!5B z{1Th;u0_>2GMq@cXTgk-zFpNCt&4N(ND{#tZ?sX5*{f*Zv`i;9N~&|$y-sgAmXk2t zztkW7=-77L#$nk1q3bZN)XTh3mw=es2zkOv-^nLL*5suy;!@m;XZE4}W?#|3V$ge` zPeB7(ZBsuk)792c3z5HuhF&9;vvR%|Fv_DQ)7lnWxiUz_nCs-6n=VaXpO`bw=R~l1 zEXCft%B3kgIce(6&U|^wcPv4lS_hjR9Djbhe|H&`nzfcGQ6jcx>=)cSIFNaWyHuB! z>P8oytBVH4{Wccx(WEweaxOw%=4P+Gcq(Al;IIO&VTHDcO-+rc;Js|`_qV#4_4Uyg zF12!6NX}iXE*51n6;iz~(xPV3B6+X(hBD;|{t@ z4*w?GsVW+nNm;%b)0ROz;5|*j^LLE;_OmYKiXkRCp3nVd?Wn9>v`$^9cY{G?=^B_M zw=xO%F_;?77a{bujl4w?RR?b^!VnG(vFLtOQA^NPren!yS9I*O#U|kf$@wQQo@Vv<@Bb5kH8Z$pU8f_n-J_Q5-WVrOd(f$rk^6{Bfp zLE!$uGE9^Asyew}rXrqUb=j!0hnk5XuHC``dsf z#VgpRvNUn8v)Kp<(&wpcD$AC4*z)J`R?iVrT8N)0!JT8pn!IauWm|v5VnNCZ)iCAX zbhhdg{OFm^>%QwCID%>v36G=d^{9nEPJN0*;&>PCI-JttX4r1l(t<%TCPO%S#>^ zxv?oV9v}C1rQA)`SW#4-UbDOPNTH6bOl#vRL^)fHCahTd!P#;(`%c9+aQu9A*?W${ z6q1@faC;Fpf4%nP?s|5=ymnG!wp$9e|KOe0XIS+!LP*i$8QB6GWo3`up535agIcVX zQvB^WPTs((*5s!AgC9X&hy{_?URyCY648|yBtmtO>h?m9fv4LpdAOE;$hx5r-ep9zz5Q^*p;*cu9pKIe~S zXVc;uszt|qQ8CP>^?SwShBgLTpK5x?Sx8AKAofBRrYf^JsghoW0iah1Ig9DF&@YzR zdYvq0h5TIrG&k$#XVumJK+IqAQdWb-Z7_^e^vR!8RoDA~JMySx_O#I`A-U`c zWjItG-r(btJ>d%aK6dK_|LA3U{zW$QOu9s@4Icqz=vmaP?f0%s2l0mLY|z#4Ki7qJ zX%JUAx{K^Dw`r`h?#AL_4qmLJeB?eZWEkd~uHI0Gx@O~m9B!QA&9oFZAP;;bo?@_= zy<_5UYGSWT+h)CxUVoWT*}t3kz~kGDl3QxClgd$QyI6V@yi*>PSu067g~1T)+; za`b$vJDq`UM0ns-%>uToQ#<16q*{ZC$@?Vu0KC@;P zF03Gwkn_{Jjq7pMl(*oMtA*jQ<(rRyMP6wKe)17XCM! z`;Q3h{|21xfA;fAU4v;~!11ysMz_|ffG&{g1g%gmv;@`09e;Yds zKzjQ7+CPtfj)Cp>b${FgFpocu%m7UvU@X52pigF2z1K+;~#$m%pJfE;{=S24PcY|$65gFMgF|szk2*Vu7CB~|HwoXjzyJKd`26p1?!TAs{)uxlu`#g%Sb=~0vct*oujx#? zzd$?UtfcIG`0QCG0y!mc;#lf}VM79g>_7(sIm9E8DWMQeuoIm$6b2=ju5nS6uTo_u znc`VwdFV<1ESp-KR2})=lub37V8K^Y9bITzYTm#?rNJ!a*`2a!Yuzws%E7a?2($5k z1CQT;##3Gm{`eH<`|;u4`{0)ZMH0+CH;NRqjDRa|HgeevB>adQT~lpfX^Y0r@P;6~ zNYJPG@Z4NkaA&syB1}$cc{4e(2D?A=r8gSs4MljQb%wphwyzC39~s$tbM1zJlf`5A z@PWiMM~w23;!vJL{y68|;M2~UfY5ku5b!(OPl-A=r04$6pKAD@uk^Qo-Z=6;em=>Z z#(dlsb8u;1%N-eX&3d?i`jrO-9M<8ZFtF2SZEd_B84xCSh9KPx#{fht4Ks}bqLz|)GSqPyDhAyTG zs4ZuhrJXxz*8Fy+h^@%1NH0<^yxY_fb3>aIaQK5F>$Gs(D_ZY=9s4^p3Y@Ve7Ej@)IbISRQ zDWvm7&%;M7U+<~VU>dG^~8bTxL%~;(22$8+rM|5sgfu@eV zwAY#`bR{kAzo|YzJ5cW)XB_`TxfRITt z2TPJhLHmhqMY~(yor+VxRt82}n@g{j0!HxZbb!ou=RsCyoxob%5)2@-&1{#M^P&F$K2r*(!6W|W|;EYl!D!4Ai4Pdxw6YwG2p5pzd{viV+C@>6BU}`32Z)OnL zXyY)_R@L%?%j9aRuGg?#$Z91MOdkjrch|mJnA(*)oOwWPVar41a^*q?1=q0cPzvaC z;F2x%V8@a%nK<7NdSmRg`sh^)!p( zV$(vT#w#tBK#kO@!PhOvw}RCo9c^vNkSQe>`PL6$a5Xwb7x&hHAo|Ui` zn3XsI0vw@_NL-Ns1qx6w0R;?D(2hu&X`>1&GRRF=mz&7d1zT*;)shXpnCF&?sz~>w zL8=(RAs9)vL?V?<6p8V#R)pK2?vC;1j5`w}?dn(An?Yiukyd-tST4M?5{9!P9WZt- z7kM~U@EUmg6UQ3Cm>zROJHFrmhUXp#se3i@XIGhMWCl~ZX{hW1>ZEsL} zH?X2AI}xp8o)bK-TzU}vjBT&?JZk|cxvx@Yflvh6?JGn_p0azu-FZXA;&n0{C*%$v zEX;6^iJE4DBARl7|F#SrVtePOaPO~|g2Bk_Rab)8;LFivgOLc)5@@BxSPfVS%ViVH z!u}&lO;R$|hyW^)eNw=Q zE1+R1pkY>O$}S#zE)iZaRCS}Z4X*Z~s!yOiG&kbJ#2CV@NKv71uYw)&(T#PKzkYnm z9NuhHQDLCIvJRMwh#m6m!?%f5gd?+gC863fIuI{4Kvmd}Pj_%j@?8^7V(!}cK{9bI zCek1Uz@+yMxPi2geh|8!zk%A?67{^Qd0-eSMmNcXN@X2BYi7pIS%IpQNtRL(lp_7+Xo_)(=@PPB}>0f@rn|&+C1>7&LuTSc*cYUpI$6`T8 z+|P)d;Q|r8@^XqFvCmjftaPLybGhkD zIP7vbqRGGTk>S7@x&%kBj03yP*%o+w+1P7+sx@hUdf?=S9jvwez*Q)WBPMA`mIZS| zH;?cj!X)eq3Gik&Y1QJQLh>!1**_*Rt5dt{rw86y;dDhce^JCJmJzjK47%ht*0M&A zz3ZV4!wS_GW2Kvi^;L?E(DGx)hJ*0vp|D?T^d_xs_RJx9+Ys#88AB@$)0AUGPw6XAB<_FJzY4-^hv2QMRP5l-(6rYyL_W-yKGnB^EobJ+kLE3|LEgz z$@{obx)8lvmud!~_iwsn5W)dVfsnPAv2>0TT?&AZNHL+xFh2=5^1^gJBPHy&J!jAK z?BUR_lWa$S{t{uz7bt2y+n7t8AtRD-+vM#U+z*5;cNQ znS`j*HjAm907+BC^Y=npBaGc6l9`wUjuU40%a}S{aR*q=#^Rq9WK_%b1KoUHrr+Wb@&vV!2 z!^(kdi$21aXPJO7f(s_jpmhJVqXZ~tvgHIp)Z&6zNEfQ$L*&7F+(CQ7$WdGoCwRHm zxDai~Szz zsmYKd7DM+~nNou=O$*}@9Sj?;Eb4N@GLJFrP)k-*!K5O9Q~n1hp~3>+ZQz=5Xk5gh zo|9}56>#AjSJ;$8!X=5Hul-%um$l6c9H;<~!NIxlQE7siKe0 zOH;*Y;+2|k?Ih!$YD%vVmXz6z+)$ThsR{aPfoG$ngKJQ=vxJEAirt*LXLj)9>oX53 zLYNI0Nw7kB;CQ%i2-{}Pv@{n^9l2j}%}QN;W_ul-I^`0AA{8GI;y-e6U2Z#BN3Z7t`wrO4RSMWZjHMghsV z@T-9kbxc_fg;N$0nQbC5Zd1S)%22m^9|N+{5RvKe)8roKIFYjEdYV_qOD>l2)e*@$M_Q1c-5BxyalDPdF$S-|(M|nBT-R96Lb-?L)tI0eQ{Acj19-i7Nt6 z<)zOTt(dSfvIZTx?zmV*=0|L+@wL^$=$6bQB#4e^+gq)u?kT zgo-`#wAsjSK*qJB$0c{o?CzS9N#bsZD^2z3ZhiT5W3SPGc5h+Q7$fA#zTY4g8i+A& z7R$h&j3EDWIQ?qYR6fg77+1z~1k%UEN}+rK87I}4|s`D=|WS zxCsvLh-Q=~+*o!^E3VEe!F}ngc@l!ID3MKqvoDH8g#Vc}om5DR#p*)AgvP{bM~8J> zESSl-UZ->90}f|_@OOk{ zU@KG`c!Yr(9livnqMvy{EiJt<^C#S59hr5|C~46=%vfa8o<8v3^t-T~&JQxm#L0<& z10@QIGn0^+J`fc}5-0cy)z-M+q%-09#-h;vQd(fFh(wz+z0t<$Lim^ki_W)l+cq}Bx@BS7!5@MOGO(^`9tYhuqUTxw zpL?cZm)_Ia=cfSZ4Fj14M4)(tnfW0`jUop=r+vhFZmt$XN5FCG_DSpv#`_Q!W6FH% zHgV5r^{%O?Pch?;q=<7bhYKT|4y64<9jrOqq!TG~l4E`f-D~Gm+KZFl4a3Wo=8f-( z_}OT4?&8=)cgFH@f-1^I2Q#VINe1m##V>N&Uif}3Pr?H9tOoQ9mEYL5{g+%a;#i6O z#$~po=Du=C88x8nl0*!4KAKqxppAo6>IuNCYw|x&&N<)YPDl^}Z4W(tPx3&*AVbDf zuP&bSS}y304e8`-mkfrnfi6#i}~ncTvhZa(Oc#lvs}2(}N4081o#DM4aw za8@7c@iWpbbM)@za5@zDI?@|I2dw+OPO@bK&y`^8OA_ZC2>M$>=<#BH84f8=q99V@ zQF!AAQQBB)Blv?ZqcsPF@_{QE@F~Kgmi{u|NW`-?^4E3e&<0Ll#+KJfh11i8!fyMH zr}@wM%JW>@*Bc5h;-B4b=uSqif_^mX2VCEt@X+%Z2fa@MB~*exs)P5)73xw2t&c;4 zPp9;>WhMbx+u_SA#Khc+h4a9Gl3P;?Upt}zcO{G5Hx=$UgjyLTjsj<&-9}zEDEAAT2rU!>t7l~K& z!6*V|hZmYtJIQxHE3BS2M-{g#cRal$T`-aA+30 zCwEN^?y%o?S-%4kzVh*4t%ki!uv3=0!LW7Bi}l$nyf5}f@GU`&n%s@Q&@XpDr>X^P zzr$*Y__O8M>Fn2lb1#0T;;tzN*pS?|{;D%eGCf<#<)M7N`yBQO0qW!ZxxulqB*VxC zmQpmoHMehj^Ia!=b`Qhd`dXjjf(}8ByU&R6k!Q-(D^)WB$op=$BxCNas3Lgxm!ac; z(Kj*u<(W=5Zd^8lT553*+`z$4gGr5rUcvqg1ak|5YNJYmGtez57wr|&kU%f){?NDy zFM2?O7d}hMC-{z*kQEg{!LZfVEMwU*?F{SET!V@2JlL~AF=6-Q8g3FTK#?HkDwLd$ zdLg?Hhu4)oB;}S;=g{)m<)#)ff#og2#~wL|BPim%?cdIhh8|(((zDzhN!gN)@oIh$ z=LB$hzOG*hQ!Clz%%5r<8h0LvJSA{l0 zDcpoZ7<1+Pq!+dyzdxtw06gKFrUdspUg>YNRl;-0Kl|R;`Ip|~Ltd_&LOlcnoAB&b zYVlFdy-Z8&Lg5Wqn_aU`BbBg1o zq2`yY_f^nnV#E-L>&?AcxeKoVI}Sa8T$)9M9#?>Y{pD`hHv7CbF9;q~ zX@QV&X};UZvRg!a+Yd;$ZY!Frk*U~&#S=wqrVBaT4(_Dj4J?LTdOvk(Jj^SG5=_$h9dGB{BN8psK}8^(2ktv$2YEF6tN}dCAj%bs6`V%sbulim_KG0GJNg= zrMSM|7rScTyOxsO_DIMa`7op^GE0ygo05K-66?4ygB&t?*JkNM45xXUbDqb_@o{A4 zSRg{P$t@zXh1iEKoSA11WJn|tcOqru*a5+Dv^YH2Yeo%n#+Gn!aNC}OcN>a za9_Uu#yj}n*caso2W15-9eM%2NI468*KBUt&+fU9nDj~Sjxd%U>KL;?2;HK??Rl-3 z5UeB$Q&_JCqfQ#0Tx`EbkN&huFum^b-qw&teH9De_$=xcvkIv9tuS#J5pmGsEgh$< zj92ao)+d&V4updd&PqEwcw>}4@3F(QN%c^w&ZLi)(?A(k`$9KUGS(L&2WxbVkfe1IkTB}pC(%f zw`o7@+P3Gpy1FkGlGWL)kTNqL-;ld98PEW8+(gi zY;Wz>$msZ)KU$qj&~V_p2>U!YF3|M}fOn_zi+YEy0oF)j6&o&o1LvYW?(oK_;3y$5 z^vXVXSy8@u8}ch9A7 zFoh0Ic{yIZIYg0FUJo?IltVMAWe6JT1_G(Iqhq}Y(>!@lee%h^X=H-GvQIj5^c%@=)eYbTX(8;_aKE77T#}O# znn>t9nmt1j9D2kmjG|=gH?o;--ICiFhVuJE^z%}@w zo6;0mQZ0ghYqmdN6X>GRN`UYb?~v*n=0WL7gIZ{s>pK;6F7aQ>HRG?N;XYEb2u8pV zHD?ty`C0S*I}bC9J21a`{F>6GiP&vQVm`sC5`>A*caVKvbF86w8_qpl$;7GZL`TfB zL{c=)(iI%_gnmM7w<<>qm;iJ2C67~5|2BIi?BTHZ^Bzs}{n@?B|uI(cT(E6~@p9%pPX9b<0i?7;E<^dBYKal+-( zU=H8;@%nJ-JnjDA+=J)nJR`oi{$#_uQL7X0(Wbb~$GdU<#@p7WXJ@0A>6=gz+K?n6 z7t|bPttWiZAIyn+@nasllXy!p?fcgFj%Mj_ygXaQlz}j=-0fPy;I94yqT0O&Zr7UK zDPgUfDtr@=J8ir>sWcPYKIuwM0CndD3>Zn=H|jOgLVT^dko{_>t_yJCgn|c&iuOnE ztrhp330*kny>}9vX;Zsd4vkm_IB;{Ph0I#=NR1QE89_F#moeuGt>D#UTrIe?xVt#| z`0qmDmn!}mKxVTSYAK|Q+hvdnbH#-~Opa5|LGKvUbN-|gIUuy9`<>)Rfo zrAtlHg;{^xOQ-}sj7e^*_UdHtbMSf0(&}CqOtzPVCdRj?Z0FHq-nn>)HjOdSCtRCa zJWs^sj9HMBEOXJYd$KBJ%x#5YEPcLs`3QuRfz(h}yRA?Uk~4{1<=8{|9BVqmL!og! za=;n?eGrtU;Dx9?=1ah`OyHU=tTyQ8u03Cyzt0el8_9K!yX=AWrK|Sr>En_mAK_DC z(@uKKB>rA(UHjKofz@xtHEaeSguV#8rcS1dL}JgcVHDZ)H7i;2+{B>g1k;JMW*DrC zWzS>B%4T&ykN3vd(|89HKt=$&Sk_lvQjKkETJ<=&&a|C$mnsIrjLutb)gduw=$dYi zRrgbXV$xCF`BSl8oY;NWaQ)RzvmqRV)_$UorPsZ`DsSS{G^t%%C{LHw_#A<2>?aEZ zFW9JZQ!;yXKU5#(kyrlRh4!g zu1tEvf1P4VSKh^5I8r)V7#9UhC8CrB;ICfzIJ7)D5HaHsaM?!`JCm zXa(N;M|#n~+Y`Y;U!I?>@Q{pw_c!xu^NTkA(2g+3wRS;VQD6EJ?LkW-xw!+(!>BKB zQE{Wk4;#zAecvw6ieOyfDQ#isGiVefv~t$avT$l@XjJiS>;bVvj;T{%6zr;1WD574B&p{srFL~a z=C4(F9{L@FeEMYSaYy_i4}45!Sdd}Yfpm4rlDG@~A3ChZ7}~8?2xqB0Ut~Sb8>Cwyyhm9sOGAaM1Ii8|K91*thTODez=1-;IT*dXop{)nf`3h?>SY*lf}S=L_uw zM|`gBvprKAsGwXt&kVG*GmgXaAP*3zrVl!Kq-dmjxj$~(dP034Q6!y}tKnGU2za5l zT0+&yuO0~*ct6P9|3GoME8;SE0Yj8%@f%5wf`#206iFfD7djRqTs!htxGiP6!;>@6 zIb#-tj$ZUXM2_2y12!0lO_) zE>XhgD{RJ^jdrlI!_X5GSX$@J7>2K|79oCDsjik-c+AxP9zL&{wtU`4%vRIPGY9l0 zSP2g$emrAk2X|Kc@X0x*Kj~@^C+2P;Dve%WdQ#6W%g+%{ZI%pa0CLvsmXJGY8km|G z?1S|L(o~EURDq%Y(bEOn>+=z@wuF?WT;G^y8RFSwN5Q?kh!6I12Sl#|@PUzLC-CR7 zUt*fa#K~O#_Inj7+<*Kgnz*Dw$^S_SMjC6mBOE_4n;r-O ztfFAzk=lE_N@CGLx!CK%8oJN&!dmJ`4`L&A*E1^B3O)8{+z9=nvJN5t@D`z&4lDkx zw#5+?MF{%S1-g5A&+&S z_GZ>6=8=)0Hq|n1|c)X>6-xvHZ99Rya zc()agwZpn~I8ncKRK)73UJ+q51Kr?zB05U?4EDYWXY zN@loCgmi?Aw7}F9cyh$4Ek>aVcX`i#^4v=nF~R$f=)`|-)Bexs#7rD)Mx4g~MkkhY zuy>&QH=8Sf3l+dt>rX22Z<5P@rV_IOEVEbuxfnSBZw~wDotcSuE^K|GjG#*MD}+`meU`0Nbv=T(kai&HBqV>o3==zg)BaAGl_*{b{YJ z^PB1VSNUrV{@MfoNA|#fu!#W-Xhwklu{8`YFX7+l!vHQn<8O=6Kb2D)tZe^^L+Fya zjVz7^2EY5rB<3Xx&UaGaJxIgJK~DUUq_2jI4t3C0S@C2-WI;@!{`DrAa%21rPyP1I z))fU6$}~R=)Lb77mMZ40m!zu~)zy}yb;_-2Tq{#5Hq{6cu!}c;Rrd2ecuD%JM>M_I zSg?Mcd79qOdD$F=Ljq##V+aV_iV&5U)lTsM^N%L2~9^x=nYeANPFj?Ifllt)H7}%_SRbV zKyQ&$@lJJR6J6})F5aCC`l&0{Z4z=Coh|9P;^&GvP(6fT+PE3)@Z3b9A7t4G_O3I1 z?gSlFTn(t>b^$#I9xUV~Pob~lNVG3+oGYle_vV{Rdv|K^&v_&LgT^wL#WX$4QNN}q z3U3Nvb{220h5K&AmY58@a zAknWN4536OZhyil2n#`&MivOJBh%EzLed%hjQv!iOILT#zW=ahc4qny+C~WS{NcFm$ch2c z9l3|D*YGXhqdRhNjfKX&>&>_<&;{x0mCs0}Tn zM??P1_F8o)$tT(TN$AY8+w%HBeLubCxxF}7SGi}zspzIA$%JPB?Fx;pB~F5P0i~L1 zXp>xFXFO1cd^ZI*kvM`uPbn;B@C5z*e*NeOJBK4$;TmyO;=!f;x-+HYmkU_r;LsJl zI&;E^bHdof<<3)K=BLNcBz&M>ASSQN86-vBD{B4b7n9Ht;w^$a=f2Vul zj(s{*AfNwPKM`QaSoP?W9U&r9l4Ma0JUq9&>QX1Y*g0tDV^SYLFkT%4kDsPr#fy24 z$rak&s3yT5#_hk*KtuTrAN4RFO`FWd^V%%JesEM$F1vhU` zLEY2+(~M|@!%b2`&v9ex1@HG?3@qTe#45bZA+#YQ7Slu`w=c$_0+tjdK#%aEhy|5H z_pXZ*%mHtg7IHu1NByjr5siqg8xXW5Rg-881+?Z(`4*F0LxwWdS_@IP~D z2JzAgV`Jone`5?MKzQcdB_*b^MLjAMP8=UR$`tEGLo$YGhW>c2 zvI%XwusXy14P$5vjkp&8}?uEHNYpO*T${9(KXox_Gx48p(l|(7z*W0_;gRNIrfdQ(V zx1FmBOQobjy>wvBlrm{<9`J^>=f3`mcd-QK{STrX0GHPPcvt?jC%~vm4-&$SUhsmCo+~0ZG^>!IS)I^x{Sx_h z4+JI~+5|*=5Z{_BS1G>^d}{Hlw|A)B?>vY>x9iXnf^y@@kcHN13gQte2~oCX!%L+` zzu9~_0vZkRyRzYVP?RneIX`1ta@W;nQVhuk(^V>+DFJ!U3pe5sqK&iwqX=b}k=`gB zC+%&)LS;@s6!rH9jQt+lFN?2c-uBQQIzFCQBciY}^AHUPsEkXj+0Hd4NWXe#_r(~w zZ>m{T=*ZdOwM8Q+50mZY(p|Ot(pO z>+1!CJ^@0f9YYj#N}tJGwQkBEup-K7?n&%6^Sk( z(JNUmBh^GVT(7rOLYjyo2dG#tN?P|uA@E~G8NcM4aARjU;ckU6Vbfw;$^oVAuLBWc zqE*=1q3WL{>kDiF<)&MWG+Jf;t_fKs1_IuXf)-+S-nn1s+r~Z*|6=jr;l6$Ga{h9D z-kszRB*-@z098MiciQJ*=lAXaED2LyUyj8EDQYSFN>Fc~o3T{Jp8P7}Z^s3+t4N%d z)qcD6%7FB);9v13r8Oml&VPC2xmYVBZy<>qOArCH>M}G_ipHh?+%Jc<8&`)fOO$V4 zTZd;S5b%gvj&;^`cX&Ay{t77)X$0*b}Y8m03vCL6kjLd#lgLTw=ijpggbWU%Bp~vc%Qc zRe+t6E@iH%o%_5uH-c_QzjZ%8#1rPi5H4nbC#{h}m0Ww^m|42GKy3*2E8X{VGl)|2 zE;yZ2{m3B;7RNm)&2xq|!*PYu-hqWh?$P}D;qLUMFu{?MlZl_5`+72>&*|ebe&!Sl z_sE@q=Q*W^fq={V=r~B>Z2R!!{AA&-vg`)MF}+O33Ry(`uwBnMwBqMcT;I^a5`%oJ<)$gMKk5f~PVr`@A8QqLH%J}(a!x4r6$ellC6i`+84((wvX*{1Ql?Phqd z0=K9+%1#`uEZ%&_Vw?@zrNi(+xkEP* z^K573pi=5o)vc(c`PqeOgc+5$?0lS^rsKMuQf41lJcex2&=cX`WAeHdPT%xmDJ>53 z9xD|qQXLy=DQ5o5$hJ?=kdv_l0W$OP+c*2KqN2Gtamh|FN!1*EXU^iTL?fIR>YQ>$ zBk7fn%S$FG<}66jXs#-q0`#6tBMjf3H%MzrYwJ}d-MZgz)WcK(k}$;10^QUCjdzcX zlb;B1u-10!eJKN~k#4bze){M9_QSy3*ewf#C>cg>U5Om#ujVRrmi}(8Cxg?@CnCt3 zXF`2+I9%8CfIJ1ExPxfLe7rs#G84x!^L<|Y={j33j00+LY~4xM@Sq*6prte8SLI}@Q*^u!m#Y|huBtk>BRS-yXls(NA=S4 z64b-aV+$h6(3A>nm5f;*w!~L(H+b|g;lx0Ms2F{@oyQzICJleeo^8EMN+v8fVCm*` zG;d0i2v=f?3GtwmAp%?FA?kEjY(_4{j_<0rR6#yl1~&W9bonhm!;En z_wPos!HUdH?>JVHoKU9K$OEq}Vq&sY(E<;mr>@49Ld=7)4ocCU)6rJ25>qLwN-J&h zVHkZj+1fn%n65+3}7jwzhEaq5ch>old)0ux>0` zCR9jp=8e1V$2tGv?1TbLi!o_#^f#~-I0L3(vewLMj22EyrR&isWybl@;;W|i)n{TH z8y+x8Le|-(2*~ZeL{a)UhW7CvJI7<+-Mq*35yb4FL@}e`MbmNw^$+YKFVN-DF;kGS zgs}!_m)h6$=T84?~TWnA)S)*YEwklzsnzE`gOx0G#G~qq% zW}Uvi`97!0gkffbo54iB9tMe zaTq1msqtJ@47;8F7E=U0B1sb5A5$HxM#vN2fJfzEB(sCQjIt{ZJ@73!na5FpT^;6> z>{>ZuRpwx8RolZhW_5Xt#>Uh>=JsLt8J~oweJQ(a6NobGE4+@dZTOPN*TsBUy0r3P zCrTSB`1y)NKc9wiVkUIRIylp zwtz>6{W$4$bgCU=M*JWW!GP^!eraW?iNUfB9#IM2rqE3-^ zcTZ@uxnJt~%?xj#G&hD8`TFdr_{kG<6@3;FjKs@UgEemy*^$K%0r;h+*c>ywqN0M! zljuZi$rHngq6|IqL^U4{*g>`0|5`iWQJl7&VBhI;7=`V6E#gpKfqY0@`A^+l=M zel7A%0QysiZA$S(Q00!#u0n`_aPMUo8U7yICbJJIFWE2j9tPSpeM-5EkHJ?1%L?RN ze%@+o4%LLsrZ3pI@Mp0Q62iaqK0~KBUwn0VKY1)VR!LSFCo@u}-NCC1S!!E4G=x>Yx z;=47#u!;=p@S4FSd;1W!f#OWYeddkJkUsYt&D%g0pzE2sMXewrD1V?_so#9b^Eabu_k;=Y0aIUPb8LeHI^Z(avU96 zgY7~lPr)$jy6d5(DYAQ>T=FBfP4{p*`&9nAzoWE)rKYH$U6J#2eJF=%u^kA%_R57l zSvbvSEm}NiE!a(dn#LAk;h2i7aPMn~tnRo9UGZ$*2N>QIReHl^M1vs3X872<{j;IT zRa3=}g(UDScrht15%&kka)Gu?gj>kBetEA60&INvu%q(#h=})u_-&k`LR1$=m!W;c zCkY9po4NM{O87?!-fUH=LLSeGteGF^YQ<~3ax(`d3$&_2VxDcatO;~8qEl2V$D&@5 z^54=;h2-~Wouz%rs~aK=-RUN=Us_(#uh-d2b!#V*_Wj87t6i5 zOUpN{y*hX@6*|OyC=8Ki4smmeJSF$vF6Us&*%U@9l=F)9%fp8(|lbu5QHlJHE%Iv`bI z5271(2ldIzhMbdkmK6J{Rm>S>pY^R@uEFZOJX%de3aeZ7(Zkc5K`~j9*Jat@*YO}3 zA1^bl`eY@NG4qL6-BKF^mAwc{L5o_>9Hndl-80a)E4oy+L1&Jch)`yUOEmX>u6LKh z#gWO5xfR-p4kQi5Wi!ob;#F>_w1KE!!xM=X+3AQ@ zj$gBT=$L-E|HTfhU==cc(DbVvcsI2K#Z3JTW;(9{H1z}1%pntipuam&Vf-TcWH6j! z9NnPfT;QBd)pPol^v4U=pnJ=t2HFkFC|}lYeU+&w+ukRRYk|ST0k;8&-0B6bnoO;2 zy-)G#JN#&Hxf7jgFYpasAHIrnCaG(<0_`2`4hyS|T;vHe#C`?Weu2t?KAC)Z;Z=Kg zY*CQUrbb@ca}x$K>PXULNFO+qWSK$#D3J80`_^x8?wDmrEWB+tYQu*za$Waan|M%8~qr~)vk{+5G~iSc({o&PQgArmV* z;D_~}SqK4SEzZABLkKVu`>&Bk=6@**pKQQ9 zS2QbN(J>+i0TDo;u|L)C?R_@x$Rd_SCMy-Qf}FxM+ih;a`JrVHY=&UK`5K{oo=2u~gs~czm}d z3!VB%9)t2hWZP+PqLbSrD>+D_3vYDM5g02)@aA~trVXdbF7ixp_qk;DeFu|j7UbY` zZg{TPU&w}0`8iI`HG1AJ6TaDUsT8?|rWTi60u!W3GpSW9Gx!8KGXA4o@F%$r5KaVm ztO0Uou>rz|f0e)1;IBRK|LGq1yKv%v<%BZ*euVzEUHe-+k%NT^z@hl(iB-G3+;vq~ zS}wN^v(ocVfk4@jz{-`wj40hWC8RvN<7s^~jGggt&$uw+-whAJsMlcIk5)Xd- z93f>mVQcqnpX;(I7{J|Lw}1fu?6>XicM-=?w|e@k;r`^y*&tyw(!8(@a*TK3K3o!PJG377pk-84Gbv)$h&L<_}GS8-~|8Y_=@e2AxX1pSY1k<^}Izj;LO<21{orl3(1P9(g47m_~kmD(fd9P?CHKa1DfwR1-X;u`eQn{P8t|%WQ4Eef3S?C`u z=;s2Ro(D~aXw7zuNM6A-5>7#qvBMcfw9!xB3M34~0HTSg2shI!_yV`iYH0>U=kE}9 z57YFLPY1RNcZtv^?eFdH>yHQ23CyopBV@<;f!3$q7YDMT)Jy?X1-u2S2`XqQ-^YvG zWL0s91Js)DfYGF1(F5ln2DAc{sLBin#0gvm>H*3Lblcwn!JcL6Y+yXy()rIM zhgi}wHoy~po6df(hLPqT;S7o@E3=F9%js-7WtF82%#2wq?pv?m;v=vL5y!+VH^UgI z>SOC8ZV}mh&WAW&|1b=mX z1%3yA=LlQ_DJPVuGjP&eN{YE??Jf#&5J)plG>iJQA;?(4!)kQ-taU81hG$# zzZ+3mcqYc+WR8buoV;(~sI1E!MrtruFoVli4w(hR9E}3Af=OmEeFrmJTQUEKxyJ9{ zU6Y4js74I8c!QXH6`L%YO33|sw!9nHd_!blZOrR?6Ut%j?2tnox*rodVCxk~#@u|H zu&OzlDK3TaQ0oIAi`!p9Sd)n$#ZMc{q%M0 z8P5(mjB&`E{Y1q!tO7zxfF4i_IVgWKCv0Cc7R|oE0?wEe&V{s40%VNL9&$dF^F?9p z_Itg1+U@r^H_A(hrS7Q@@aL74oopHvd>%N2nh`cSy2a)(7f`=BGX{*f`>3!a~bA27>nc= zb04N3EaB67)e=1{eu{dseDvs$-eHdj`i=zeJF8ku7G1$P%_pC}!ilumb~WBjt4 zST~?Ey)Y)ZqwaOy{$ZUQGn#(B`hT_e=FwPoZ~t(qC`1`5gd!;t*L+=MN*Obggd$Uh z5QR{Zp%N-XDN|(%Nf{#@K&=l$but$Qu^ zXC3?8dmsDQ$9$ewIrsfmr|)bTmKTK|# zFTdOPCPj$wkZqmKjwfm&b6nkdert2 z4@W+6Zp-f5mbT4enI(Euwjm|<@ZPw zTIswKe|}6_=OF&vz3VpZx7c((n(XWP5ai{h=k;7f`{tv(wxc+w#aF+|{pY@&y%Bw; z*`~eqdzhKwNb>gY613I=dn2aKBUTQIN+JB5mxu1S3^NgTJ?!>ziX`6wLsmrgFLvRvN%CUMzNddFrvzxfUonH!cP zqn2+PKFrC)KH}g0C@%IC|MpXUr@C2ecLxY+@7Zm9s-imXoa<6(@-ox!_c=TV&d6o4 z?b26H$a(5QrfwC9&2(7rTYjrc_szTn>&E9IQOl#hmcCt@?kcA^kngYUy}FCMSV-ZL zw5TY)aNbe=@$Xd~SH;hAMCUy6|K&Va^}fZdMEs=b%krZ#8@1e5b6vs|t zJ^krOO^#{E;S`RcRNP#JPVt(AXrHnO+0xg!rs=k#Pl}2Zu0-i{`K&YD-<7*TZ&-&x z-!JV=jBc{3hLMr|rRl;0D}D)Vx@M2w4$G{xZ*};n_v%qw*6uOO6K0*B#-G!~OW9`6 zpZPsj_Op34X|()y+6DZhai8}?zN^nH?QOrcI`aA|E{*I}doI^F+w3+>J7r%{_--r9 zYhEQwZ~ftw#H^o+=aTzN0)D^hcIdG`^nCUC%^m7`9cu{T^52`SS#7I4b`MV^G6fHJ zN@z4_u`_>ZkJbOtw0r;c%=G!mcQ@HZ?+-G)i)Ik@X=r4{QSYy1**U4#$JZL#R1oo_ zslfaB&a4JES8s1&f!OVpsS}rkD%fsWFr2ez9$uUBnx_P3w$}X15!G+e84C@mA76eq zx0!ucVkr2AYk@WCoYQm`>r}02dwE1&j_!@V+Hd1SMaEIvqxy%Z`{Jka^puo__O#hi z7V1p9J~(-uc*MGKHg(*B7PmV5!8xL@xdK%QP4ZF)N zDDiah@mT02M`{pLv9v>-m~f)v+*>vIx&CQyF_SN!`_7~r-(KwO$}erQ;rGt}B^O51 zpe}Y*HqKp&b<5SX!eHfg#m3vTmlph<9xN^nOka3+n)E79ah#kGvr+xI z%lB1zW$0dB&w{4aFF6&Ztn@1OntakeYUnYNR+w{k;^^S#=Hwr@HP`rc`_Jy&c+Xet ze50}S`;Jnx$sM@_VHxkQwe2=GPMr^Kb}Z&`R~z*TN|;RFd0Ce-^d!v6VfaU8L?c1{ zjzs)c{ksMoI0c8psYQ~JM{Twc$ybPHBumV<)hyi6KcPCw^FFaK!(d1{YDvv$YjN+_ zDCX9wvtv^|Bj3K|EN>!=9^myRTjgaro7^iES>?_DG*fPW)=GfU%S%%=nsXiVCL#{W zCV~PDa?Aa>AIvH)l4yJp8NqU<@(XHmv7b}Bp7<)~ba}YF_%fAUyh&_2WNLLn?RwUR zn)Ph;&o<=f3-K*y=lo*G$v%Di7rvu@mG3>)$7iey&Nk(KDCTKnkB&c~^g{1?InP0* znty;GbYr07*5Au-m|2=pT+o9y;82K732OxrRpq%+N7iu%X@Xf8VA_} zxVR;TBd(WbGkk{x$r|8R_QBKArESLm!Djxq%`Z* z@J=zj5m7ye-_50bEacs@y_)@EB@!|L5Uoqb9UXaXR8nm`vOcNdtIld)rtngx;iP9; zoP(UamrOZ0gX3OZ&vA>+5U|oCJeG+wOlE&m-rhPFoiKL&#>b?Oe$6eVc8-fGwS5F* zN69d4nU8Usjt>jcZe2HF7Q6e5;o{wWL+WSt51*`^63b6MK4q2iVRR}o<(ctu#jkHp zIPCacTeuK&N8-fiy+Lp8zEks(N|hU>@{3OMU3*$=VDek*%sU&q^hQztrMBvq%FoDI z``?%94e2Z|#SLrMT^UU;)>D4oQXx3;@zo)jTdVFJyQOzyn*4aH0baeF8he_Nv1lg$ znxX$rZzbJ#Ze(#|cEdWhVcw0gQ`MBZ^XPJcUon*U-S+i+_&uluysD;K#N=7Ew=bP|q=te^01VyOI8 zk(;@GH=nZ(>sdEl-qXqq_i_Fsc{NuwZtr>@Dfa#2rc|MaX~}7~8dKBfWu4x&!?$9> zdY%W$eZAhzSNrSxe6yrUf2G`(?iikejUL^}E7UMZ!KwsBc@BjuwUq46tcddFXf7QwOb0z_;o+uW)@wP^Et&E_jdm+m_P< z!@GyJeb^X?FY}r-e`TygDo;Cj+oj)e{q832BiuTtY|VC;Of5bCH7_PUJ}S6WGBxvg zaxznfJ;XV=v*>M!_t3Vv-^*L(A^1xoP3ZIyn+`G4<5e z{ldKqc;S*C_3yno$TlYmcXdR1mJEMrNbI35Q5+8?NSu%`jE&4~3N22kKNUaHs4&W_ z*Yb(p_7ev=(O z7&j5~#^jzc=gsm8Jdgbq>$&i}&S&}RJl>O=4w-H*cOK(*yve`+*~Wz#?mc4nMii#=}*jom^&NAo4{9DQ<=ttw~e z2hH_$xnWmX@H{t%tH-0k<|iUt@AY08B|m*%w#vxMQFEB*=3BXz3n>Z?E+c}Oubh57 ze|skXbHHBa%_loB#|xr^($q$^E-|o zt7qlqAT-5%FcUbdIBv`OEi>)aON~qW_U(Tl{9^jFqjusA!+W;o)e#gA%^B|thE%GL zmqW#KPa!2y195gmMzg80&y6~#Z5DZF4@zW2MvwaAzi!YS_Wf2cY@BfOZeOTLob4y01wHAKomQz9w+^n=tM3^T{1Q4z z(tW|P$-n4GcRKG|jbnm*9UNTz?l_O7yHSP|a;{lz>K<~Q`>}}QN9MoFgepA@WBVcS z`&oB<>Z=UFv3uhWZj>&3TJTePki*iIwP8m~ERVDDp{}B?VH*xyTlk&*C&x#{o=%C0 zSG$_c)wI3|@QIy|np|#XWW2ujWUf|xqSA5a{uyP4c?m~+PVAuHr`?eQ8x}5|KmQ$n z=h)s=6>o(<``-IjAIY}YP;F3iG9~@oHmf6M4Ef1P$+iL}5*u)FIWBf1GKZP0Msidv z$E%&)d@QZsnXC2(v&0P_`1*Ez zMb_h6CP+KPuNgG6Zmst8I=i$nKYm$;?UZB>Yr*AJ6gBf5mPF(CpOuI6x)avKy-|cu zd?`Gb-5+y=!XR;mXmrn`+ooqD)7TN$b3Oa#avHae_%xLVbrKjuEoV-ha}c389d$h5%=M9gS%#Z(Ahbm@u>jq$b^z-YF5%smDf71 z1?^On>h2n~NtY>$^ji06^Ye%JnlkQ|YlJ&vu{~qAo?Cf_z0_|He|U6b$M=Ec!)|9Z zwoQgpcy|lxYP&|ruG#H;Brila(Wuxv)}uF4)`Ifv;4GKnk2_)!Cq_TbU6efY*w#_& zP>9Fi)Vh!lRjs=k9t^9u7n@pUa!0qiZ93JoeqfLImVTZBbE68oFpXrV5;4gaMRuP= z7uU6r&%1k^cXvOJ{~q>j?&g6}KhykiJCBy;MyE?tZ$~?f)KUTlcAks6H)VLAi<#=Q zF>0^gtkdQ891GuLwQrva2U=c~77+fpD_pq3AgN?0cnoP_iQ)57@7$!bk-iBaou*Ga?!|eIBV)kaIC)O zza~AwJNPl}dG|BXUAb(kwyFAVk%O#GVdmc|Ls**BZbfB?oT}NI67-1^ue$qVglgqX z+y`C9lJ^e9&T6*`BhoUAD_+!Xef8RpHaxI698a3JcW~4-l0VS!Gb^z{_E^Q(T8As# z0|^SuCi}mw)bXkr3Tb*@P@)lMqN5BV!;)&WKW7#W2ljV* zciOUACZ(rFwr|yrBXX#cuiL39<(oT>f8yyVz$-KRUzz!$a9rwa7R6?Jzj&+YNKAa#lTx$_0_(a%4@NrTN$J3-M!H+{_&;3X!J$Z_~=QH1k zM-#_#bY^wj6Tk1$zc(EvKi?a&_GtKupE>^&^ZjtKdy&sx-4NG4-za`j_?#bKhcAaZ zfv;3P|~{j#jYr%J5yt9S|GPj-scn};XgDX$#3bn+YTaR*C6{jcj6 zk9bVTyr8fOt#?t9T{Cuk|AWP@ua6GTMH<{J-V|QOW2I(NW>_Me+i=r1(djk^SFHV0 zr;6!JcFor3u4zG0_s^?%dtc4FA650Sedi^W4Bcm2UkW{}H!-QpAqJXt^B1ow;{7<8 z{@_Tedv(3Sva*-bv(2v~^G}7ei|X`rPAjE9oIA7m@vnRp*_bBx&t>1NxqTb5TEA~= zewfmF#iW)iv6c75+mLr~UfBv_3W!C-If6)Jk1qvIsiER)5aX zqn7oQ$p%6u%avD?VUc?5nrFUcuPuh}xA}9%G^FP37;gka=_z|x)0*L$q>qS&zH(Jc zzzfZL_hP<}e1G$u`m!sWqtoai-_(@X!3y$|no+jQoD*Y$x2z(fVj?zj)K1c*w~r|A zlgqi%t^Zchx}?NfvD{it&UztM`+|;3T7kB)i_SgD2TgwV54U~TwVZ*@|OP^_#1+zeKB_C-7n`iff!BKsSB(KxW^<|a3Q8&@`@Vo)le@l0v zSnSn43vKTG3hO)znT?c079KGhsfa}8F}EDL@%WvXDa!;w%#<%i$5*#ox+d^a%Ip3| zZ6R?SOjUW?B)P+GGjgWC_S4>dBJh)x3gkV?Gz_Wi1H{KJa(b3U1}|0(us(JnmI5J(47n--NH=^ikWgwh>C4r=pRgTIYYcDdX}@F*5B98xb^5;hT7>~_p?*W?HtD3 z%$Jk&R=>?)=6>X3aM`}g+*LWuMfRNEuvGc_=m%@JMJVyHPN&~umCDB79KPWf?`p8t zbALf6d-Fk)RTm8(^TuaVi%8G3NmG{{;?|59)VzCqm{ucjG%8VVAk#0OwU29!Je#D) z{r2jgCr9|1Zm}DvKPX^UyL?Bu`nhPms)ApQ;Io#&)>rvMC)J2<%0dS=t1;7lA4wUV zwm-9ra+K}ZPEo>OMt9ZvO1&^G+)Pv=_orO7qomit98RJlOok6qU7f5$?Nz)7M2D~6 ziE28TAgZGAfO4(l#_4AaeQzz~UsKv%hV*o>2f9o@GS7|9xjd3Q8%&emqawbdJ@55Z zGR6C{tWLxVAK}{ms8~if%QtI!XtFI2q_wszYGgzz#AJLoVdIFt99l!kJp8Cvz@wfx<*M!BNq%4u8T8Tb z(~-!)Y+aTi1zDF%U%8v^a7#=7q=h@5dFAP6^NaoEX&c|aX+VHq`TBRm#{XLz3YB1m zx3m;jwsW;ma<;OT_`4qpg*FDX8wE#!-;R@@7qoFWcv%X**7NTV{J?t|`sb|A9Nhuc z)&KLYAVnuzM{D~3{#QE+jRt@JcQ*3W@Na-6-&L za{u1kzg~I&=kq?(|9sx(pU?aJ^Ld|tKJW8?@p&Kezuu2FA%hP&H}AhJN}b_0 zKD@H#`A4_+{w4VnCh8p;g;%xMI)w-?K85d#7FT4&`xUi=$@8+=o0Zss5e0Y6@o*_zv+;`{l2$4E`mn!23XFl4g5I!+PuL=HQFB74#mY zDRe6|>cy-Jcy}#y%~3qBpQyZVz+J_C)f!2b`>KRAo;$=&$OtGp9y6|U+;MQEtL^tB z2a`(bb@=&D)32Lc?}{IYj6WgfEcorMe#*~ZjkPPqAmE;H%K?eZqZPhU*)wI$8zh$o=JZg_ji%hW0GDbi6-4mo==+J(V6RSQh4gO(ly<^Q;Iv+TZ>yUOWr#e zG`dTj-SG6|yPOI`Ghgl% zG0*qDoD-Go?^eHkoF+ZaaMAx}Obolo?+V{|%0wXh%WVziZEX)t!lO4wS=jA8`~1A_ zaRp&}Vzz}d<7U|B>Z-`YrJRX3{e0hZ z>oaynvYzPsxZr+m!`9xgTf1wNZQj90>+j`-CSE;c(_gigX~WaB?flOv5i92AUF8)j zHwBLF%bjh!7H=%oMv#<^aJ*k#5YcQU-=-2@^^VHkSgtAWqjITZ(eG`+!bcO^(jy68 zE|)vjDjs8MyUVt?$8TAMx9sM8RqKh(wGF#%-+D+am{leFt~)t7vCFn?Ua*GD5{nxBg z_+=zkacEBvSFMa(hL-(({bHK!tYp^Mi-eY~uV@)Qn$c(H)Ef(NfkXGNjLho72aBgi zi@p{u_bp%V`9yARDm8lf*vk3)IZL(L;izb@?(8#*lQxp~72G4o`Dol8n< zL(VZAF{-6r51%OCy;56IwQ>GLn=4`Tn9lT*^z*A}-RZR7CnvaDYPM>*rx4DZxf>HN z_JxmY4kdGu>kB9Q}u+z*+(tM2TZ$*a)>Z#f~~(xP|c*(awvGQ=pQCv(%!N9~k;@M`QXNo_#>gQGd`a{av zqjPIw9m9NaD5+T*!J zzpLEnK)W)d`SyMN?G|5F_qK^0<2G*)Go~D^6?5dy&;K%W&Q-I@yy42X#Rn#*%5n9_ zT!r~p1F8xg`9t&&_3b*yMqUM}y4b4k!#|7}@ z)}PHb7RwRPxb&uD;-H3#!${4$X@~Z+r#s8!%d*#eI{ET_O{?6MY%2 z{La9jP{w1P-<=uQ^(ugfu)NggAy58l7uF5q*QguPG^4Ekcg6B zjH3LbBGsjp1ARCB{RjHARiB)9z7oZGOE`*MjUgs0DZiE`PU^y-kqR*9@97V>*8JgmRiwXw>ki|yp(TchM@Rnn_NLZUeGa=mMmK>VpN zmJI`%oKA?6e{3u5LDp{H(X#T@d98)`+hcpZlTWUWak(}+tlgizM_H}w z`W=m+99#VC;b*NTr{t7m{r#_INXRPT-grNzSrwW!JPkZWg0zjHO?*qeZPtCZ?p zSJs^|SH$`9y$zUle(dzYd?M)JkhP3ylNB4=!Z{u9z94_&q6of|5&|kt-v{DoEEjE= z0{ixS)oU&I{)sXt_(h44lC`(5QB2@cUe9b^!jf76Q=|9N61zIvGM%)zA6i$(BzrjM47;psZLiBe-=f4E03UGQC zUhlCDxWUd?!{zd8AomFIovKq@CvoYw9**uw{f#IN~i;mWkJ z+j47|fA6bIVcNB~`)k9Mk`1Q?5*R!O*jU1H<~$FsFpj9~@4lPE8uY|5@wWc#yxEJg zeT8L5Bs4T7B(*gq)?^Sj?KOB3qK;3<=~M7i=daza5jL%9n3P^H^iAfV-1kPgCUome zYlDSNYRP#~nsraV=Ives@!Ua%kgFs+W}`fNbD_gHrUMD=;q|t4*E*=7eASzA6}{ty zB|eq2Mnz6fj-5@^C@}Y9yQbm9*Xrx}EH7|oR5<36&!D-pt?fx|(afWp3JsnX9^ZIZ zj7PFnoOE~Z$`QbG=;d_aC&4ZM&0bu#4#jSGvvFx2Mw5cXM(t7ii?z z{#IpaCa#>xwb5l);H-RYs=Ml&)Z?J+4_d5-TnBD_;GnMVxUK)&fyKl-S46b5L3~Or ze#@Oi7bY{DZXx?u?uCM90dwU7d&DRYk`C}~w%xxs#ASLIO1URGm?N8>fY zd6d@9qg%GryXWS0rwR+RW$E>Ma=%m-+xXI_@hW5N&7ZNx=YNj{ZMnyNfoN0z+s1Xw zErlV&M3rI0e)CA6yeIzf?d10@t%T|{$Imm1q7E62Pf_taGQW@qHMTU&f!DSX>qeKB?MXOZVpQDF+1XUILdzj25q zWDSdb`4wZIO|O^+Di>1EvvdkR47xXcC5F4h@XnB2HqiBo1 z?9AOthnh={Le&$me|bN<6I*3ywRE9MP=1Fj^=j)zpKBdyeJ*%^hs(`Jo76pr6SsOK zn>(%m4q{LS z=LJuXZr;O}Snt2dyH>m|-0jhst_;5Uk{S~RU&G$=OJUcRJ$vix&X-$Q583I5huk<% zNY|LXG})Y@M_gl=$eYV5p{#7c=CLIGn5uZWkI2P9F|E}NPu#xklTysu=`F(iF6XS% z-lqn}+Z(L*x&G{g|IkB{!nacfERAwkzDU2YMAWgSJhHffHjV83~HH4}w1j zy@Jz>e-2#ms&SyHbDh&Iwl|L#n9+TiHYQf?wDJDldX1|e)K@!y?Rk~X<^GCSV$rvm zB+aZmRv@qXX+_dTXWzR!yEj-8JG0lt4!_qc-}iGk-Ih9ObIXSE9h(uut zZ`X6VnJX7xZCXjNb`dr3`{4T}HDOhEZg_cS8QWMEn@fw!m7H=OCxiG2Ct2<)yTco= z9DfuPr*_##{YuEab+_+cvGHHwxg~zDOM`q!cmJDX0<|jZPVc{ewJ&kqHjUwo5I?{B z3O`FX`TN%lm9E+*}+3EWZ*x_fY?v&(0}EF{2#yaK_vcOELIS$~_cB%bdgBeB$gl9xKw7x=T=l z_4qQ+@2$(u{*s|4oNB!N&PpelIw_|rl}@#^84I2DuPKf_5|Sdx7W%+{+_se_+`Y$15c~MCIum{pKu=y%M=`#$Oy!#0-0JLz7vc>{?wu*igsJHbIydV! ziileDoA^looEuLZuTe1>;Wf4EaX%_bmfm-PBO5EcYml|VaGPs+|Qp4Vzesr8T}=GPfca(eX`3{KbBJOb?Cz~f6u4D@wUh; zt9L1_ETNK4_D}ZAL>i6A=KqM!`_cUVkeRi0oN1WDyl)8g#L^Py{#tRd+SK|rUthkI z6>$4?f0lH3^n>h&bKMm*yCSP+6$SJos?SbYm@ zOX`keJsDiza^2)@8_UJh_BLVFk#~2#N@qA_bBR4`(E+;G-rc`kYkZ zi`KC>f{YlWx~&*qGRg(U>`E+;*VdGF{vtb2D3m%X9kfEW;Y$2kcZ}Pzr7i3#rOj+{ z^qIgp`GM|F%h}tBcb{yS*BVPI@?#1%3D&5qGdW)Srq9$~AR?_Yb5S~~y>mlC_A6-y ziA(2{erEQO))kIUN6$oQ&CS^f^Sv)9OG;Jk)Y|>!L4tn{E|KGYbF}cBHZLDnl00#X z!Mo3PBM+GKO)NzZx9WzPaan#lJ(9BRTl({>>5J<^UzMG7C=Om+kmSuuIoeZFHT+n$ zsbgE9cjbvt9`0*Oyop*LGM=yI)398>bjAy zxgHWP(d?A6F8OyO%^tv>L0xxvVUCIYTLW^ zsKM-|Rp0aoPo0Bg72~MYce%AJS4zIvwc6r>qo+D|@8mmNrOTb6cwUV4B4zpI?81Ws@f#DeyqSw zKcbKQbZ6FS6O){G1=h21QyXy+4`2JPQXXWu{db}JzrG^&KMLK6I0}vY@6i44nt0(8 z`TzfE;>CWCX$PM4KQd@$I(1HOcCZ#tbIUogi?1Jb@=~~+J}Pomt|?bgp)5&t<;VYsfik8sx5xX5%ONQyA2!G z=hlY3YB(R0Z~1xoypPjrzn0>*ySgWOIFerP`5JIY>hlIm=_^_*;<95`K0J2jx!zTH z`}uZ)qjb5pt=SIATZVHb*~hw+tS|VbvUcR}oiJ_9pUcnlNbru+A@89S(excc+6-i^ z&g=UeyINqvBp94td{Te?#W#N=DwKcqd;jCW|L-|(|2WS7@czFYcu!Yr8)m5;GzyMc z>c9WN?^lrEw~%di{5OV!Bqsge4yXUd=%0*4F(N(j`X?O@M+N(UV0Z#%ERKYO_a*+M z!{hN7Iy_klQpJDJ5r`B5IxmGvrlDggG!hXM&>v$dG>Q~t6%dR{g@)rlF!)^^`uiLR zh9{t7X*4RmS@}Qda8gnfGQtDEsPIFjC><4@1L$Zpg!k|o3z3Md1=88@W(o2UZVfl)F0~ujE3w3=qTu!14ad@K*!SPUx5ANc?1F#Jr5j#h{t2-hSqoV7hN|EvC8BwJuG?Z5~_-%HSS2P^_q$sjq z8jeW8jK#shVd$usdr5=h5axM!9ELA6Jf2?I`9n5nc%l@7!L`JpG6Wcjg2*#qWb~fX zuQaN!0Hea|Y=6uP7!B2RcqsxfAECp6Iz@Po2Pvf@cMvct1&h%L2v70AdX#^F;ZQjM zjDX4zU_{J*abz5-bAWq9REGgZLgfW8xLxRe$ru{|bX4?S;t3QmQpi{W1qNd<3J&Ed z0Spa#mINp@qP!wd;blSec~m^A!|((u5w$6Rk*KI#5vcGPSj_XN^e5L1*_L@68*i{UY{L6jmA(Y3&BqhT=$ zM%IW@7<-PVkfl&t0T>mvjd%)03iUSt!(n(pf#X2;L7@=Ih%JM$Bvh{fhCNFP1r8WF z4+_W?7Q>h${fIY&<3)mwmbj@IoP@4kJgUum(qvE7c z+l>cL5BoeEe2oV)mhN@`d4H)mGDc@paa8zJJ3BDS;WPcHynvR( zqdI~Ll8SvE4fUTvsYzjM9u;1lM&$*(MC?AmE@0*$kTE)&3a?&c)<^go*#O0X+!?s2 z7(Gd#+au(8fRRz14HyO0*?`ed{Rd7ge6#z{GXe~U9ZMwO5#9qGM%MvGf8*_sGY5=9 z!p=cM<$!=AfpdnAh1dWymP9~(Bp6F1AhHG+35`<#1BVwg2gWu69S!w22w?Z|m^sK0 zy`aw{1EVn*EEYx=*XyV0T}%7 zJ+c-&1@fX8jD*@t0vIVYUI3*gg~N=clF)kubYzT70)|;LxPPeM31h+IMb`&nkKAbj z9#kTFmVjXQMuXrAc^;JrmKw$2r!>*$(ZFX#&zwe(LgQZoc&w=2AW9LyGx>84z#ub# z!D#3laHGK^N9n*tLe>X#pztwtm^gs0nNa-)7zw?rkTJ*P834oBC_0APGQcQO$hpxm z_#x;&bO{|p?*|bNt`y1_JdmM#1NlScfCxqpz2|^o_W>BH6M+uI2w5MfY}BU)I*e@u zjDqTWz`(i1JP({!1cMum>K7u!2I$?VW0*4sbA;*=pu@@)h#DHdK>|Pujb{KOqHz>p zWYoU`3@$pl4=Tnc6CpZB^KgK{38Q0aV5l(|33I*#+TZYsMn&%+k%Xh6x(S>=?D+zQ zSqlkI#P9{uG?=wOW(3taFb54IS8x-E=v{^EA8N~p6e%jIC+QffCn3oI(Imnvh!C-J zKyDM&8&m=gjX#J~0vJN%d4Qq5H_$c^5mC!%pT9YfNWCF@l zz)-n|gbWx=WFKTmJfd>|hLHoZ6ets9EIrmm<%%A|qPzkOa~@PYD01|9;65XEh6Jtv zh6fOHqP{oKVe)#gU8ql)oWzH&{&O*q45V`6f}nih6f}DT?+-$*H{eA??Pr6<1>HNO=V4`y z25}F%J}_Ho4gjQ{hVlR+VyJrkIWI6261P|kjSYYf5@HxSOnw*Wpz?>I!^AicxKL32 zMH9PA`MIq6fh_dB5R>v1$4g9Dt#A5a{4`A!`8)wJAV{ zZ1eqz)B&{1KCA$ct8hM3PXpexwE)_7;ZvqUD<^%yF zp!yyXr5OD}FDIk10UbkSgI+;H{R29N`Z<7MbO}T~G}I@A1O)+&-vA?`cZ-gpbv3|9 zXs!TMJEpb`4hTm8QzT9Xj9zs>=75L}b4Gw6xe@wUG-je>e={$*_vpD1z+L-O=fGH^6p}-s zV~`m|*GGhuEQ*oPegPN@b_SI-zz{n_r-Pyc@;qoOKr@DFq%cFpvz6LfuKNIYUN2yC$!qIY2}WGbR}>DXT{!qbZm z|J6eZKi&?#jp*}0C1PZV-p_^VAsXaVQQ3grEhO%SIiPn7-3MKrqW1%gGDe3%dK|+m z@W&Bb3v+;MVCDcH1m!6h73{oZC>H(6QwW(*n*tC_f!sGbhVlNM&J`eY7UVgOz$i#wnLZZ0R%CtPb0IMuoeqte0E6HjJrAgC zqjCjp1!%nt#)92PWEZ3bybxq9P_RJd9&QoFMgayI3o{n2Bf^nGUJ6|^8AJ``ALLL_ z{RgQuv?l=yCy>BL?k|{7XtGAu0yP`-?gJeWBUcn0S{K4Wkc{@n0tVfZsN6%^4ApCJ zvoLxCFsMi&>jMnQjr?^hk(vk{gTxOq7F;vL--X*tZxY7Pp>*}r6qPl)r-zOOjDW;okOT%pjod-NNT{sQF(kgEk45VXpqZo~#fz*DG%BhOK#PNS zhSC8ca+W}c@$2Z_yD0DJ80v=s_BU&Rq6l)&>Dm;@UH_$FG5o`UJA_#u6ur>r(HnTt zGXiE|_6uPs5^Lb_^oArv9{`5NjdVI_-beUHFJ&Qj5a`hS8q~j`285mwJ)A-JL50hO z?iackQM~~HCz_w6cN~M$imZ=bMnu*J4l8u||49e82+j4;H-`2L&@s5x$XM{;(7Os@ zo)oIb0fVM2bSx2)WEc$XlZFf#3F9jRhKZxV7?F{>AB=^>GQwxTpyG(m3%wu6837#? zi3g#Z8cZX?Q}960x*E{o(fZL}7*hYBV^DHL)&dyng8&^B_16G{Lqf+wJ3q=(dW#%p z%@A0i=K-B+=v^g4iw%0W0K?dGz#v0}Sqs`%5Br6<5%Ku}L-W9NIS!xu<$W9Z;&VR#Dihgmb^mQcBZyd#nyf;GcSFc{v04~*eGw5nm|g;%vO zdxOdvW-Q!HECy19@&()yjI2Sv9kVxZ;ZPj`9yJ>4LQ)y+?SZvH>Ke0VNCRW|3}r+t z1_}^e^WWV;sBL4`N6)0AV<9bo;S1DzFy{eDP%MVNa|U|@_Zjm%8oZo_&I^7gh6nTv zAcl^F`hTEYpt6RcqoTGJyc{eKAf1i+{6L3C<9NV8b0BlTYhI`y26X5;v>EhNmDzn0-K+0V4-cp23_i*mKPKzy-!W4;ls0eUNCF zdjy$WjE#rKVSFDFv;(7hk_0D=nFHKdEFC77L58;iQGX2%@^99H>4^s3gCB;O7uq5* z^I~I87z<4aC|@w|z|iNQVQd9Bg%}?WJb9#M2xBod3_3=_$|Qua7@4GE^2#t49r#C?vvqF z6wFvSA}k%+YY)5vR|>OVhzBwJ1D_SuFJuB_k=(ic%=5s!Vb(`)vO#%8L+gmJH|T%H$N{9PFwcXW7D@*xH%#mT9tg(wrhu=4K9AmW zjP3&}A{ajwTviNEDR4hfzCb<71Y>I<_l4mfw4q@1IJA*r{7!I{F?^;FAen*i z8L|i1H4~sw0YiuOx^9hM#Vf2WA}lMhS~)R+#*!Q0fQnb`aFmOFmpf%i`fUrJ!T)!a*Xf~ z*bHxpp>tr~1%Um6jl#@Enpvz zy20!N$gp!@a>MX49h3ynwSbR~-VexcV9%U{$+^Mv(EfHvqIl#HV%mG<9%s%K* z3A#Q^Pau5`OkN%uX5r%)=vYh-AB+Xb$IJm?59Z9FY=zkeG?QTF0CS1i2OI}x4tNy> zGY8}&FmpgM7dr=hkO$oxy(;Ck9P$j9Glz~RjBba@4r*7SApz5iL+{YU$TPe%fX1~@(S%AJvNuR9BfZ%4 zHwC3Iyr%~ni0!7o)rQ7LbO}P^b4Y}vJ>`%)fX^BrJ|T3xL&5}E9|gi+bj{GCgjq9K zGR*y@iywMM;7MU*7pe;wTS0GsL45`=d1x*TmIp7UB5S6<(u(+N^j=+5?jh3$Z>an^ z7BJ{^Los@#4#gn#g`tB`2)Q#*ScEh!Iu;tG|KlvrxmwscTDvmSKhdaf=VkrZ2frls yoSo0@0BPO=6.9.0'} - '@babel/helper-validator-identifier@7.24.5': - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.5': - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} '@ethereumjs/rlp@4.0.1': @@ -160,20 +169,21 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} + '@gnosis.pm/safe-contracts@1.3.0': + resolution: {integrity: sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw==} + peerDependencies: + ethers: ^5.1.4 + '@metamask/eth-sig-util@4.0.1': resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} engines: {node: '>=12.0.0'} - '@noble/curves@1.3.0': - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} - '@noble/hashes@1.3.3': - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} - engines: {node: '>= 16'} - '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} @@ -193,36 +203,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.3.8': - resolution: {integrity: sha512-eB0leCexS8sQEmfyD72cdvLj9djkBzQGP4wSQw6SNf2I4Sw4Cnzb3d45caG2FqFFjbvfqL0t+badUUIceqQuMw==} + '@nomicfoundation/edr-darwin-arm64@0.4.1': + resolution: {integrity: sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.3.8': - resolution: {integrity: sha512-JksVCS1N5ClwVF14EvO25HCQ+Laljh/KRfHERMVAC9ZwPbTuAd/9BtKvToCBi29uCHWqsXMI4lxCApYQv2nznw==} + '@nomicfoundation/edr-darwin-x64@0.4.1': + resolution: {integrity: sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.3.8': - resolution: {integrity: sha512-raCE+fOeNXhVBLUo87cgsHSGvYYRB6arih4eG6B9KGACWK5Veebtm9xtKeiD8YCsdUlUfat6F7ibpeNm91fpsA==} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': + resolution: {integrity: sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.3.8': - resolution: {integrity: sha512-PwiDp4wBZWMCIy29eKkv8moTKRrpiSDlrc+GQMSZLhOAm8T33JKKXPwD/2EbplbhCygJDGXZdtEKl9x9PaH66A==} + '@nomicfoundation/edr-linux-arm64-musl@0.4.1': + resolution: {integrity: sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.3.8': - resolution: {integrity: sha512-6AcvA/XKoipGap5jJmQ9Y6yT7Uf39D9lu2hBcDCXnXbMcXaDGw4mn1/L4R63D+9VGZyu1PqlcJixCUZlGGIWlg==} + '@nomicfoundation/edr-linux-x64-gnu@0.4.1': + resolution: {integrity: sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.3.8': - resolution: {integrity: sha512-cxb0sEmZjlwhYWO28sPsV64VDx31ekskhC1IsDXU1p9ntjHSJRmW4KEIqJ2O3QwJap/kLKfMS6TckvY10gjc6w==} + '@nomicfoundation/edr-linux-x64-musl@0.4.1': + resolution: {integrity: sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.3.8': - resolution: {integrity: sha512-yVuVPqRRNLZk7TbBMkKw7lzCvI8XO8fNTPTYxymGadjr9rEGRuNTU1yBXjfJ59I1jJU/X2TSkRk1OFX0P5tpZQ==} + '@nomicfoundation/edr-win32-x64-msvc@0.4.1': + resolution: {integrity: sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.3.8': - resolution: {integrity: sha512-u2UJ5QpznSHVkZRh6ePWoeVb6kmPrrqh08gCnZ9FHlJV9CITqlrTQHJkacd+INH31jx88pTAJnxePE4XAiH5qg==} + '@nomicfoundation/edr@0.4.1': + resolution: {integrity: sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-common@4.0.4': @@ -251,68 +261,36 @@ packages: c-kzg: optional: true - '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1': - resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} - '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1': - resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} - '@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1': - resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1': - resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1': - resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1': - resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1': - resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1': - resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1': - resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1': - resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nomicfoundation/solidity-analyzer@0.1.1': - resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} engines: {node: '>= 12'} '@nomiclabs/hardhat-etherscan@2.1.8': @@ -321,6 +299,12 @@ packages: peerDependencies: hardhat: ^2.0.4 + '@openzeppelin/contracts@4.9.6': + resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} + + '@openzeppelin/contracts@5.0.1': + resolution: {integrity: sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==} + '@openzeppelin/contracts@5.0.2': resolution: {integrity: sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==} @@ -336,12 +320,19 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@rhinestone/module-bases@https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/064bc4a82e212de837ffe59e43734e72b0e0798d': - resolution: {tarball: https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/064bc4a82e212de837ffe59e43734e72b0e0798d} + '@rhinestone/checknsignatures@https://codeload.github.com/rhinestonewtf/checknsignatures/tar.gz/9847c6b0d551c75ac337be1c9fe87f4449c352c9': + resolution: {tarball: https://codeload.github.com/rhinestonewtf/checknsignatures/tar.gz/9847c6b0d551c75ac337be1c9fe87f4449c352c9} + version: 0.0.1 + + '@rhinestone/erc4337-validation@0.0.1-alpha.2': + resolution: {integrity: sha512-sxBSHoR0hV0rN2bv5HfINHR3RyBChfd0OWH0TP8nlA9FolJ1EezLByxcyrvAgi2QLQ2Zf2zVcNky1qYdfF4NjQ==} + + '@rhinestone/module-bases@https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/a0ad2843be643fffa11ecaf51f7146e301497370': + resolution: {tarball: https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/a0ad2843be643fffa11ecaf51f7146e301497370} version: 0.0.1 - '@rhinestone/sentinellist@https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/d1f58298637e1a4e5b82ff3e2b4fa1d2f4897791': - resolution: {tarball: https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/d1f58298637e1a4e5b82ff3e2b4fa1d2f4897791} + '@rhinestone/sentinellist@https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/446b16c3ec5ba1d0acd730ecf2bebd2ac48f915f': + resolution: {tarball: https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/446b16c3ec5ba1d0acd730ecf2bebd2ac48f915f} version: 1.0.1 '@safe-global/safe-contracts@1.4.1': @@ -349,20 +340,20 @@ packages: peerDependencies: ethers: 5.4.0 - '@scure/base@1.1.6': - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + '@scure/base@1.1.7': + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} - '@scure/bip32@1.3.3': - resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} - '@scure/bip39@1.2.2': - resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} '@sentry/core@5.30.0': resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} @@ -440,8 +431,11 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.12.12': - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + '@types/node@20.14.10': + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + + '@types/node@20.14.9': + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} @@ -458,8 +452,12 @@ packages: abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} - accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/62e1cf39220321a6e1c7bef51e974c3bf8a4e2e2: - resolution: {tarball: https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/62e1cf39220321a6e1c7bef51e974c3bf8a4e2e2} + accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/7174d6d845618dbd11cee68eefa715f5263690b6: + resolution: {tarball: https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/7174d6d845618dbd11cee68eefa715f5263690b6} + version: 0.6.0 + + accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/f1c5c11b273b7ddae26bb20809419b33ccb8f043: + resolution: {tarball: https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/f1c5c11b273b7ddae26bb20809419b33ccb8f043} version: 0.7.0 accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38: @@ -487,8 +485,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} @@ -666,10 +664,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -759,6 +753,15 @@ packages: supports-color: optional: true + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -794,6 +797,10 @@ packages: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + difflib@0.2.4: resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} @@ -825,8 +832,8 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/e0dbd8aad2f5c3044f0c8b75ed10e56510abe1e7: - resolution: {tarball: https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/e0dbd8aad2f5c3044f0c8b75ed10e56510abe1e7} + erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/4f27201bfd949348ae3a390ae5aa8e85ea19cc11: + resolution: {tarball: https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/4f27201bfd949348ae3a390ae5aa8e85ea19cc11} version: 0.3.1 error-ex@1.3.2: @@ -884,8 +891,8 @@ packages: ethereum-cryptography@1.2.0: resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} - ethereum-cryptography@2.1.3: - resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + ethereum-cryptography@2.2.0: + resolution: {integrity: sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA==} ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} @@ -965,9 +972,13 @@ packages: debug: optional: true - forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5: - resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5} - version: 1.8.2 + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/07263d193d621c4b2b0ce8b4d54af58f6957d97d: + resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/07263d193d621c4b2b0ce8b4d54af58f6957d97d} + version: 1.9.1 + + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32: + resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32} + version: 1.9.0 form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} @@ -1032,16 +1043,20 @@ packages: glob@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -1082,8 +1097,8 @@ packages: hardhat-deploy@0.11.45: resolution: {integrity: sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==} - hardhat@2.22.4: - resolution: {integrity: sha512-09qcXJFBHQUaraJkYNr7XlmwjOj27xBB0SL2rYS024hTj9tPMbp26AFjlf5quBMO9SR4AJFg+4qWahcYcvXBuQ==} + hardhat@2.22.5: + resolution: {integrity: sha512-9Zq+HonbXCSy6/a13GY1cgHglQRfh4qkzmj1tpPlhxJDwNVnhxlReV6K7hCWFKlOrV13EQwsdcD0rjcaQKWRZw==} hasBin: true peerDependencies: ts-node: '*' @@ -1178,6 +1193,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1199,8 +1215,9 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -1342,8 +1359,8 @@ packages: micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - micromatch@4.0.6: - resolution: {integrity: sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==} + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -1394,8 +1411,13 @@ packages: mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} - mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} + mocha@10.5.2: + resolution: {integrity: sha512-9btlN3JKCefPf+vKd/kcKz2SXxi12z6JswkGfaAF0saQvnsqLJk504ZmbxhSoENge08E9dsymozKgFMTl5PQsA==} + engines: {node: '>= 14.0.0'} + hasBin: true + + mocha@10.6.0: + resolution: {integrity: sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==} engines: {node: '>= 14.0.0'} hasBin: true @@ -1450,8 +1472,9 @@ packages: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} @@ -1537,10 +1560,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -1646,6 +1665,7 @@ packages: rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true ripemd160@2.0.2: @@ -1691,6 +1711,9 @@ packages: serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -1722,9 +1745,13 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - solady@https://codeload.github.com/vectorized/solady/tar.gz/5e7497c2573576157f9ca23460adbbf3081d0176: - resolution: {tarball: https://codeload.github.com/vectorized/solady/tar.gz/5e7497c2573576157f9ca23460adbbf3081d0176} - version: 0.0.201 + solady@https://codeload.github.com/vectorized/solady/tar.gz/7590df8e38c64970a26e6fb13aefc95bb52435db: + resolution: {tarball: https://codeload.github.com/vectorized/solady/tar.gz/7590df8e38c64970a26e6fb13aefc95bb52435db} + version: 0.0.216 + + solady@https://codeload.github.com/vectorized/solady/tar.gz/8d726fb1499f7f1d7459d05379efddcd500dab1a: + resolution: {tarball: https://codeload.github.com/vectorized/solady/tar.gz/8d726fb1499f7f1d7459d05379efddcd500dab1a} + version: 0.0.218 solarray@https://codeload.github.com/sablier-labs/solarray/tar.gz/6bf10cb34cdace52a3ba5fe437e78cc82df92684: resolution: {tarball: https://codeload.github.com/sablier-labs/solarray/tar.gz/6bf10cb34cdace52a3ba5fe437e78cc82df92684} @@ -1735,6 +1762,10 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + solhint@4.5.4: + resolution: {integrity: sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==} + hasBin: true + solhint@5.0.1: resolution: {integrity: sha512-QeQLS9HGCnIiibt+xiOa/+MuP7BWz9N7C5+Mj9pLHshdkNhuo3AzCpWmjfWVZBUuwIUO3YyCRVIcYLR3YOKGfg==} hasBin: true @@ -1883,8 +1914,8 @@ packages: typical@2.6.1: resolution: {integrity: sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==} - uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + uglify-js@3.18.0: + resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} hasBin: true @@ -1948,6 +1979,9 @@ packages: workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1967,8 +2001,8 @@ packages: utf-8-validate: optional: true - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1987,6 +2021,10 @@ packages: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} @@ -2007,16 +2045,16 @@ packages: snapshots: - '@babel/code-frame@7.24.2': + '@babel/code-frame@7.24.7': dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.24.7': {} - '@babel/highlight@7.24.5': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 @@ -2026,7 +2064,7 @@ snapshots: '@ethereumjs/util@8.1.0': dependencies: '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.1.3 + ethereum-cryptography: 2.2.0 micro-ftch: 0.3.1 '@ethersproject/abi@5.7.0': @@ -2286,6 +2324,10 @@ snapshots: '@fastify/busboy@2.1.1': {} + '@gnosis.pm/safe-contracts@1.3.0(ethers@5.7.2)': + dependencies: + ethers: 5.7.2 + '@metamask/eth-sig-util@4.0.1': dependencies: ethereumjs-abi: 0.6.8 @@ -2294,14 +2336,12 @@ snapshots: tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 - '@noble/curves@1.3.0': + '@noble/curves@1.4.0': dependencies: - '@noble/hashes': 1.3.3 + '@noble/hashes': 1.4.0 '@noble/hashes@1.2.0': {} - '@noble/hashes@1.3.3': {} - '@noble/hashes@1.4.0': {} '@noble/secp256k1@1.7.1': {} @@ -2318,29 +2358,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.3.8': {} + '@nomicfoundation/edr-darwin-arm64@0.4.1': {} - '@nomicfoundation/edr-darwin-x64@0.3.8': {} + '@nomicfoundation/edr-darwin-x64@0.4.1': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.3.8': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.4.1': {} - '@nomicfoundation/edr-linux-arm64-musl@0.3.8': {} + '@nomicfoundation/edr-linux-arm64-musl@0.4.1': {} - '@nomicfoundation/edr-linux-x64-gnu@0.3.8': {} + '@nomicfoundation/edr-linux-x64-gnu@0.4.1': {} - '@nomicfoundation/edr-linux-x64-musl@0.3.8': {} + '@nomicfoundation/edr-linux-x64-musl@0.4.1': {} - '@nomicfoundation/edr-win32-x64-msvc@0.3.8': {} + '@nomicfoundation/edr-win32-x64-msvc@0.4.1': {} - '@nomicfoundation/edr@0.3.8': + '@nomicfoundation/edr@0.4.1': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.3.8 - '@nomicfoundation/edr-darwin-x64': 0.3.8 - '@nomicfoundation/edr-linux-arm64-gnu': 0.3.8 - '@nomicfoundation/edr-linux-arm64-musl': 0.3.8 - '@nomicfoundation/edr-linux-x64-gnu': 0.3.8 - '@nomicfoundation/edr-linux-x64-musl': 0.3.8 - '@nomicfoundation/edr-win32-x64-msvc': 0.3.8 + '@nomicfoundation/edr-darwin-arm64': 0.4.1 + '@nomicfoundation/edr-darwin-x64': 0.4.1 + '@nomicfoundation/edr-linux-arm64-gnu': 0.4.1 + '@nomicfoundation/edr-linux-arm64-musl': 0.4.1 + '@nomicfoundation/edr-linux-x64-gnu': 0.4.1 + '@nomicfoundation/edr-linux-x64-musl': 0.4.1 + '@nomicfoundation/edr-win32-x64-msvc': 0.4.1 '@nomicfoundation/ethereumjs-common@4.0.4': dependencies: @@ -2362,63 +2402,55 @@ snapshots: '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1': + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1': + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1': + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1': + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1': + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1': + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1': + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': optional: true - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer@0.1.1': + '@nomicfoundation/solidity-analyzer@0.1.2': optionalDependencies: - '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 - '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 - '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 - - '@nomiclabs/hardhat-etherscan@2.1.8(hardhat@2.22.4(typescript@4.9.5))': + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + + '@nomiclabs/hardhat-etherscan@2.1.8(hardhat@2.22.5(typescript@4.9.5))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/address': 5.7.0 cbor: 5.2.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) fs-extra: 7.0.1 - hardhat: 2.22.4(typescript@4.9.5) + hardhat: 2.22.5(typescript@4.9.5) node-fetch: 2.7.0 semver: 6.3.1 transitivePeerDependencies: - encoding - supports-color + '@openzeppelin/contracts@4.9.6': {} + + '@openzeppelin/contracts@5.0.1': {} + '@openzeppelin/contracts@5.0.2': {} '@pnpm/config.env-replace@1.1.0': {} @@ -2433,11 +2465,37 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@rhinestone/module-bases@https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/064bc4a82e212de837ffe59e43734e72b0e0798d(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5))': + '@rhinestone/checknsignatures@https://codeload.github.com/rhinestonewtf/checknsignatures/tar.gz/9847c6b0d551c75ac337be1c9fe87f4449c352c9': + dependencies: + forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/07263d193d621c4b2b0ce8b4d54af58f6957d97d + solady: https://codeload.github.com/vectorized/solady/tar.gz/8d726fb1499f7f1d7459d05379efddcd500dab1a + + '@rhinestone/erc4337-validation@0.0.1-alpha.2(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5))(typescript@4.9.5)': + dependencies: + '@openzeppelin/contracts': 5.0.1 + account-abstraction: accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + account-abstraction-v0.6: accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/7174d6d845618dbd11cee68eefa715f5263690b6(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + ds-test: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0 + forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32 + prettier: 2.8.8 + solady: https://codeload.github.com/vectorized/solady/tar.gz/7590df8e38c64970a26e6fb13aefc95bb52435db + solhint: 4.5.4(typescript@4.9.5) + transitivePeerDependencies: + - bufferutil + - encoding + - ethers + - hardhat + - lodash + - supports-color + - typechain + - typescript + - utf-8-validate + + '@rhinestone/module-bases@https://codeload.github.com/rhinestonewtf/module-bases/tar.gz/a0ad2843be643fffa11ecaf51f7146e301497370(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5))': dependencies: - '@ERC4337/account-abstraction': accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) - erc7579: erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/e0dbd8aad2f5c3044f0c8b75ed10e56510abe1e7(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) - forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5 + '@ERC4337/account-abstraction': accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + erc7579: erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/4f27201bfd949348ae3a390ae5aa8e85ea19cc11(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32 transitivePeerDependencies: - bufferutil - encoding @@ -2448,37 +2506,37 @@ snapshots: - typechain - utf-8-validate - '@rhinestone/sentinellist@https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/d1f58298637e1a4e5b82ff3e2b4fa1d2f4897791': + '@rhinestone/sentinellist@https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/446b16c3ec5ba1d0acd730ecf2bebd2ac48f915f': dependencies: - forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5 + forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32 '@safe-global/safe-contracts@1.4.1(ethers@5.7.2)': dependencies: ethers: 5.7.2 - '@scure/base@1.1.6': {} + '@scure/base@1.1.7': {} '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 '@noble/secp256k1': 1.7.1 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 - '@scure/bip32@1.3.3': + '@scure/bip32@1.4.0': dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 - '@scure/bip39@1.2.2': + '@scure/bip39@1.3.0': dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 '@sentry/core@5.30.0': dependencies: @@ -2545,20 +2603,20 @@ snapshots: - bufferutil - utf-8-validate - '@typechain/hardhat@2.3.1(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5))': + '@typechain/hardhat@2.3.1(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5))': dependencies: fs-extra: 9.1.0 - hardhat: 2.22.4(typescript@4.9.5) + hardhat: 2.22.5(typescript@4.9.5) lodash: 4.17.21 typechain: 5.2.0(typescript@4.9.5) '@types/bn.js@4.11.6': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.10 '@types/bn.js@5.1.5': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 '@types/debug@4.1.12': dependencies: @@ -2567,7 +2625,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.12.12 + '@types/node': 20.14.9 '@types/http-cache-semantics@4.0.4': {} @@ -2579,13 +2637,17 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.12.12': + '@types/node@20.14.10': + dependencies: + undici-types: 5.26.5 + + '@types/node@20.14.9': dependencies: undici-types: 5.26.5 '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 '@types/prettier@2.7.3': {} @@ -2593,24 +2655,50 @@ snapshots: '@types/secp256k1@4.0.6': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 abbrev@1.0.9: {} - accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/62e1cf39220321a6e1c7bef51e974c3bf8a4e2e2(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): + accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/7174d6d845618dbd11cee68eefa715f5263690b6(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): dependencies: - '@nomiclabs/hardhat-etherscan': 2.1.8(hardhat@2.22.4(typescript@4.9.5)) + '@gnosis.pm/safe-contracts': 1.3.0(ethers@5.7.2) + '@nomiclabs/hardhat-etherscan': 2.1.8(hardhat@2.22.5(typescript@4.9.5)) + '@openzeppelin/contracts': 4.9.6 + '@thehubbleproject/bls': 0.5.1 + '@typechain/hardhat': 2.3.1(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + '@types/mocha': 9.1.1 + ethereumjs-util: 7.1.5 + ethereumjs-wallet: 1.0.2 + hardhat-deploy: 0.11.45 + hardhat-deploy-ethers: 0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5)) + solidity-coverage: 0.8.12(hardhat@2.22.5(typescript@4.9.5)) + source-map-support: 0.5.21 + table: 6.8.2 + typescript: 4.9.5 + transitivePeerDependencies: + - bufferutil + - encoding + - ethers + - hardhat + - lodash + - supports-color + - typechain + - utf-8-validate + + accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/f1c5c11b273b7ddae26bb20809419b33ccb8f043(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): + dependencies: + '@nomiclabs/hardhat-etherscan': 2.1.8(hardhat@2.22.5(typescript@4.9.5)) '@openzeppelin/contracts': 5.0.2 '@thehubbleproject/bls': 0.5.1 - '@typechain/hardhat': 2.3.1(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + '@typechain/hardhat': 2.3.1(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) '@types/debug': 4.1.12 '@types/mocha': 9.1.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) ethereumjs-util: 7.1.5 ethereumjs-wallet: 1.0.2 hardhat-deploy: 0.11.45 - hardhat-deploy-ethers: 0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5)) - solidity-coverage: 0.8.12(hardhat@2.22.4(typescript@4.9.5)) + hardhat-deploy-ethers: 0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5)) + solidity-coverage: 0.8.12(hardhat@2.22.5(typescript@4.9.5)) source-map-support: 0.5.21 table: 6.8.2 typescript: 4.9.5 @@ -2624,20 +2712,20 @@ snapshots: - typechain - utf-8-validate - accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): + accountabstraction@https://codeload.github.com/kopy-kat/account-abstraction/tar.gz/c5887153fbfe3ed09b2637cac39873f96d676f38(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): dependencies: - '@nomiclabs/hardhat-etherscan': 2.1.8(hardhat@2.22.4(typescript@4.9.5)) + '@nomiclabs/hardhat-etherscan': 2.1.8(hardhat@2.22.5(typescript@4.9.5)) '@openzeppelin/contracts': 5.0.2 '@thehubbleproject/bls': 0.5.1 - '@typechain/hardhat': 2.3.1(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + '@typechain/hardhat': 2.3.1(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) '@types/debug': 4.1.12 '@types/mocha': 9.1.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) ethereumjs-util: 7.1.5 ethereumjs-wallet: 1.0.2 hardhat-deploy: 0.11.45 - hardhat-deploy-ethers: 0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5)) - solidity-coverage: 0.8.12(hardhat@2.22.4(typescript@4.9.5)) + hardhat-deploy-ethers: 0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5)) + solidity-coverage: 0.8.12(hardhat@2.22.5(typescript@4.9.5)) source-map-support: 0.5.21 table: 6.8.2 typescript: 4.9.5 @@ -2659,7 +2747,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -2675,7 +2763,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.13.0: + ajv@8.16.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -2740,9 +2828,9 @@ snapshots: at-least-node@1.0.0: {} - axios@0.21.4(debug@4.3.4): + axios@0.21.4(debug@4.3.5): dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.5) transitivePeerDependencies: - debug @@ -2859,18 +2947,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -2971,6 +3047,12 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.5(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + decamelize@4.0.0: {} decompress-response@6.0.0: @@ -2995,6 +3077,8 @@ snapshots: diff@5.0.0: {} + diff@5.2.0: {} + difflib@0.2.4: dependencies: heap: 0.2.7 @@ -3036,13 +3120,13 @@ snapshots: env-paths@2.2.1: {} - erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/e0dbd8aad2f5c3044f0c8b75ed10e56510abe1e7(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): + erc7579-implementation@https://codeload.github.com/erc7579/erc7579-implementation/tar.gz/4f27201bfd949348ae3a390ae5aa8e85ea19cc11(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)): dependencies: - '@rhinestone/sentinellist': https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/d1f58298637e1a4e5b82ff3e2b4fa1d2f4897791 - account-abstraction: accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/62e1cf39220321a6e1c7bef51e974c3bf8a4e2e2(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) + '@rhinestone/sentinellist': https://codeload.github.com/rhinestonewtf/sentinellist/tar.gz/446b16c3ec5ba1d0acd730ecf2bebd2ac48f915f + account-abstraction: accountabstraction@https://codeload.github.com/eth-infinitism/account-abstraction/tar.gz/f1c5c11b273b7ddae26bb20809419b33ccb8f043(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5))(lodash@4.17.21)(typechain@5.2.0(typescript@4.9.5)) ds-test: https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0 - forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5 - solady: https://codeload.github.com/vectorized/solady/tar.gz/5e7497c2573576157f9ca23460adbbf3081d0176 + forge-std: https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32 + solady: https://codeload.github.com/vectorized/solady/tar.gz/7590df8e38c64970a26e6fb13aefc95bb52435db transitivePeerDependencies: - bufferutil - encoding @@ -3115,12 +3199,12 @@ snapshots: '@scure/bip32': 1.1.5 '@scure/bip39': 1.1.1 - ethereum-cryptography@2.1.3: + ethereum-cryptography@2.2.0: dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 ethereumjs-abi@0.6.8: dependencies: @@ -3217,7 +3301,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.6 + micromatch: 4.0.7 fast-json-stable-stringify@2.1.0: {} @@ -3251,11 +3335,13 @@ snapshots: dependencies: imul: 1.0.1 - follow-redirects@1.15.6(debug@4.3.4): + follow-redirects@1.15.6(debug@4.3.5): optionalDependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) + + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/07263d193d621c4b2b0ce8b4d54af58f6957d97d: {} - forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/52715a217dc51d0de15877878ab8213f6cbbbab5: {} + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/8948d45d3d9022c508b83eb5d26fd3a7a93f2f32: {} form-data-encoder@2.1.4: {} @@ -3412,12 +3498,12 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.18.0 - hardhat-deploy-ethers@0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.4(typescript@4.9.5)): + hardhat-deploy-ethers@0.3.0-beta.13(ethers@5.7.2)(hardhat@2.22.5(typescript@4.9.5)): dependencies: ethers: 5.7.2 - hardhat: 2.22.4(typescript@4.9.5) + hardhat: 2.22.5(typescript@4.9.5) hardhat-deploy@0.11.45: dependencies: @@ -3433,10 +3519,10 @@ snapshots: '@ethersproject/transactions': 5.7.0 '@ethersproject/wallet': 5.7.0 '@types/qs': 6.9.15 - axios: 0.21.4(debug@4.3.4) + axios: 0.21.4(debug@4.3.5) chalk: 4.1.2 chokidar: 3.6.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) enquirer: 2.4.1 ethers: 5.7.2 form-data: 4.0.0 @@ -3450,15 +3536,15 @@ snapshots: - supports-color - utf-8-validate - hardhat@2.22.4(typescript@4.9.5): + hardhat@2.22.5(typescript@4.9.5): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.3.8 + '@nomicfoundation/edr': 0.4.1 '@nomicfoundation/ethereumjs-common': 4.0.4 '@nomicfoundation/ethereumjs-tx': 5.0.4 '@nomicfoundation/ethereumjs-util': 9.0.4 - '@nomicfoundation/solidity-analyzer': 0.1.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 '@types/bn.js': 5.1.5 '@types/lru-cache': 5.1.1 @@ -3469,7 +3555,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -3483,18 +3569,18 @@ snapshots: keccak: 3.0.4 lodash: 4.17.21 mnemonist: 0.38.5 - mocha: 10.4.0 + mocha: 10.6.0 p-map: 4.0.0 raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.7.3(debug@4.3.4) + solc: 0.7.3(debug@4.3.5) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 tsort: 0.0.1 undici: 5.28.4 uuid: 8.3.2 - ws: 7.5.9 + ws: 7.5.10 optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: @@ -3560,7 +3646,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3602,7 +3688,7 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.13.1: + is-core-module@2.14.0: dependencies: hasown: 2.0.2 @@ -3714,7 +3800,7 @@ snapshots: mcl-wasm@1.5.0: dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.9 md5.js@1.3.5: dependencies: @@ -3728,10 +3814,10 @@ snapshots: micro-ftch@0.3.1: {} - micromatch@4.0.6: + micromatch@4.0.7: dependencies: braces: 3.0.3 - picomatch: 4.0.2 + picomatch: 2.3.1 mime-db@1.52.0: {} @@ -3771,11 +3857,11 @@ snapshots: dependencies: obliterator: 2.0.4 - mocha@10.4.0: + mocha@10.5.2: dependencies: ansi-colors: 4.1.1 browser-stdout: 1.3.1 - chokidar: 3.5.3 + chokidar: 3.6.0 debug: 4.3.4(supports-color@8.1.1) diff: 5.0.0 escape-string-regexp: 4.0.0 @@ -3794,6 +3880,29 @@ snapshots: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 + mocha@10.6.0: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.5(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + ms@2.1.2: {} ms@2.1.3: {} @@ -3833,7 +3942,7 @@ snapshots: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} obliterator@2.0.4: {} @@ -3889,7 +3998,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -3916,8 +4025,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} - pify@4.0.1: {} pluralize@8.0.0: {} @@ -3998,7 +4105,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -4064,6 +4171,10 @@ snapshots: dependencies: randombytes: 2.1.0 + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -4093,7 +4204,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 slash@3.0.0: {} @@ -4103,15 +4214,17 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - solady@https://codeload.github.com/vectorized/solady/tar.gz/5e7497c2573576157f9ca23460adbbf3081d0176: {} + solady@https://codeload.github.com/vectorized/solady/tar.gz/7590df8e38c64970a26e6fb13aefc95bb52435db: {} + + solady@https://codeload.github.com/vectorized/solady/tar.gz/8d726fb1499f7f1d7459d05379efddcd500dab1a: {} solarray@https://codeload.github.com/sablier-labs/solarray/tar.gz/6bf10cb34cdace52a3ba5fe437e78cc82df92684: {} - solc@0.7.3(debug@4.3.4): + solc@0.7.3(debug@4.3.5): dependencies: command-exists: 1.2.9 commander: 3.0.2 - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.5) fs-extra: 0.30.0 js-sha3: 0.8.0 memorystream: 0.3.1 @@ -4121,6 +4234,31 @@ snapshots: transitivePeerDependencies: - debug + solhint@4.5.4(typescript@4.9.5): + dependencies: + '@solidity-parser/parser': 0.18.0 + ajv: 6.12.6 + antlr4: 4.13.1-patch-1 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@4.9.5) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.1 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.6.2 + strip-ansi: 6.0.1 + table: 6.8.2 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + solhint@5.0.1(typescript@4.9.5): dependencies: '@solidity-parser/parser': 0.18.0 @@ -4146,7 +4284,7 @@ snapshots: transitivePeerDependencies: - typescript - solidity-coverage@0.8.12(hardhat@2.22.4(typescript@4.9.5)): + solidity-coverage@0.8.12(hardhat@2.22.5(typescript@4.9.5)): dependencies: '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.18.0 @@ -4157,10 +4295,10 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.4(typescript@4.9.5) + hardhat: 2.22.5(typescript@4.9.5) jsonschema: 1.4.1 lodash: 4.17.21 - mocha: 10.4.0 + mocha: 10.5.2 node-emoji: 1.11.0 pify: 4.0.1 recursive-readdir: 2.2.3 @@ -4231,7 +4369,7 @@ snapshots: table@6.8.2: dependencies: - ajv: 8.13.0 + ajv: 8.16.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -4282,7 +4420,7 @@ snapshots: dependencies: '@types/prettier': 2.7.3 command-line-args: 4.0.7 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) fs-extra: 7.0.1 glob: 7.2.3 js-sha3: 0.8.0 @@ -4298,7 +4436,7 @@ snapshots: typical@2.6.1: {} - uglify-js@3.17.4: + uglify-js@3.18.0: optional: true undici-types@5.26.5: {} @@ -4328,7 +4466,7 @@ snapshots: '@ethereumjs/util': 8.1.0 bn.js: 5.2.1 ethereum-bloom-filters: 1.1.0 - ethereum-cryptography: 2.1.3 + ethereum-cryptography: 2.2.0 ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: 2.1.0 @@ -4355,6 +4493,8 @@ snapshots: workerpool@6.2.1: {} + workerpool@6.5.1: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4365,12 +4505,14 @@ snapshots: ws@7.4.6: {} - ws@7.5.9: {} + ws@7.5.10: {} y18n@5.0.8: {} yargs-parser@20.2.4: {} + yargs-parser@20.2.9: {} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index a76f4b7..3fde7f4 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -5,6 +5,11 @@ import { Script } from "forge-std/Script.sol"; import { Safe7579 } from "src/Safe7579.sol"; import { Safe7579Launchpad } from "src/Safe7579Launchpad.sol"; import { IERC7484 } from "src/interfaces/IERC7484.sol"; +import { MockRegistry } from "test/mocks/MockRegistry.sol"; +import { Safe } from "@safe-global/safe-contracts/contracts/Safe.sol"; +import { SafeProxyFactory } from + "@safe-global/safe-contracts/contracts/proxies/SafeProxyFactory.sol"; +import { MockValidator } from "test/mocks/MockValidator.sol"; /** * @title Deploy @@ -15,10 +20,16 @@ contract DeployScript is Script { bytes32 salt = bytes32(uint256(0)); address entryPoint = address(0x0000000071727De22E5E9d8BAf0edAc6f37da032); - IERC7484 registry = IERC7484(0xe0cde9239d16bEf05e62Bbf7aA93e420f464c826); + IERC7484 registry = IERC7484(0x25A4b2F363678E13A0A5DB79b712dE00347a593E); vm.startBroadcast(vm.envUint("PK")); + // new MockValidator{ salt: salt }(); + + // new Safe{ salt: salt }(); + // new SafeProxyFactory{ salt: salt }(); + + // IERC7484 registry = new MockRegistry{ salt: salt }(); new Safe7579{ salt: salt }(); new Safe7579Launchpad{ salt: salt }(entryPoint, registry); diff --git a/script/DeployBuilder.s.sol b/script/DeployBuilder.s.sol new file mode 100644 index 0000000..03e2de8 --- /dev/null +++ b/script/DeployBuilder.s.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Script } from "forge-std/Script.sol"; +import { Safe7579UserOperationBuilder } from "src/utils/Safe7579UserOperationBuilder.sol"; + +/** + * @title Deploy + * @author @kopy-kat + */ +contract DeployBuilderScript is Script { + function run() public { + address entryPoint = address(0x0000000071727De22E5E9d8BAf0edAc6f37da032); + + bytes32 salt = bytes32(uint256(0)); + + vm.startBroadcast(vm.envUint("PK")); + + new Safe7579UserOperationBuilder{ salt: salt }(entryPoint); + + vm.stopBroadcast(); + } +} diff --git a/shell/prepare-artifacts.sh b/shell/prepare-artifacts.sh new file mode 100755 index 0000000..c3f197e --- /dev/null +++ b/shell/prepare-artifacts.sh @@ -0,0 +1,43 @@ + + +#!/usr/bin/env bash + +# Strict mode: https://gist.github.com/vncsna/64825d5609c146e80de8b1fd623011ca +set -euo pipefail + + +# Delete the current artifacts +artifacts=./artifacts +rm -rf $artifacts + +# Create the new artifacts directories +mkdir $artifacts \ + "$artifacts/interfaces" + +forge build + +cp out/Safe7579.sol/Safe7579.json $artifacts +cp out/Safe7579Launchpad.sol/Safe7579Launchpad.json $artifacts +cp out/DCUtil.sol/BatchedExecUtil.json $artifacts +cp out/DCUtil.sol/ModuleInstallUtil.json $artifacts +cp out/DCUtil.sol/Safe7579DCUtil.json $artifacts + + + +interfaces=./artifacts/interfaces + + +cp out/ISafe7579.sol/ISafe7579.json $interfaces +cp out/ISafeOp.sol/ISafeOp.json $interfaces +cp out/ISafe.sol/ISafe.json $interfaces +cp out/IERC7579Account.sol/IERC7579Account.json $interfaces +cp out/IERC7579Account.sol/IERC7579AccountEvents.json $interfaces +cp out/IERC7579Account.sol/IERC7579AccountView.json $interfaces +cp out/IERC7579Module.sol/IExecutor.json $interfaces +cp out/IERC7579Module.sol/IFallback.json $interfaces +cp out/IERC7579Module.sol/IHook.json $interfaces +cp out/IERC7579Module.sol/IModule.json $interfaces +cp out/IERC7579Module.sol/IValidator.json $interfaces +cp out/IMSA.sol/IMSA.json $interfaces + +pnpm prettier --write ./artifacts diff --git a/src/ISafe7579.sol b/src/ISafe7579.sol index 9570934..ccf5e43 100644 --- a/src/ISafe7579.sol +++ b/src/ISafe7579.sol @@ -2,18 +2,18 @@ pragma solidity ^0.8.20; import "./DataTypes.sol"; -import { IERC7579Account } from "./interfaces//IERC7579Account.sol"; - +import { IERC7579Account } from "./interfaces/IERC7579Account.sol"; import { ModeCode } from "./lib/ModeLib.sol"; import { PackedUserOperation } from "@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol"; +import { ISafeOp } from "./interfaces/ISafeOp.sol"; /** * @title ERC7579 Adapter for Safe accounts. * creates full ERC7579 compliance to Safe accounts * @author rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat) */ -interface ISafe7579 is IERC7579Account { +interface ISafe7579 is IERC7579Account, ISafeOp { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* Validation */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ @@ -30,7 +30,6 @@ interface ISafe7579 is IERC7579Account { uint256 missingAccountFunds ) external - payable returns (uint256 packedValidSig); /** @@ -71,7 +70,7 @@ interface ISafe7579 is IERC7579Account { * @param mode The encoded execution mode of the transaction. See ModeLib.sol for details * @param executionCalldata The encoded execution call data */ - function execute(ModeCode mode, bytes memory executionCalldata) external payable; + function execute(ModeCode mode, bytes memory executionCalldata) external; /** * @dev Executes a transaction on behalf of the Safe account. @@ -95,7 +94,6 @@ interface ISafe7579 is IERC7579Account { bytes memory executionCalldata ) external - payable returns (bytes[] memory returnDatas); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ @@ -117,13 +115,7 @@ interface ISafe7579 is IERC7579Account { * @param initData arbitrary data that may be required on the module during `onInstall` * initialization. */ - function installModule( - uint256 moduleType, - address module, - bytes memory initData - ) - external - payable; + function installModule(uint256 moduleType, address module, bytes memory initData) external; /** * Uninstalls a Module of a certain type on the smart account. @@ -142,8 +134,7 @@ interface ISafe7579 is IERC7579Account { address module, bytes memory deInitData ) - external - payable; + external; /** * Function to check if the account has a certain module installed @@ -190,8 +181,7 @@ interface ISafe7579 is IERC7579Account { ModuleInit[] memory hooks, RegistryInit memory registryInit ) - external - payable; + external; /** * This function is intended to be called by Launchpad.validateUserOp() @@ -201,7 +191,7 @@ interface ISafe7579 is IERC7579Account { * @dev Note: this function DOES NOT call onInstall() on the validator modules or emit * ModuleInstalled events. this has to be done by the launchpad */ - function launchpadValidators(ModuleInit[] memory validators) external payable; + function initializeAccountWithValidators(ModuleInit[] memory validators) external; /** * Configure the Safe7579 with a IERC7484 registry @@ -214,8 +204,8 @@ interface ISafe7579 is IERC7579Account { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* Query Account Details */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ - function getValidatorPaginated( - address start, + function getValidatorsPaginated( + address cursor, uint256 pageSize ) external @@ -243,14 +233,7 @@ interface ISafe7579 is IERC7579Account { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* Query Misc */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ - function supportsExecutionMode(ModeCode encodedMode) external pure returns (bool supported); - function supportsModule(uint256 moduleTypeId) external pure returns (bool); - function accountId() external view returns (string memory accountImplementationId); - /** - * Domain Separator for EIP-712. - */ - function domainSeparator() external view returns (bytes32); /** * Safe7579 is using validator selection encoding in the userop nonce. * to make it easier for SDKs / devs to integrate, this function can be @@ -264,18 +247,16 @@ interface ISafe7579 is IERC7579Account { /* Custom Errors */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ error InvalidModule(address module); - error LinkedListError(); - error InitializerError(); - error ValidatorStorageHelperError(); + error InvalidModuleType(address module, uint256 moduleType); // fallback handlers error InvalidInput(); + error InvalidCallType(CallType callType); error NoFallbackHandler(bytes4 msgSig); error InvalidFallbackHandler(bytes4 msgSig); error FallbackInstalled(bytes4 msgSig); // Hooks - error HookPostCheckFailed(); error HookAlreadyInstalled(address currentHook); error InvalidHookType(); diff --git a/src/Safe7579.sol b/src/Safe7579.sol index 7cad04a..3b2b9dc 100644 --- a/src/Safe7579.sol +++ b/src/Safe7579.sol @@ -6,7 +6,6 @@ import { CallType, ExecType, ModeCode, - ModeLib, EXECTYPE_DEFAULT, EXECTYPE_TRY, CALLTYPE_SINGLE, @@ -24,7 +23,7 @@ import { import { ModuleInstallUtil } from "./utils/DCUtil.sol"; import { AccessControl } from "./core/AccessControl.sol"; import { Initializer } from "./core/Initializer.sol"; -import { ISafeOp, SAFE_OP_TYPEHASH } from "./interfaces/ISafeOp.sol"; +import { SafeOp } from "./core/SafeOp.sol"; import { ISafe } from "./interfaces/ISafe.sol"; import { ISafe7579 } from "./ISafe7579.sol"; import { @@ -34,6 +33,7 @@ import { import { _packValidationData } from "@ERC4337/account-abstraction/contracts/core/Helpers.sol"; import { IEntryPoint } from "@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol"; import { IERC1271 } from "./interfaces/IERC1271.sol"; +import { SupportViewer } from "./core/SupportViewer.sol"; uint256 constant MULTITYPE_MODULE = 0; @@ -50,9 +50,7 @@ uint256 constant MULTITYPE_MODULE = 0; * event emissions to be done via the SafeProxy as msg.sender using Safe's * "executeTransactionFromModule" features. */ -contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { - using UserOperationLib for PackedUserOperation; - using ModeLib for ModeCode; +contract Safe7579 is ISafe7579, SafeOp, SupportViewer, AccessControl, Initializer { using ExecutionLib for bytes; bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = @@ -72,7 +70,6 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { bytes calldata executionCalldata ) external - payable withHook(IERC7579Account.execute.selector) onlyEntryPointOrSelf { @@ -89,12 +86,12 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ ISafe safe = ISafe(msg.sender); if (execType == EXECTYPE_DEFAULT) { - // DEFAULT EXEC & SINGLE CALL + // DEFAULT EXEC & BATCH CALL if (callType == CALLTYPE_BATCH) { Execution[] calldata executions = executionCalldata.decodeBatch(); _exec(safe, executions); } - // DEFAULT EXEC & BATCH CALL + // DEFAULT EXEC & SINGLE CALL else if (callType == CALLTYPE_SINGLE) { (address target, uint256 value, bytes calldata callData) = executionCalldata.decodeSingle(); @@ -153,11 +150,10 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { bytes calldata executionCalldata ) external - payable override onlyExecutorModule withHook(IERC7579Account.executeFromExecutor.selector) - withRegistry(msg.sender, MODULE_TYPE_EXECUTOR) + withRegistry(_msgSender(), MODULE_TYPE_EXECUTOR) returns (bytes[] memory returnDatas) { CallType callType; @@ -174,7 +170,7 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { /** * Internal function that will be solely called by executeFromExecutor. Not super uniform code, - * but we need need the JUMPI to avoid stack too deep, due to the modifiers in the + * but we need the JUMPI to avoid stack too deep, due to the modifiers in the * executeFromExecutor function */ function _executeReturn( @@ -190,12 +186,12 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ if (execType == EXECTYPE_DEFAULT) { - // DEFAULT EXEC & SINGLE CALL + // DEFAULT EXEC & BATCH CALL if (callType == CALLTYPE_BATCH) { Execution[] calldata executions = executionCalldata.decodeBatch(); returnDatas = _execReturn(ISafe(msg.sender), executions); } - // DEFAULT EXEC & BATCH CALL + // DEFAULT EXEC & SINGLE CALL else if (callType == CALLTYPE_SINGLE) { (address target, uint256 value, bytes calldata callData) = executionCalldata.decodeSingle(); @@ -218,12 +214,12 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { /* TRY EXEC */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ else if (execType == EXECTYPE_TRY) { - // TRY EXEC & SINGLE CALL + // TRY EXEC & BATCH CALL if (callType == CALLTYPE_BATCH) { Execution[] calldata executions = executionCalldata.decodeBatch(); (, returnDatas) = _tryExecReturn(ISafe(msg.sender), executions); } - // TRY EXEC & BATCH CALL + // TRY EXEC & SINGLE CALL else if (callType == CALLTYPE_SINGLE) { (address target, uint256 value, bytes calldata callData) = executionCalldata.decodeSingle(); @@ -259,7 +255,6 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { uint256 missingAccountFunds ) external - payable onlyEntryPoint returns (uint256 validSignature) { @@ -305,20 +300,23 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { view returns (uint256 validationData) { - ( - bytes memory operationData, - uint48 validAfter, - uint48 validUntil, - bytes calldata signatures - ) = _getSafeOp(userOp); - try ISafe(payable(msg.sender)).checkSignatures( - keccak256(operationData), operationData, signatures - ) { + (bytes memory operationData, uint48 validAfter, uint48 validUntil, bytes memory signatures) + = getSafeOp(userOp, entryPoint()); + try ISafe((msg.sender)).checkSignatures(keccak256(operationData), operationData, signatures) + { // The timestamps are validated by the entry point, // therefore we will not check them again - validationData = _packValidationData(false, validUntil, validAfter); + validationData = _packValidationData({ + sigFailed: false, + validUntil: validUntil, + validAfter: validAfter + }); } catch { - validationData = _packValidationData(true, validUntil, validAfter); + validationData = _packValidationData({ + sigFailed: true, + validUntil: validUntil, + validAfter: validAfter + }); } } @@ -336,7 +334,16 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { ISafe safe = ISafe(msg.sender); // check for safe's approved hashes - if (data.length == 0 && safe.signedMessages(hash) != 0) { + if (data.length == 0) { + bytes32 messageHash = keccak256( + EIP712.encodeMessageData( + safe.domainSeparator(), + SAFE_MSG_TYPEHASH, + abi.encode(keccak256(abi.encode(hash))) + ) + ); + + require(safe.signedMessages(messageHash) != 0, "Hash not approved"); // return magic value return IERC1271.isValidSignature.selector; } @@ -375,12 +382,11 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { bytes calldata initData ) external - payable override withHook(IERC7579Account.installModule.selector) onlyEntryPointOrSelf { - // internal install functions will decode the initData param, and return sanitzied + // internal install functions will decode the initData param, and return sanitized // moduleInitData. This is the initData that will be passed to Module.onInstall() bytes memory moduleInitData; if (moduleType == MODULE_TYPE_VALIDATOR) { @@ -416,12 +422,11 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { bytes calldata deInitData ) external - payable override - withHook(IERC7579Account.uninstallModule.selector) + tryWithHook(module, IERC7579Account.uninstallModule.selector) onlyEntryPointOrSelf { - // internal uninstall functions will decode the deInitData param, and return sanitzied + // internal uninstall functions will decode the deInitData param, and return sanitized // moduleDeInitData. This is the initData that will be passed to Module.onUninstall() bytes memory moduleDeInitData; if (moduleType == MODULE_TYPE_VALIDATOR) { @@ -432,6 +437,8 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { moduleDeInitData = _uninstallFallbackHandler(module, deInitData); } else if (moduleType == MODULE_TYPE_HOOK) { moduleDeInitData = _uninstallHook(module, deInitData); + } else if (moduleType == MULTITYPE_MODULE) { + moduleDeInitData = _multiTypeUninstall(module, deInitData); } else { revert UnsupportedModuleType(moduleType); } @@ -448,43 +455,6 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { }); } - /** - * @inheritdoc ISafe7579 - */ - function supportsExecutionMode(ModeCode encodedMode) - external - pure - override - returns (bool supported) - { - CallType callType; - ExecType execType; - // solhint-disable-next-line no-inline-assembly - assembly { - callType := encodedMode - execType := shl(8, encodedMode) - } - if (callType == CALLTYPE_BATCH) supported = true; - else if (callType == CALLTYPE_SINGLE) supported = true; - else if (callType == CALLTYPE_DELEGATECALL) supported = true; - else return false; - - if (supported && execType == EXECTYPE_DEFAULT) return supported; - else if (supported && execType == EXECTYPE_TRY) return supported; - else return false; - } - - /** - * @inheritdoc ISafe7579 - */ - function supportsModule(uint256 moduleTypeId) external pure override returns (bool) { - if (moduleTypeId == MODULE_TYPE_VALIDATOR) return true; - else if (moduleTypeId == MODULE_TYPE_EXECUTOR) return true; - else if (moduleTypeId == MODULE_TYPE_FALLBACK) return true; - else if (moduleTypeId == MODULE_TYPE_HOOK) return true; - else return false; - } - /** * @inheritdoc ISafe7579 */ @@ -498,6 +468,9 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { returns (bool) { if (moduleType == MODULE_TYPE_VALIDATOR) { + // Safe7579 adapter allows for validator fallback to Safe's checkSignatures(). + // It can thus be considered a valid validator module + if (module == msg.sender) return true; return _isValidatorInstalled(module); } else if (moduleType == MODULE_TYPE_EXECUTOR) { return _isExecutorInstalled(module); @@ -510,99 +483,6 @@ contract Safe7579 is ISafe7579, ISafeOp, AccessControl, Initializer { } } - /** - * @inheritdoc ISafe7579 - */ - function accountId() external view returns (string memory accountImplementationId) { - string memory safeVersion = ISafe(msg.sender).VERSION(); - return string(abi.encodePacked("safe-", safeVersion, ".erc7579.v0.0.1")); - } - - /** - * @dev Decodes an ERC-4337 user operation into a Safe operation. - * @param userOp The ERC-4337 user operation. - * @return operationData Encoded EIP-712 Safe operation data bytes used for signature - * verification. - * @return validAfter The timestamp the user operation is valid from. - * @return validUntil The timestamp the user operation is valid until. - * @return signatures The Safe owner signatures extracted from the user operation. - */ - function _getSafeOp(PackedUserOperation calldata userOp) - internal - view - returns ( - bytes memory operationData, - uint48 validAfter, - uint48 validUntil, - bytes calldata signatures - ) - { - // Extract additional Safe operation fields from the user operation signature which is - // encoded as: - // `abi.encodePacked(validAfter, validUntil, signatures)` - { - bytes calldata sig = userOp.signature; - validAfter = uint48(bytes6(sig[0:6])); - validUntil = uint48(bytes6(sig[6:12])); - signatures = sig[12:]; - } - - // It is important that **all** user operation fields are represented in the `SafeOp` data - // somehow, to prevent - // user operations from being submitted that do not fully respect the user preferences. The - // only exception is - // the `signature` bytes. Note that even `initCode` needs to be represented in the operation - // data, otherwise - // it can be replaced with a more expensive initialization that would charge the user - // additional fees. - { - // In order to work around Solidity "stack too deep" errors related to too many stack - // variables, manually - // encode the `SafeOp` fields into a memory `struct` for computing the EIP-712 - // struct-hash. This works - // because the `EncodedSafeOpStruct` struct has no "dynamic" fields so its memory layout - // is identical to the - // result of `abi.encode`-ing the individual fields. - EncodedSafeOpStruct memory encodedSafeOp = EncodedSafeOpStruct({ - typeHash: SAFE_OP_TYPEHASH, - safe: msg.sender, - nonce: userOp.nonce, - initCodeHash: keccak256(userOp.initCode), - callDataHash: keccak256(userOp.callData), - callGasLimit: userOp.unpackCallGasLimit(), - verificationGasLimit: userOp.unpackVerificationGasLimit(), - preVerificationGas: userOp.preVerificationGas, - maxFeePerGas: userOp.unpackMaxFeePerGas(), - maxPriorityFeePerGas: userOp.unpackMaxPriorityFeePerGas(), - paymasterAndDataHash: keccak256(userOp.paymasterAndData), - validAfter: validAfter, - validUntil: validUntil, - entryPoint: entryPoint() - }); - - bytes32 safeOpStructHash; - // solhint-disable-next-line no-inline-assembly - assembly ("memory-safe") { - // Since the `encodedSafeOp` value's memory layout is identical to the result of - // `abi.encode`-ing the - // individual `SafeOp` fields, we can pass it directly to `keccak256`. Additionally, - // there are 14 - // 32-byte fields to hash, for a length of `14 * 32 = 448` bytes. - safeOpStructHash := keccak256(encodedSafeOp, 448) - } - - operationData = - abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeOpStructHash); - } - } - - /** - * @inheritdoc ISafe7579 - */ - function domainSeparator() public view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, block.chainid, this)); - } - /** * @inheritdoc ISafe7579 */ diff --git a/src/Safe7579Launchpad.sol b/src/Safe7579Launchpad.sol index cbaa8f7..588183c 100644 --- a/src/Safe7579Launchpad.sol +++ b/src/Safe7579Launchpad.sol @@ -1,16 +1,31 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.20; -import { IAccount, PackedUserOperation } from "account-abstraction/interfaces/IAccount.sol"; +import { _packValidationData } from "@ERC4337/account-abstraction/contracts/core/Helpers.sol"; +import { SafeOp } from "./core/SafeOp.sol"; + +import { + IAccount, + PackedUserOperation +} from "@ERC4337/account-abstraction/contracts/interfaces/IAccount.sol"; import { ISafe } from "./interfaces/ISafe.sol"; +import { ISafeOp } from "./interfaces/ISafeOp.sol"; import { ISafe7579 } from "./ISafe7579.sol"; import { IERC7484 } from "./interfaces/IERC7484.sol"; import "./DataTypes.sol"; +import { UserOperationLib } from "@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol"; + import { IValidator } from "erc7579/interfaces/IERC7579Module.sol"; import { SafeStorage } from "@safe-global/safe-contracts/contracts/libraries/SafeStorage.sol"; +import { MODULE_TYPE_VALIDATOR } from "erc7579/interfaces/IERC7579Module.sol"; +import { CheckSignatures } from "@rhinestone/checknsignatures/src/CheckNSignatures.sol"; +import { LibSort } from "solady/utils/LibSort.sol"; +import { SupportViewer } from "./core/SupportViewer.sol"; +import { IERC7579AccountEvents } from "./interfaces/IERC7579Account.sol"; + /** * Launchpad to deploy a Safe account and connect the Safe7579 adapter. * Check Readme.md for more information. @@ -18,11 +33,15 @@ import { SafeStorage } from "@safe-global/safe-contracts/contracts/libraries/Saf * technique](https://github.com/safe-global/safe-modules/pull/184) * @author rhinestone | zeroknots.eth */ -contract Safe7579Launchpad is IAccount, SafeStorage { - event ModuleInstalled(uint256 moduleTypeId, address module); - - bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = - keccak256("EIP712Domain(uint256 chainId,address verifyingContract)"); +contract Safe7579Launchpad is + IAccount, + SafeStorage, + SafeOp, + SupportViewer, + IERC7579AccountEvents +{ + using LibSort for address[]; + using CheckSignatures for bytes32; // keccak256("Safe7579Launchpad.initHash") - 1 uint256 private constant INIT_HASH_SLOT = @@ -42,16 +61,13 @@ contract Safe7579Launchpad is IAccount, SafeStorage { bytes callData; } - // solhint-disable max-line-length - bytes32 private constant SAFE_INIT_TYPEHASH = keccak256( - "InitData(address singleton,address[] owners,uint256 threshold,address setupTo,bytes setupData,address safe7579,ModuleInit[] validators,bytes callData)" - ); - address private immutable SELF; address public immutable SUPPORTED_ENTRYPOINT; IERC7484 public immutable REGISTRY; error InvalidEntryPoint(); + error InvalidSetup(); + error Safe7579LaunchpadAlreadyInitialized(); error OnlyDelegatecall(); error OnlyProxy(); error PreValidationSetupFailed(); @@ -66,7 +82,7 @@ contract Safe7579Launchpad is IAccount, SafeStorage { REGISTRY = registry; } - modifier onlyDelegatecall() { + modifier onlySelfDelegatecall() { if (msg.sender != address(this)) revert OnlyDelegatecall(); _; } @@ -81,7 +97,7 @@ contract Safe7579Launchpad is IAccount, SafeStorage { _; } - receive() external payable { } + receive() external payable onlyProxy { } /** * This function is intended to be delegatecalled by the ISafe.setup function. It configures the @@ -97,10 +113,10 @@ contract Safe7579Launchpad is IAccount, SafeStorage { uint8 threshold ) public - onlyDelegatecall + onlySelfDelegatecall { ISafe(address(this)).enableModule(safe7579); - ISafe7579(payable(safe7579)).initializeAccount({ + ISafe7579(payable(this)).initializeAccount({ validators: new ModuleInit[](0), executors: executors, fallbacks: fallbacks, @@ -109,6 +125,31 @@ contract Safe7579Launchpad is IAccount, SafeStorage { }); } + /** + * This function allows existing safe accounts to add the Safe7579 adapter to their account + */ + function addSafe7579( + address safe7579, + ModuleInit[] calldata validators, + ModuleInit[] calldata executors, + ModuleInit[] calldata fallbacks, + ModuleInit[] calldata hooks, + address[] calldata attesters, + uint8 threshold + ) + external + { + ISafe(address(this)).enableModule(safe7579); + ISafe(address(this)).setFallbackHandler(safe7579); + ISafe7579(payable(this)).initializeAccount({ + validators: validators, + executors: executors, + fallbacks: fallbacks, + hooks: hooks, + registryInit: RegistryInit({ registry: REGISTRY, attesters: attesters, threshold: threshold }) + }); + } + /** * SafeProxyFactory will create a SafeProxy and using this contract as the singleton * implementation and call this function to initialize the account. @@ -125,6 +166,8 @@ contract Safe7579Launchpad is IAccount, SafeStorage { external onlyProxy { + if (getInitHash() != bytes32(0)) revert Safe7579LaunchpadAlreadyInitialized(); + // sstore inithash _setInitHash(initHash); @@ -160,7 +203,6 @@ contract Safe7579Launchpad is IAccount, SafeStorage { uint256 missingAccountFunds ) external - override onlyProxy // ensure SafeProxy called this onlySupportedEntryPoint returns (uint256 validationData) @@ -171,7 +213,7 @@ contract Safe7579Launchpad is IAccount, SafeStorage { InitData memory initData = abi.decode(userOp.callData[4:], (InitData)); // read stored initHash from SafeProxy storage. only proceed if the InitData hash matches - if (hash(initData) != _initHash()) revert InvalidInitHash(); + if (hash(initData) != getInitHash()) revert InvalidInitHash(); // get validator from nonce encoding address validator; @@ -182,26 +224,50 @@ contract Safe7579Launchpad is IAccount, SafeStorage { } // initialize validator on behalf of the safe account - ISafe7579(initData.safe7579).launchpadValidators(initData.validators); + // the call below is equivalent to: + // ISafe7579(initData.safe7579).initializeAccountWithValidators(initData.validators); + // but we need to append msg.sender (entrypoint) to ERC2771 style access control, to protect + // the launchpadValidator function + (bool success,) = address(initData.safe7579).call( + abi.encodePacked( + abi.encodeCall(ISafe7579.initializeAccountWithValidators, (initData.validators)), // validators + msg.sender // ERC2771 access control + ) + ); + + // ensure that the call was successful + if (!success) revert InvalidUserOperationData(); // Call onInstall on each validator module to set up the validators. - // Since this function is delegatecalled by the SafeProxy, the Validator Module is called + // Since this function is delegatecalled by the SafeProxy, the Validator Module is + // called // with msg.sender == SafeProxy. bool userOpValidatorInstalled; uint256 validatorsLength = initData.validators.length; for (uint256 i; i < validatorsLength; i++) { address validatorModule = initData.validators[i].module; IValidator(validatorModule).onInstall(initData.validators[i].initData); - emit ModuleInstalled(1, validatorModule); + emit ModuleInstalled(MODULE_TYPE_VALIDATOR, validatorModule); if (validatorModule == validator) userOpValidatorInstalled = true; } + // Ensure that the validator module selected in the userOp was // part of the validators in InitData - if (!userOpValidatorInstalled) return 1; - - // validate userOp with selected validation module. - validationData = IValidator(validator).validateUserOp(userOp, userOpHash); + if (userOpValidatorInstalled) { + // validate userOp with selected validation module. + validationData = IValidator(validator).validateUserOp(userOp, userOpHash); + } else { + // otherwise we fall back to safe-style validation, like in the safe7579 + (bool validSig, uint48 validUntil, uint48 validAfter) = + _isValidSafeSigners(initData, userOp); + + validationData = _packValidationData({ + sigFailed: !validSig, + validUntil: validUntil, + validAfter: validAfter + }); + } // pay back gas to EntryPoint if (missingAccountFunds > 0) { @@ -212,6 +278,45 @@ contract Safe7579Launchpad is IAccount, SafeStorage { } } + function _isValidSafeSigners( + InitData memory safeSetupCallData, + PackedUserOperation calldata userOp + ) + internal + view + returns (bool validSig, uint48 validUntil, uint48 validAfter) + { + bytes memory operationData; + bytes memory signatures; + // decode ERC4337 userOp into Safe operation. + (operationData, validAfter, validUntil, signatures) = + ISafeOp(safeSetupCallData.safe7579).getSafeOp(userOp, SUPPORTED_ENTRYPOINT); + bytes32 _hash = keccak256(operationData); + + address[] memory signers = _hash.recoverNSignatures(signatures, safeSetupCallData.threshold); + signers.insertionSort(); + + address[] memory owners = safeSetupCallData.owners; + + // sorting owners here instead of requiring sorted list for improved UX + owners.insertionSort(); + owners.uniquifySorted(); + + uint256 ownersLength = owners.length; + + uint256 validSigs; + for (uint256 i; i < ownersLength; i++) { + (bool found,) = signers.searchSorted(owners[i]); + if (found) { + validSigs++; + if (validSigs >= safeSetupCallData.threshold) { + return (true, validUntil, validAfter); + } + } + } + return (false, validUntil, validAfter); + } + /** * During the execution phase of ERC4337, this function upgrades the SafeProxy to the actual * SafeSingleton implementation. Subsequently, it invokes the ISafe.setup() function to @@ -228,9 +333,11 @@ contract Safe7579Launchpad is IAccount, SafeStorage { // from now on, ISafe can be used to interact with the SafeProxy SafeStorage.singleton = initData.singleton; - // setup SafeAccount // setupTo should be this launchpad - // setupData should be a call to this.initSafe7579() + if (initData.setupTo != SELF) revert InvalidSetup(); + // // setupData should be a call to this.initSafe7579() + if (bytes4(initData.setupData[:4]) != this.initSafe7579.selector) revert InvalidSetup(); + // setup SafeAccount ISafe(address(this)).setup({ _owners: initData.owners, _threshold: initData.threshold, @@ -261,12 +368,8 @@ contract Safe7579Launchpad is IAccount, SafeStorage { } } - function _domainSeparator() internal view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, block.chainid, SELF)); - } - // sload inithash from SafeProxy storage - function _initHash() public view returns (bytes32 value) { + function getInitHash() public view returns (bytes32 value) { // solhint-disable-next-line no-inline-assembly assembly ("memory-safe") { value := sload(INIT_HASH_SLOT) diff --git a/src/core/ExecutionHelper.sol b/src/core/ExecutionHelper.sol index 00ca29f..b28bff3 100644 --- a/src/core/ExecutionHelper.sol +++ b/src/core/ExecutionHelper.sol @@ -34,12 +34,13 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { } function _exec(ISafe safe, address target, uint256 value, bytes memory callData) internal { - bool success = safe.execTransactionFromModule(target, value, callData, 0); + bool success = safe.execTransactionFromModule(target, value, callData, ISafe.Operation.Call); if (!success) revert ExecutionFailed(); } function _delegatecall(ISafe safe, address target, bytes memory callData) internal { - bool success = safe.execTransactionFromModule(target, 0, callData, 1); + bool success = + safe.execTransactionFromModule(target, 0, callData, ISafe.Operation.DelegateCall); if (!success) revert ExecutionFailed(); } @@ -58,12 +59,14 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { internal returns (bytes[] memory retDatas) { - bytes memory tmp = _delegatecallReturn({ - safe: safe, - target: UTIL, - callData: abi.encodeCall(BatchedExecUtil.executeReturn, executions) - }); - retDatas = abi.decode(tmp, (bytes[])); + retDatas = abi.decode( + _delegatecallReturn({ + safe: safe, + target: UTIL, + callData: abi.encodeCall(BatchedExecUtil.executeReturn, executions) + }), + (bytes[]) + ); } function _execReturn( @@ -76,7 +79,8 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { returns (bytes memory retData) { bool success; - (success, retData) = safe.execTransactionFromModuleReturnData(target, value, callData, 0); + (success, retData) = + safe.execTransactionFromModuleReturnData(target, value, callData, ISafe.Operation.Call); if (!success) revert ExecutionFailed(); } @@ -89,7 +93,9 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { returns (bytes memory retData) { bool success; - (success, retData) = safe.execTransactionFromModuleReturnData(target, 0, callData, 1); + (success, retData) = safe.execTransactionFromModuleReturnData( + target, 0, callData, ISafe.Operation.DelegateCall + ); if (!success) revert ExecutionFailed(); } @@ -110,12 +116,13 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { } function _tryExec(ISafe safe, address target, uint256 value, bytes memory callData) internal { - bool success = safe.execTransactionFromModule(target, value, callData, 0); + bool success = safe.execTransactionFromModule(target, value, callData, ISafe.Operation.Call); if (!success) emit TryExecutionFailed(safe, 0); } function _tryDelegatecall(ISafe safe, address target, bytes memory callData) internal { - bool success = safe.execTransactionFromModule(target, 0, callData, 1); + bool success = + safe.execTransactionFromModule(target, 0, callData, ISafe.Operation.DelegateCall); if (!success) emit TryExecutionFailed(safe, 0); } @@ -141,6 +148,11 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { callData: abi.encodeCall(BatchedExecUtil.tryExecuteReturn, executions) }); (success, retDatas) = abi.decode(tmp, (bool[], bytes[])); + + uint256 length = success.length; + for (uint256 i; i < length; i++) { + if (!success[i]) emit TryExecutionFailed(safe, i); + } } function _tryExecReturn( @@ -153,7 +165,8 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { returns (bytes memory retData) { bool success; - (success, retData) = safe.execTransactionFromModuleReturnData(target, value, callData, 0); + (success, retData) = + safe.execTransactionFromModuleReturnData(target, value, callData, ISafe.Operation.Call); if (!success) emit TryExecutionFailed(safe, 0); } @@ -166,7 +179,10 @@ abstract contract ExecutionHelper is Safe7579DCUtilSetup { returns (bytes memory retData) { bool success; - (success, retData) = safe.execTransactionFromModuleReturnData(target, 0, callData, 1); + (success, retData) = safe.execTransactionFromModuleReturnData( + target, 0, callData, ISafe.Operation.DelegateCall + ); + if (!success) emit TryExecutionFailed(safe, 0); } diff --git a/src/core/Initializer.sol b/src/core/Initializer.sol index e59a4de..16c9c78 100644 --- a/src/core/Initializer.sol +++ b/src/core/Initializer.sol @@ -2,8 +2,17 @@ pragma solidity ^0.8.20; import { ISafe7579 } from "../ISafe7579.sol"; +import { ISafe } from "../interfaces/ISafe.sol"; import "../DataTypes.sol"; +import { ModuleInstallUtil } from "../utils/DCUtil.sol"; import { ModuleManager } from "./ModuleManager.sol"; + +import { + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_HOOK, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "erc7579/interfaces/IERC7579Module.sol"; import { IERC7484 } from "../interfaces/IERC7484.sol"; import { SentinelList4337Lib } from "sentinellist/SentinelList4337.sol"; import { SentinelListLib } from "sentinellist/SentinelList.sol"; @@ -14,7 +23,6 @@ import { SentinelListLib } from "sentinellist/SentinelList.sol"; */ abstract contract Initializer is ISafe7579, ModuleManager { using SentinelList4337Lib for SentinelList4337Lib.SentinelList; - using SentinelListLib for SentinelListLib.SentinelList; event Safe7579Initialized(address indexed safe); @@ -23,7 +31,11 @@ abstract contract Initializer is ISafe7579, ModuleManager { /** * @inheritdoc ISafe7579 */ - function launchpadValidators(ModuleInit[] calldata validators) external payable override { + function initializeAccountWithValidators(ModuleInit[] calldata validators) + external + override + onlyEntryPointOrSelf + { // this will revert if already initialized $validators.init({ account: msg.sender }); uint256 length = validators.length; @@ -34,6 +46,7 @@ abstract contract Initializer is ISafe7579, ModuleManager { // at this point, the safeproxy singleton is not yet updated to the SafeSingleton // calling execTransactionFromModule is not available yet. } + emit Safe7579Initialized(msg.sender); } /** @@ -46,8 +59,8 @@ abstract contract Initializer is ISafe7579, ModuleManager { ModuleInit[] calldata hooks, RegistryInit calldata registryInit ) - public - payable + external + onlyEntryPointOrSelf { _configureRegistry(registryInit.registry, registryInit.attesters, registryInit.threshold); // this will revert if already initialized @@ -66,6 +79,7 @@ abstract contract Initializer is ISafe7579, ModuleManager { ) internal { + bytes memory moduleInitData; uint256 length = validators.length; // if this function is called by the launchpad, validators will be initialized via // launchpadValidators() @@ -75,35 +89,73 @@ abstract contract Initializer is ISafe7579, ModuleManager { for (uint256 i; i < length; i++) { ModuleInit calldata validator = validators[i]; // enable module on Safe7579, initialize module via Safe, emit events - _installValidator(validator.module, validator.initData); + moduleInitData = _installValidator(validator.module, validator.initData); + + // Initialize Module via Safe + _delegatecall({ + safe: ISafe(msg.sender), + target: UTIL, + callData: abi.encodeCall( + ModuleInstallUtil.installModule, + (MODULE_TYPE_VALIDATOR, validator.module, moduleInitData) + ) + }); } } else if (length != 0) { revert InvalidInitData(msg.sender); } - SentinelListLib.SentinelList storage $executors = $executorStorage[msg.sender]; // this will revert if already initialized. - $executors.init(); + $executors.init({ account: msg.sender }); length = executors.length; for (uint256 i; i < length; i++) { ModuleInit calldata executor = executors[i]; // enable module on Safe7579, initialize module via Safe, emit events - _installExecutor(executor.module, executor.initData); + moduleInitData = _installExecutor(executor.module, executor.initData); + + // Initialize Module via Safe + _delegatecall({ + safe: ISafe(msg.sender), + target: UTIL, + callData: abi.encodeCall( + ModuleInstallUtil.installModule, + (MODULE_TYPE_EXECUTOR, executor.module, moduleInitData) + ) + }); } length = fallbacks.length; for (uint256 i; i < length; i++) { ModuleInit calldata _fallback = fallbacks[i]; // enable module on Safe7579, initialize module via Safe, emit events - _installFallbackHandler(_fallback.module, _fallback.initData); + moduleInitData = _installFallbackHandler(_fallback.module, _fallback.initData); + + // Initialize Module via Safe + _delegatecall({ + safe: ISafe(msg.sender), + target: UTIL, + callData: abi.encodeCall( + ModuleInstallUtil.installModule, + (MODULE_TYPE_FALLBACK, _fallback.module, moduleInitData) + ) + }); } length = hooks.length; for (uint256 i; i < length; i++) { ModuleInit calldata hook = hooks[i]; // enable module on Safe7579, initialize module via Safe, emit events - _installHook(hook.module, hook.initData); + moduleInitData = _installHook(hook.module, hook.initData); + + // Initialize Module via Safe + _delegatecall({ + safe: ISafe(msg.sender), + target: UTIL, + callData: abi.encodeCall( + ModuleInstallUtil.installModule, (MODULE_TYPE_HOOK, hook.module, moduleInitData) + ) + }); } emit Safe7579Initialized(msg.sender); diff --git a/src/core/ModuleManager.sol b/src/core/ModuleManager.sol index e0fa302..4bdaaf4 100644 --- a/src/core/ModuleManager.sol +++ b/src/core/ModuleManager.sol @@ -33,7 +33,6 @@ import { * respective section */ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryAdapter { - using SentinelListLib for SentinelListLib.SentinelList; using SentinelList4337Lib for SentinelList4337Lib.SentinelList; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ @@ -97,8 +96,8 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA /** * Get paginated list of installed validators */ - function getValidatorPaginated( - address start, + function getValidatorsPaginated( + address cursor, uint256 pageSize ) external @@ -108,7 +107,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA { return $validators.getEntriesPaginated({ account: msg.sender, - start: start, + start: cursor, pageSize: pageSize }); } @@ -116,8 +115,8 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EXECUTOR MODULES */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ - mapping(address smartAccount => SentinelListLib.SentinelList _executors) internal - $executorStorage; + + SentinelList4337Lib.SentinelList internal $executors; modifier onlyExecutorModule() { if (!_isExecutorInstalled(_msgSender())) revert InvalidModule(_msgSender()); @@ -138,8 +137,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA withRegistry(executor, MODULE_TYPE_EXECUTOR) returns (bytes memory moduleInitData) { - SentinelListLib.SentinelList storage $executors = $executorStorage[msg.sender]; - $executors.push(executor); + $executors.push({ account: msg.sender, newEntry: executor }); return data; } @@ -156,15 +154,18 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA internal returns (bytes memory moduleDeInitData) { - SentinelListLib.SentinelList storage $executors = $executorStorage[msg.sender]; address prev; (prev, moduleDeInitData) = abi.decode(data, (address, bytes)); - $executors.pop(prev, executor); + $executors.pop({ account: msg.sender, prevEntry: prev, popEntry: executor }); } - function _isExecutorInstalled(address executor) internal view virtual returns (bool) { - SentinelListLib.SentinelList storage $executors = $executorStorage[msg.sender]; - return $executors.contains(executor); + function _isExecutorInstalled(address executor) + internal + view + virtual + returns (bool isInstalled) + { + isInstalled = $executors.contains({ account: msg.sender, entry: executor }); } /** @@ -172,22 +173,25 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA */ function getExecutorsPaginated( address cursor, - uint256 size + uint256 pageSize ) external view virtual returns (address[] memory array, address next) { - SentinelListLib.SentinelList storage $executors = $executorStorage[msg.sender]; - return $executors.getEntriesPaginated(cursor, size); + return $executors.getEntriesPaginated({ + account: msg.sender, + start: cursor, + pageSize: pageSize + }); } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* FALLBACK MODULES */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ - mapping(address smartAccount => mapping(bytes4 selector => FallbackHandler handlerConfig)) + mapping(bytes4 selector => mapping(address smartAccount => FallbackHandler handlerConfig)) internal $fallbackStorage; function _installFallbackHandler( @@ -207,9 +211,15 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA if ( functionSig == IModule.onInstall.selector || functionSig == IModule.onUninstall.selector ) revert InvalidFallbackHandler(functionSig); + + // disallow unsupported calltypes + if (calltype != CALLTYPE_SINGLE && calltype != CALLTYPE_STATIC) { + revert InvalidCallType(calltype); + } + if (_isFallbackHandlerInstalled(functionSig)) revert FallbackInstalled(functionSig); - FallbackHandler storage $fallbacks = $fallbackStorage[msg.sender][functionSig]; + FallbackHandler storage $fallbacks = $fallbackStorage[functionSig][msg.sender]; $fallbacks.calltype = calltype; $fallbacks.handler = handler; @@ -217,7 +227,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA } function _isFallbackHandlerInstalled(bytes4 functionSig) internal view virtual returns (bool) { - FallbackHandler storage $fallbacks = $fallbackStorage[msg.sender][functionSig]; + FallbackHandler storage $fallbacks = $fallbackStorage[functionSig][msg.sender]; return $fallbacks.handler != address(0); } @@ -232,7 +242,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA bytes4 functionSig; (functionSig, moduleDeInitData) = abi.decode(context, (bytes4, bytes)); - FallbackHandler storage $fallbacks = $fallbackStorage[msg.sender][functionSig]; + FallbackHandler storage $fallbacks = $fallbackStorage[functionSig][msg.sender]; delete $fallbacks.handler; } @@ -247,7 +257,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA { bytes4 functionSig = abi.decode(additionalContext, (bytes4)); - FallbackHandler storage $fallbacks = $fallbackStorage[msg.sender][functionSig]; + FallbackHandler storage $fallbacks = $fallbackStorage[functionSig][msg.sender]; return $fallbacks.handler == _handler; } @@ -278,7 +288,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA returns (bytes memory fallbackRet) { // get handler for specific function selector - FallbackHandler storage $fallbacks = $fallbackStorage[msg.sender][msg.sig]; + FallbackHandler storage $fallbacks = $fallbackStorage[msg.sig][msg.sender]; address handler = $fallbacks.handler; CallType calltype = $fallbacks.calltype; // if no handler is set for the msg.sig, revert @@ -309,7 +319,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ mapping(address smartAccount => address globalHook) internal $globalHook; - mapping(address smartAccount => mapping(bytes4 => address hook)) internal $hookManager; + mapping(bytes4 selector => mapping(address smartAccount => address hook)) internal $hookManager; /** * Run precheck hook for global and function selector specific @@ -375,12 +385,25 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA */ modifier withHook(bytes4 selector) { address globalHook = $globalHook[msg.sender]; - address sigHook = $hookManager[msg.sender][selector]; + address sigHook = $hookManager[selector][msg.sender]; (bytes memory global, bytes memory sig) = _preHooks(globalHook, sigHook); _; _postHooks(globalHook, sigHook, global, sig); } + modifier tryWithHook(address module, bytes4 selector) { + address globalHook = $globalHook[msg.sender]; + address sigHook = $hookManager[selector][msg.sender]; + + if (module != globalHook && module != sigHook) { + (bytes memory global, bytes memory sig) = _preHooks(globalHook, sigHook); + _; + _postHooks(globalHook, sigHook, global, sig); + } else { + _; + } + } + /** * Install and initialize hook module * @dev This function will install a hook module and return the moduleInitData @@ -410,13 +433,13 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA } $globalHook[msg.sender] = hook; } else if (hookType == HookType.SIG) { + currentHook = $hookManager[selector][msg.sender]; // Dont allow hooks to be overwritten. If a hook is currently installed, it must be // uninstalled first if (currentHook != address(0)) { revert HookAlreadyInstalled(currentHook); } - currentHook = $hookManager[msg.sender][selector]; - $hookManager[msg.sender][selector] = hook; + $hookManager[selector][msg.sender] = hook; } else { revert InvalidHookType(); } @@ -438,7 +461,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA if (hookType == HookType.GLOBAL && selector == 0x0) { delete $globalHook[msg.sender]; } else if (hookType == HookType.SIG) { - delete $hookManager[msg.sender][selector]; + delete $hookManager[selector][msg.sender]; } else { revert InvalidHookType(); } @@ -457,7 +480,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA hook = $globalHook[msg.sender]; } if (hookType == HookType.SIG) { - hook = $hookManager[msg.sender][selector]; + hook = $hookManager[selector][msg.sender]; } } @@ -475,7 +498,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA } function getActiveHook(bytes4 selector) public view returns (address hook) { - return $hookManager[msg.sender][selector]; + return $hookManager[selector][msg.sender]; } function getActiveHook() public view returns (address hook) { @@ -486,7 +509,7 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA /** * To make it easier to install multiple modules at once, this function will * install multiple modules at once. The init data is expected to be a abi encoded tuple - * of (uint[] types, bytes[] contexts, bytes[] moduleInitData) + * of (uint[] types, bytes[] contexts, bytes moduleInitData) * @dev Install multiple modules at once * @param module address of the module * @param initData initialization data for the module @@ -554,10 +577,84 @@ abstract contract ModuleManager is ISafe7579, AccessControl, Receiver, RegistryA /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ else if (_type == MODULE_TYPE_HOOK) { _installHook(module, contexts[i]); + } else { + revert InvalidModuleType(module, _type); } } // memory allocate the moduleInitData to return. This data should be used by the caller to // initialize the module _moduleInitData = moduleInitData; } + + function _multiTypeUninstall( + address module, + bytes calldata initData + ) + internal + returns (bytes memory _moduleDeInitData) + { + uint256[] calldata types; + bytes[] calldata contexts; + bytes calldata moduleDeInitData; + + // equivalent of: + // (types, contexs, moduleInitData) = abi.decode(initData,(uint[],bytes[],bytes) + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + let offset := initData.offset + let baseOffset := offset + let dataPointer := add(baseOffset, calldataload(offset)) + + types.offset := add(dataPointer, 32) + types.length := calldataload(dataPointer) + offset := add(offset, 32) + + dataPointer := add(baseOffset, calldataload(offset)) + contexts.offset := add(dataPointer, 32) + contexts.length := calldataload(dataPointer) + offset := add(offset, 32) + + dataPointer := add(baseOffset, calldataload(offset)) + moduleDeInitData.offset := add(dataPointer, 32) + moduleDeInitData.length := calldataload(dataPointer) + } + + uint256 length = types.length; + if (contexts.length != length) revert InvalidInput(); + + // iterate over all module types and install the module as a type accordingly + for (uint256 i; i < length; i++) { + uint256 _type = types[i]; + + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* INSTALL VALIDATORS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + if (_type == MODULE_TYPE_VALIDATOR) { + _uninstallValidator(module, contexts[i]); + } + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* INSTALL EXECUTORS */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + else if (_type == MODULE_TYPE_EXECUTOR) { + _uninstallExecutor(module, contexts[i]); + } + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* INSTALL FALLBACK */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + else if (_type == MODULE_TYPE_FALLBACK) { + _uninstallFallbackHandler(module, contexts[i]); + } + /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ + /* INSTALL HOOK (global or sig specific) */ + /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ + else if (_type == MODULE_TYPE_HOOK) { + _uninstallHook(module, contexts[i]); + } else { + revert InvalidModuleType(module, _type); + } + } + // memory allocate the moduleInitData to return. This data should be used by the caller to + // initialize the module + _moduleDeInitData = moduleDeInitData; + } } diff --git a/src/core/RegistryAdapter.sol b/src/core/RegistryAdapter.sol index 3b399fe..915685a 100644 --- a/src/core/RegistryAdapter.sol +++ b/src/core/RegistryAdapter.sol @@ -42,13 +42,17 @@ abstract contract RegistryAdapter is ISafe7579, ExecutionHelper { ) internal { + // sstore value in any case, as this function may be used to disable the use of registry $registry[msg.sender] = registry; - _exec({ - safe: ISafe(msg.sender), - target: address(registry), - value: 0, - callData: abi.encodeCall(IERC7484.trustAttesters, (threshold, attesters)) - }); + // registry is an opt in feature for Safe7579. if set, configure trusted attesters + if (registry != IERC7484(address(0))) { + _exec({ + safe: ISafe(msg.sender), + target: address(registry), + value: 0, + callData: abi.encodeCall(IERC7484.trustAttesters, (threshold, attesters)) + }); + } emit ERC7484RegistryConfigured(msg.sender, registry); } } diff --git a/src/core/SafeOp.sol b/src/core/SafeOp.sol new file mode 100644 index 0000000..d481a53 --- /dev/null +++ b/src/core/SafeOp.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.20; + +import { + PackedUserOperation, + UserOperationLib +} from "@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol"; +import { SAFE_OP_TYPEHASH, ISafeOp } from "../interfaces/ISafeOp.sol"; + +abstract contract SafeOp is ISafeOp { + using UserOperationLib for PackedUserOperation; + + bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = + 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218; + + /** + * @dev Decodes an ERC-4337 user operation into a Safe operation. + * @param userOp The ERC-4337 user operation. + * @return operationData Encoded EIP-712 Safe operation data bytes used for signature + * verification. + * @return validAfter The timestamp the user operation is valid from. + * @return validUntil The timestamp the user operation is valid until. + * @return signatures The Safe owner signatures extracted from the user operation. + */ + function getSafeOp( + PackedUserOperation calldata userOp, + address entryPoint + ) + public + view + returns ( + bytes memory operationData, + uint48 validAfter, + uint48 validUntil, + bytes memory signatures + ) + { + // Extract additional Safe operation fields from the user operation signature which is + // encoded as: + // `abi.encodePacked(validAfter, validUntil, signatures)` + { + bytes calldata sig = userOp.signature; + validAfter = uint48(bytes6(sig[0:6])); + validUntil = uint48(bytes6(sig[6:12])); + signatures = sig[12:]; + } + + // It is important that **all** user operation fields are represented in the `SafeOp` data + // somehow, to prevent + // user operations from being submitted that do not fully respect the user preferences. The + // only exception is + // the `signature` bytes. Note that even `initCode` needs to be represented in the operation + // data, otherwise + // it can be replaced with a more expensive initialization that would charge the user + // additional fees. + { + // In order to work around Solidity "stack too deep" errors related to too many stack + // variables, manually + // encode the `SafeOp` fields into a memory `struct` for computing the EIP-712 + // struct-hash. This works + // because the `EncodedSafeOpStruct` struct has no "dynamic" fields so its memory layout + // is identical to the + // result of `abi.encode`-ing the individual fields. + EncodedSafeOpStruct memory encodedSafeOp = EncodedSafeOpStruct({ + typeHash: SAFE_OP_TYPEHASH, + safe: userOp.sender, + nonce: userOp.nonce, + initCodeHash: keccak256(userOp.initCode), + callDataHash: keccak256(userOp.callData), + verificationGasLimit: uint128(userOp.unpackVerificationGasLimit()), + callGasLimit: uint128(userOp.unpackCallGasLimit()), + preVerificationGas: userOp.preVerificationGas, + maxPriorityFeePerGas: uint128(userOp.unpackMaxPriorityFeePerGas()), + maxFeePerGas: uint128(userOp.unpackMaxFeePerGas()), + paymasterAndDataHash: keccak256(userOp.paymasterAndData), + validAfter: validAfter, + validUntil: validUntil, + entryPoint: entryPoint + }); + + bytes32 safeOpStructHash; + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + // Since the `encodedSafeOp` value's memory layout is identical to the result of + // `abi.encode`-ing the + // individual `SafeOp` fields, we can pass it directly to `keccak256`. Additionally, + // there are 14 + // 32-byte fields to hash, for a length of `14 * 32 = 448` bytes. + safeOpStructHash := keccak256(encodedSafeOp, 448) + } + + operationData = + abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeOpStructHash); + } + } + + function domainSeparator() public view returns (bytes32) { + return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, block.chainid, this)); + } +} diff --git a/src/core/SupportViewer.sol b/src/core/SupportViewer.sol new file mode 100644 index 0000000..ad11733 --- /dev/null +++ b/src/core/SupportViewer.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.20; + +import { + CallType, + ExecType, + ModeCode, + EXECTYPE_DEFAULT, + EXECTYPE_TRY, + CALLTYPE_SINGLE, + CALLTYPE_BATCH, + CALLTYPE_DELEGATECALL +} from "../lib/ModeLib.sol"; +import { + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_HOOK, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK +} from "erc7579/interfaces/IERC7579Module.sol"; +import { IERC7579AccountView } from "../interfaces/IERC7579Account.sol"; + +abstract contract SupportViewer is IERC7579AccountView { + function accountId() external pure returns (string memory accountImplementationId) { + return "rhinestone.safe7579.v1.0.0"; + } + + function supportsExecutionMode(ModeCode encodedMode) external pure returns (bool supported) { + CallType callType; + ExecType execType; + // solhint-disable-next-line no-inline-assembly + assembly { + callType := encodedMode + execType := shl(8, encodedMode) + } + if (callType == CALLTYPE_BATCH) supported = true; + else if (callType == CALLTYPE_SINGLE) supported = true; + else if (callType == CALLTYPE_DELEGATECALL) supported = true; + else return false; + + if (supported && execType == EXECTYPE_DEFAULT) return supported; + else if (supported && execType == EXECTYPE_TRY) return supported; + else return false; + } + + function supportsModule(uint256 moduleTypeId) external pure returns (bool) { + if (moduleTypeId == MODULE_TYPE_VALIDATOR) return true; + else if (moduleTypeId == MODULE_TYPE_EXECUTOR) return true; + else if (moduleTypeId == MODULE_TYPE_FALLBACK) return true; + else if (moduleTypeId == MODULE_TYPE_HOOK) return true; + else return false; + } +} diff --git a/src/interfaces/IERC7484.sol b/src/interfaces/IERC7484.sol index bc07019..2003ba2 100644 --- a/src/interfaces/IERC7484.sol +++ b/src/interfaces/IERC7484.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.0; interface IERC7484 { - event NewTrustedAttesters(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* Check with Registry internal attesters */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ diff --git a/src/interfaces/IERC7579Account.sol b/src/interfaces/IERC7579Account.sol index 262ecad..b00cf03 100644 --- a/src/interfaces/IERC7579Account.sol +++ b/src/interfaces/IERC7579Account.sol @@ -14,15 +14,35 @@ interface IERC7579AccountEvents { event ModuleUninstalled(uint256 moduleTypeId, address module); } -interface IERC7579Account is IERC7579AccountEvents { +interface IERC7579AccountView { + /** + * @dev Returns the account id of the smart account + * @return accountImplementationId the account id of the smart account + * the accountId should be structured like so: + * "vendorname.accountname.semver" + */ + function accountId() external view returns (string memory accountImplementationId); + + /** + * Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol) + * @param encodedMode the encoded mode + */ + function supportsExecutionMode(ModeCode encodedMode) external view returns (bool); + + /** + * Function to check if the account supports installation of a certain module type Id + * @param moduleTypeId the module type ID according the ERC-7579 spec + */ + function supportsModule(uint256 moduleTypeId) external view returns (bool); +} + +interface IERC7579Account is IERC7579AccountEvents, IERC7579AccountView { // Error thrown when an unsupported ModuleType is requested error UnsupportedModuleType(uint256 moduleTypeId); // Error thrown when an execution with an unsupported CallType was made error UnsupportedCallType(CallType callType); // Error thrown when an execution with an unsupported ExecType was made error UnsupportedExecType(ExecType execType); - // Error thrown when account initialization fails - error AccountInitializationFailed(); /** * @dev Executes a transaction on behalf of the account. * This function is intended to be called by ERC-4337 EntryPoint.sol @@ -34,7 +54,7 @@ interface IERC7579Account is IERC7579AccountEvents { * @param executionCalldata The encoded execution call data */ - function execute(ModeCode mode, bytes calldata executionCalldata) external payable; + function execute(ModeCode mode, bytes calldata executionCalldata) external; /** * @dev Executes a transaction on behalf of the account. @@ -51,7 +71,6 @@ interface IERC7579Account is IERC7579AccountEvents { bytes calldata executionCalldata ) external - payable returns (bytes[] memory returnData); /** @@ -77,8 +96,7 @@ interface IERC7579Account is IERC7579AccountEvents { address module, bytes calldata initData ) - external - payable; + external; /** * @dev uninstalls a Module of a certain type on the smart account @@ -93,20 +111,7 @@ interface IERC7579Account is IERC7579AccountEvents { address module, bytes calldata deInitData ) - external - payable; - - /** - * Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol) - * @param encodedMode the encoded mode - */ - function supportsExecutionMode(ModeCode encodedMode) external view returns (bool); - - /** - * Function to check if the account supports installation of a certain module type Id - * @param moduleTypeId the module type ID according the ERC-7579 spec - */ - function supportsModule(uint256 moduleTypeId) external view returns (bool); + external; /** * Function to check if the account has a certain module installed @@ -127,12 +132,4 @@ interface IERC7579Account is IERC7579AccountEvents { external view returns (bool); - - /** - * @dev Returns the account id of the smart account - * @return accountImplementationId the account id of the smart account - * the accountId should be structured like so: - * "vendorname.accountname.semver" - */ - function accountId() external view returns (string memory accountImplementationId); } diff --git a/src/interfaces/IERC7579Module.sol b/src/interfaces/IERC7579Module.sol index 8479856..2736090 100644 --- a/src/interfaces/IERC7579Module.sol +++ b/src/interfaces/IERC7579Module.sol @@ -11,9 +11,6 @@ uint256 constant MODULE_TYPE_FALLBACK = 3; uint256 constant MODULE_TYPE_HOOK = 4; interface IModule { - error AlreadyInitialized(address smartAccount); - error NotInitialized(address smartAccount); - /** * @dev This function is called by the smart account during installation of the module * @param data arbitrary data that may be required on the module during `onInstall` @@ -47,8 +44,6 @@ interface IModule { } interface IValidator is IModule { - error InvalidTargetAddress(address target); - /** * @dev Validates a transaction on behalf of the account. * This function is intended to be called by the MSA during the ERC-4337 validaton phase diff --git a/src/interfaces/ISafe.sol b/src/interfaces/ISafe.sol index 8f6e33f..30aeb4c 100644 --- a/src/interfaces/ISafe.sol +++ b/src/interfaces/ISafe.sol @@ -2,6 +2,11 @@ pragma solidity ^0.8.0; interface ISafe { + enum Operation { + Call, + DelegateCall + } + function setup( address[] calldata _owners, uint256 _threshold, @@ -25,7 +30,7 @@ interface ISafe { address to, uint256 value, bytes memory data, - uint8 operation + Operation operation ) external returns (bool success); @@ -44,7 +49,7 @@ interface ISafe { address to, uint256 value, bytes memory data, - uint8 operation + Operation operation ) external returns (bool success, bytes memory returnData); @@ -99,5 +104,7 @@ interface ISafe { */ function enableModule(address module) external; + function setFallbackHandler(address handler) external; + function simulateAndRevert(address targetContract, bytes memory calldataPayload) external; } diff --git a/src/interfaces/ISafeOp.sol b/src/interfaces/ISafeOp.sol index 54be7ab..aa0a607 100644 --- a/src/interfaces/ISafeOp.sol +++ b/src/interfaces/ISafeOp.sol @@ -1,24 +1,81 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; +import { PackedUserOperation } from "account-abstraction/interfaces/PackedUserOperation.sol"; + bytes32 constant SAFE_OP_TYPEHASH = - 0x84aa190356f56b8c87825f54884392a9907c23ee0f8e1ea86336b763faf021bd; + 0xc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f; interface ISafeOp { + /** + * @notice The EIP-712 type-hash for a SafeOp, representing the structure of a User Operation + * for + * the Safe. + * {address} safe - The address of the safe on which the operation is performed. + * {uint256} nonce - A unique number associated with the user operation, preventing replay + * attacks + * by ensuring each operation is unique. + * {bytes} initCode - The packed encoding of a factory address and its factory-specific data + * for + * creating a new Safe account. + * {bytes} callData - The bytes representing the data of the function call to be executed. + * {uint128} verificationGasLimit - The maximum amount of gas allowed for the verification + * process. + * {uint128} callGasLimit - The maximum amount of gas allowed for executing the function call. + * {uint256} preVerificationGas - The amount of gas allocated for pre-verification steps before + * executing the main operation. + * {uint128} maxPriorityFeePerGas - The maximum priority fee per gas that the user is willing + * to + * pay for the transaction. + * {uint128} maxFeePerGas - The maximum fee per gas that the user is willing to pay for the + * transaction. + * {bytes} paymasterAndData - The packed encoding of a paymaster address and its + * paymaster-specific + * data for sponsoring the user operation. + * {uint48} validAfter - A timestamp representing from when the user operation is valid. + * {uint48} validUntil - A timestamp representing until when the user operation is valid, or 0 + * to + * indicated "forever". + * {address} entryPoint - The address of the entry point that will execute the user operation. + * @dev When validating the user operation, the signature timestamps are pre-pended to the + * signature + * bytes. Equal to: + * keccak256( + * "SafeOp(address safe,uint256 nonce,bytes initCode,bytes callData,uint128 + * verificationGasLimit,uint128 callGasLimit,uint256 preVerificationGas,uint128 + * maxPriorityFeePerGas,uint128 maxFeePerGas,bytes paymasterAndData,uint48 validAfter,uint48 + * validUntil,address entryPoint)" + * ) = 0xc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f + */ struct EncodedSafeOpStruct { bytes32 typeHash; address safe; uint256 nonce; bytes32 initCodeHash; bytes32 callDataHash; - uint256 callGasLimit; - uint256 verificationGasLimit; + uint128 verificationGasLimit; + uint128 callGasLimit; uint256 preVerificationGas; - uint256 maxFeePerGas; - uint256 maxPriorityFeePerGas; + uint128 maxPriorityFeePerGas; + uint128 maxFeePerGas; bytes32 paymasterAndDataHash; uint48 validAfter; uint48 validUntil; address entryPoint; } + + function domainSeparator() external view returns (bytes32); + + function getSafeOp( + PackedUserOperation calldata userOp, + address entryPoint + ) + external + view + returns ( + bytes memory operationData, + uint48 validAfter, + uint48 validUntil, + bytes calldata signatures + ); } diff --git a/src/lib/ModeLib.sol b/src/lib/ModeLib.sol index 957e124..e3b6726 100644 --- a/src/lib/ModeLib.sol +++ b/src/lib/ModeLib.sol @@ -140,12 +140,17 @@ library ModeLib { using { eqModeSelector as == } for ModeSelector global; using { eqCallType as == } for CallType global; +using { neqCallType as != } for CallType global; using { eqExecType as == } for ExecType global; function eqCallType(CallType a, CallType b) pure returns (bool) { return CallType.unwrap(a) == CallType.unwrap(b); } +function neqCallType(CallType a, CallType b) pure returns (bool) { + return CallType.unwrap(a) == CallType.unwrap(b); +} + function eqExecType(ExecType a, ExecType b) pure returns (bool) { return ExecType.unwrap(a) == ExecType.unwrap(b); } diff --git a/src/utils/DCUtil.sol b/src/utils/DCUtil.sol index 6f5ee8c..ebc2f23 100644 --- a/src/utils/DCUtil.sol +++ b/src/utils/DCUtil.sol @@ -2,12 +2,10 @@ pragma solidity ^0.8.22; import { Execution } from "../interfaces/IERC7579Account.sol"; -import { IModule as IERC7579Module } from "erc7579/interfaces/IERC7579Module.sol"; - -contract ModuleInstallUtil { - event ModuleInstalled(uint256 moduleTypeId, address module); - event ModuleUninstalled(uint256 moduleTypeId, address module); +import { IModule as IERC7579Module } from "../interfaces/IERC7579Module.sol"; +import { IERC7579AccountEvents } from "../interfaces/IERC7579Account.sol"; +contract ModuleInstallUtil is IERC7579AccountEvents { function installModule( uint256 moduleTypeId, address module, @@ -32,12 +30,12 @@ contract ModuleInstallUtil { } contract BatchedExecUtil { - function tryExecute(Execution[] calldata executions) external returns (bool success) { + function tryExecute(Execution[] calldata executions) external { uint256 length = executions.length; for (uint256 i; i < length; i++) { Execution calldata _exec = executions[i]; - (success,) = _tryExecute(_exec.target, _exec.value, _exec.callData); + _tryExecute(_exec.target, _exec.value, _exec.callData); } } @@ -115,7 +113,7 @@ contract BatchedExecUtil { assembly { result := mload(0x40) calldatacopy(result, callData.offset, callData.length) - success := iszero(call(gas(), target, value, result, callData.length, codesize(), 0x00)) + success := call(gas(), target, value, result, callData.length, codesize(), 0x00) mstore(result, returndatasize()) // Store the length. let o := add(result, 0x20) returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. diff --git a/src/utils/Safe7579UserOperationBuilder.sol b/src/utils/Safe7579UserOperationBuilder.sol index 0fa2bf9..cc02cf6 100644 --- a/src/utils/Safe7579UserOperationBuilder.sol +++ b/src/utils/Safe7579UserOperationBuilder.sol @@ -9,32 +9,6 @@ import { Execution, ExecutionLib } from "erc7579/lib/ExecutionLib.sol"; import { IEntryPoint } from "@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol"; import { IERC7579Account } from "erc7579/interfaces/IERC7579Account.sol"; -interface IPermissionChecker { - function checkPermissionForSmartAccount( - address smartAccount, - bytes calldata permissionDataFromContext - ) - external - view - returns (bytes32 permissionPrefix); -} - -type ValidAfter is uint48; - -type ValidUntil is uint48; - -struct SingleSignerPermission { - ValidUntil validUntil; - ValidAfter validAfter; - address signatureValidationAlgorithm; - bytes signer; - // TODO: change it to address[] and bytes[] to be able to - // stack policies for a permission - // as of now it is enough to have a single policy for demo purposes - address policy; - bytes policyData; -} - contract Safe7579UserOperationBuilder is IUserOperationBuilder { IEntryPoint internal immutable _entryPoint; @@ -99,7 +73,15 @@ contract Safe7579UserOperationBuilder is IUserOperationBuilder { view returns (bytes memory signature) { - return context; + bytes32 signerId = bytes32(context); + signature = abi.encodePacked( + bytes1(0x00), + context, + abi.encode( + hex"e8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c", + hex"07855b46a623a8ecabac76ed697aa4e13631e3b6718c8a0d342860c13c30d2fc00000000000000000000000000000000000000000000000000000000000000e0010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000024456b4f30bac4a8994b010d127650e6f22669f7f7aec4475f80f8c2a8d2ed02872b0aca713e929d8a28596b42f325fa9587a16a8eb2bc07e4b3a3e9c14a7b988100000000000000000000000000000000000000000000000000000000000000251584482fdf7a4d0b7eb9d45cf835288cb59e55b8249fff356e33be88ecc546d11d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000957b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a22307831383138356261383531633032383032323035366564396634326261313434396532613138663739323932326238383939363937313962616665373861653563222c226f726967696e223a2268747470733a2f2f646576656c6f706d656e742e666f72756d64616f732e636f6d227d0000000000000000000000" + ) + ); } function getSignature( @@ -111,57 +93,31 @@ contract Safe7579UserOperationBuilder is IUserOperationBuilder { view returns (bytes memory signature) { - address permissionValidator = address(bytes20(context[0:20])); - - // What if permission has already been set? - bytes32 result = IPermissionChecker(permissionValidator).checkPermissionForSmartAccount( - smartAccount, context[20:] - ); - - if (result == keccak256("Permission Not Enabled")) { - // just use the full data required to enable the permission - signature = getEnablePermissionValidatorSignatureFromContext( - context[20:], userOperation.signature + if (context[0] == 0x01) { + // enable module + ( + uint8 permissionIndex, + bytes memory permissionEnableData, + bytes memory permissionEnableDataSignature, + bytes memory permissionData + ) = abi.decode(context[1:], (uint8, bytes, bytes, bytes)); + + signature = abi.encodePacked( + context[0], + permissionIndex, + abi.encode( + permissionEnableData, + permissionEnableDataSignature, + permissionData, + userOperation.signature + ) ); } else { - /* commented this out bc currently deployed permission validator is hardcode to - the check _isSessionEnableTransaction to alway return true */ - // just use the permissionId returned as result - //signature = abi.encode(result, userOperation.signature); - - //so for now returning same signature as enable permissions - signature = getEnablePermissionValidatorSignatureFromContext( - context[20:], userOperation.signature - ); + // use existing signerId + bytes32 signerId = bytes32(context[1:33]); + (bytes memory sig1, bytes memory sig2) = + abi.decode(userOperation.signature, (bytes, bytes)); + signature = abi.encodePacked(context, abi.encode(sig1, sig2)); } } - - function getEnablePermissionValidatorSignatureFromContext( - bytes calldata permissionDataFromContext, - bytes calldata rawSignature - ) - private - pure - returns (bytes memory) - { - ( - uint256 permissionIndex, - SingleSignerPermission memory permission, - bytes memory permissionEnableData, - bytes memory permissionEnableSignature - ) = abi.decode( - permissionDataFromContext[1:], (uint256, SingleSignerPermission, bytes, bytes) - ); - - return abi.encodePacked( - permissionDataFromContext[:1], //enable tx flag - abi.encode( - permissionIndex, - permission, - permissionEnableData, - permissionEnableSignature, - rawSignature - ) - ); - } } diff --git a/test/ERC7579Compliance/Base.t.sol b/test/ERC7579Compliance/Base.t.sol index dd3e4cd..b7c2205 100644 --- a/test/ERC7579Compliance/Base.t.sol +++ b/test/ERC7579Compliance/Base.t.sol @@ -117,7 +117,7 @@ contract BaseTest is LaunchpadBase, MockModule { function test_checkVersion() public { string memory version = account.accountId(); - string memory versionExpected = "safe-1.4.1.erc7579.v0.0.1"; + string memory versionExpected = "rhinestone.safe7579.v1.0.0"; assertEq(version, versionExpected); } } diff --git a/test/ERC7579Compliance/ModuleManagement.t.sol b/test/ERC7579Compliance/ModuleManagement.t.sol index 30c5fd5..e998915 100644 --- a/test/ERC7579Compliance/ModuleManagement.t.sol +++ b/test/ERC7579Compliance/ModuleManagement.t.sol @@ -98,4 +98,22 @@ contract ModuleManagementTest is BaseTest { assertTrue(account.isModuleInstalled(1, SELF, "")); assertTrue(account.isModuleInstalled(2, SELF, "")); } + + function test_multiTypeUninstall() public { + test_multiTypeInstall(); + + uint256[] memory types = Solarray.uint256s(1, 2); + + bytes memory data = abi.encode(address(1), hex"41"); + bytes[] memory contexts = Solarray.bytess(data, data); + _data = hex"4141414141414141"; + bytes memory moduleInitData = _data; + + bytes memory initData = abi.encode(types, contexts, moduleInitData); + vm.prank(address(entrypoint)); + account.uninstallModule(0, SELF, initData); + + assertFalse(account.isModuleInstalled(1, SELF, "")); + assertFalse(account.isModuleInstalled(2, SELF, "")); + } } diff --git a/test/Launchpad.t.sol b/test/Launchpad.t.sol index 9aae7fb..4b05c25 100644 --- a/test/Launchpad.t.sol +++ b/test/Launchpad.t.sol @@ -27,7 +27,11 @@ import { Safe7579Launchpad } from "src/Safe7579Launchpad.sol"; import { Solarray } from "solarray/Solarray.sol"; import "./dependencies/EntryPoint.sol"; +import { Simulator } from "@rhinestone/erc4337-validation/src/Simulator.sol"; + contract LaunchpadBase is Test { + using Simulator for PackedUserOperation; // or UserOperation + Safe7579 safe7579; Safe singleton; Safe safe; @@ -127,7 +131,6 @@ contract LaunchpadBase is Test { salt: salt, factoryInitializer: factoryInitializer }); - console2.log("Predicted address: ", predict); userOp.sender = predict; assertEq(userOp.sender, predict); userOp.signature = abi.encodePacked( @@ -139,6 +142,7 @@ contract LaunchpadBase is Test { userOps[0] = userOp; deal(address(userOp.sender), 1 ether); + userOp.simulateUserOp(address(entrypoint)); entrypoint.handleOps(userOps, payable(address(0x69))); safe = Safe(payable(predict)); diff --git a/test/SafeERC7579.t.sol b/test/SafeERC7579.t.sol index 8fa2859..8a1ea10 100644 --- a/test/SafeERC7579.t.sol +++ b/test/SafeERC7579.t.sol @@ -9,7 +9,7 @@ import { ModeLib } from "erc7579/lib/ModeLib.sol"; import "forge-std/console2.sol"; contract Safe7579Test is LaunchpadBase { - function setUp() public override { + function setUp() public virtual override { super.setUp(); target = new MockTarget(); } @@ -77,7 +77,7 @@ contract Safe7579Test is LaunchpadBase { assertTrue(target.value() == 1337); } - function test_execViaExecutor() public { + function test_execViaExecutor() public virtual { defaultExecutor.executeViaAccount( IERC7579Account(address(safe)), address(target), @@ -86,7 +86,7 @@ contract Safe7579Test is LaunchpadBase { ); } - function test_execBatchFromExecutor() public { + function test_execBatchFromExecutor() public virtual { bytes memory setValueOnTarget = abi.encodeCall(MockTarget.set, 1338); Execution[] memory executions = new Execution[](2); executions[0] = Execution({ target: address(target), value: 0, callData: setValueOnTarget }); diff --git a/test/SafeValidation.t.sol b/test/SafeValidation.t.sol new file mode 100644 index 0000000..6eac5ad --- /dev/null +++ b/test/SafeValidation.t.sol @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import "./Launchpad.t.sol"; +import { ModeLib } from "erc7579/lib/ModeLib.sol"; +import { ISafeOp, SAFE_OP_TYPEHASH } from "src/interfaces/ISafeOp.sol"; +import { + UserOperationLib, + PackedUserOperation +} from "@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol"; +import { Simulator } from "@rhinestone/erc4337-validation/src/Simulator.sol"; +import "./Launchpad.t.sol"; + +contract SafeValidationTest is LaunchpadBase { + using Simulator for PackedUserOperation; + using UserOperationLib for PackedUserOperation; + + /*////////////////////////////////////////////////////////////////////////// + CONTRACTS + //////////////////////////////////////////////////////////////////////////*/ + + /*////////////////////////////////////////////////////////////////////////// + VARIABLES + //////////////////////////////////////////////////////////////////////////*/ + + address activeAccount; + + /*////////////////////////////////////////////////////////////////////////// + SETUP + //////////////////////////////////////////////////////////////////////////*/ + + function setUp() public override { + super.setUp(); + } + + /*////////////////////////////////////////////////////////////////////////// + TESTS + //////////////////////////////////////////////////////////////////////////*/ + + function test_deployAccount() public { + bytes32 salt = keccak256("newAccount"); + + ModuleInit[] memory validators = new ModuleInit[](1); + validators[0] = ModuleInit({ module: address(defaultValidator), initData: bytes("") }); + ModuleInit[] memory executors = new ModuleInit[](1); + executors[0] = ModuleInit({ module: address(defaultExecutor), initData: bytes("") }); + ModuleInit[] memory fallbacks = new ModuleInit[](0); + ModuleInit[] memory hooks = new ModuleInit[](0); + + Safe7579Launchpad.InitData memory initData = Safe7579Launchpad.InitData({ + singleton: address(singleton), + owners: Solarray.addresses(signer1.addr), + threshold: 1, + setupTo: address(launchpad), + setupData: abi.encodeCall( + Safe7579Launchpad.initSafe7579, + ( + address(safe7579), + executors, + fallbacks, + hooks, + Solarray.addresses(makeAddr("attester1"), makeAddr("attester2")), + 2 + ) + ), + safe7579: ISafe7579(safe7579), + validators: validators, + callData: abi.encodeCall( + IERC7579Account.execute, + ( + ModeLib.encodeSimpleSingle(), + ExecutionLib.encodeSingle({ + target: address(target), + value: 0, + callData: abi.encodeCall(MockTarget.set, (1337)) + }) + ) + ) + }); + bytes32 initHash = launchpad.hash(initData); + + bytes memory factoryInitializer = + abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, address(0), "")); + + PackedUserOperation memory userOp = getDefaultUserOp(address(safe), address(0)); + + { + userOp.callData = abi.encodeCall(Safe7579Launchpad.setupSafe, (initData)); + userOp.initCode = _initCode(factoryInitializer, salt); + } + + address predict = launchpad.predictSafeAddress({ + singleton: address(launchpad), + safeProxyFactory: address(safeProxyFactory), + creationCode: type(SafeProxy).creationCode, + salt: salt, + factoryInitializer: factoryInitializer + }); + userOp.sender = predict; + activeAccount = predict; + + uint48 validAfter = 0; + uint48 validUntil = type(uint48).max; + + userOp.signature = abi.encodePacked(validAfter, validUntil, hex"41414141"); + (bytes memory operationData,,,) = safe7579.getSafeOp(userOp, address(entrypoint)); + bytes32 opHash = keccak256(operationData); + bytes memory sig = signHash(signer1.key, opHash); + userOp.signature = abi.encodePacked(validAfter, validUntil, sig); + + PackedUserOperation[] memory userOps = new PackedUserOperation[](1); + userOps[0] = userOp; + deal(address(userOp.sender), 1 ether); + + userOp.simulateUserOp(address(entrypoint)); + entrypoint.handleOps(userOps, payable(address(0x69))); + + safe = Safe(payable(predict)); + + assertEq(target.value(), 1337); + } + + function test_execSingle() public { + test_deployAccount(); + + // Encode the call into the calldata for the userOp + bytes memory userOpCalldata = abi.encodeCall( + IERC7579Account.execute, + ( + ModeLib.encodeSimpleSingle(), + ExecutionLib.encodeSingle( + address(target), uint256(0), abi.encodeCall(MockTarget.set, 420) + ) + ) + ); + + PackedUserOperation memory userOp = getDefaultUserOp(address(safe), address(0)); + userOp.callData = userOpCalldata; + + uint48 validAfter = 0; + uint48 validUntil = type(uint48).max; + + userOp.signature = abi.encodePacked(validAfter, validUntil, hex"41414141"); + + (bytes memory operationData,,,) = safe7579.getSafeOp(userOp, address(entrypoint)); + bytes32 opHash = keccak256(operationData); + bytes memory sig = signHash(signer1.key, opHash); + userOp.signature = abi.encodePacked(validAfter, validUntil, sig); + + PackedUserOperation[] memory userOps = new PackedUserOperation[](1); + userOps[0] = userOp; + + entrypoint.handleOps(userOps, payable(address(0x69))); + + assertTrue(target.value() == 420); + } + + /*////////////////////////////////////////////////////////////////////////// + INTERNAL + //////////////////////////////////////////////////////////////////////////*/ + + function signHash(uint256 privKey, bytes32 digest) internal returns (bytes memory) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(privKey, digest); + + // Sanity checks + address signer = ecrecover(digest, v, r, s); + require(signer == vm.addr(privKey), "Invalid signature"); + + return abi.encodePacked(r, s, v); + } +} diff --git a/test/flavors/ExistingSafe.t.sol b/test/flavors/ExistingSafe.t.sol new file mode 100644 index 0000000..3f2b7e3 --- /dev/null +++ b/test/flavors/ExistingSafe.t.sol @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { Enum } from "@safe-global/safe-contracts/contracts/common/Enum.sol"; +import { Safe7579Test, Solarray, Safe, ModuleInit, Safe7579Launchpad } from "../SafeERC7579.t.sol"; + +contract ExistingSafe is Safe7579Test { + function setUp() public override { + super.setUp(); + + makeExistingSafe(); + } + + function makeExistingSafe() public { + address[] memory owners = Solarray.addresses(signer1.addr, signer2.addr); + + bytes memory initializer = abi.encodeCall( + Safe.setup, (owners, 1, address(0), "", address(0), address(0), 0, payable(address(0))) + ); + + safe = Safe( + payable( + address(safeProxyFactory.createProxyWithNonce(address(singleton), initializer, 1)) + ) + ); + vm.deal(address(safe), 1 ether); + + ModuleInit[] memory validators = new ModuleInit[](1); + validators[0] = ModuleInit({ module: address(defaultValidator), initData: bytes("") }); + + ModuleInit[] memory executors = new ModuleInit[](1); + executors[0] = ModuleInit({ module: address(defaultExecutor), initData: bytes("") }); + + address to = address(launchpad); + uint256 value = 0; + bytes memory data = abi.encodeCall( + Safe7579Launchpad.addSafe7579, + ( + address(safe7579), + validators, + executors, + new ModuleInit[](0), + new ModuleInit[](0), + Solarray.addresses(makeAddr("attester1"), makeAddr("attester2")), + 2 + ) + ); + Enum.Operation operation = Enum.Operation.DelegateCall; + uint256 safeTxGas = 10_000_000; + uint256 baseGas = 1000; + uint256 gasPrice = 10; + address gasToken = address(0); + address payable refundReceiver = payable(address(0)); + + bytes memory txData = safe.encodeTransactionData({ + to: to, + value: value, + data: data, + operation: operation, + safeTxGas: safeTxGas, + baseGas: baseGas, + gasPrice: gasPrice, + gasToken: gasToken, + refundReceiver: refundReceiver, + _nonce: 0 + }); + + bytes32 txDataHash = keccak256(txData); + bytes memory sig = signHash(signer1.key, txDataHash); + + safe.execTransaction({ + to: to, + value: value, + data: data, + operation: operation, + safeTxGas: safeTxGas, + baseGas: baseGas, + gasPrice: gasPrice, + gasToken: gasToken, + refundReceiver: refundReceiver, + signatures: sig + }); + } + + // function test_execViaExecutor() public override { } + // function test_execBatchFromExecutor() public override { } + + function signHash(uint256 privKey, bytes32 digest) internal returns (bytes memory) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(privKey, digest); + + // Sanity checks + address signer = ecrecover(digest, v, r, s); + require(signer == vm.addr(privKey), "Invalid signature"); + + return abi.encodePacked(r, s, v); + } +} diff --git a/test/flavors/NoLaunchpad.t.sol b/test/flavors/NoLaunchpad.t.sol new file mode 100644 index 0000000..2e89b73 --- /dev/null +++ b/test/flavors/NoLaunchpad.t.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { MultiSend } from "@safe-global/safe-contracts/contracts/libraries/MultiSend.sol"; +import "../SafeERC7579.t.sol"; +import { ModeLib } from "erc7579/lib/ModeLib.sol"; + +import "forge-std/console2.sol"; + +contract NoLaunchpad is Safe7579Test { + function setUp() public override { + super.setUp(); + target = new MockTarget(); + makeSafeWithoutLaunchpad(); + } + + function makeSafeWithoutLaunchpad() public { + address[] memory owners = Solarray.addresses(signer1.addr, signer2.addr); + + ModuleInit[] memory validators = new ModuleInit[](1); + validators[0] = ModuleInit({ module: address(defaultValidator), initData: bytes("") }); + + bytes memory initializer = abi.encodeCall( + Safe.setup, + ( + owners, + 2, + address(launchpad), + abi.encodeCall( + Safe7579Launchpad.addSafe7579, + ( + address(safe7579), + validators, + new ModuleInit[](0), + new ModuleInit[](0), + new ModuleInit[](0), + Solarray.addresses(makeAddr("attester1"), makeAddr("attester2")), + 2 + ) + ), + address(safe7579), + address(0), + 0, + payable(address(0)) + ) + ); + safe = Safe( + payable( + address(safeProxyFactory.createProxyWithNonce(address(singleton), initializer, 1)) + ) + ); + vm.deal(address(safe), 1 ether); + } + + function test_execViaExecutor() public override { } + function test_execBatchFromExecutor() public override { } +} diff --git a/test/mocks/MockRegistry.sol b/test/mocks/MockRegistry.sol index 1091283..38eb7ac 100644 --- a/test/mocks/MockRegistry.sol +++ b/test/mocks/MockRegistry.sol @@ -6,6 +6,8 @@ import { IERC7484 } from "src/interfaces/IERC7484.sol"; contract MockRegistry is IERC7484 { event Log(address sender); + event NewTrustedAttesters(); + function check(address module) external view { } function checkForAccount(address smartAccount, address module) external view { }

#>t&>Hq9#Py4ygymJ#wx0o7> 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%0D_02R~%~~G*Iu~Al;=IvKn`+tY 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%0A?m)NqTK-(S98A29c^wAT4jqp7iv#`T4i%Ilw{ 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