0 txs
22 calls
constructor
constructor(address _permissionController, address _allocationManager, string _version)
functions
allocationManager
viewfunction allocationManager() view returns (address)
BN254_KEY_REGISTRATION_TYPEHASH
viewfunction BN254_KEY_REGISTRATION_TYPEHASH() view returns (bytes32)
domainSeparator
viewfunction domainSeparator() view returns (bytes32)
ECDSA_KEY_REGISTRATION_TYPEHASH
viewfunction ECDSA_KEY_REGISTRATION_TYPEHASH() view returns (bytes32)
encodeBN254KeyData
purefunction encodeBN254KeyData(tuple g1Point, tuple g2Point) pure returns (bytes)
getBN254Key
viewfunction getBN254Key(tuple operatorSet, address operator) view returns (tuple g1Point, tuple g2Point)
getBN254KeyRegistrationMessageHash
viewfunction getBN254KeyRegistrationMessageHash(address operator, tuple operatorSet, bytes keyData) view returns (bytes32)
getECDSAAddress
viewfunction getECDSAAddress(tuple operatorSet, address operator) view returns (address)
getECDSAKey
viewfunction getECDSAKey(tuple operatorSet, address operator) view returns (bytes)
getECDSAKeyRegistrationMessageHash
viewfunction getECDSAKeyRegistrationMessageHash(address operator, tuple operatorSet, address keyAddress) view returns (bytes32)
getKeyHash
viewfunction getKeyHash(tuple operatorSet, address operator) view returns (bytes32)
getOperatorFromSigningKey
viewfunction getOperatorFromSigningKey(tuple operatorSet, bytes keyData) view returns (address, bool)
getOperatorSetCurveType
viewfunction getOperatorSetCurveType(tuple operatorSet) view returns (uint8)
isKeyGloballyRegistered
viewfunction isKeyGloballyRegistered(bytes32 keyHash) view returns (bool)
isRegistered
viewfunction isRegistered(tuple operatorSet, address operator) view returns (bool)
permissionController
viewfunction permissionController() view returns (address)
version
viewfunction version() view returns (string)
configureOperatorSet
nonpayablefunction configureOperatorSet(tuple operatorSet, uint8 curveType)
deregisterKey
nonpayablefunction deregisterKey(address operator, tuple operatorSet)
registerKey
nonpayablefunction registerKey(address operator, tuple operatorSet, bytes keyData, bytes signature)
events
AggregateBN254KeyUpdated
event AggregateBN254KeyUpdated((address avs, uint32 id) operatorSet, (uint256 X, uint256 Y) newAggregateKey)
KeyDeregistered
event KeyDeregistered((address avs, uint32 id) operatorSet, address indexed operator, uint8 curveType)
KeyRegistered
event KeyRegistered((address avs, uint32 id) operatorSet, address indexed operator, uint8 curveType, bytes pubkey)
OperatorSetConfigured
event OperatorSetConfigured((address avs, uint32 id) operatorSet, uint8 curveType)
errors
ConfigurationAlreadySet
error ConfigurationAlreadySet()
ECAddFailed
error ECAddFailed()
ECMulFailed
error ECMulFailed()
ECPairingFailed
error ECPairingFailed()
ExpModFailed
error ExpModFailed()
InvalidCurveType
error InvalidCurveType()
InvalidKeyFormat
error InvalidKeyFormat()
InvalidKeypair
error InvalidKeypair()
InvalidPermissions
error InvalidPermissions()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
KeyAlreadyRegistered
error KeyAlreadyRegistered()
KeyNotFound
error KeyNotFound((address avs, uint32 id) operatorSet, address operator)
OperatorAlreadyRegistered
error OperatorAlreadyRegistered()
OperatorSetNotConfigured
error OperatorSetNotConfigured()
OperatorStillSlashable
error OperatorStillSlashable((address avs, uint32 id) operatorSet, address operator)
SignatureExpired
error SignatureExpired()
StringTooLong
error StringTooLong(string str)
ZeroAddress
error ZeroAddress()
ZeroPubkey
error ZeroPubkey()
creation bytecode
0x60e060405234801561000f575f5ffd5b5060405161314a38038061314a83398101604081905261002e916100cb565b6001600160a01b03808316608052831660a052808061004c8161005a565b60c052506101fc9350505050565b5f5f829050601f8151111561008d578260405163305a27a960e01b815260040161008491906101a1565b60405180910390fd5b8051610098826101d6565b179392505050565b6001600160a01b03811681146100b4575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156100dd575f5ffd5b83516100e8816100a0565b60208501519093506100f9816100a0565b60408501519092506001600160401b03811115610114575f5ffd5b8401601f81018613610124575f5ffd5b80516001600160401b0381111561013d5761013d6100b7565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016b5761016b6100b7565b604052818152828201602001881015610182575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156101f6575f198160200360031b1b821691505b50919050565b60805160a05160c051612f0f61023b5f395f81816103fa01526116f001525f8181610195015261129f01525f818161033b015261061d0152612f0f5ff3fe608060405234801561000f575f5ffd5b5060043610610127575f3560e01c8063aa165c30116100a9578063d9f12db21161006e578063d9f12db214610370578063dab42d7e14610383578063ea0d8149146103a5578063ea194e2e146103b8578063f698da25146103cb575f5ffd5b8063aa165c30146102d9578063b05c8f6d146102ec578063bd30a0b914610313578063ca8aa7c714610336578063d40cda161461035d575f5ffd5b80637690e395116100ef5780637690e3951461023e5780637cffe48c146102515780638256909c1461027157806387ab86f4146102a35780639a43e3fb146102b8575f5ffd5b8063166aa1271461012b5780633b32a7bd146101655780634657e26a1461019057806350435add146101b757806354fd4d5014610236575b5f5ffd5b6101527f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f8181565b6040519081526020015b60405180910390f35b61017861017336600461259c565b6103d3565b6040516001600160a01b03909116815260200161015c565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6102296101c536600461261d565b8151602080840151835180519083015185840151805190850151604080519687019790975295850193909352606084810192909252608084015260a083019190915260c082019290925260e001604051602081830303815290604052905092915050565b60405161015c91906126c8565b6102296103f3565b61015261024c366004612718565b610423565b61026461025f366004612776565b6104cb565b60405161015c91906127c4565b61028461027f3660046127d2565b6104f1565b604080516001600160a01b03909316835290151560208301520161015c565b6102b66102b1366004612878565b6105df565b005b6102cb6102c636600461259c565b6108f0565b60405161015c9291906128c3565b6102296102e736600461259c565b610ad8565b6101527fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8181565b61032661032136600461259c565b610c15565b604051901515815260200161015c565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6102b661036b366004612900565b610c52565b61015261037e366004612991565b610dc3565b6103266103913660046129d2565b5f9081526002602052604090205460ff1690565b6102b66103b33660046129e9565b610e5c565b6101526103c636600461259c565b610f9f565b6101526110c7565b5f6103de8383610ad8565b6103e790612a22565b60601c90505b92915050565b606061041e7f0000000000000000000000000000000000000000000000000000000000000000611180565b905090565b5f5f7fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8186865f015187602001518787604051610460929190612a7a565b6040805191829003822060208301969096526001600160a01b039485169082015292909116606083015263ffffffff16608082015260a081019190915260c0016040516020818303038152906040528051906020012090506104c1816111bd565b9695505050505050565b5f60015f6104d884611203565b815260208101919091526040015f205460ff1692915050565b5f5f5f60015f61050087611203565b815260208101919091526040015f9081205460ff169150600182600281111561052b5761052b612790565b0361053d5750835160208501206105ae565b600282600281111561055157610551612790565b03610595575f5f8680602001905181019061056c9190612a89565b60408051808201825283815260209081019283525f9384529151909152902092506105ae915050565b60405163fdea7c0960e01b815260040160405180910390fd5b5f818152600360205260409020546001600160a01b0316806105d08882610c15565b945094505050505b9250929050565b816105e981611261565b6106065760405163932d94f760e01b815260040160405180910390fd5b6040516309a961f360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631352c3e6906106549086908690600401612aab565b602060405180830381865afa15801561066f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106939190612ae1565b15828490916106e057604051631070287960e01b815282516001600160a01b03908116600483015260209093015163ffffffff166024820152911660448201526064015b60405180910390fd5b50505f60015f6106ef85611203565b815260208101919091526040015f9081205460ff16915081600281111561071857610718612790565b0361073657604051635cd3106d60e11b815260040160405180910390fd5b5f5f5f61074286611203565b815260208082019290925260409081015f9081206001600160a01b038916825283528190208151808301909252805460ff1615158252600181018054929391929184019161078f90612b00565b80601f01602080910402602001604051908101604052809291908181526020018280546107bb90612b00565b80156108065780601f106107dd57610100808354040283529160200191610806565b820191905f5260205f20905b8154815290600101906020018083116107e957829003601f168201915b5050505050815250509050805f01518486909161085c57604051632e40e18760e01b815282516001600160a01b03908116600483015260209093015163ffffffff166024820152911660448201526064016106d7565b50505f5f61086986611203565b815260208082019290925260409081015f9081206001600160a01b03891682529092528120805460ff19168155906108a460018301826123a1565b5050846001600160a01b03167f28d3c3cee49478ec6fd219cfd685cd15cd01d95cabf69b4b7b57f9eaa3eb644285846040516108e1929190612b38565b60405180910390a25050505050565b604080518082019091525f808252602082015261090b6123db565b5f60015f61091887611203565b815260208101919091526040015f205460ff169050600281600281111561094157610941612790565b1461095f5760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f61096b88611203565b815260208082019290925260409081015f9081206001600160a01b038916825283528190208151808301909252805460ff161515825260018101805492939192918401916109b890612b00565b80601f01602080910402602001604051908101604052809291908181526020018280546109e490612b00565b8015610a2f5780601f10610a0657610100808354040283529160200191610a2f565b820191905f5260205f20905b815481529060010190602001808311610a1257829003601f168201915b5050505050815250509050805f0151610a845750506040805180820182525f808252602080830182905283518085018552828152808201929092528351808501909452828452830191909152925090506105d8565b5f5f5f5f8460200151806020019051810190610aa09190612baa565b604080518082018252948552602080860194909452805180820190915291825291810191909152909b909a5098505050505050505050565b60605f60015f610ae786611203565b815260208101919091526040015f205460ff1690506001816002811115610b1057610b10612790565b14610b2e5760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f610b3a87611203565b815260208082019290925260409081015f9081206001600160a01b038816825283528190208151808301909252805460ff16151582526001810180549293919291840191610b8790612b00565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb390612b00565b8015610bfe5780601f10610bd557610100808354040283529160200191610bfe565b820191905f5260205f20905b815481529060010190602001808311610be157829003601f168201915b505050919092525050506020015195945050505050565b5f5f5f610c2185611203565b815260208082019290925260409081015f9081206001600160a01b038616825290925290205460ff16905092915050565b85610c5c81611261565b610c795760405163932d94f760e01b815260040160405180910390fd5b5f60015f610c8689611203565b815260208101919091526040015f9081205460ff169150816002811115610caf57610caf612790565b03610ccd57604051635cd3106d60e11b815260040160405180910390fd5b5f5f610cd889611203565b815260208082019290925260409081015f9081206001600160a01b038c16825290925290205460ff1615610d1f576040516342ee68b560e01b815260040160405180910390fd5b6001816002811115610d3357610d33612790565b03610d4b57610d4687898888888861130b565b610d72565b6002816002811115610d5f57610d5f612790565b0361059557610d4687898888888861146c565b876001600160a01b03167f1201ce0c5e577111bce91e907fd99cb183da5edc1e3fb650ca40769e4e9176dd88838989604051610db19493929190612bf0565b60405180910390a25050505050505050565b81516020808401516040515f938493610e30937f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f81938a93928991019485526001600160a01b039384166020860152918316604085015263ffffffff16606084015216608082015260a00190565b604051602081830303815290604052805190602001209050610e51816111bd565b9150505b9392505050565b8151610e6781611261565b610e845760405163932d94f760e01b815260040160405180910390fd5b6001826002811115610e9857610e98612790565b1480610eb557506002826002811115610eb357610eb3612790565b145b610ed25760405163fdea7c0960e01b815260040160405180910390fd5b5f60015f610edf86611203565b815260208101919091526040015f9081205460ff169150816002811115610f0857610f08612790565b14610f25576040516281f09f60e01b815260040160405180910390fd5b8260015f610f3287611203565b815260208101919091526040015f20805460ff19166001836002811115610f5b57610f5b612790565b02179055507fb2266cb118e57095fcdbedb24dabd9fc9f5127e2dbedf62ce6ee71696fb8b6e78484604051610f91929190612b38565b60405180910390a150505050565b5f5f5f5f610fac86611203565b815260208082019290925260409081015f9081206001600160a01b038716825283528190208151808301909252805460ff16151582526001810180549293919291840191610ff990612b00565b80601f016020809104026020016040519081016040528092919081815260200182805461102590612b00565b80156110705780601f1061104757610100808354040283529160200191611070565b820191905f5260205f20905b81548152906001019060200180831161105357829003601f168201915b50505050508152505090505f60015f61108887611203565b815260208101919091526040015f2054825160ff90911691506110b057505f91506103ed9050565b6110be826020015182611667565b95945050505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6111346116e8565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60605f61118c8361175d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6111c66110c7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f815f0151826020015163ffffffff1660405160200161124992919060609290921b6001600160601b031916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526103ed90612c4d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156112e7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ed9190612ae1565b6014831461132c5760405163d109118160e01b815260040160405180910390fd5b5f6113378486612c70565b60601c90508061135a57604051634935505f60e01b815260040160405180910390fd5b5f61139c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060019250611667915050565b5f8181526002602052604090205490915060ff16156113ce57604051630c7bc20160e11b815260040160405180910390fd5b5f6113da888a85610dc3565b905061141f838287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505f199250611784915050565b611461898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506117dc915050565b505050505050505050565b60c0831461148d5760405163d109118160e01b815260040160405180910390fd5b604081146114ae57604051638baa579f60e01b815260040160405180910390fd5b604080518082019091525f80825260208201526114c96123db565b5f8080806114d9898b018b612cae565b93509350935093506040518060400160405280858152602001848152509550835f148015611505575082155b1561152357604051634935505f60e01b815260040160405180910390fd5b60408051808201909152918252602082015292505f91506115489050888a8989610423565b90505f8061155886880188612ce8565b604080518082019091528281526020810182905291935091505f611580858389898580611889565b915050806115a157604051638baa579f60e01b815260040160405180910390fd5b5f6115e38c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060029250611667915050565b5f8181526002602052604090205490915060ff161561161557604051630c7bc20160e11b815260040160405180910390fd5b6116578e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792506117dc915050565b5050505050505050505050505050565b5f600182600281111561167c5761167c612790565b0361168e5750815160208301206103ed565b60028260028111156116a2576116a2612790565b03610595575f5f848060200190518101906116bd9190612baa565b505060408051808201825283815260209081019283525f9384529151909152902092506103ed915050565b60605f6117147f0000000000000000000000000000000000000000000000000000000000000000611180565b9050805f8151811061172857611728612a66565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f8111156103ed57604051632cd44ac360e21b815260040160405180910390fd5b428110156117a557604051630819bdcd60e01b815260040160405180910390fd5b6117b96001600160a01b0385168484611951565b6117d657604051638baa579f60e01b815260040160405180910390fd5b50505050565b6040805180820190915260018152602081018390525f806117fc87611203565b815260208082019290925260409081015f9081206001600160a01b03881682528352208251815460ff19169015151781559082015160018201906118409082612d54565b5050505f908152600260209081526040808320805460ff191660011790556003909152902080546001600160a01b039093166001600160a01b0319909316929092179091555050565b5f5f5f611895896119a5565b90505f6118a48a89898c611a2f565b90505f6118bb6118b48a84611ada565b8b90611b4a565b90505f6118fd6118f6846118f06040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611ada565b8590611b4a565b905087156119225761191982611911611bbe565b838c8b611c7e565b96509450611942565b6119358261192e611bbe565b838c611e92565b9550851561194257600194505b50505050965096945050505050565b5f5f5f61195e85856120c9565b90925090505f81600481111561197657611976612790565b1480156119945750856001600160a01b0316826001600160a01b0316145b806104c157506104c1868686612108565b604080518082019091525f80825260208201525f80806119d25f516020612eba5f395f51905f5286612e0f565b90505b6119de816121ef565b90935091505f516020612eba5f395f51905f528283098303611a16576040805180820190915290815260208101919091529392505050565b5f516020612eba5f395f51905f526001820890506119d5565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c6110be9190612e0f565b604080518082019091525f8082526020820152611af5612400565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa90508080611b2357fe5b5080611b4257604051632319df1960e11b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152611b6561241e565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080611b9f57fe5b5080611b425760405163d4b68fd760e01b815260040160405180910390fd5b611bc66123db565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f91829190611caf61243c565b5f5b6002811015611e66575f611cc6826006612e42565b9050848260028110611cda57611cda612a66565b60200201515183611ceb835f612e59565b600c8110611cfb57611cfb612a66565b6020020152848260028110611d1257611d12612a66565b60200201516020015183826001611d299190612e59565b600c8110611d3957611d39612a66565b6020020152838260028110611d5057611d50612a66565b6020020151515183611d63836002612e59565b600c8110611d7357611d73612a66565b6020020152838260028110611d8a57611d8a612a66565b6020020151516001602002015183611da3836003612e59565b600c8110611db357611db3612a66565b6020020152838260028110611dca57611dca612a66565b6020020151602001515f60028110611de457611de4612a66565b602002015183611df5836004612e59565b600c8110611e0557611e05612a66565b6020020152838260028110611e1c57611e1c612a66565b602002015160200151600160028110611e3757611e37612a66565b602002015183611e48836005612e59565b600c8110611e5857611e58612a66565b602002015250600101611cb1565b50611e6f61245b565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f91611ec061243c565b5f5b6002811015612077575f611ed7826006612e42565b9050848260028110611eeb57611eeb612a66565b60200201515183611efc835f612e59565b600c8110611f0c57611f0c612a66565b6020020152848260028110611f2357611f23612a66565b60200201516020015183826001611f3a9190612e59565b600c8110611f4a57611f4a612a66565b6020020152838260028110611f6157611f61612a66565b6020020151515183611f74836002612e59565b600c8110611f8457611f84612a66565b6020020152838260028110611f9b57611f9b612a66565b6020020151516001602002015183611fb4836003612e59565b600c8110611fc457611fc4612a66565b6020020152838260028110611fdb57611fdb612a66565b6020020151602001515f60028110611ff557611ff5612a66565b602002015183612006836004612e59565b600c811061201657612016612a66565b602002015283826002811061202d5761202d612a66565b60200201516020015160016002811061204857612048612a66565b602002015183612059836005612e59565b600c811061206957612069612a66565b602002015250600101611ec2565b5061208061245b565b5f6020826101808560086107d05a03fa9050808061209a57fe5b50806120b9576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f5f82516041036120fd576020830151604084015160608501515f1a6120f18782858561226b565b945094505050506105d8565b505f905060026105d8565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612130929190612e6c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161216e9190612e8c565b5f60405180830381855afa9150503d805f81146121a6576040519150601f19603f3d011682016040523d82523d5f602084013e6121ab565b606091505b50915091508180156121bf57506020815110155b80156104c157508051630b135d3f60e11b906121e49083016020908101908401612ea2565b149695505050505050565b5f80805f516020612eba5f395f51905f5260035f516020612eba5f395f51905f52865f516020612eba5f395f51905f52888909090890505f61225f827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f516020612eba5f395f51905f52612328565b91959194509092505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156122a057505f9050600361231f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156122f1573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612319575f6001925092505061231f565b91505f90505b94509492505050565b5f5f61233261245b565b61233a612479565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061237757fe5b50826123965760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b5080546123ad90612b00565b5f825580601f106123bc575050565b601f0160209004905f5260205f20908101906123d89190612497565b50565b60405180604001604052806123ee6124af565b81526020016123fb6124af565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b808211156124ab575f8155600101612498565b5090565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715612504576125046124cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612533576125336124cd565b604052919050565b80356001600160a01b0381168114612551575f5ffd5b919050565b5f60408284031215612566575f5ffd5b61256e6124e1565b90506125798261253b565b8152602082013563ffffffff81168114612591575f5ffd5b602082015292915050565b5f5f606083850312156125ad575f5ffd5b6125b78484612556565b91506125c56040840161253b565b90509250929050565b5f82601f8301126125dd575f5ffd5b6125e7604061250a565b8060408401858111156125f8575f5ffd5b845b818110156126125780358452602093840193016125fa565b509095945050505050565b5f5f82840360c081121561262f575f5ffd5b604081121561263c575f5ffd5b6126446124e1565b843581526020808601359082015292506080603f1982011215612665575f5ffd5b5061266e6124e1565b61267b85604086016125ce565b815261268a85608086016125ce565b6020820152809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e55602083018461269a565b5f5f83601f8401126126ea575f5ffd5b50813567ffffffffffffffff811115612701575f5ffd5b6020830191508360208285010111156105d8575f5ffd5b5f5f5f5f6080858703121561272b575f5ffd5b6127348561253b565b93506127438660208701612556565b9250606085013567ffffffffffffffff81111561275e575f5ffd5b61276a878288016126da565b95989497509550505050565b5f60408284031215612786575f5ffd5b610e558383612556565b634e487b7160e01b5f52602160045260245ffd5b600381106127c057634e487b7160e01b5f52602160045260245ffd5b9052565b602081016103ed82846127a4565b5f5f606083850312156127e3575f5ffd5b6127ed8484612556565b9150604083013567ffffffffffffffff811115612808575f5ffd5b8301601f81018513612818575f5ffd5b803567ffffffffffffffff811115612832576128326124cd565b612845601f8201601f191660200161250a565b818152866020838501011115612859575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f60608385031215612889575f5ffd5b6128928361253b565b91506125c58460208501612556565b805f5b60028110156117d65781518452602093840193909101906001016128a4565b5f60c08201905083518252602084015160208301526128e66040830184516128a1565b60208301516128f860808401826128a1565b509392505050565b5f5f5f5f5f5f60a08789031215612915575f5ffd5b61291e8761253b565b955061292d8860208901612556565b9450606087013567ffffffffffffffff811115612948575f5ffd5b61295489828a016126da565b909550935050608087013567ffffffffffffffff811115612973575f5ffd5b61297f89828a016126da565b979a9699509497509295939492505050565b5f5f5f608084860312156129a3575f5ffd5b6129ac8461253b565b92506129bb8560208601612556565b91506129c96060850161253b565b90509250925092565b5f602082840312156129e2575f5ffd5b5035919050565b5f5f606083850312156129fa575f5ffd5b612a048484612556565b9150604083013560038110612a17575f5ffd5b809150509250929050565b805160208201516001600160601b0319811691906014821015612a5f576001600160601b03196001600160601b03198360140360031b1b82161692505b5050919050565b634e487b7160e01b5f52603260045260245ffd5b818382375f9101908152919050565b5f5f60408385031215612a9a575f5ffd5b505080516020909101519092909150565b6001600160a01b038316815260608101610e55602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f60208284031215612af1575f5ffd5b81518015158114610e55575f5ffd5b600181811c90821680612b1457607f821691505b602082108103612b3257634e487b7160e01b5f52602260045260245ffd5b50919050565b82516001600160a01b0316815260208084015163ffffffff169082015260608101610e5560408301846127a4565b5f82601f830112612b75575f5ffd5b612b7f604061250a565b806040840185811115612b90575f5ffd5b845b81811015612612578051845260209384019301612b92565b5f5f5f5f60c08587031215612bbd575f5ffd5b845160208601519094509250612bd68660408701612b66565b9150612be58660808701612b66565b905092959194509250565b84516001600160a01b0316815260208086015163ffffffff1690820152612c1a60408201856127a4565b60806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f191601019392505050565b80516020808301519190811015612b32575f1960209190910360031b1b16919050565b80356001600160601b03198116906014841015612ca7576001600160601b03196001600160601b03198560140360031b1b82161691505b5092915050565b5f5f5f5f60c08587031215612cc1575f5ffd5b8435935060208501359250612cd986604087016125ce565b9150612be586608087016125ce565b5f5f60408385031215612cf9575f5ffd5b50508035926020909101359150565b601f821115612d4f57805f5260205f20601f840160051c81016020851015612d2d5750805b601f840160051c820191505b81811015612d4c575f8155600101612d39565b50505b505050565b815167ffffffffffffffff811115612d6e57612d6e6124cd565b612d8281612d7c8454612b00565b84612d08565b6020601f821160018114612db4575f8315612d9d5750848201515b5f19600385901b1c1916600184901b178455612d4c565b5f84815260208120601f198516915b82811015612de35787850151825560209485019460019092019101612dc3565b5084821015612e0057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82612e2957634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176103ed576103ed612e2e565b808201808211156103ed576103ed612e2e565b828152604060208201525f612e84604083018461269a565b949350505050565b5f82518060208501845e5f920191825250919050565b5f60208284031215612eb2575f5ffd5b505191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212201df3a560128f27a0612f2f095e7e575dd271a835148632603757c72234c7b14364736f6c634300081b003300000000000000000000000025e5f8b1e7adf44518d35d5b2271f114e081f0e5000000000000000000000000948a420b8cc1d6bfd0b6087c2e7c344a2cd0bc3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005312e382e31000000000000000000000000000000000000000000000000000000