UNPKG

@openzeppelin/contracts-upgradeable

Version:
398 lines (397 loc) 28.9 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ERC2771ForwarderUpgradeable", "sourceName": "contracts/metatx/ERC2771ForwarderUpgradeable.sol", "abi": [ { "inputs": [ { "internalType": "uint48", "name": "deadline", "type": "uint48" } ], "name": "ERC2771ForwarderExpiredRequest", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" } ], "name": "ERC2771ForwarderInvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "requestedValue", "type": "uint256" }, { "internalType": "uint256", "name": "msgValue", "type": "uint256" } ], "name": "ERC2771ForwarderMismatchedValue", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "ERC2771UntrustfulTarget", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "success", "type": "bool" } ], "name": "ExecutedForwardRequest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "gas", "type": "uint256" }, { "internalType": "uint48", "name": "deadline", "type": "uint48" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData", "name": "request", "type": "tuple" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "gas", "type": "uint256" }, { "internalType": "uint48", "name": "deadline", "type": "uint48" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData[]", "name": "requests", "type": "tuple[]" }, { "internalType": "address payable", "name": "refundReceiver", "type": "address" } ], "name": "executeBatch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "gas", "type": "uint256" }, { "internalType": "uint48", "name": "deadline", "type": "uint48" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData", "name": "request", "type": "tuple" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6080604052348015600e575f5ffd5b5061135a8061001c5f395ff3fe608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f5ffd5b348015610063575f5ffd5b50610077610072366004610e23565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f5ffd5b506100df6100a6366004610e75565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f5ffd5b5061010161018b565b6040516100839796959493929190610ebe565b610127610122366004610f54565b610239565b005b610127610137366004610e23565b610339565b348015610147575f5ffd5b50610127610156366004610fea565b610394565b5f5f5f5f6101688561048c565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f5160206113055f395f51905f5280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61020761050e565b61020f6105ce565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f7578686828181106102625761026261109d565b905060200281019061027491906110b1565b6102829060400135846110cf565b92505f6102b288888481811061029a5761029a61109d565b90506020028101906102ac91906110b1565b8661060c565b9050806102ee578787838181106102cb576102cb61109d565b90506020028101906102dd91906110b1565b6102eb9060400135846110cf565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b8015610331576103318482610806565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b61037481600161060c565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b5f61039d610898565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103c45750825b90505f8267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b1561040c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561043657845460ff60401b1916600160401b1785555b61043f866108c2565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f5f5f5f5f5f61049b876108ed565b90925090506104b86104b36040890160208a01610e75565b610a5f565b426104c960a08a0160808b016110ee565b65ffffffffffff1610158380156104fd57506104e860208a018a610e75565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f5160206113055f395f51905f529161054c90611113565b80601f016020809104026020016040519081016040528092919081815260200182805461057890611113565b80156105c35780601f1061059a576101008083540402835291602001916105c3565b820191905f5260205f20905b8154815290600101906020018083116105a657829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f5160206113055f395f51905f529161054c90611113565b5f5f5f5f5f61061a8761048c565b935093509350935085156106e057836106685761063d6040880160208901610e75565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106a15761067d60a08801608089016110ee565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106e057806106b46020890189610e75565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ea5750815b80156106f35750825b156107fc576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61074f60408b0160208c01610e75565b905060408a01355f61076460a08d018d61114b565b61077160208f018f610e75565b60405160200161078393929190611195565b60405160208183030381529060405290505f5f5f83516020850186888af19a505a90506107b0818e610ad8565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108305760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b5091509150816108925761089281610af4565b50505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6108ca610b1c565b61039181604051806040016040528060018152602001603160f81b815250610b43565b5f808080610a3a61090160c087018761114b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a3492507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610968905060208a018a610e75565b61097860408b0160208c01610e75565b60408b013560608c01356109926100a660208f018f610e75565b8d60800160208101906109a591906110ee565b8e8060a001906109b5919061114b565b6040516109c39291906111bb565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610ba2565b90610bce565b5090925090505f816003811115610a5357610a536111ca565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610ac3575060208210155b8015610ace57505f81115b9695505050505050565b610ae7603f60608301356111de565b821015610af057fe5b5050565b805115610b0357805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b610b24610c17565b610b4157604051631afcd79f60e31b815260040160405180910390fd5b565b610b4b610b1c565b5f5160206113055f395f51905f527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b848482611249565b5060038101610b938382611249565b505f8082556001909101555050565b5f6108bc610bae610c30565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f8351604103610c05576020840151604085015160608601515f1a610bf788828585610c3e565b955095509550505050610c10565b505081515f91506002905b9250925092565b5f610c20610898565b54600160401b900460ff16919050565b5f610c39610d06565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7757505f91506003905082610cfc565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc8573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf357505f925060019150829050610cfc565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d30610d79565b610d38610de1565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f5160206113055f395f51905f5281610d9161050e565b805190915015610da957805160209091012092915050565b81548015610db8579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f5160206113055f395f51905f5281610df96105ce565b805190915015610e1157805160209091012092915050565b60018201548015610db8579392505050565b5f60208284031215610e33575f5ffd5b813567ffffffffffffffff811115610e49575f5ffd5b820160e08185031215610e5a575f5ffd5b9392505050565b6001600160a01b0381168114610391575f5ffd5b5f60208284031215610e85575f5ffd5b8135610e5a81610e61565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b8816815260e060208201525f610edc60e0830189610e90565b8281036040840152610eee8189610e90565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610f43578351835260209384019390920191600101610f25565b50909b9a5050505050505050505050565b5f5f5f60408486031215610f66575f5ffd5b833567ffffffffffffffff811115610f7c575f5ffd5b8401601f81018613610f8c575f5ffd5b803567ffffffffffffffff811115610fa2575f5ffd5b8660208260051b8401011115610fb6575f5ffd5b602091820194509250840135610fcb81610e61565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610ffa575f5ffd5b813567ffffffffffffffff811115611010575f5ffd5b8201601f81018413611020575f5ffd5b803567ffffffffffffffff81111561103a5761103a610fd6565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561106957611069610fd6565b604052818152828201602001861015611080575f5ffd5b816020840160208301375f91810160200191909152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110c5575f5ffd5b9190910192915050565b808201808211156108bc57634e487b7160e01b5f52601160045260245ffd5b5f602082840312156110fe575f5ffd5b813565ffffffffffff81168114610e5a575f5ffd5b600181811c9082168061112757607f821691505b60208210810361114557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f8335601e19843603018112611160575f5ffd5b83018035915067ffffffffffffffff82111561117a575f5ffd5b60200191503681900382131561118e575f5ffd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f826111f857634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561124457805f5260205f20601f840160051c810160208510156112225750805b601f840160051c820191505b81811015611241575f815560010161122e565b50505b505050565b815167ffffffffffffffff81111561126357611263610fd6565b611277816112718454611113565b846111fd565b6020601f8211600181146112a9575f83156112925750848201515b5f19600385901b1c1916600184901b178455611241565b5f84815260208120601f198516915b828110156112d857878501518255602094850194600190920191016112b8565b50848210156112f557868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220179269b4e4eee2cc2a0943bc9b4d5b1ef6addb11ed9be2d9fe1c32cba72f587b64736f6c634300081b0033", "deployedBytecode": "0x608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f5ffd5b348015610063575f5ffd5b50610077610072366004610e23565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f5ffd5b506100df6100a6366004610e75565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f5ffd5b5061010161018b565b6040516100839796959493929190610ebe565b610127610122366004610f54565b610239565b005b610127610137366004610e23565b610339565b348015610147575f5ffd5b50610127610156366004610fea565b610394565b5f5f5f5f6101688561048c565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f5160206113055f395f51905f5280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61020761050e565b61020f6105ce565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f7578686828181106102625761026261109d565b905060200281019061027491906110b1565b6102829060400135846110cf565b92505f6102b288888481811061029a5761029a61109d565b90506020028101906102ac91906110b1565b8661060c565b9050806102ee578787838181106102cb576102cb61109d565b90506020028101906102dd91906110b1565b6102eb9060400135846110cf565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b8015610331576103318482610806565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b61037481600161060c565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b5f61039d610898565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103c45750825b90505f8267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b1561040c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561043657845460ff60401b1916600160401b1785555b61043f866108c2565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f5f5f5f5f5f61049b876108ed565b90925090506104b86104b36040890160208a01610e75565b610a5f565b426104c960a08a0160808b016110ee565b65ffffffffffff1610158380156104fd57506104e860208a018a610e75565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f5160206113055f395f51905f529161054c90611113565b80601f016020809104026020016040519081016040528092919081815260200182805461057890611113565b80156105c35780601f1061059a576101008083540402835291602001916105c3565b820191905f5260205f20905b8154815290600101906020018083116105a657829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f5160206113055f395f51905f529161054c90611113565b5f5f5f5f5f61061a8761048c565b935093509350935085156106e057836106685761063d6040880160208901610e75565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106a15761067d60a08801608089016110ee565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106e057806106b46020890189610e75565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ea5750815b80156106f35750825b156107fc576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61074f60408b0160208c01610e75565b905060408a01355f61076460a08d018d61114b565b61077160208f018f610e75565b60405160200161078393929190611195565b60405160208183030381529060405290505f5f5f83516020850186888af19a505a90506107b0818e610ad8565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108305760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b5091509150816108925761089281610af4565b50505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6108ca610b1c565b61039181604051806040016040528060018152602001603160f81b815250610b43565b5f808080610a3a61090160c087018761114b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a3492507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610968905060208a018a610e75565b61097860408b0160208c01610e75565b60408b013560608c01356109926100a660208f018f610e75565b8d60800160208101906109a591906110ee565b8e8060a001906109b5919061114b565b6040516109c39291906111bb565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610ba2565b90610bce565b5090925090505f816003811115610a5357610a536111ca565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610ac3575060208210155b8015610ace57505f81115b9695505050505050565b610ae7603f60608301356111de565b821015610af057fe5b5050565b805115610b0357805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b610b24610c17565b610b4157604051631afcd79f60e31b815260040160405180910390fd5b565b610b4b610b1c565b5f5160206113055f395f51905f527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b848482611249565b5060038101610b938382611249565b505f8082556001909101555050565b5f6108bc610bae610c30565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f8351604103610c05576020840151604085015160608601515f1a610bf788828585610c3e565b955095509550505050610c10565b505081515f91506002905b9250925092565b5f610c20610898565b54600160401b900460ff16919050565b5f610c39610d06565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7757505f91506003905082610cfc565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc8573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf357505f925060019150829050610cfc565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d30610d79565b610d38610de1565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f5160206113055f395f51905f5281610d9161050e565b805190915015610da957805160209091012092915050565b81548015610db8579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f5160206113055f395f51905f5281610df96105ce565b805190915015610e1157805160209091012092915050565b60018201548015610db8579392505050565b5f60208284031215610e33575f5ffd5b813567ffffffffffffffff811115610e49575f5ffd5b820160e08185031215610e5a575f5ffd5b9392505050565b6001600160a01b0381168114610391575f5ffd5b5f60208284031215610e85575f5ffd5b8135610e5a81610e61565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b8816815260e060208201525f610edc60e0830189610e90565b8281036040840152610eee8189610e90565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015610f43578351835260209384019390920191600101610f25565b50909b9a5050505050505050505050565b5f5f5f60408486031215610f66575f5ffd5b833567ffffffffffffffff811115610f7c575f5ffd5b8401601f81018613610f8c575f5ffd5b803567ffffffffffffffff811115610fa2575f5ffd5b8660208260051b8401011115610fb6575f5ffd5b602091820194509250840135610fcb81610e61565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610ffa575f5ffd5b813567ffffffffffffffff811115611010575f5ffd5b8201601f81018413611020575f5ffd5b803567ffffffffffffffff81111561103a5761103a610fd6565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561106957611069610fd6565b604052818152828201602001861015611080575f5ffd5b816020840160208301375f91810160200191909152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110c5575f5ffd5b9190910192915050565b808201808211156108bc57634e487b7160e01b5f52601160045260245ffd5b5f602082840312156110fe575f5ffd5b813565ffffffffffff81168114610e5a575f5ffd5b600181811c9082168061112757607f821691505b60208210810361114557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f8335601e19843603018112611160575f5ffd5b83018035915067ffffffffffffffff82111561117a575f5ffd5b60200191503681900382131561118e575f5ffd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f826111f857634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561124457805f5260205f20601f840160051c810160208510156112225750805b601f840160051c820191505b81811015611241575f815560010161122e565b50505b505050565b815167ffffffffffffffff81111561126357611263610fd6565b611277816112718454611113565b846111fd565b6020601f8211600181146112a9575f83156112925750848201515b5f19600385901b1c1916600184901b178455611241565b5f84815260208120601f198516915b828110156112d857878501518255602094850194600190920191016112b8565b50848210156112f557868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220179269b4e4eee2cc2a0943bc9b4d5b1ef6addb11ed9be2d9fe1c32cba72f587b64736f6c634300081b0033", "linkReferences": {}, "deployedLinkReferences": {} }