0 txs
137.2k calls
constructor
No constructor.
functions
_lifetimeClaims
viewfunction _lifetimeClaims(address) view returns (uint256)
assignedKeysOfUserCount
viewfunction assignedKeysOfUserCount(address) view returns (uint256)
assignedKeysToPoolCount
viewfunction assignedKeysToPoolCount(address) view returns (uint256)
assignedKeyToPool
viewfunction assignedKeyToPool(uint256) view returns (address)
bulkSubmissions
viewfunction bulkSubmissions(uint256, address) view returns (bool submitted, bool claimed, uint256 keyCount, uint256 winningKeyCount, bytes assertionStateRootOrConfirmData)
calculateChallengeEmissionAndTier
viewfunction calculateChallengeEmissionAndTier() view returns (uint256, uint256)
challengeCounter
viewfunction challengeCounter() view returns (uint256)
CHALLENGER_ROLE
viewfunction CHALLENGER_ROLE() view returns (bytes32)
challengerPublicKey
viewfunction challengerPublicKey() view returns (bytes)
challenges
viewfunction challenges(uint256) view returns (bool openForSubmissions, bool expiredForRewarding, uint64 assertionId, bytes32 assertionStateRootOrConfirmData, uint64 assertionTimestamp, bytes challengerSignedHash, bytes activeChallengerPublicKey, address rollupUsed, uint256 createdTimestamp, uint256 totalSupplyOfNodesAtChallengeStart, uint256 rewardAmountForClaimers, uint256 amountForGasSubsidy, uint256 numberOfEligibleClaimers, uint256 amountClaimedByClaimers)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
esXaiAddress
viewfunction esXaiAddress() view returns (address)
gasSubsidyRecipient
viewfunction gasSubsidyRecipient() view returns (address)
getBoostFactorForStaker
viewfunction getBoostFactorForStaker(address staker) view returns (uint256)
getChallenge
viewfunction getChallenge(uint256 _challengeId) view returns (tuple)
getCombinedTotalSupply
viewfunction getCombinedTotalSupply() view returns (uint256)
getKycWalletAtIndex
viewfunction getKycWalletAtIndex(uint256 index) view returns (address)
getKycWalletCount
viewfunction getKycWalletCount() view returns (uint256)
getOperatorAtIndex
viewfunction getOperatorAtIndex(address owner, uint256 index) view returns (address)
getOperatorCount
viewfunction getOperatorCount(address owner) view returns (uint256)
getOwnerCountForOperator
viewfunction getOwnerCountForOperator(address operator) view returns (uint256)
getOwnerForOperatorAtIndex
viewfunction getOwnerForOperatorAtIndex(address operator, uint256 index) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getSubmissionsForChallenges
viewfunction getSubmissionsForChallenges(uint256[] _challengeIds, uint256 _nodeLicenseId) view returns (tuple[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForOperator
viewfunction isApprovedForOperator(address owner, address operator) view returns (bool)
isCheckingAssertions
viewfunction isCheckingAssertions() view returns (bool)
isKycApproved
viewfunction isKycApproved(address wallet) view returns (bool)
KYC_ADMIN_ROLE
viewfunction KYC_ADMIN_ROLE() view returns (bytes32)
maxKeysPerPool
viewfunction maxKeysPerPool() view returns (uint256)
maxStakeAmountPerLicense
viewfunction maxStakeAmountPerLicense() view returns (uint256)
nodeLicenseAddress
viewfunction nodeLicenseAddress() view returns (address)
poolFactoryAddress
viewfunction poolFactoryAddress() view returns (address)
refereeCalculationsAddress
viewfunction refereeCalculationsAddress() view returns (address)
rollupAddress
viewfunction rollupAddress() view returns (address)
rollupAssertionTracker
viewfunction rollupAssertionTracker(bytes32) view returns (bool)
stakeAmountBoostFactors
viewfunction stakeAmountBoostFactors(uint256) view returns (uint256)
stakeAmountTierThresholds
viewfunction stakeAmountTierThresholds(uint256) view returns (uint256)
stakedAmounts
viewfunction stakedAmounts(address) view returns (uint256)
stakingEnabled
viewfunction stakingEnabled() view returns (bool)
submissions
viewfunction submissions(uint256, uint256) view returns (bool submitted, bool claimed, bool eligibleForPayout, uint256 nodeLicenseId, bytes assertionStateRootOrConfirmData)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
xaiAddress
viewfunction xaiAddress() view returns (address)
addKycWallet
nonpayablefunction addKycWallet(address wallet)
claimBulkRewards
nonpayablefunction claimBulkRewards(address _bulkAddress, uint256 _challengeId)
claimMultipleRewards
nonpayablefunction claimMultipleRewards(uint256[] _nodeLicenseIds, uint256 _challengeId, address claimForAddressInBatch)
claimReward
nonpayablefunction claimReward(uint256 _nodeLicenseId, uint256 _challengeId)
expireChallengeRewards
nonpayablefunction expireChallengeRewards(uint256 _challengeId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize()
removeKycWallet
nonpayablefunction removeKycWallet(address wallet)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setApprovalForOperator
nonpayablefunction setApprovalForOperator(address operator, bool approved)
setStakingEnabled
nonpayablefunction setStakingEnabled(bool enabled)
stakeEsXai
nonpayablefunction stakeEsXai(address pool, uint256 amount)
stakeKeys
nonpayablefunction stakeKeys(address pool, address staker, uint256 keyAmount, bool isAdminStake)
submitBulkAssertion
nonpayablefunction submitBulkAssertion(address _bulkAddress, uint256 _challengeId, bytes _confirmData)
submitChallenge
nonpayablefunction submitChallenge(uint64 _assertionId, uint64 _predecessorAssertionId, bytes32 _confirmData, uint64 _assertionTimestamp, bytes _challengerSignedHash)
unstake
nonpayablefunction unstake(uint256 amount)
unstakeEsXai
nonpayablefunction unstakeEsXai(address pool, uint256 amount)
unstakeKeys
nonpayablefunction unstakeKeys(address pool, address staker, uint256 keyAmount)
updateAssignedKeysOfUserCount
nonpayablefunction updateAssignedKeysOfUserCount(address from, address to, uint256 keyAmount)
updateBulkSubmissionOnTransfer
nonpayablefunction updateBulkSubmissionOnTransfer(address from, address to)
events
Approval
event Approval(address indexed owner, address indexed operator, bool approved)
AssertionCheckingToggled
event AssertionCheckingToggled(bool newState)
AssertionSubmitted
event AssertionSubmitted(uint256 indexed challengeId, uint256 indexed nodeLicenseId)
BatchChallenge
event BatchChallenge(uint256 indexed challengeId, uint64[] assertionIds)
BatchRewardsClaimed
event BatchRewardsClaimed(uint256 indexed challengeId, uint256 totalReward, uint256 keysLength)
BulkRewardsClaimed
event BulkRewardsClaimed(uint256 indexed challengeId, address indexed bulkAddress, uint256 totalReward, uint256 winningKeys)
ChallengeClosed
event ChallengeClosed(uint256 indexed challengeNumber)
ChallengeExpired
event ChallengeExpired(uint256 indexed challengeId)
ChallengerPublicKeyChanged
event ChallengerPublicKeyChanged(bytes newChallengerPublicKey)
ChallengeSubmitted
event ChallengeSubmitted(uint256 indexed challengeNumber)
Initialized
event Initialized(uint8 version)
InvalidBatchSubmission
event InvalidBatchSubmission(uint256 indexed challengeId, address submissionAddress, address operator, uint256 keysLength)
InvalidSubmission
event InvalidSubmission(uint256 indexed challengeId, uint256 nodeLicenseId)
KycStatusChanged
event KycStatusChanged(address indexed wallet, bool isKycApproved)
NewBulkSubmission
event NewBulkSubmission(uint256 indexed challengeId, address indexed bulkAddress, uint256 stakedKeys, uint256 winningKeys)
NodeLicenseAddressChanged
event NodeLicenseAddressChanged(address newNodeLicenseAddress)
RewardsClaimed
event RewardsClaimed(uint256 indexed challengeId, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
RollupAddressChanged
event RollupAddressChanged(address newRollupAddress)
StakedV1
event StakedV1(address indexed user, uint256 amount, uint256 totalStaked)
StakingEnabled
event StakingEnabled(bool enabled)
UnstakeV1
event UnstakeV1(address indexed user, uint256 amount, uint256 totalStaked)
UpdateBulkSubmission
event UpdateBulkSubmission(uint256 indexed challengeId, address indexed bulkAddress, uint256 stakedKeys, uint256 winningKeys, uint256 increase, uint256 decrease)
UpdateMaxKeysPerPool
event UpdateMaxKeysPerPool(uint256 prevAmount, uint256 newAmount)
UpdateMaxStakeAmount
event UpdateMaxStakeAmount(uint256 prevAmount, uint256 newAmount)
errors
CallerNotAuthorized
error CallerNotAuthorized()
creation bytecode
0x608060405234801561001057600080fd5b50615c2880620000216000396000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c80638376f5db1161020a578063aaa0de0611610125578063d0760f0e116100b8578063e0a2b85c11610087578063e0a2b85c14610939578063e46cbf741461095d578063ececf59f14610970578063efe14b4a14610990578063f7fed02c146109a357600080fd5b8063d0760f0e146108f7578063d33a926914610900578063d547741f14610913578063d869f9d41461092657600080fd5b8063c824ecfa116100f4578063c824ecfa146108ab578063ca15c873146108be578063cdb1dc4e146108d1578063ce0dc3eb146108e457600080fd5b8063aaa0de061461085f578063b4d6b7df14610872578063bce8567e14610885578063c5f399321461089857600080fd5b806391d148541161019d5780639cda35f91161016c5780639cda35f914610808578063a217fddf14610831578063a32cf53614610839578063a528916d1461084c57600080fd5b806391d14854146107af57806392055eaf146107c257806395134b1e146107d5578063958c21c0146107e857600080fd5b80638f1d3776116101d95780638f1d37761461073c5780639010d07c14610769578063904385281461077c57806390a88b241461078f57600080fd5b80638376f5db146106f057806386bb8f371461070357806389e5900a146107165780638e67b51f1461072957600080fd5b806336568abe116103055780635ec6a8df116102985780637579a28b116102675780637579a28b146106a55780637b4e51f6146106ba5780637eaf53f5146106cd5780638041f49d146106d55780638129fc1c146106e857600080fd5b80635ec6a8df1461064157806369c1fc25146106545780636a1565801461067857806370f117de1461069857600080fd5b80634c3594d5116102d45780634c3594d5146105f6578063530adbb4146106095780635dcb18e7146106305780635e2de7861461063957600080fd5b806336568abe146105aa578063389b99fa146105bd5780633af10cd1146105d0578063435222d5146105e357600080fd5b80631cfff51b1161037d5780632aaa77c41161034c5780632aaa77c41461055e5780632d264ef5146105715780632e17de78146105845780632f2ff15d1461059757600080fd5b80631cfff51b146104f857806324360aa114610505578063248a9ca3146105285780632659b7861461054b57600080fd5b806310c1c103116103b957806310c1c1031461047a57806312415f121461049a5780631988a413146104ad5780631bdd4b74146104d857600080fd5b806301ffc9a7146103eb57806302d7fd921461041357806305c780041461044857806308dc971714610465575b600080fd5b6103fe6103f9366004614f52565b6109ac565b60405190151581526020015b60405180910390f35b61043a7f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea81565b60405190815260200161040a565b6104506109d7565b6040805192835260208301919091520161040a565b610478610473366004614f91565b610b19565b005b61043a610488366004614fbd565b60db6020526000908152604090205481565b61043a6104a8366004614fbd565b6110dd565b60cb546104c0906001600160a01b031681565b6040516001600160a01b03909116815260200161040a565b6104eb6104e6366004614fda565b6110fe565b60405161040a919061504b565b60df546103fe9060ff1681565b6103fe610513366004614fda565b60d66020526000908152604090205460ff1681565b61043a610536366004614fda565b60009081526065602052604090206001015490565b610478610559366004614fbd565b611387565b61043a61056c366004614fbd565b611401565b6104c061057f366004614fda565b6115c8565b610478610592366004614fda565b61160f565b6104786105a5366004615157565b611782565b6104786105b8366004615157565b6117ac565b6104786105cb366004614fbd565b61182a565b60cd546104c0906001600160a01b031681565b6103fe6105f1366004615187565b61189c565b61043a610604366004614fda565b6118be565b61043a7fe752add323323eb13e36c71ee508dfd16d74e9e4c4fd78786ba97989e5e1381881565b61043a60e25481565b61043a6118df565b60ca546104c0906001600160a01b031681565b6106676106623660046151b5565b6118f0565b60405161040a9594939291906151d7565b61043a610686366004614fbd565b60e46020526000908152604090205481565b60d2546103fe9060ff1681565b6106ad6119bd565b60405161040a9190615208565b6104786106c8366004615229565b611a4b565b61043a611b17565b6104786106e336600461534a565b611c32565b6104786127ae565b60cc546104c0906001600160a01b031681565b6104786107113660046151b5565b612955565b61043a610724366004614fbd565b6129a2565b6104786107373660046153c8565b6129c3565b61074f61074a366004614fda565b612a6e565b60405161040a9e9d9c9b9a99989796959493929190615409565b6104c06107773660046151b5565b612c04565b61047861078a3660046154bf565b612c1c565b61043a61079d366004614fbd565b60d56020526000908152604090205481565b6103fe6107bd366004615157565b6130f3565b6104786107d0366004615187565b61311e565b6104786107e33660046153c8565b6131d9565b6107fb6107f636600461558b565b613310565b60405161040a91906155cf565b6104c0610816366004614fda565b60e0602052600090815260409020546001600160a01b031681565b61043a600081565b60e3546104c0906001600160a01b031681565b61047861085a366004614f91565b6134f0565b6104c061086d366004614f91565b613619565b61047861088036600461566a565b61368e565b6104786108933660046156c4565b613b7f565b61043a6108a6366004614fda565b613bff565b6103fe6108b9366004614fbd565b613c0f565b61043a6108cc366004614fda565b613c1c565b6104786108df366004614fda565b613c33565b6104c06108f2366004614f91565b613d91565b61043a60de5481565b60e5546104c0906001600160a01b031681565b610478610921366004615157565b613df0565b60cf546104c0906001600160a01b031681565b61094c610947366004615157565b613e15565b60405161040a9594939291906156e1565b61047861096b366004615710565b613e59565b61043a61097e366004614fbd565b60e16020526000908152604090205481565b61047861099e366004614f91565b6140c6565b61043a60ce5481565b60006001600160e01b03198216635a05180f60e01b14806109d157506109d1826141b4565b92915050565b60008060006109e4611b17565b9050600060cd60009054906101000a90046001600160a01b03166001600160a01b03166332cb6b0c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3657600080fd5b505afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e9190615763565b90506000610a7e610e1042615792565b60e55460405163dab2d72f60e01b81526004810186905260248101859052604481018390524260648201529192506001600160a01b03169063dab2d72f90608401604080518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e91906157a9565b945094505050509091565b600081815260d0602090815260409182902082516101c081018452815460ff808216151583526101008204161515938201939093526001600160401b03620100009093048316938101939093526001810154606084015260028101549091166080830152600381018054610d0093929160a0840191610b97906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc3906157cd565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b50505050508152602001600482018054610c29906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c55906157cd565b8015610ca25780601f10610c7757610100808354040283529160200191610ca2565b820191906000526020600020905b815481529060010190602001808311610c8557829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e0909101526141e9565b600081815260d06020908152604080832081516101c081018352815460ff80821615158352610100820416151594820194909452620100009093046001600160401b0390811692840192909252600181015460608401526002810154909116608083015260038101805460a084019190610d79906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610da5906157cd565b8015610df25780601f10610dc757610100808354040283529160200191610df2565b820191906000526020600020905b815481529060010190602001808311610dd557829003601f168201915b50505050508152602001600482018054610e0b906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e37906157cd565b8015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e09091015290506000610eea83614257565b90508015610ef85750505050565b600083815260e6602090815260408083206001600160a01b03881684529091529020805460ff168015610f3257508054610100900460ff16155b8015610f42575060008160020154115b610f785760405162461bcd60e51b815260206004820152600260248201526106a760f31b60448201526064015b60405180910390fd5b6000836101800151846101400151610f909190615808565b90506000826002015482610fa4919061582a565b835461ff001916610100178455600087815260d060205260408120600b0180549293508392909190610fd7908490615849565b909155505060cc546040516340c10f1960e01b81526001600160a01b03898116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050506001600160a01b038716600090815260d560205260408120805483929061106a908490615849565b925050819055508060d960008282546110839190615792565b909155505060028301546040805183815260208101929092526001600160a01b0389169188917fce12bfedd0a2df12c18c2d6ab72bdbfaa34e04031780e8c256032b4bcd3eedc4910160405180910390a350505050505050565b6001600160a01b038116600090815260d4602052604081206109d190614360565b604080516101c08101825260008082526020820181905291810182905260608082018390526080820183905260a0820181905260c082015260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915260ce5482106111a45760405162461bcd60e51b8152602060048201526002602482015261313360f01b6044820152606401610f6f565b600082815260d0602090815260409182902082516101c081018452815460ff808216151583526101008204161515938201939093526001600160401b0362010000909304831693810193909352600181015460608401526002810154909116608083015260038101805460a08401919061121d906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611249906157cd565b80156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b505050505081526020016004820180546112af906157cd565b80601f01602080910402602001604051908101604052809291908181526020018280546112db906157cd565b80156113285780601f106112fd57610100808354040283529160200191611328565b820191906000526020600020905b81548152906001019060200180831161130b57829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e09091015292915050565b7f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea6113b18161436a565b6113bc60d783614374565b50604051600081526001600160a01b038316907ffd5d20d933b3a6b4435b977a4cf85338e0b8d950345d59411254ff68bb294a13906020015b60405180910390a25050565b6001600160a01b03818116600081815260db60205260408082205460e3549151633b6d10df60e11b81526004810194909452919391929116906376da21be9060240160206040518083038186803b15801561145b57600080fd5b505afa15801561146f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114939190615861565b156114f35760de546001600160a01b038416600090815260e1602052604090205482916114bf9161582a565b10156114ee5760de546001600160a01b038416600090815260e160205260409020546114eb919061582a565b90505b6115b8565b6001600160a01b03838116600081815260e460205260408082205460cb5491516370a0823160e01b81526004810194909452919391929116906370a082319060240160206040518083038186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190615763565b61158f9190615792565b90508160de54826115a0919061582a565b10156115b65760de546115b3908261582a565b91505b505b6115c181614389565b9392505050565b60006115d26118df565b82106116045760405162461bcd60e51b81526020600482015260016024820152600d60fa1b6044820152606401610f6f565b6109d160d783614460565b33600090815260db60205260409020548111156116535760405162461bcd60e51b8152602060048201526002602482015261343160f01b6044820152606401610f6f565b60cc5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190615861565b5033600090815260db6020526040812080548392906116f7908490615792565b909155505060ce5460009061170e90600190615792565b600081815260e66020908152604080832033845290915290205490915060ff161561173d5761173d338261446c565b33600081815260db6020908152604091829020548251868152918201527fa3610c47fd3adfbc868e48cff17934864910f18ab33b59d02e410c23ffe7550e91016113f5565b60008281526065602052604090206001015461179d8161436a565b6117a78383614802565b505050565b6001600160a01b038116331461181c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610f6f565b6118268282614824565b5050565b7f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea6118548161436a565b61185f60d783614846565b50604051600181526001600160a01b038316907ffd5d20d933b3a6b4435b977a4cf85338e0b8d950345d59411254ff68bb294a13906020016113f5565b6001600160a01b038216600090815260d3602052604081206115c1908361485b565b60dd81815481106118ce57600080fd5b600091825260209091200154905081565b60006118eb60d7614360565b905090565b60d160209081526000928352604080842090915290825290208054600182015460028301805460ff8085169561010086048216956201000090049091169392909161193a906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611966906157cd565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050905085565b60c980546119ca906157cd565b80601f01602080910402602001604051908101604052809291908181526020018280546119f6906157cd565b8015611a435780601f10611a1857610100808354040283529160200191611a43565b820191906000526020600020905b815481529060010190602001808311611a2657829003601f168201915b505050505081565b8015611a935733600090815260d360205260409020611a6a9083614846565b506001600160a01b038216600090815260d460205260409020611a8d9033614846565b50611ad1565b33600090815260d360205260409020611aac9083614374565b506001600160a01b038216600090815260d460205260409020611acf9033614374565b505b60405181151581526001600160a01b0383169033907f1d3e246ebbc933bf65d3290db9f93d67ab91a12d2b19308a35806e04d1c174c59060200160405180910390a35050565b60d95460cd54604080516318160ddd60e01b81529051600093926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611b6057600080fd5b505afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615763565b60cc60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611be657600080fd5b505afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e9190615763565b611c289190615849565b6118eb9190615849565b7fe752add323323eb13e36c71ee508dfd16d74e9e4c4fd78786ba97989e5e13818611c5c8161436a565b60ca546001600160a01b0316611c985760405162461bcd60e51b81526020600482015260016024820152603760f81b6044820152606401610f6f565b60c98054611ca5906157cd565b15159050611cd95760405162461bcd60e51b81526020600482015260016024820152600760fb1b6044820152606401610f6f565b846001600160401b0316866001600160401b031611611d1e5760405162461bcd60e51b81526020600482015260016024820152603960f81b6044820152606401610f6f565b60006001611d2c878961587e565b6001600160401b03161190506000611d44878961587e565b6001600160401b03166001600160401b03811115611d6457611d6461526c565b604051908082528060200260200182016040528015611d8d578160200160208202803683370190505b5090506000611d9c888a61587e565b6001600160401b03166001600160401b03811115611dbc57611dbc61526c565b604051908082528060200260200182016040528015611de5578160200160208202803683370190505b5090506000611df58960016158a6565b90505b896001600160401b0316816001600160401b0316116121395760ca5460405160c083901b6001600160c01b031916602082015260609190911b6bffffffffffffffffffffffff19166028820152600090603c0160408051601f198184030181529181528151602092830120600081815260d690935291205490915060ff1615611ea75760405162461bcd60e51b81526020600482015260016024820152603960f81b6044820152606401610f6f565b600081815260d660205260409020805460ff1916600117905560d25460ff16156121265760ca546040516324b204d360e21b81526001600160401b03841660048201526000916001600160a01b0316906392c8134c906024016101806040518083038186803b158015611f1957600080fd5b505afa158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5191906158e1565b9050611f5e60018461587e565b6001600160401b031681606001516001600160401b031614611fa75760405162461bcd60e51b8152602060048201526002602482015261031360f41b6044820152606401610f6f565b85156120a15782856001611fbb8e8461587e565b611fc5919061587e565b6001600160401b031681518110611fde57611fde6159b3565b6001600160401b039092166020928302919091019091015260408101518460016120088e8761587e565b612012919061587e565b6001600160401b03168151811061202b5761202b6159b3565b6020026020010181815250508b6001600160401b0316836001600160401b0316141561209c57886001600160401b03168161014001516001600160401b03161461209c5760405162461bcd60e51b8152602060048201526002602482015261189960f11b6044820152606401610f6f565b612124565b886001600160401b03168161014001516001600160401b0316146120ec5760405162461bcd60e51b8152602060048201526002602482015261189960f11b6044820152606401610f6f565b898160400151146121245760405162461bcd60e51b8152602060048201526002602482015261313160f01b6044820152606401610f6f565b505b5080612131816159c9565b915050611df8565b5082156121e75760d25460ff16156121ac5760008160405160200161215e91906159f0565b6040516020818303038152906040528051906020012090508088146121aa5760405162461bcd60e51b8152602060048201526002602482015261313160f01b6044820152606401610f6f565b505b60ce547f8ca92d352606fb6a6c3455dc2545d7c239ed45113c98a9e3060da795715e070a836040516121de9190615a26565b60405180910390a25b600060ce546000141561220757612200610e1042615792565b905061222f565b60d06000600160ce5461221a9190615792565b81526020019081526020016000206006015490505b60e5546000906001600160a01b031663dab2d72f61224b611b17565b60cd60009054906101000a90046001600160a01b03166001600160a01b03166332cb6b0c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561229957600080fd5b505afa1580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d19190615763565b6040516001600160e01b031960e085901b1681526004810192909252602482015260448101859052426064820152608401604080518083038186803b15801561231957600080fd5b505afa15801561232d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235191906157a9565b5090506000606460da5483612366919061582a565b6123709190615808565b60cd5460cf546040516340c10f1960e01b81526001600160a01b0391821660048201526024810184905292935016906340c10f1990604401602060405180830381600087803b1580156123c257600080fd5b505af11580156123d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fa9190615861565b5060006124078284615792565b90508060d9600082825461241b9190615849565b909155505060ce541561249557600060d06000600160ce5461243d9190615792565b81526020810191909152604001600020805460ff191691151591909117905560ce5461246b90600190615792565b6040517f4c808ece238f6486c5ceae7cb90b49f61cd4a84a864e106142e0e0ed33e323d790600090a25b604051806101c001604052806001151581526020016000151581526020018e6001600160401b031681526020018c81526020018b6001600160401b031681526020018a815260200160c980546124ea906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612516906157cd565b80156125635780601f1061253857610100808354040283529160200191612563565b820191906000526020600020905b81548152906001019060200180831161254657829003601f168201915b5050505050815260200160ca60009054906101000a90046001600160a01b03166001600160a01b0316815260200142815260200160cb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261d9190615763565b81526020808201849052604080830186905260006060808501829052608094850182905260ce54825260d084529082902085518154878601519488015161ffff1990911691151561ff00191691909117610100941515949094029390931769ffffffffffffffff00001916620100006001600160401b03948516021781559085015160018201559284015160028401805467ffffffffffffffff19169190921617905560a083015180516126d79260038501920190614eb9565b5060c082015180516126f3916004840191602090910190614eb9565b5060e08201516005820180546001600160a01b0319166001600160a01b039092169190911790556101008201516006820155610120820151600782015561014082015160088201556101608201516009820155610180820151600a8201556101a090910151600b9091015560ce546040517fb32766c59037d686ced179305d00c590d44f8c9222ccc75ea89c63a6f9f7e4d990600090a260ce805490600061279a83615a73565b919050555050505050505050505050505050565b600054600990610100900460ff161580156127d0575060005460ff8083169116105b6128335760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610f6f565b6000805461ffff191660ff831617610100178155680c4e42014d6dac000060de556202032060e25560dc8054695f4a8c8375d1554000009290612878576128786159b3565b90600052602060002001819055506a027b46536c66c8e300000060dc6001815481106128a6576128a66159b3565b90600052602060002001819055506a04f68ca6d8cd91c600000060dc6002815481106128d4576128d46159b3565b90600052602060002001819055506a09ed194db19b238c00000060dc600381548110612902576129026159b3565b600091825260208083209190910192909255805461ff001916905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891015b60405180910390a150565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061298b5761298b6159b3565b6020026020010181815250506117a781833361368e565b6001600160a01b038116600090815260d3602052604081206109d190614360565b60e3546001600160a01b031633146129ed5760405162461bcd60e51b8152600401610f6f90615a8e565b60df5460ff16612a0f5760405162461bcd60e51b8152600401610f6f90615aa9565b6001600160a01b038316600090815260e4602052604081208054839290612a37908490615792565b90915550506001600160a01b038216600090815260e4602052604081208054839290612a64908490615849565b9091555050505050565b60d060205260009081526040902080546001820154600283015460038401805460ff808616966101008704909116956001600160401b03620100009091048116959416929091612abd906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae9906157cd565b8015612b365780601f10612b0b57610100808354040283529160200191612b36565b820191906000526020600020905b815481529060010190602001808311612b1957829003601f168201915b505050505090806004018054612b4b906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612b77906157cd565b8015612bc45780601f10612b9957610100808354040283529160200191612bc4565b820191906000526020600020905b815481529060010190602001808311612ba757829003601f168201915b5050505060058301546006840154600785015460088601546009870154600a880154600b9098015496976001600160a01b0390951696939550919390928e565b60008281526097602052604081206115c19083614460565b600082815260d0602052604090205460ff16612c5f5760405162461bcd60e51b8152602060048201526002602482015261189b60f11b6044820152606401610f6f565b6001600160a01b038316600090815260e4602090815260408083205460e1909252822054612c8d9190615849565b600084815260d0602090815260409182902060010154825191820152919250016040516020818303038152906040528051906020012082604051602001612cd49190615ac5565b6040516020818303038152906040528051906020012014612d4057604080516001600160a01b038616815233602082015290810182905283907f38bc289ec527b82570515e9f8a5f4e3e847a32ec467d219f6e0b2a205c6d06299060600160405180910390a250505050565b60e354604051633b6d10df60e11b81526001600160a01b03868116600483015260009216906376da21be9060240160206040518083038186803b158015612d8657600080fd5b505afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190615861565b905080612e61576001600160a01b03858116600081815260e46020526040908190205460cb5491516370a0823160e01b815260048101939093529216906370a082319060240160206040518083038186803b158015612e1c57600080fd5b505afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190615763565b612e5e9190615792565b91505b600084815260e6602090815260408083206001600160a01b038916845290915290205460ff1615612eb95760405162461bcd60e51b81526020600482015260026024820152610d4d60f21b6044820152606401610f6f565b60008215612fa75760008215612edb57612ed487600061487d565b9050612ee9565b612ee660008861487d565b90505b6000612ef482614389565b9050612fa285828a8a8a60d060008e81526020019081526020016000206003018054612f1f906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612f4b906157cd565b8015612f985780601f10612f6d57610100808354040283529160200191612f98565b820191906000526020600020905b815481529060010190602001808311612f7b57829003601f168201915b50505050506149c4565b925050505b600085815260d060205260408120600a018054839290612fc8908490615849565b925050819055506040518060a001604052806001151581526020016000151581526020018481526020018281526020018581525060e660008781526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908315150217905550604082015181600101556060820151816002015560808201518160030190805190602001906130a2929190614eb9565b505060408051858152602081018490526001600160a01b038916925087917fdff63863e3002b7cf45ae1354d3a7c74a4cb71103bc154ae722b0e03f13cd6c8910160405180910390a3505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60cb546001600160a01b031633146131495760405163c183bcef60e01b815260040160405180910390fd5b600060ce5460001461316957600160ce546131649190615792565b61316c565b60005b600081815260e6602090815260408083206001600160a01b038816845290915290205490915060ff16156131a4576131a4838261446c565b600081815260e6602090815260408083206001600160a01b038616845290915290205460ff16156117a7576117a7828261446c565b60e3546001600160a01b031633146132035760405162461bcd60e51b8152600401610f6f90615a8e565b60df5460ff166132255760405162461bcd60e51b8152600401610f6f90615aa9565b60cb546001600160a01b03848116600090815260e160205260408120805492909316928492909190613258908490615792565b90915550506001600160a01b038316600090815260e4602052604081208054849290613285908490615792565b909155505060ce5460009061329c90600190615792565b600081815260e6602090815260408083206001600160a01b038a16845290915290205490915060ff16156132d4576132d4858261446c565b600081815260e6602090815260408083206001600160a01b038816845290915290205460ff161561330957613309848261446c565b5050505050565b6060600083516001600160401b0381111561332d5761332d61526c565b60405190808252806020026020018201604052801561339657816020015b6133836040518060a0016040528060001515815260200160001515815260200160001515815260200160008152602001606081525090565b81526020019060019003908161334b5790505b50905060005b84518110156134e85760d160008683815181106133bb576133bb6159b3565b602090810291909101810151825281810192909252604090810160009081208782528352819020815160a081018352815460ff808216151583526101008204811615159583019590955262010000900490931615159183019190915260018101546060830152600281018054608084019190613436906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054613462906157cd565b80156134af5780601f10613484576101008083540402835291602001916134af565b820191906000526020600020905b81548152906001019060200180831161349257829003601f168201915b5050505050815250508282815181106134ca576134ca6159b3565b602002602001018190525080806134e090615a73565b91505061339c565b509392505050565b60e3546001600160a01b0316331461351a5760405162461bcd60e51b8152600401610f6f90615a8e565b6001600160a01b038216600090815260e1602052604081205460de54613540919061582a565b6001600160a01b038416600090815260db60205260409020549091508190613569908490615849565b111561359c5760405162461bcd60e51b8152602060048201526002602482015261343960f01b6044820152606401610f6f565b6001600160a01b038316600090815260db6020526040812080548492906135c4908490615849565b909155505060ce546000906135db90600190615792565b600081815260e6602090815260408083206001600160a01b038916845290915290205490915060ff161561361357613613848261446c565b50505050565b6001600160a01b038216600090815260d46020526040812061363a90614360565b821061366c5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610f6f565b6001600160a01b038316600090815260d4602052604090206115c19083614460565b600082815260d0602090815260409182902082516101c081018452815460ff80821615158352610100820416151593820193909352620100009092046001600160401b0390811693830193909352600181015460608301526002810154909216608082015260038201805461370f9291849160a084019190610b97906157cd565b600061371a84614257565b90508015613729575050505050565b8154610100900460ff16156137655760405162461bcd60e51b8152602060048201526002602482015261323760f01b6044820152606401610f6f565b600082600a0154836008015461377b9190615808565b8651909150600080805b83811015613a755760008a82815181106137a1576137a16159b3565b602090810291909101015160cb54604051636c36092360e01b8152600481018390529192506000916001600160a01b0390911690636c3609239060240160206040518083038186803b1580156137f657600080fd5b505afa15801561380a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382e9190615763565b60cb546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e9060240160206040518083038186803b15801561387857600080fd5b505afa15801561388c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b09190615ae1565b60008d815260d160209081526040808320878452825280832060e090925290912054919250906001600160a01b0316806138e75750815b8b600601548410801561390157508154610100900460ff16155b80156139145750815462010000900460ff165b15613a5d57815461ff001916610100178255600b8c0180548b919060009061393d908490615849565b90915550506001600160a01b038d161580159061396b57508c6001600160a01b0316816001600160a01b0316145b156139815761397a8a88615849565b9650613a15565b60cc546040516340c10f1960e01b81526001600160a01b038381166004830152602482018d9052909116906340c10f1990604401600060405180830381600087803b1580156139cf57600080fd5b505af11580156139e3573d6000803e3d6000fd5b505050506001600160a01b038116600090815260d56020526040812080548c9290613a0f908490615849565b90915550505b87613a1f81615a73565b9850508d7f38be9b012e428704c0fb2b81dfd53444b76ac4cd45c46cfd2d661f73d97cf47b8b604051613a5491815260200190565b60405180910390a25b50505050508080613a6d90615a73565b915050613785565b508015613b105760cc546040516340c10f1960e01b81526001600160a01b03898116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b158015613aca57600080fd5b505af1158015613ade573d6000803e3d6000fd5b505050506001600160a01b038716600090815260d5602052604081208054839290613b0a908490615849565b90915550505b613b1a848361582a565b60d96000828254613b2b9190615792565b909155508890507fc2f0198a2312102291df14ebd1023d3e8bd1ef40cf7db3c902eb11bef8a90ac6613b5d868561582a565b60408051918252602082018690520160405180910390a2505050505050505050565b60cb546001600160a01b03163314613bbe5760405162461bcd60e51b81526020600482015260026024820152611a9b60f11b6044820152606401610f6f565b60df805460ff19168215159081179091556040519081527f280cb161002275204369941f9802ee155e35a137f91f719acae275cbed8a50929060200161294a565b60dc81815481106118ce57600080fd5b60006109d160d78361485b565b60008181526097602052604081206109d190614360565b600081815260d06020526040902060060154613c765760405162461bcd60e51b8152602060048201526002602482015261064760f31b6044820152606401610f6f565b600081815260d06020526040902060060154613c9690630163f500615849565b421015613cca5760405162461bcd60e51b8152602060048201526002602482015261323960f01b6044820152606401610f6f565b600081815260d06020526040902054610100900460ff1615613d135760405162461bcd60e51b8152602060048201526002602482015261033360f41b6044820152606401610f6f565b600081815260d060205260409020600b810154600890910154613d369190615792565b60d96000828254613d479190615792565b9091555050600081815260d06020526040808220805461ff0019166101001790555182917f5e804f6ab65f629e96873f89acb6e5d1456139dc56369bcfc528171e348baa4291a250565b6000613d9c836129a2565b8210613dce5760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610f6f565b6001600160a01b038316600090815260d3602052604090206115c19083614460565b600082815260656020526040902060010154613e0b8161436a565b6117a78383614824565b60e6602090815260009283526040808420909152908252902080546001820154600283015460038401805460ff808616966101009096041694919061193a906157cd565b60e3546001600160a01b03163314613e835760405162461bcd60e51b8152600401610f6f90615a8e565b8080613e91575060df5460ff165b613ead5760405162461bcd60e51b8152600401610f6f90615aa9565b60e2546001600160a01b038516600090815260e16020526040902054613ed4908490615849565b1115613f075760405162461bcd60e51b8152602060048201526002602482015261343360f01b6044820152606401610f6f565b60cb546040516370a0823160e01b81526001600160a01b0385811660048301529091169060009082906370a082319060240160206040518083038186803b158015613f5157600080fd5b505afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f899190615763565b6001600160a01b038616600090815260e46020526040902054909150613fb0908590615849565b811015613fe45760405162461bcd60e51b8152602060048201526002602482015261343560f01b6044820152606401610f6f565b6001600160a01b038616600090815260e160205260408120805486929061400c908490615849565b90915550506001600160a01b038516600090815260e4602052604081208054869290614039908490615849565b909155505060ce5460009061405090600190615792565b600081815260e6602090815260408083206001600160a01b038c16845290915290205490915060ff161561408857614088878261446c565b600081815260e6602090815260408083206001600160a01b038a16845290915290205460ff16156140bd576140bd868261446c565b50505050505050565b60e3546001600160a01b031633146140f05760405162461bcd60e51b8152600401610f6f90615a8e565b6001600160a01b038216600090815260db602052604090205481111561413d5760405162461bcd60e51b8152602060048201526002602482015261035360f41b6044820152606401610f6f565b6001600160a01b038216600090815260db602052604081208054839290614165908490615792565b909155505060ce5460009061417c90600190615792565b600081815260e6602090815260408083206001600160a01b038816845290915290205490915060ff16156117a7576117a7838261446c565b60006001600160e01b03198216637965db0b60e01b14806109d157506301ffc9a760e01b6001600160e01b03198316146109d1565b6101008101516142205760405162461bcd60e51b8152602060048201526002602482015261062760f31b6044820152606401610f6f565b8051156142545760405162461bcd60e51b8152602060048201526002602482015261313960f01b6044820152606401610f6f565b50565b600081815260d06020526040812060060154819061427990630163f500615849565b421015905080801561429f5750600083815260d06020526040902054610100900460ff16155b1561432457600083815260d060205260409020600b8101546008909101546142c79190615792565b60d960008282546142d89190615792565b9091555050600083815260d06020526040808220805461ff0019166101001790555184917f5e804f6ab65f629e96873f89acb6e5d1456139dc56369bcfc528171e348baa4291a26109d1565b80156143575760405162461bcd60e51b8152602060048201526002602482015261032360f41b6044820152606401610f6f565b50600092915050565b60006109d1825490565b6142548133614a5a565b60006115c1836001600160a01b038416614ab3565b600060dc60008154811061439f5761439f6159b3565b90600052602060002001548210156143b957506064919050565b60dc5460015b8181101561442f5760dc81815481106143da576143da6159b3565b906000526020600020015484101561441d5760dd6143f9600183615792565b81548110614409576144096159b3565b906000526020600020015492505050919050565b8061442781615a73565b9150506143bf565b5060dd61443d600183615792565b8154811061444d5761444d6159b3565b9060005260206000200154915050919050565b60006115c18383614ba6565b6001600160a01b038216600090815260e4602090815260408083205460e190925282205461449a9190615849565b60e354604051633b6d10df60e11b81526001600160a01b038681166004830152929350600092909116906376da21be9060240160206040518083038186803b1580156144e557600080fd5b505afa1580156144f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451d9190615861565b9050806145c0576001600160a01b03848116600081815260e46020526040908190205460cb5491516370a0823160e01b815260048101939093529216906370a082319060240160206040518083038186803b15801561457b57600080fd5b505afa15801561458f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145b39190615763565b6145bd9190615792565b91505b600082156146db57600082156145e2576145db86600061487d565b90506145f0565b6145ed60008761487d565b90505b60006145fb82614389565b600087815260e6602090815260408083206001600160a01b038c168452909152902060030180549192506146d691879184918b918b9161463a906157cd565b80601f0160208091040260200160405190810160405280929190818152602001828054614666906157cd565b80156146b35780601f10614688576101008083540402835291602001916146b3565b820191906000526020600020905b81548152906001019060200180831161469657829003601f168201915b50505060008e815260d0602052604090206003018054909250612f1f91506157cd565b925050505b600084815260e6602090815260408083206001600160a01b0389168452909152812060020154819080841115614748576147158185615792565b92508260d06000898152602001908152602001600020600a01600082825461473d9190615849565b909155506147809050565b6147528482615792565b91508160d06000898152602001908152602001600020600a01600082825461477a9190615792565b90915550505b600087815260e6602090815260408083206001600160a01b038c1680855290835292819020600181018a9055600201879055805189815291820187905281018590526060810184905288907f345e917d308f70073ee0145fd254aaa3b0a711697093398f54b02810af318c479060800160405180910390a35050505050505050565b61480c8282614bd0565b60008281526097602052604090206117a79082614846565b61482e8282614c56565b60008281526097602052604090206117a79082614374565b60006115c1836001600160a01b038416614cbd565b6001600160a01b038116600090815260018301602052604081205415156115c1565b6001600160a01b038216600081815260db60205260409020549061497157506001600160a01b03818116600081815260db602090815260408083205460e49092528083205460cb5491516370a0823160e01b8152600481019590955291949293919216906370a082319060240160206040518083038186803b15801561490257600080fd5b505afa158015614916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061493a9190615763565b6149449190615792565b90508160de5482614955919061582a565b101561496b5760de54614968908261582a565b91505b506109d1565b60de546001600160a01b038416600090815260e1602052604090205482916149989161582a565b10156109d15760de546001600160a01b038416600090815260e160205260409020546115c1919061582a565b60e554604051630c4494c160e41b81526000916001600160a01b03169063c4494c10906149ff908a908a908a908a908a908a90600401615afe565b60206040518083038186803b158015614a1757600080fd5b505afa158015614a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a4f9190615763565b979650505050505050565b614a6482826130f3565b61182657614a7181614d0c565b614a7c836020614d1e565b604051602001614a8d929190615b50565b60408051601f198184030181529082905262461bcd60e51b8252610f6f91600401615208565b60008181526001830160205260408120548015614b9c576000614ad7600183615792565b8554909150600090614aeb90600190615792565b9050818114614b50576000866000018281548110614b0b57614b0b6159b3565b9060005260206000200154905080876000018481548110614b2e57614b2e6159b3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b6157614b61615bc5565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109d1565b60009150506109d1565b6000826000018281548110614bbd57614bbd6159b3565b9060005260206000200154905092915050565b614bda82826130f3565b6118265760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055614c123390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b614c6082826130f3565b156118265760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054614d04575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109d1565b5060006109d1565b60606109d16001600160a01b03831660145b60606000614d2d83600261582a565b614d38906002615849565b6001600160401b03811115614d4f57614d4f61526c565b6040519080825280601f01601f191660200182016040528015614d79576020820181803683370190505b509050600360fc1b81600081518110614d9457614d946159b3565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614dc357614dc36159b3565b60200101906001600160f81b031916908160001a9053506000614de784600261582a565b614df2906001615849565b90505b6001811115614e6a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614e2657614e266159b3565b1a60f81b828281518110614e3c57614e3c6159b3565b60200101906001600160f81b031916908160001a90535060049490941c93614e6381615bdb565b9050614df5565b5083156115c15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610f6f565b828054614ec5906157cd565b90600052602060002090601f016020900481019282614ee75760008555614f2d565b82601f10614f0057805160ff1916838001178555614f2d565b82800160010185558215614f2d579182015b82811115614f2d578251825591602001919060010190614f12565b50614f39929150614f3d565b5090565b5b80821115614f395760008155600101614f3e565b600060208284031215614f6457600080fd5b81356001600160e01b0319811681146115c157600080fd5b6001600160a01b038116811461425457600080fd5b60008060408385031215614fa457600080fd5b8235614faf81614f7c565b946020939093013593505050565b600060208284031215614fcf57600080fd5b81356115c181614f7c565b600060208284031215614fec57600080fd5b5035919050565b60005b8381101561500e578181015183820152602001614ff6565b838111156136135750506000910152565b60008151808452615037816020860160208601614ff3565b601f01601f19169290920160200192915050565b6020815261505e60208201835115159052565b60006020830151615073604084018215159052565b5060408301516001600160401b0381166060840152506060830151608083015260808301516150ad60a08401826001600160401b03169052565b5060a08301516101c08060c08501526150ca6101e085018361501f565b915060c0850151601f198584030160e08601526150e7838261501f565b92505060e0850151610100615106818701836001600160a01b03169052565b860151610120868101919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601516101a0808701919091529095015193019290925250919050565b6000806040838503121561516a57600080fd5b82359150602083013561517c81614f7c565b809150509250929050565b6000806040838503121561519a57600080fd5b82356151a581614f7c565b9150602083013561517c81614f7c565b600080604083850312156151c857600080fd5b50508035926020909101359150565b85151581528415156020820152831515604082015282606082015260a060808201526000614a4f60a083018461501f565b6020815260006115c1602083018461501f565b801515811461425457600080fd5b6000806040838503121561523c57600080fd5b823561524781614f7c565b9150602083013561517c8161521b565b6001600160401b038116811461425457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b03811182821017156152a5576152a561526c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156152d3576152d361526c565b604052919050565b600082601f8301126152ec57600080fd5b81356001600160401b038111156153055761530561526c565b615318601f8201601f19166020016152ab565b81815284602083860101111561532d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561536257600080fd5b853561536d81615257565b9450602086013561537d81615257565b935060408601359250606086013561539481615257565b915060808601356001600160401b038111156153af57600080fd5b6153bb888289016152db565b9150509295509295909350565b6000806000606084860312156153dd57600080fd5b83356153e881614f7c565b925060208401356153f881614f7c565b929592945050506040919091013590565b8e151581528d151560208201526001600160401b038d1660408201528b6060820152615440608082018c6001600160401b03169052565b6101c060a082015260006154586101c083018c61501f565b82810360c084015261546a818c61501f565b91505061548260e083018a6001600160a01b03169052565b8761010083015286610120830152856101408301528461016083015283610180830152826101a08301529f9e505050505050505050505050505050565b6000806000606084860312156154d457600080fd5b83356154df81614f7c565b92506020840135915060408401356001600160401b0381111561550157600080fd5b61550d868287016152db565b9150509250925092565b600082601f83011261552857600080fd5b813560206001600160401b038211156155435761554361526c565b8160051b6155528282016152ab565b928352848101820192828101908785111561556c57600080fd5b83870192505b84831015614a4f57823582529183019190830190615572565b6000806040838503121561559e57600080fd5b82356001600160401b038111156155b457600080fd5b6155c085828601615517565b95602094909401359450505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561565c57888303603f19018552815180511515845287810151151588850152868101511515878501526060808201519085015260809081015160a0918501829052906156488186018361501f565b9689019694505050908601906001016155f6565b509098975050505050505050565b60008060006060848603121561567f57600080fd5b83356001600160401b0381111561569557600080fd5b6156a186828701615517565b9350506020840135915060408401356156b981614f7c565b809150509250925092565b6000602082840312156156d657600080fd5b81356115c18161521b565b8515158152841515602082015283604082015282606082015260a060808201526000614a4f60a083018461501f565b6000806000806080858703121561572657600080fd5b843561573181614f7c565b9350602085013561574181614f7c565b92506040850135915060608501356157588161521b565b939692955090935050565b60006020828403121561577557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156157a4576157a461577c565b500390565b600080604083850312156157bc57600080fd5b505080516020909101519092909150565b600181811c908216806157e157607f821691505b6020821081141561580257634e487b7160e01b600052602260045260246000fd5b50919050565b60008261582557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156158445761584461577c565b500290565b6000821982111561585c5761585c61577c565b500190565b60006020828403121561587357600080fd5b81516115c18161521b565b60006001600160401b038381169083168181101561589e5761589e61577c565b039392505050565b60006001600160401b038083168185168083038211156158c8576158c861577c565b01949350505050565b80516158dc81615257565b919050565b600061018082840312156158f457600080fd5b6158fc615282565b825181526020830151602082015260408301516040820152615920606084016158d1565b6060820152615931608084016158d1565b608082015261594260a084016158d1565b60a082015261595360c084016158d1565b60c082015261596460e084016158d1565b60e08201526101006159778185016158d1565b908201526101206159898482016158d1565b9082015261014061599b8482016158d1565b90820152610160928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818114156159e6576159e661577c565b6001019392505050565b815160009082906020808601845b83811015615a1a578151855293820193908201906001016159fe565b50929695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615a675783516001600160401b031683529284019291840191600101615a42565b50909695505050505050565b6000600019821415615a8757615a8761577c565b5060010190565b6020808252600190820152603160f81b604082015260600190565b6020808252600290820152611a9960f11b604082015260600190565b60008251615ad7818460208701614ff3565b9190910192915050565b600060208284031215615af357600080fd5b81516115c181614f7c565b86815285602082015260018060a01b038516604082015283606082015260c060808201526000615b3160c083018561501f565b82810360a0840152615b43818561501f565b9998505050505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615b88816017850160208801614ff3565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615bb9816028840160208801614ff3565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b600081615bea57615bea61577c565b50600019019056fea2646970667358221220a6ce67c215ddd5e9f3d39f8375c6ed17c29a72a8e5dd13750ba4e3675c808b3064736f6c63430008090033