0 txs
15 calls
constructor
constructor()
functions
calculationIntervalSeconds
viewfunction calculationIntervalSeconds() view returns (uint256)
coverage
viewfunction coverage(address _operator) view returns (uint256 delegation)
createdAtEpoch
viewfunction createdAtEpoch(address _operator) view returns (uint32)
eigenAddresses
viewfunction eigenAddresses() view returns (tuple)
epochsBetweenDistributions
viewfunction epochsBetweenDistributions() view returns (uint32)
getEigenOperator
viewfunction getEigenOperator(address _operator) view returns (address)
operatorSetId
viewfunction operatorSetId(address _operator) view returns (uint32)
operatorToStrategy
viewfunction operatorToStrategy(address _operator) view returns (address)
pendingRewards
viewfunction pendingRewards(address _operator, address _token) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
slashableCollateral
viewfunction slashableCollateral(address _operator, uint48) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
allocate
nonpayablefunction allocate(address _operator)
distributeRewards
nonpayablefunction distributeRewards(address _operator, address _token)
initialize
nonpayablefunction initialize(address _accessControl, tuple _eigenAddresses, address _oracle, uint32 _epochsBetweenDistributions)
registerOperator
nonpayablefunction registerOperator(address _eigenOperator, address _avs, uint32[] _operatorSetIds, bytes)
registerStrategy
nonpayablefunction registerStrategy(address _strategy, address _operator, address _restaker, string _operatorMetadata) returns (uint32 _operatorSetId)
setEpochsBetweenDistributions
nonpayablefunction setEpochsBetweenDistributions(uint32 _epochsBetweenDistributions)
slash
nonpayablefunction slash(address _operator, address _recipient, uint256 _slashShare, uint48)
updateAVSMetadataURI
nonpayablefunction updateAVSMetadataURI(string _metadataURI)
upgradeEigenOperatorImplementation
nonpayablefunction upgradeEigenOperatorImplementation(address _newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
DistributedRewards
event DistributedRewards(address indexed strategy, address indexed token, uint256 amount)
EpochsBetweenDistributionsSet
event EpochsBetweenDistributionsSet(uint32 epochsBetweenDistributions)
Initialized
event Initialized(uint64 version)
MinRewardAmountSet
event MinRewardAmountSet(uint256 minRewardAmount)
OperatorRegistered
event OperatorRegistered(address indexed operator, address indexed eigenOperator, address indexed avs, uint32 operatorSetId)
Slash
event Slash(address indexed agent, address indexed recipient, uint256 slashShare, uint48 timestamp)
StrategyRegistered
event StrategyRegistered(address indexed strategy, address indexed operator)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessDenied
error AccessDenied()
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyRegisteredOperator
error AlreadyRegisteredOperator()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidAVS
error InvalidAVS()
InvalidDecimals
error InvalidDecimals()
InvalidInitialization
error InvalidInitialization()
InvalidOperator
error InvalidOperator()
InvalidOperatorSetIds
error InvalidOperatorSetIds()
InvalidRedistributionRecipient
error InvalidRedistributionRecipient()
MinMagnitudeNotMet
error MinMagnitudeNotMet()
MinShareNotMet
error MinShareNotMet()
NotInitializing
error NotInitializing()
OperatorDoesntExist
error OperatorDoesntExist()
OperatorSetAlreadyCreated
error OperatorSetAlreadyCreated()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlashShareTooSmall
error SlashShareTooSmall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroSlash
error ZeroSlash()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615e216100f95f395f818161250f0152818161253801526126800152615e215ff3fe608060405260043610610131575f3560e01c8063754061a3116100a8578063b000685f1161006d578063b000685f14610378578063b9327b0714610397578063bd579542146103ce578063c63fd502146103ed578063e858a11d1461040c578063ffd7d9831461042b575f5ffd5b8063754061a31461028757806380ac8228146102de578063814813c1146102fd578063a98fb3551461031c578063ad3cb1cc1461033b575f5ffd5b806333024430116100f957806333024430146101e45780633a56fd85146102035780633b3979f3146102225780633d11c00d146102415780634f1ef2861461026057806352d1902d14610273575f5ffd5b80630237698b1461013557806315261d6a1461016e578063169bde2b146101825780632896256b146101a457806332cfdfbf146101c3575b5f5ffd5b348015610140575f5ffd5b5061015461014f366004613014565b61044a565b60405163ffffffff90911681526020015b60405180910390f35b348015610179575f5ffd5b50610154610486565b34801561018d575f5ffd5b506101966104a0565b604051908152602001610165565b3480156101af575f5ffd5b506101546101be3660046130f3565b610521565b3480156101ce575f5ffd5b506101e26101dd36600461318b565b610a8b565b005b3480156101ef575f5ffd5b506101966101fe366004613014565b610d1e565b34801561020e575f5ffd5b506101e261021d3660046131f5565b610e70565b34801561022d575f5ffd5b5061015461023c366004613014565b610edf565b34801561024c575f5ffd5b506101e261025b366004613210565b610f1b565b6101e261026e366004613247565b611256565b34801561027e575f5ffd5b50610196611275565b348015610292575f5ffd5b5061029b611290565b604051610165919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b3480156102e9575f5ffd5b506101966102f8366004613210565b611300565b348015610308575f5ffd5b506101966103173660046132a6565b611341565b348015610327575f5ffd5b506101e261033636600461331d565b61139f565b348015610346575f5ffd5b5061036b604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101659190613389565b348015610383575f5ffd5b506101e2610392366004613014565b6113ee565b3480156103a2575f5ffd5b506103b66103b1366004613014565b611495565b6040516001600160a01b039091168152602001610165565b3480156103d9575f5ffd5b506101e26103e836600461339b565b6114c4565b3480156103f8575f5ffd5b506101e261040736600461343b565b611764565b348015610417575f5ffd5b506103b6610426366004613014565b6119d8565b348015610436575f5ffd5b506101e2610445366004613014565b611a0a565b5f5f610454611ac5565b6001600160a01b039093165f90815260099093016020525050604090206001015463ffffffff600160a01b9091041690565b5f5f610490611ac5565b6007015463ffffffff1692915050565b5f5f6104aa611ac5565b600381015460408051639d45c28160e01b815290519293506001600160a01b0390911691639d45c281916004808201926020929091908290030181865afa1580156104f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051b91906134fe565b91505090565b5f632896256b60e01b61053381611ae9565b5f61053c611ac5565b6001600160a01b0387165f90815260098201602052604081209192506105628887611ba9565b82546001600160a01b03199081166001600160a01b03838116918217865560078701545f928352600a8801602052604090922080549093168c821617909255600185015464010000000090910463ffffffff16975091925016156105d9576040516310169e8560e21b815260040160405180910390fd5b6001820154600160c01b900463ffffffff16156106095760405163399f20c360e21b815260040160405180910390fd5b6006896001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610647573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066b9190613515565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca9190613530565b60ff1610156106ec57604051630692acc560e51b815260040160405180910390fd5b82546040805160018082528183019092526001600160a01b03909216915f91816020015b604080518082019091525f8152606060208201528152602001906001900390816107105750506040805160018082528183019092529192505f9190602080830190803683370190505090508b815f8151811061076e5761076e613550565b60200260200101906001600160a01b031690816001600160a01b03168152505060405180604001604052808963ffffffff16815260200182815250825f815181106107bb576107bb613550565b6020908102919091010152604051630caa1e7960e21b81526001600160a01b038416906332a879e4906107f9903090869060068c01906004016135e3565b5f604051808303815f87803b158015610810575f5ffd5b505af1158015610822573d5f5f3e3d5ffd5b505050508b856001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550878560010160186101000a81548163ffffffff021916908363ffffffff1602179055505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ea91906134fe565b90505f875f016003015f9054906101000a90046001600160a01b03166001600160a01b0316633a8c07866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096591906134fe565b905081610972824261368f565b61097c91906136a2565b60018801805463ffffffff60a01b1916600160a01b63ffffffff9384160217905560405163e129ff1360e01b8152908b1660048201526001600160a01b038d8116602483015287169063e129ff13906044015f604051808303815f87803b1580156109e5575f5ffd5b505af11580156109f7573d5f5f3e3d5ffd5b50505050600788018054640100000000900463ffffffff16906004610a1b836136c1565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c6001600160a01b03168e6001600160a01b03167f6bc9059a6c399333e5eae5f30fe0f84f34e4d9f81b5a38413a31337c366c8dda60405160405180910390a3505050505050505050949350505050565b6332cfdfbf60e01b610a9c81611ae9565b5f610aa5611ac5565b6001600160a01b038088165f908152600983016020526040902060018101549293509116610ae65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038616610b0d5760405163d92e233d60e01b815260040160405180910390fd5b845f03610b2d5760405163dd31d0f960e01b815260040160405180910390fd5b600181015460408051632495a59960e01b815290516001600160a01b03909216915f918391632495a599916004808201926020929091908290030181865afa158015610b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9f9190613515565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610be6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0a91906134fe565b9050610c17838b8a611c54565b6040516370a0823160e01b81523060048201525f9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8191906134fe565b610c8b91906136e5565b9050805f03610cad5760405163dd31d0f960e01b815260040160405180910390fd5b610cc16001600160a01b0384168b83611eb9565b6040805182815265ffffffffffff421660208201526001600160a01b03808d1692908e16917f27bce4a45b376a3636aba7d132e3f6965189f680c9dd3435054b15ab8da7a731910160405180910390a35050505050505050505050565b5f5f610d28611ac5565b6001600160a01b038085165f90815260098301602052604090206001810154929350911680610d5b57505f949350505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f81518110610d8f57610d8f613550565b6001600160a01b03928316602091820292909201015260018501548454604051639004134760e01b81525f9392831692639004134792610dd69291169086906004016136f8565b5f60405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e17919081019061379d565b9050633b9aca00815f81518110610e3057610e30613550565b60200260200101511015610e4a57505f9695505050505050565b60048501546001600160a01b0316610e63888583611f18565b5098975050505050505050565b633a56fd8560e01b610e8181611ae9565b5f610e8a611ac5565b60078101805463ffffffff191663ffffffff86169081179091556040519081529091507f475136fab0e951fb2364d331c13ed419cf02f35f0eb59466b4fd1b6314e710cd9060200160405180910390a1505050565b5f5f610ee9611ac5565b6001600160a01b039093165f90815260099093016020525050604090206001015463ffffffff600160c01b9091041690565b633d11c00d60e01b610f2c81611ae9565b5f610f35611ac5565b6001600160a01b038086165f908152600983016020908152604080832060038601548251639d45c28160e01b81529251969750909593941692639d45c281926004808401939192918290030181865afa158015610f94573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb891906134fe565b6001600160a01b038681165f818152600386016020908152604080832054600189015460088b019093528184205491516370a0823160e01b815230600482015296975063ffffffff169591909416939192906370a0823190602401602060405180830381865afa15801561102e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105291906134fe565b61105c91906136e5565b90508263ffffffff165f03611080576001850154600160a01b900463ffffffff1692505b5f61108b85426136a2565b60078801549091505f906110a59063ffffffff16866137ce565b90508063ffffffff168263ffffffff16101561112b57821561111e576001600160a01b038a165f908152600889016020526040812080548592906110ea90849061368f565b90915550506001600160a01b038a165f9081526002880160205260408120805485929061111890849061368f565b90915550505b5050505050505050505050565b6001600160a01b038a165f90815260028801602052604081205461114f908561368f565b9050805f0361116657505050505050505050505050565b600389015461117f908c906001600160a01b0316612085565b6111998c868d848a63ffffffff168863ffffffff1661210e565b6001600160a01b038b165f90815260028901602090815260408083205460088d0190925282208054919290916111d09084906136e5565b90915550506001600160a01b038b81165f81815260028b016020908152604080832083905560038d01825291829020805463ffffffff191663ffffffff8916179055905184815291928f16917fb8da470998c312b635757eec53fc5481b3e89dd4847fcec080d663fc53b589e5910160405180910390a35050505050505050505b505050565b61125e612504565b611267826125aa565b61127182826125b4565b5050565b5f61127e612675565b505f516020615da95f395f51905f5290565b604080516080810182525f8082526020820181905291810182905260608101829052906112bb611ac5565b6040805160808101825282546001600160a01b039081168252600184015481166020830152600284015481169282019290925260039092015416606082015292915050565b5f5f61130a611ac5565b6001600160a01b038086165f9081526009909201602090815260408084209287168452600290920190529020549150505b92915050565b5f5f61134b611ac5565b6001600160a01b038086165f90815260098301602052604090206001810154929350911661137d575f9250505061133b565b60018101546113969086906001600160a01b03166126be565b95945050505050565b63a98fb35560e01b6113b081611ae9565b61125183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061283e92505050565b63b000685f60e01b6113ff81611ae9565b5f611408611ac5565b90506001600160a01b0383166114315760405163d92e233d60e01b815260040160405180910390fd5b6005810154604051631b2ce7f360e11b81526001600160a01b038581166004830152909116908190633659cfe6906024015f604051808303815f87803b158015611479575f5ffd5b505af115801561148b573d5f5f3e3d5ffd5b5050505050505050565b5f5f61149f611ac5565b6001600160a01b039384165f9081526009909101602052604090205490921692915050565b5f6114cd6128aa565b805490915060ff600160401b82041615906001600160401b03165f811580156114f35750825b90505f826001600160401b0316600114801561150e5750303b155b90508115801561151c575080155b1561153a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561156457845460ff60401b1916600160401b1785555b5f61156d611ac5565b90506115788a6128d2565b6115806128e6565b885181546001600160a01b03199081166001600160a01b0392831617835560208b0151600184018054831691841691909117905560408b0151600284018054831691841691909117905560608b0151600384018054831691841691909117905560048084018054909216928b1692909217905560078201805463ffffffff191663ffffffff8a81169190911780835564010000000090041691611622836136c1565b825463ffffffff9182166101009390930a9283029190920219909116179055506006810180546001810182555f918252602082200180546001600160a01b0319163017905560405161167390612fc9565b604051809103905ff08015801561168c573d5f5f3e3d5ffd5b503060405161169a90612fd6565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156116ca573d5f5f3e3d5ffd5b506005830180546001600160a01b0319166001600160a01b038316179055604080516060810190915260238082529192505f91615dc9602083013990506117108161283e565b505050831561175957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b63631fea8160e11b61177581611ae9565b5f61177e611ac5565b90506001600160a01b03871630146117a9576040516366e565df60e01b815260040160405180910390fd5b600185146117ca576040516352b5f9f360e11b815260040160405180910390fd5b6001600160a01b038881165f908152600a830160205260409020541661180357604051631b3a272560e01b815260040160405180910390fd5b8054604080518082019091526001600160a01b038981168252909116905f90602081018989848161183657611836613550565b905060200201602081019061184b91906131f5565b63ffffffff16905260405163079efa8760e11b81529091505f906001600160a01b03841690630f3df50e906118849085906004016137ea565b602060405180830381865afa15801561189f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c39190613515565b90506001600160a01b03811630146118ee576040516364be1a3f60e11b815260040160405180910390fd5b896001600160a01b03168b6001600160a01b03168c6001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119629190613515565b6001600160a01b03167f72ef63d3cdc2eeb9e8fd182e139fa7574e8723da0ccb9c51c19e0149ba8bfb628c8c5f81811061199e5761199e613550565b90506020020160208101906119b391906131f5565b60405163ffffffff909116815260200160405180910390a45050505050505050505050565b5f5f6119e2611ac5565b6001600160a01b039384165f9081526009909101602052604090206001015490921692915050565b5f611a13611ac5565b6001600160a01b038084165f908152600983016020526040902080549293509116611a515760405163d92e233d60e01b815260040160405180910390fd5b8054600182015460405163890b3ed160e01b8152600160c01b820463ffffffff1660048201526001600160a01b03918216602482015291169063890b3ed1906044015f604051808303815f87803b158015611aaa575f5ffd5b505af1158015611abc573d5f5f3e3d5ffd5b50505050505050565b7f9813e4033b5f31d05a061ad9d06fb8352756b0443d3cc09baeca467c0811ef0090565b5f7fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b0054604051633657648360e21b81526001600160e01b0319841660048201523060248201523360448201526001600160a01b039091169063d95d920c90606401602060405180830381865afa158015611b65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b899190613810565b90508061127157604051634ca8886760e01b815260040160405180910390fd5b5f5f611bb3611ac5565b90505f634571e3a660e01b308686604051602401611bd39392919061382f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600584015491519092506001600160a01b03909116908290611c2690612fe3565b611c3192919061385a565b604051809103905ff080158015611c4a573d5f5f3e3d5ffd5b5095945050505050565b5f611c5d611ac5565b6001600160a01b0384165f90815260098201602052604080822081516001808252818401909352939450929081602001602082028036833701905050905085815f81518110611cae57611cae613550565b6001600160a01b0390921660209283029190910190910152611cd160018561368f565b9350670de0b6b3a76400008411611ce85783611cf2565b670de0b6b3a76400005b6040805160018082528183019092529195505f91906020808301908036833701905050905084815f81518110611d2a57611d2a613550565b6020908102919091018101919091526040805160a08101825285546001600160a01b0390811682526001870154600160c01b900463ffffffff16828501528183018690526060820185905282518084018452600b81526a3634b8bab4b230ba34b7b760a91b94810194909452608082019390935286549151633635205760e01b815290925f921690633635205790611dc8903090869060040161387d565b5f604051808303815f875af1158015611de3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e0a9190810190613936565b50604080518082018252308152600188015463ffffffff600160c01b90910481166020830190815260028b015493516316a26f7b60e11b815283516001600160a01b03908116600483015291519092166024830152604482018590528d81166064830152939450909290911690632d44def6906084015f604051808303815f87803b158015611e97575f5ffd5b505af1158015611ea9573d5f5f3e3d5ffd5b5050505050505050505050505050565b6040516001600160a01b0383811660248301526044820183905261125191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506128ee565b5f5f5f846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190613515565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fde9190613530565b6040516341976e0960e01b81526001600160a01b0384811660048301529192505f918716906341976e09906024016040805180830381865afa158015612026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204a9190613970565b5090506120578888612960565b935061206482600a613a75565b61206e8286613a83565b61207891906136a2565b9450505050935093915050565b604051636eb1769f60e11b81526001600160a01b03828116600483015230602483015283169063dd62ed3e90604401602060405180830381865afa1580156120cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f391906134fe565b5f03611271576112716001600160a01b038316825f19612b5d565b5f612117611ac5565b6001600160a01b0388165f908152600982016020526040808220815160018082528184019093529394509290816020015b6121936040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b8152602001906001900390816121485750506040805160018082528183019092529192505f9190602082015b604080518082019091525f80825260208201528152602001906001900390816121bf5750506040805160018082528183019092529192505f9190602082015b604080518082019091525f80825260208201528152602001906001900390816121fe5750506040805180820190915285546001600160a01b03168152602081018a905281519192509082905f9061225757612257613550565b6020908102919091018101919091526040805180820182523081526001870154600160c01b900463ffffffff168184015281518083019092526001600160a01b038d168252670de0b6b3a764000092820192909252835184905f906122be576122be613550565b60200260200101819052505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561231e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234291906134fe565b905061234f60018a61368f565b98505f875f016003015f9054906101000a90046001600160a01b03166001600160a01b031663bf21a8aa6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190613a9a565b63ffffffff1690505f6123dd838c613a83565b90505f836123eb8d8d6136e5565b6123f59190613a83565b90508265ffffffffffff16811115612412575065ffffffffffff82165b6040518060c001604052808881526020018f6001600160a01b031681526020018781526020018363ffffffff1681526020018263ffffffff168152602001604051806040016040528060088152602001671a5b9d195c995cdd60c21b815250815250885f8151811061248657612486613550565b602090810291909101015260038a0154604051630ca2989960e01b81526001600160a01b0390911690630ca29899906124c59088908c90600401613afa565b5f604051808303815f87803b1580156124dc575f5ffd5b505af11580156124ee573d5f5f3e3d5ffd5b5050505050505050505050505050505050505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061258a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661257e5f516020615da95f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156125a85760405163703e46dd60e11b815260040160405180910390fd5b565b5f61127181611ae9565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561260e575060408051601f3d908101601f1916820190925261260b918101906134fe565b60015b61263b57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f516020615da95f395f51905f52811461266b57604051632a87526960e21b815260048101829052602401612632565b6112518383612bec565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125a85760405163703e46dd60e11b815260040160405180910390fd5b5f5f6126c8611ac5565b90505f836001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612707573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272b9190613515565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561276a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278e9190613530565b6004848101546040516341976e0960e01b81526001600160a01b03868116938201939093529293505f929116906341976e09906024016040805180830381865afa1580156127de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128029190613970565b5090505f61280f88612c41565b90505f61281d84600a613a75565b6128278484613a83565b61283191906136a2565b9998505050505050505050565b5f612847611ac5565b805460405163a982182160e01b81529192506001600160a01b03169063a982182190612879903090869060040161385a565b5f604051808303815f87803b158015612890575f5ffd5b505af11580156128a2573d5f5f3e3d5ffd5b505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061133b565b6128da612caf565b6128e381612cd4565b50565b6125a8612caf565b5f5f60205f8451602086015f885af18061290d576040513d5f823e3d81fd5b50505f513d91508115612924578060011415612931565b6001600160a01b0384163b155b1561295a57604051635274afe760e01b81526001600160a01b0385166004820152602401612632565b50505050565b5f5f61296a611ac5565b6001600160a01b0385165f908152600982016020908152604080832081518083018352308152600180830154600160c01b900463ffffffff16828601528351818152808501909452959650909490939282810190803683375050845482519293506001600160a01b0316918391505f906129e6576129e6613550565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905086815f81518110612a3557612a35613550565b6001600160a01b03928316602091820292909201015285546040516315d5962560e11b81525f929190911690632bab2c4a90612a7b908790879087904390600401613c5c565b5f60405180830381865afa158015612a95573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612abc9190810190613cb8565b9050876001600160a01b0316637a8b2637825f81518110612adf57612adf613550565b60200260200101515f81518110612af857612af8613550565b60200260200101516040518263ffffffff1660e01b8152600401612b1e91815260200190565b602060405180830381865afa158015612b39573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283191906134fe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612bae8482612d20565b61295a576040516001600160a01b0384811660248301525f6044830152612be291869182169063095ea7b390606401611ee6565b61295a84826128ee565b612bf582612d69565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c39576112518282612db2565b611271612e1b565b5f5f612c4b611ac5565b6001600160a01b038085165f908152600983016020526040812060018101549394509290911690612c7c8683612960565b83549091505f90612c96906001600160a01b031684612e3a565b90505f612ca3828461368f565b98975050505050505050565b612cb7612f28565b6125a857604051631afcd79f60e31b815260040160405180910390fd5b612cdc612caf565b807fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b005b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612d5f57508115612d515780600114612d5f565b5f866001600160a01b03163b115b9695505050505050565b806001600160a01b03163b5f03612d9e57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401612632565b805f516020615da95f395f51905f52612cff565b60605f5f846001600160a01b031684604051612dce9190613d67565b5f60405180830381855af49150503d805f8114612e06576040519150601f19603f3d011682016040523d82523d5f602084013e612e0b565b606091505b5091509150611396858383612f41565b34156125a85760405163b398979f60e01b815260040160405180910390fd5b5f5f612e44611ac5565b6001810154604051630dc2e88960e31b81526001600160a01b03878116600483015286811660248301819052939450637a8b2637921690636e17444890604401602060405180830381865afa158015612e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec391906134fe565b6040518263ffffffff1660e01b8152600401612ee191815260200190565b602060405180830381865afa158015612efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2091906134fe565b949350505050565b5f612f316128aa565b54600160401b900460ff16919050565b606082612f5657612f5182612fa0565b612f99565b8151158015612f6d57506001600160a01b0384163b155b15612f9657604051639996b31560e01b81526001600160a01b0385166004820152602401612632565b50805b9392505050565b805115612fb05780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b61169380613d7e83390190565b6104218061541183390190565b6105778061583283390190565b6001600160a01b03811681146128e3575f5ffd5b803561300f81612ff0565b919050565b5f60208284031215613024575f5ffd5b8135612f9981612ff0565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156130655761306561302f565b60405290565b604051601f8201601f191681016001600160401b03811182821017156130935761309361302f565b604052919050565b5f5f6001600160401b038411156130b4576130b461302f565b50601f8301601f19166020016130c98161306b565b9150508281528383830111156130dd575f5ffd5b828260208301375f602084830101529392505050565b5f5f5f5f60808587031215613106575f5ffd5b843561311181612ff0565b9350602085013561312181612ff0565b9250604085013561313181612ff0565b915060608501356001600160401b0381111561314b575f5ffd5b8501601f8101871361315b575f5ffd5b61316a8782356020840161309b565b91505092959194509250565b803565ffffffffffff8116811461300f575f5ffd5b5f5f5f5f6080858703121561319e575f5ffd5b84356131a981612ff0565b935060208501356131b981612ff0565b9250604085013591506131ce60608601613176565b905092959194509250565b63ffffffff811681146128e3575f5ffd5b803561300f816131d9565b5f60208284031215613205575f5ffd5b8135612f99816131d9565b5f5f60408385031215613221575f5ffd5b823561322c81612ff0565b9150602083013561323c81612ff0565b809150509250929050565b5f5f60408385031215613258575f5ffd5b823561326381612ff0565b915060208301356001600160401b0381111561327d575f5ffd5b8301601f8101851361328d575f5ffd5b61329c8582356020840161309b565b9150509250929050565b5f5f604083850312156132b7575f5ffd5b82356132c281612ff0565b91506132d060208401613176565b90509250929050565b5f5f83601f8401126132e9575f5ffd5b5081356001600160401b038111156132ff575f5ffd5b602083019150836020828501011115613316575f5ffd5b9250929050565b5f5f6020838503121561332e575f5ffd5b82356001600160401b03811115613343575f5ffd5b61334f858286016132d9565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f99602083018461335b565b5f5f5f5f84860360e08112156133af575f5ffd5b85356133ba81612ff0565b94506080601f19820112156133cd575f5ffd5b506133d6613043565b60208601356133e481612ff0565b815260408601356133f481612ff0565b6020820152606086013561340781612ff0565b6040820152608086013561341a81612ff0565b6060820152925061342d60a08601613004565b91506131ce60c086016131ea565b5f5f5f5f5f5f60808789031215613450575f5ffd5b863561345b81612ff0565b9550602087013561346b81612ff0565b945060408701356001600160401b03811115613485575f5ffd5b8701601f81018913613495575f5ffd5b80356001600160401b038111156134aa575f5ffd5b8960208260051b84010111156134be575f5ffd5b6020919091019450925060608701356001600160401b038111156134e0575f5ffd5b6134ec89828a016132d9565b979a9699509497509295939492505050565b5f6020828403121561350e575f5ffd5b5051919050565b5f60208284031215613525575f5ffd5b8151612f9981612ff0565b5f60208284031215613540575f5ffd5b815160ff81168114612f99575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561359d5781516001600160a01b0316865260209586019590910190600101613576565b5093949350505050565b5f8154808452602084019350825f5260205f205f5b8281101561359d5781546001600160a01b03168652602090950194600191820191016135bc565b5f6060820160018060a01b03861683526060602084015280855180835260808501915060808160051b8601019250602087015f5b8281101561366557607f19878603018452815163ffffffff8151168652602081015190506040602087015261364f6040870182613564565b9550506020938401939190910190600101613617565b505050508281036040840152612d5f81856135a7565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561133b5761133b61367b565b5f826136bc57634e487b7160e01b5f52601260045260245ffd5b500490565b5f63ffffffff821663ffffffff81036136dc576136dc61367b565b60010192915050565b8181038181111561133b5761133b61367b565b6001600160a01b03831681526040602082018190525f90612f2090830184613564565b5f6001600160401b038211156137335761373361302f565b5060051b60200190565b5f82601f83011261374c575f5ffd5b815161375f61375a8261371b565b61306b565b8082825260208201915060208360051b860101925085831115613780575f5ffd5b602085015b83811015611c4a578051835260209283019201613785565b5f602082840312156137ad575f5ffd5b81516001600160401b038111156137c2575f5ffd5b612f208482850161373d565b63ffffffff818116838216019081111561133b5761133b61367b565b81516001600160a01b0316815260208083015163ffffffff16908201526040810161133b565b5f60208284031215613820575f5ffd5b81518015158114612f99575f5ffd5b6001600160a01b038481168252831660208201526060604082018190525f906113969083018461335b565b6001600160a01b03831681526040602082018190525f90612f209083018461335b565b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f906138c560e0840182613564565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b8083101561390d57835182526020820191506020840193506001830192506138ea565b506080860151858203603f190160c0870152925061392b818461335b565b979650505050505050565b5f5f60408385031215613947575f5ffd5b825160208401519092506001600160401b03811115613964575f5ffd5b61329c8582860161373d565b5f5f60408385031215613981575f5ffd5b505080516020909101519092909150565b6001815b60018411156139cd578085048111156139b1576139b161367b565b60018416156139bf57908102905b60019390931c928002613996565b935093915050565b5f826139e35750600161133b565b816139ef57505f61133b565b8160018114613a055760028114613a0f57613a2b565b600191505061133b565b60ff841115613a2057613a2061367b565b50506001821b61133b565b5060208310610133831016604e8410600b8410161715613a4e575081810a61133b565b613a5a5f198484613992565b805f1904821115613a6d57613a6d61367b565b029392505050565b5f612f9960ff8416836139d5565b808202811582820484141761133b5761133b61367b565b5f60208284031215613aaa575f5ffd5b8151612f99816131d9565b5f8151808452602084019350602083015f5b8281101561359d57815180516001600160a01b031687526020908101518188015260409096019590910190600101613ac7565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b82811015613c4f57868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b80831015613bb557835180516001600160a01b031683526020908101516bffffffffffffffffffffffff16818401529093019260019290920191604090910190613b70565b5060208401519250613bd260208a01846001600160a01b03169052565b6040840151925088810360408a0152613beb8184613ab5565b925050506060820151613c06606089018263ffffffff169052565b506080820151613c1e608089018263ffffffff169052565b5060a0820151915086810360a0880152613c38818361335b565b965050506020938401939190910190600101613b40565b5092979650505050505050565b84516001600160a01b0316815260208086015163ffffffff169082015260a060408201525f613c8e60a0830186613564565b8281036060840152613ca08186613564565b91505063ffffffff8316608083015295945050505050565b5f60208284031215613cc8575f5ffd5b81516001600160401b03811115613cdd575f5ffd5b8201601f81018413613ced575f5ffd5b8051613cfb61375a8261371b565b8082825260208201915060208360051b850101925086831115613d1c575f5ffd5b602084015b83811015613d5c5780516001600160401b03811115613d3e575f5ffd5b613d4d8960208389010161373d565b84525060209283019201613d21565b509695505050505050565b5f82518060208501845e5f92019182525091905056fe6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6115bd806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80637de262301161006e5780637de262301461017a578063890b3ed11461019757806389ec63d5146101aa57806399be81c8146101b2578063bfc88179146101c5578063e129ff13146101d8575f5ffd5b80631626ba7e146100b557806318bf7323146100e6578063207613c2146101175780634571e3a61461012d578063570ca735146101425780636ae46cb914610172575b5f5ffd5b6100c86100c3366004610dbd565b6101eb565b6040516001600160e01b031990911681526020015b60405180910390f35b5f5160206115685f395f51905f52546001600160a01b03165b6040516001600160a01b0390911681526020016100dd565b61011f610366565b6040519081526020016100dd565b61014061013b366004610eb4565b6103d0565b005b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01546001600160a01b03166100ff565b610140610643565b5f5160206115485f395f51905f52546001600160a01b03166100ff565b6101406101a5366004610f25565b6106c1565b61011f61094e565b6101406101c0366004610f5c565b61098b565b61011f6101d3366004610f9a565b610a4c565b6101406101e6366004610f25565b610af7565b5f805f5160206115485f395f51905f5280546001820154604051630237698b60e01b81526001600160a01b0391821660048201529293505f92911690630237698b90602401602060405180830381865afa15801561024b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026f9190610fb6565b90505f825f015f9054906101000a90046001600160a01b03166001600160a01b031663169bde2b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e79190610fd8565b90505f6102f48242611003565b90508063ffffffff168363ffffffff16111561031f57506001600160e01b0319935061036092505050565b5f87815260068501602052604090205460ff161561034b5750630b135d3f60e11b935061036092505050565b506001600160e01b0319935061036092505050565b92915050565b5f5160206115685f395f51905f52545f905f5160206115485f395f51905f5290829061039f90600160a01b900463ffffffff1642611003565b6005830154909150600160a01b900463ffffffff166103bf826001611022565b6103c99190611035565b9250505090565b5f6103d9610d07565b805490915060ff600160401b82041615906001600160401b03165f811580156103ff5750825b90505f826001600160401b0316600114801561041a5750303b155b905081158015610428575080155b156104465760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561047057845460ff60401b1916600160401b1785555b5f5160206115485f395f51905f5280546001600160a01b03199081166001600160a01b038c811691821784557f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee018054909316908c16179091555f5160206115685f395f51905f52805463ffffffff60a01b191661127560a91b1790556040805163754061a360e01b815290515f929163754061a39160048083019260809291908290030181865afa158015610527573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054b919061104c565b80516002840180546001600160a01b03199081166001600160a01b03938416179091556020830151600386018054831691841691821790556060840151600480880180549094169190941617909155604051630554db1160e31b815292935091632aa6d888916105c39130915f918f918f91016110f8565b5f604051808303815f87803b1580156105da575f5ffd5b505af11580156105ec573d5f5f3e3d5ffd5b505050505050831561063857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f5160206115685f395f51905f52545f5160206115485f395f51905f52906001600160a01b031633146106895760405163ed88957160e01b815260040160405180910390fd5b60058101545f906106a3906001600160a01b031630610a4c565b5f90815260069092016020525060409020805460ff19166001179055565b5f5160206115485f395f51905f5280546001600160a01b031633146106f957604051635b1582bb60e11b815260040160405180910390fd5b60028101546040516340120dab60e01b81523060048201526001600160a01b0384811660248301525f9216906340120dab906044015f60405180830381865afa158015610748573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261076f9190810190611219565b91505080515f146107935760405163185e69a360e31b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106107c7576107c7611310565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050670de0b6b3a7640000815f8151811061081e5761081e611310565b6001600160401b039290921660209283029190910182015260408051808201825233815263ffffffff8916818401528151600180825281840190935290925f929082015b6108966040805160a081019091525f6060820181815260808301919091528190815260200160608152602001606081525090565b815260200190600190039081610862579050509050604051806060016040528083815260200185815260200184815250815f815181106108d8576108d8611310565b60209081029190910101526002860154604051634a944cf760e11b81526001600160a01b039091169063952899ee906109179030908590600401611367565b5f604051808303815f87803b15801561092e575f5ffd5b505af1158015610940573d5f5f3e3d5ffd5b505050505050505050505050565b5f5160206115685f395f51905f52545f905f5160206115485f395f51905f529061098590600160a01b900463ffffffff1642611003565b91505090565b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01545f5160206115485f395f51905f52906001600160a01b031633146109e457604051631f0853c160e21b815260040160405180910390fd5b60038101546040516378296ec560e01b81526001600160a01b03909116906378296ec590610a1a90309087908790600401611458565b5f604051808303815f87803b158015610a31575f5ffd5b505af1158015610a43573d5f5f3e3d5ffd5b50505050505050565b5f5f610a56610366565b90505f5160206115485f395f51905f52600301546040516305cfa43d60e11b81526001600160a01b0386811660048301528581166024830152306044830152606482018490526084820184905290911690630b9f487a9060a401602060405180830381865afa158015610acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190610fd8565b949350505050565b5f5160206115485f395f51905f5280546001600160a01b03163314610b2f57604051635b1582bb60e11b815260040160405180910390fd5b60058101546001600160a01b031615610b5b57604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b038216610b825760405163d92e233d60e01b815260040160405180910390fd5b5f610b8d8330610a4c565b5f818152600684016020526040808220805460ff191660019081179091556005860180546001600160a01b0389166001600160a01b03199091161790558151818152808301909252929350909181602001602082028036833701905050905084815f81518110610bff57610bff611310565b63ffffffff90921660209283029190910182015260408051606081018252338152808301849052815192830182525f8352808201929092526002850154905163adc2e3d960e01b81526001600160a01b03919091169063adc2e3d990610c6b90309085906004016114b3565b5f604051808303815f87803b158015610c82575f5ffd5b505af1158015610c94573d5f5f3e3d5ffd5b5050505060048481015460405163dcbb03b360e01b815230928101929092523360248301525f60448301526001600160a01b03169063dcbb03b3906064015f604051808303815f87803b158015610ce9575f5ffd5b505af1158015610cfb573d5f5f3e3d5ffd5b50505050505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610360565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610d6557610d65610d2f565b60405290565b604080519081016001600160401b0381118282101715610d6557610d65610d2f565b604051601f8201601f191681016001600160401b0381118282101715610db557610db5610d2f565b604052919050565b5f5f60408385031215610dce575f5ffd5b8235915060208301356001600160401b03811115610dea575f5ffd5b8301601f81018513610dfa575f5ffd5b80356001600160401b03811115610e1357610e13610d2f565b610e26601f8201601f1916602001610d8d565b818152866020838501011115610e3a575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b6001600160a01b0381168114610e6d575f5ffd5b50565b5f5f83601f840112610e80575f5ffd5b5081356001600160401b03811115610e96575f5ffd5b602083019150836020828501011115610ead575f5ffd5b9250929050565b5f5f5f5f60608587031215610ec7575f5ffd5b8435610ed281610e59565b93506020850135610ee281610e59565b925060408501356001600160401b03811115610efc575f5ffd5b610f0887828801610e70565b95989497509550505050565b63ffffffff81168114610e6d575f5ffd5b5f5f60408385031215610f36575f5ffd5b8235610f4181610f14565b91506020830135610f5181610e59565b809150509250929050565b5f5f60208385031215610f6d575f5ffd5b82356001600160401b03811115610f82575f5ffd5b610f8e85828601610e70565b90969095509350505050565b5f5f60408385031215610fab575f5ffd5b8235610f4181610e59565b5f60208284031215610fc6575f5ffd5b8151610fd181610f14565b9392505050565b5f60208284031215610fe8575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f8261101d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561036057610360610fef565b808202811582820484141761036057610360610fef565b5f608082840312801561105d575f5ffd5b50604051608081016001600160401b038111828210171561108057611080610d2f565b604052825161108e81610e59565b8152602083015161109e81610e59565b602082015260408301516110b181610e59565b604082015260608301516110c481610e59565b60608201529392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f9061112890830184866110d0565b9695505050505050565b5f6001600160401b0382111561114a5761114a610d2f565b5060051b60200190565b5f82601f830112611163575f5ffd5b815161117661117182611132565b610d8d565b80828252602082019150602060608402860101925085831115611197575f5ffd5b602085015b8381101561120f57606081880312156111b3575f5ffd5b6111bb610d43565b81516001600160401b03811681146111d1575f5ffd5b81526020820151600f81900b81146111e7575f5ffd5b602082015260408201516111fa81610f14565b6040820152835260209092019160600161119c565b5095945050505050565b5f5f6040838503121561122a575f5ffd5b82516001600160401b0381111561123f575f5ffd5b8301601f8101851361124f575f5ffd5b805161125d61117182611132565b8082825260208201915060208360061b85010192508783111561127e575f5ffd5b6020840193505b828410156112db576040848903121561129c575f5ffd5b6112a4610d6b565b84516112af81610e59565b815260208501516112bf81610f14565b8060208301525080835250602082019150604084019350611285565b8095505050505060208301516001600160401b038111156112fa575f5ffd5b61130685828601611154565b9150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561135d5781516001600160401b0316865260209586019590910190600101611336565b5093949350505050565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b8281101561144b57868503605f190184528151805180516001600160a01b0316875260209081015163ffffffff16818801528082015160806040890181905281519089018190529101905f9060a08901905b808310156114185783516001600160a01b0316825260209384019360019390930192909101906113ed565b506040840151935088810360608a01526114328185611324565b985050506020958601959390930192505060010161139b565b5092979650505050505050565b6001600160a01b03841681526040602082018190525f9061147c90830184866110d0565b95945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0383811682526040602080840182905284519092169083015282810151606080840152805160a084018190525f929190910190829060c08501905b8083101561151e5763ffffffff84511682526020820191506020840193506001830192506114f5565b506040860151858203603f19016080870152925061153c8184611485565b97965050505050505056fe960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee00960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee05a2646970667358221220c7c96dab1490102e55d9dad9a12b4101c735718c155caa022f95405111a9e22664736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042138038061042183398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f5ffd5b919050565b5f5f60408385031215610170575f5ffd5b61017983610144565b915061018760208401610144565b90509250929050565b6102848061019d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f5ffd5b81356001600160a01b0381168114610247575f5ffd5b939250505056fea264697066735822122078c77a6b127cd728286db270c29664d7f8ce0baa26f01289a3ae09ce2b75770e64736f6c634300081c003360a060405260405161057738038061057783398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f5f846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461033b575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610365575f5ffd5b61036e83610325565b60208401519092506001600160401b03811115610389575f5ffd5b8301601f81018513610399575f5ffd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f5ffd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805161011b61045c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f5f375f5f365f845af43d5f5f3e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f5ffd5b81516001600160a01b038116811460de575f5ffd5b939250505056fea26469706673582212207288b9b838085ecf47fe0fcc8f8675ac932e7886271a517e6717d9054724764e64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc68747470733a2f2f6361702e6170702f6d6574612f656967656e2d6176732e6a736f6ea26469706673582212202171db1204b7353c8482f4ae054e5a56defc25494b3c9a8a3965037c28968ed464736f6c634300081c0033