[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "inputs": [ { "internalType": "bytes4[]", "name": "_selectors", "type": "bytes4[]" }, { "internalType": "address", "name": "_implAddress", "type": "address" } ], "name": "addOrUpdateSelectors", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "fallbackImplAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeRelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllImplAddressesAndSelectors", "outputs": [ { "components": [ { "internalType": "address", "name": "implAddress", "type": "address" }, { "internalType": "bytes4[]", "name": "selectors", "type": "bytes4[]" } ], "internalType": "struct Implementation[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_functionSelector", "type": "bytes4" } ], "name": "getImplAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_functionSelector", "type": "bytes4" } ], "name": "getImplAddressNoFallback", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_implAddress", "type": "address" } ], "name": "getSelectorsForImplAddress", "outputs": [ { "internalType": "bytes4[]", "name": "", "type": "bytes4[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "relayFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_implAddress", "type": "address" } ], "name": "removeImplAddressAndAllSelectors", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4[]", "name": "_selectors", "type": "bytes4[]" } ], "name": "removeSelectors", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "selectorToImplAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_fallbackAddress", "type": "address" } ], "name": "setFallbackImplAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "supportedInterfaces", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_interfaceId", "type": "bytes4" }, { "internalType": "bool", "name": "_supported", "type": "bool" } ], "name": "updateSupportedInterfaces", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b5061001a3361012e565b60026020527f71203db6a8b906f8e7c7701ea536708e3d7c6018d3ad50e5680c3241edacce178054600160ff1991821681179092557f78f52cb004db167c8f5d234094ad3cdb9f2eb775244b109350230eab2d3d350b80548216831790557fe93570590271d95518ca425fa83dfa75d04081fc79a4d9a58f39c8df65a8e7a180548216831790557fe7f4f15f8a9f2f6fc23737b039e4cbf51e96102d2c02d512a4356c0910a430f580548216831790557f5d063669f9b1c173848d23e3517fac39e0180ef9dc06c66ffdb87bfddd239c938054821683179055632b424ad760e21b6000527f07e71b91f21e90aaa1349afc7bbbbad733cad72a11691aeaf6a2bcb1c07eecfa8054909116909117905561017e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611aad8061018d6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063836875f8116100b2578063c2c9581411610081578063e34a59e311610066578063e34a59e31461031a578063f2fde38b1461032d578063fc1e79591461034057600080fd5b8063c2c95814146102f4578063c9ce75f71461030757600080fd5b8063836875f8146102735780638c8ab2dd146102a95780638da5cb5b146102b1578063bffb3593146102cf57600080fd5b80632d06691411610109578063474e8dbb116100ee578063474e8dbb1461022b578063494807781461024b578063715018a61461026b57600080fd5b80632d066914146102055780632ecf0b701461021857600080fd5b806301ffc9a71461013b5780630a85121a146101955780631584ba38146101aa5780632ac5365f146101cd575b600080fd5b610180610149366004611676565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101a86101a3366004611698565b610355565b005b6101806101b8366004611676565b60026020526000908152604090205460ff1681565b6101e06101db366004611676565b6103bf565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018c565b6101a86102133660046116f8565b610479565b6101a8610226366004611802565b61054d565b61023e6102393660046116f8565b6107d6565b60405161018c9190611850565b6005546101e09073ffffffffffffffffffffffffffffffffffffffff1681565b6101a8610a37565b6101e0610281366004611676565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101a8610a4b565b60005473ffffffffffffffffffffffffffffffffffffffff166101e0565b6005546101809074010000000000000000000000000000000000000000900460ff1681565b6101e0610302366004611676565b610a94565b6101a86103153660046116f8565b610b79565b6101a86103283660046118b6565b610e49565b6101a861033b3660046116f8565b611047565b6103486110fe565b60405161018c91906118f3565b61035d61154b565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f46756e6374696f6e20646f6573206e6f7420657869737400000000000000000060448201526064015b60405180910390fd5b92915050565b61048161154b565b60055474010000000000000000000000000000000000000000900460ff1615610506576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f52454c41595f46524f5a454e0000000000000000000000000000000000000000604482015260640161046a565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61055561154b565b60055474010000000000000000000000000000000000000000900460ff16156105da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f52454c41595f46524f5a454e0000000000000000000000000000000000000000604482015260640161046a565b60005b82518110156106df5760008382815181106105fa576105fa6119e9565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001928390526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905560038054938401815590527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b6008830401805463ffffffff60079094166004026101000a938402191660e09290921c9290920217905550806106d781611a18565b9150506105dd565b506000805b60045481101561075a578273ffffffffffffffffffffffffffffffffffffffff1660048281548110610718576107186119e9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603610748576001915061075a565b8061075281611a18565b9150506106e4565b50806107d157600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b505050565b600354606090600090815b818110156108a4578473ffffffffffffffffffffffffffffffffffffffff166001600060038481548110610817576108176119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff1603610892578261088e81611a18565b9350505b8061089c81611a18565b9150506107e1565b5060008267ffffffffffffffff8111156108c0576108c0611713565b6040519080825280602002602001820160405280156108e9578160200160208202803683370190505b5090506000805b83811015610a2c578673ffffffffffffffffffffffffffffffffffffffff166001600060038481548110610926576109266119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff1603610a1a57600381815481106109a6576109a66119e9565b90600052602060002090600891828204019190066004029054906101000a900460e01b8383815181106109db576109db6119e9565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015281610a1681611a18565b9250505b80610a2481611a18565b9150506108f0565b509095945050505050565b610a3f61154b565b610a4960006115cc565b565b610a5361154b565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610afc575060055473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116610473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f46756e6374696f6e20646f6573206e6f74206578697374000000000000000000604482015260640161046a565b610b8161154b565b60055474010000000000000000000000000000000000000000900460ff1615610c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f52454c41595f46524f5a454e0000000000000000000000000000000000000000604482015260640161046a565b60005b600454811015610cbf578173ffffffffffffffffffffffffffffffffffffffff1660048281548110610c3d57610c3d6119e9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603610cad5760048181548110610c7757610c776119e9565b600091825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610cbf565b80610cb781611a18565b915050610c09565b5060005b600354811015610e45578173ffffffffffffffffffffffffffffffffffffffff166001600060038481548110610cfb57610cfb6119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff1603610e33576001600060038381548110610d7f57610d7f6119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff00000000000000000000000000000000000000000000000000000000168352820192909252604001902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556003805482908110610e0a57610e0a6119e9565b90600052602060002090600891828204019190066004026101000a81549063ffffffff02191690555b80610e3d81611a18565b915050610cc3565b5050565b610e5161154b565b60055474010000000000000000000000000000000000000000900460ff1615610ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f52454c41595f46524f5a454e0000000000000000000000000000000000000000604482015260640161046a565b60005b8151811015610e45576000828281518110610ef657610ef66119e9565b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815260019092526040822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905591505b60035481101561103257817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660038281548110610f9957610f996119e9565b90600052602060002090600891828204019190066004029054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036110205760038181548110610ff357610ff36119e9565b90600052602060002090600891828204019190066004026101000a81549063ffffffff0219169055611032565b8061102a81611a18565b915050610f5c565b5050808061103f90611a18565b915050610ed9565b61104f61154b565b73ffffffffffffffffffffffffffffffffffffffff81166110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161046a565b6110fb816115cc565b50565b600454606090600090815b8181101561118357600073ffffffffffffffffffffffffffffffffffffffff166004828154811061113c5761113c6119e9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611171578261116d81611a18565b9350505b8061117b81611a18565b915050611109565b5060008267ffffffffffffffff81111561119f5761119f611713565b6040519080825280602002602001820160405280156111e557816020015b6040805180820190915260008152606060208201528152602001906001900390816111bd5790505b5090506000805b8381101561154157600073ffffffffffffffffffffffffffffffffffffffff166004828154811061121f5761121f6119e9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461152f5760006004828154811061125b5761125b6119e9565b600091825260208220015460035473ffffffffffffffffffffffffffffffffffffffff909116925060609190815b8181101561134c578473ffffffffffffffffffffffffffffffffffffffff1660016000600384815481106112bf576112bf6119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff160361133a578261133681611a18565b9350505b8061134481611a18565b915050611289565b508167ffffffffffffffff81111561136657611366611713565b60405190808252806020026020018201604052801561138f578160200160208202803683370190505b5092506000805b828110156114d2578573ffffffffffffffffffffffffffffffffffffffff1660016000600384815481106113cc576113cc6119e9565b6000918252602080832060088304015460079092166004026101000a90910460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff16036114c0576003818154811061144c5761144c6119e9565b90600052602060002090600891828204019190066004029054906101000a900460e01b858381518110611481576114816119e9565b7fffffffff0000000000000000000000000000000000000000000000000000000090921660209283029190910190910152816114bc81611a18565b9250505b806114ca81611a18565b915050611396565b5060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200185815250888881518110611510576115106119e9565b6020026020010181905250868061152690611a18565b97505050505050505b8061153981611a18565b9150506111ec565b5090949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161046a565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461167157600080fd5b919050565b60006020828403121561168857600080fd5b61169182611641565b9392505050565b600080604083850312156116ab57600080fd5b6116b483611641565b9150602083013580151581146116c957600080fd5b809150509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461167157600080fd5b60006020828403121561170a57600080fd5b611691826116d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261175357600080fd5b8135602067ffffffffffffffff8083111561177057611770611713565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156117b3576117b3611713565b6040529384528581018301938381019250878511156117d157600080fd5b83870191505b848210156117f7576117e882611641565b835291830191908301906117d7565b979650505050505050565b6000806040838503121561181557600080fd5b823567ffffffffffffffff81111561182c57600080fd5b61183885828601611742565b925050611847602084016116d4565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156118aa5783517fffffffff00000000000000000000000000000000000000000000000000000000168352928401929184019160010161186c565b50909695505050505050565b6000602082840312156118c857600080fd5b813567ffffffffffffffff8111156118df57600080fd5b6118eb84828501611742565b949350505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156119da578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b808310156119c55783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b0190611983565b50978a0197955050509187019160010161191b565b50919998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a70577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220bf8104a8a3f977dfa18b2c053d7d0a6b6908b2285af5bf9deeb634d2c37a3eec64736f6c63430008120033