0 txs
1.15m calls
constructor
No constructor.
functions
assignedKeysOfUserCount
viewfunction assignedKeysOfUserCount(address) view returns (uint256)
assignedKeysToPoolCount
viewfunction assignedKeysToPoolCount(address) view returns (uint256)
assignedKeyToPool
viewfunction assignedKeyToPool(uint256) view returns (address)
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)
createAssertionHashAndCheckPayout
purefunction createAssertionHashAndCheckPayout(uint256 _nodeLicenseId, uint256 _challengeId, uint256 _boostFactor, bytes _confirmData, bytes _challengerSignedHash) pure returns (bool, bytes32)
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[])
getTotalClaims
viewfunction getTotalClaims(address owner) view returns (uint256)
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)
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)
addStakingTier
nonpayablefunction addStakingTier(uint256 newThreshold, uint256 newBoostFactor)
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)
removeStakingTier
nonpayablefunction removeStakingTier(uint256 index)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setApprovalForOperator
nonpayablefunction setApprovalForOperator(address operator, bool approved)
setChallengerPublicKey
nonpayablefunction setChallengerPublicKey(bytes _challengerPublicKey)
setNodeLicenseAddress
nonpayablefunction setNodeLicenseAddress(address _nodeLicenseAddress)
setRollupAddress
nonpayablefunction setRollupAddress(address _rollupAddress)
stakeEsXai
nonpayablefunction stakeEsXai(address pool, uint256 amount)
stakeKeys
nonpayablefunction stakeKeys(address pool, address staker, uint256[] keyIds)
submitAssertionToChallenge
nonpayablefunction submitAssertionToChallenge(uint256 _nodeLicenseId, uint256 _challengeId, bytes _confirmData)
submitChallenge
nonpayablefunction submitChallenge(uint64 _assertionId, uint64 _predecessorAssertionId, bytes32 _confirmData, uint64 _assertionTimestamp, bytes _challengerSignedHash)
submitMultipleAssertions
nonpayablefunction submitMultipleAssertions(uint256[] _nodeLicenseIds, uint256 _challengeId, bytes _confirmData)
toggleAssertionChecking
nonpayablefunction toggleAssertionChecking()
unstake
nonpayablefunction unstake(uint256 amount)
unstakeEsXai
nonpayablefunction unstakeEsXai(address pool, uint256 amount)
unstakeKeys
nonpayablefunction unstakeKeys(address pool, address staker, uint256[] keyIds)
updateMaxKeysPerPool
nonpayablefunction updateMaxKeysPerPool(uint256 newAmount)
updateMaxStakePerLicense
nonpayablefunction updateMaxStakePerLicense(uint256 newAmount)
updateStakingTier
nonpayablefunction updateStakingTier(uint256 index, uint256 newThreshold, uint256 newBoostFactor)
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)
BatchRewardsClaimed
event BatchRewardsClaimed(uint256 indexed challengeId, uint256 totalReward, uint256 keysLength)
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 operator, uint256 keysLength)
InvalidSubmission
event InvalidSubmission(uint256 indexed challengeId, uint256 nodeLicenseId)
KycStatusChanged
event KycStatusChanged(address indexed wallet, bool isKycApproved)
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()
UnstakeV1
event UnstakeV1(address indexed user, uint256 amount, uint256 totalStaked)
UpdateMaxKeysPerPool
event UpdateMaxKeysPerPool(uint256 prevAmount, uint256 newAmount)
UpdateMaxStakeAmount
event UpdateMaxStakeAmount(uint256 prevAmount, uint256 newAmount)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b50615f1880620000216000396000f3fe608060405234801561001057600080fd5b506004361061041d5760003560e01c80637eaf53f51161022b578063aaa0de0611610130578063d0760f0e116100b8578063ec6564bf11610087578063ec6564bf146109e4578063ececf59f146109f7578063efe14b4a14610a17578063f3b557cf14610a2a578063f7fed02c14610a3d57600080fd5b8063d0760f0e146109a2578063d547741f146109ab578063d869f9d4146109be578063de29ac43146109d157600080fd5b8063c5f39932116100ff578063c5f3993214610943578063c824ecfa14610956578063ca15c87314610969578063cdb1dc4e1461097c578063ce0dc3eb1461098f57600080fd5b8063aaa0de06146108f7578063b48985e41461090a578063b4d6b7df1461091d578063c056f0b61461093057600080fd5b80638f1d3776116101b3578063983dad9611610182578063983dad961461088d5780639cda35f9146108a0578063a217fddf146108c9578063a32cf536146108d1578063a528916d146108e457600080fd5b80638f1d37761461081a5780639010d07c1461084757806391d148541461085a578063958c21c01461086d57600080fd5b806384d9cdae116101fa57806384d9cdae146107c657806386bb8f37146107d957806386c4a9e7146107ec57806389e5900a146107f45780638adbe7311461080757600080fd5b80637eaf53f5146107905780638041f49d146107985780638129fc1c146107ab5780638376f5db146107b357600080fd5b80632e17de7811610331578063530adbb4116102b957806369c1fc251161028857806369c1fc25146107175780636a1565801461073b57806370f117de1461075b5780637579a28b146107685780637b4e51f61461077d57600080fd5b8063530adbb4146106cc5780635dcb18e7146106f35780635e2de786146106fc5780635ec6a8df1461070457600080fd5b8063389b99fa11610300578063389b99fa146106565780633af10cd1146106695780634130114f1461067c578063435222d5146106a65780634c3594d5146106b957600080fd5b80632e17de781461060a5780632f2ff15d1461061d57806335c1b5871461063057806336568abe1461064357600080fd5b806313b51234116103b457806324360aa11161038357806324360aa11461058b578063248a9ca3146105ae5780632659b786146105d15780632aaa77c4146105e45780632d264ef5146105f757600080fd5b806313b512341461050a5780631988a413146105335780631bdd4b741461055e5780631cfff51b1461057e57600080fd5b80630fc09b1e116103f05780630fc09b1e146104b157806310c1c103146104c4578063111a9802146104e457806312415f12146104f757600080fd5b806301ffc9a71461042257806302d7fd921461044a57806305c780041461047f578063076637061461049c575b600080fd5b6104356104303660046151cc565b610a46565b60405190151581526020015b60405180910390f35b6104717f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea81565b604051908152602001610441565b610487610a71565b60408051928352602083019190915201610441565b6104af6104aa36600461520b565b610bd1565b005b6104af6104bf366004615228565b610c32565b6104716104d236600461520b565b60db6020526000908152604090205481565b6104af6104f2366004615241565b610db5565b61047161050536600461520b565b610ecf565b61047161051836600461520b565b6001600160a01b0316600090815260d5602052604090205490565b60cb54610546906001600160a01b031681565b6040516001600160a01b039091168152602001610441565b61057161056c366004615228565b610ef0565b60405161044191906152bb565b60df546104359060ff1681565b610435610599366004615228565b60d66020526000908152604090205460ff1681565b6104716105bc366004615228565b60009081526065602052604090206001015490565b6104af6105df36600461520b565b611179565b6104716105f236600461520b565b6111f3565b610546610605366004615228565b6113ba565b6104af610618366004615228565b611401565b6104af61062b3660046153c7565b611539565b6104af61063e3660046153f7565b611563565b6104af6106513660046153c7565b61175a565b6104af61066436600461520b565b6117d8565b60cd54610546906001600160a01b031681565b61068f61068a366004615501565b61184a565b604080519215158352602083019190915201610441565b6104356106b4366004615581565b61189e565b6104716106c7366004615228565b6118c0565b6104717fe752add323323eb13e36c71ee508dfd16d74e9e4c4fd78786ba97989e5e1381881565b61047160e25481565b6104716118e1565b60ca54610546906001600160a01b031681565b61072a610725366004615241565b6118f2565b6040516104419594939291906155af565b61047161074936600461520b565b60e46020526000908152604090205481565b60d2546104359060ff1681565b6107706119bf565b60405161044191906155eb565b6104af61078b36600461560c565b611a4d565b610471611b19565b6104af6107a636600461564f565b611c34565b6104af612350565b60cc54610546906001600160a01b031681565b6104af6107d4366004615734565b612589565b6104af6107e7366004615241565b612821565b6104af612f0e565b61047161080236600461520b565b612f61565b6104af610815366004615734565b612f82565b61082d610828366004615228565b613173565b6040516104419e9d9c9b9a99989796959493929190615795565b610546610855366004615241565b613309565b6104356108683660046153c7565b613321565b61088061087b36600461584b565b61334c565b604051610441919061588f565b6104af61089b36600461520b565b61352c565b6105466108ae366004615228565b60e0602052600090815260409020546001600160a01b031681565b610471600081565b60e354610546906001600160a01b031681565b6104af6108f236600461592a565b613585565b61054661090536600461592a565b613663565b6104af610918366004615956565b6136d8565b6104af61092b36600461599b565b6138ef565b6104af61093e3660046159f5565b614084565b610471610951366004615228565b6140d2565b61043561096436600461520b565b6140e2565b610471610977366004615228565b6140ef565b6104af61098a366004615228565b614106565b61054661099d36600461592a565b614264565b61047160de5481565b6104af6109b93660046153c7565b6142c3565b60cf54610546906001600160a01b031681565b6104af6109df366004615228565b6142e8565b6104af6109f2366004615a31565b61436c565b610471610a0536600461520b565b60e16020526000908152604090205481565b6104af610a2536600461592a565b614569565b6104af610a38366004615228565b614611565b61047160ce5481565b60006001600160e01b03198216635a05180f60e01b1480610a6b5750610a6b8261468c565b92915050565b6000806000610a7e611b19565b9050600060cd60009054906101000a90046001600160a01b03166001600160a01b03166332cb6b0c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad057600080fd5b505afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190615a93565b9050818111610b425760405162461bcd60e51b81526020600482015260016024820152603560f81b60448201526064015b60405180910390fd5b6000610b60610b518484615ac2565b610b5b9084615aef565b6146c1565b905060178110610b965760405162461bcd60e51b81526020600482015260016024820152601b60f91b6044820152606401610b39565b6000610ba3826001615b03565b610bae906002615bff565b610bb89084615aef565b9050610bc661447082615aef565b969095509350505050565b6000610bdc81614755565b60ca80546001600160a01b0319166001600160a01b0384169081179091556040519081527ffeb9c0c32964773a47c2c33990bf13dfd8374cff75e67b7317b824a184d50120906020015b60405180910390a15050565b6000610c3d81614755565b60dc54600110610c745760405162461bcd60e51b8152602060048201526002602482015261333960f01b6044820152606401610b39565b60dc548210610caa5760405162461bcd60e51b8152602060048201526002602482015261034360f41b6044820152606401610b39565b815b60dc54610cbb90600190615ac2565b811015610d625760dc610ccf826001615b03565b81548110610cdf57610cdf615c0b565b906000526020600020015460dc8281548110610cfd57610cfd615c0b565b60009182526020909120015560dd610d16826001615b03565b81548110610d2657610d26615c0b565b906000526020600020015460dd8281548110610d4457610d44615c0b565b60009182526020909120015580610d5a81615c21565b915050610cac565b5060dc805480610d7457610d74615c3c565b6001900381819060005260206000200160009055905560dd805480610d9b57610d9b615c3c565b600190038181906000526020600020016000905590555050565b6000610dc081614755565b600082118015610dd257506127108211155b610e035760405162461bcd60e51b8152602060048201526002602482015261333760f01b6044820152606401610b39565b60dc54600090610e1590600190615ac2565b90508360dc8281548110610e2b57610e2b615c0b565b906000526020600020015410610e685760405162461bcd60e51b8152602060048201526002602482015261066760f31b6044820152606401610b39565b505060dc805460018181019092557f3162b0988d4210bff484413ed451d170a03887272177efc0b7d000f10abe9edf019290925560dd805492830181556000527fac507b9f8bf86ad8bb770f71cd2b1992902ae0314d93fc0f2bb011d70e79622690910155565b6001600160a01b038116600090815260d460205260408120610a6b90614762565b604080516101c08101825260008082526020820181905291810182905260608082018390526080820183905260a0820181905260c082015260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915260ce548210610f965760405162461bcd60e51b8152602060048201526002602482015261313360f01b6044820152606401610b39565b600082815260d0602090815260409182902082516101c081018452815460ff808216151583526101008204161515938201939093526001600160401b0362010000909304831693810193909352600181015460608401526002810154909116608083015260038101805460a08401919061100f90615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90615c52565b80156110885780601f1061105d57610100808354040283529160200191611088565b820191906000526020600020905b81548152906001019060200180831161106b57829003601f168201915b505050505081526020016004820180546110a190615c52565b80601f01602080910402602001604051908101604052809291908181526020018280546110cd90615c52565b801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e09091015292915050565b7f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea6111a381614755565b6111ae60d78361476c565b50604051600081526001600160a01b038316907ffd5d20d933b3a6b4435b977a4cf85338e0b8d950345d59411254ff68bb294a13906020015b60405180910390a25050565b6001600160a01b03818116600081815260db60205260408082205460e3549151633b6d10df60e11b81526004810194909452919391929116906376da21be9060240160206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190615c8d565b156112e55760de546001600160a01b038416600090815260e1602052604090205482916112b191615caa565b10156112e05760de546001600160a01b038416600090815260e160205260409020546112dd9190615caa565b90505b6113aa565b6001600160a01b03838116600081815260e460205260408082205460cb5491516370a0823160e01b81526004810194909452919391929116906370a082319060240160206040518083038186803b15801561133f57600080fd5b505afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113779190615a93565b6113819190615ac2565b90508160de54826113929190615caa565b10156113a85760de546113a59082615caa565b91505b505b6113b381614781565b9392505050565b60006113c46118e1565b82106113f65760405162461bcd60e51b81526020600482015260016024820152600d60fa1b6044820152606401610b39565b610a6b60d783614858565b33600090815260db60205260409020548111156114455760405162461bcd60e51b8152602060048201526002602482015261343160f01b6044820152606401610b39565b60cc5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561149157600080fd5b505af11580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c99190615c8d565b5033600090815260db6020526040812080548392906114e9908490615ac2565b909155505033600081815260db6020908152604091829020548251858152918201527fa3610c47fd3adfbc868e48cff17934864910f18ab33b59d02e410c23ffe7550e910160405180910390a250565b60008281526065602052604090206001015461155481614755565b61155e8383614864565b505050565b600061156e81614755565b60008211801561158057506127108211155b6115b15760405162461bcd60e51b8152602060048201526002602482015261333360f01b6044820152606401610b39565b60dc546000906115c390600190615ac2565b905084611621578360dc6001815481106115df576115df615c0b565b90600052602060002001541161161c5760405162461bcd60e51b81526020600482015260026024820152610ccd60f21b6044820152606401610b39565b611711565b80851415611684578360dc611637600184615ac2565b8154811061164757611647615c0b565b90600052602060002001541061161c5760405162461bcd60e51b8152602060048201526002602482015261333560f01b6044820152606401610b39565b8360dc611692876001615b03565b815481106116a2576116a2615c0b565b90600052602060002001541180156116e057508360dc6116c3600188615ac2565b815481106116d3576116d3615c0b565b9060005260206000200154105b6117115760405162461bcd60e51b8152602060048201526002602482015261199b60f11b6044820152606401610b39565b8360dc868154811061172557611725615c0b565b90600052602060002001819055508260dd868154811061174757611747615c0b565b6000918252602090912001555050505050565b6001600160a01b03811633146117ca5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b39565b6117d48282614886565b5050565b7f811427a0fa4932aef534bba16bc34e9b7b2d7d2a79c475fca1765f6cc1faebea61180281614755565b61180d60d7836148a8565b50604051600181526001600160a01b038316907ffd5d20d933b3a6b4435b977a4cf85338e0b8d950345d59411254ff68bb294a13906020016111e7565b6000806000878786866040516020016118669493929190615cc9565b60408051601f1981840301815291905280516020909101209050808661188e61271083615d0c565b1099919850909650505050505050565b6001600160a01b038216600090815260d3602052604081206113b390836148bd565b60dd81815481106118d057600080fd5b600091825260209091200154905081565b60006118ed60d7614762565b905090565b60d160209081526000928352604080842090915290825290208054600182015460028301805460ff8085169561010086048216956201000090049091169392909161193c90615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461196890615c52565b80156119b55780601f1061198a576101008083540402835291602001916119b5565b820191906000526020600020905b81548152906001019060200180831161199857829003601f168201915b5050505050905085565b60c980546119cc90615c52565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890615c52565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b505050505081565b8015611a955733600090815260d360205260409020611a6c90836148a8565b506001600160a01b038216600090815260d460205260409020611a8f90336148a8565b50611ad3565b33600090815260d360205260409020611aae908361476c565b506001600160a01b038216600090815260d460205260409020611ad1903361476c565b505b60405181151581526001600160a01b0383169033907f1d3e246ebbc933bf65d3290db9f93d67ab91a12d2b19308a35806e04d1c174c59060200160405180910390a35050565b60d95460cd54604080516318160ddd60e01b81529051600093926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611b6257600080fd5b505afa158015611b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9a9190615a93565b60cc60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611be857600080fd5b505afa158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c209190615a93565b611c2a9190615b03565b6118ed9190615b03565b7fe752add323323eb13e36c71ee508dfd16d74e9e4c4fd78786ba97989e5e13818611c5e81614755565b60ca546001600160a01b0316611c9a5760405162461bcd60e51b81526020600482015260016024820152603760f81b6044820152606401610b39565b60c98054611ca790615c52565b15159050611cdb5760405162461bcd60e51b81526020600482015260016024820152600760fb1b6044820152606401610b39565b60ca5460405160c088901b6001600160c01b031916602082015260609190911b6bffffffffffffffffffffffff19166028820152600090603c0160408051601f198184030181529181528151602092830120600081815260d690935291205490915060ff1615611d715760405162461bcd60e51b81526020600482015260016024820152603960f81b6044820152606401610b39565b600081815260d660205260409020805460ff1916600117905560d25460ff1615611eec5760ca546040516324b204d360e21b81526001600160401b03891660048201526000916001600160a01b0316906392c8134c906024016101806040518083038186803b158015611de357600080fd5b505afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b9190615d30565b9050866001600160401b031681606001516001600160401b031614611e675760405162461bcd60e51b8152602060048201526002602482015261031360f41b6044820152606401610b39565b85816040015114611e9f5760405162461bcd60e51b8152602060048201526002602482015261313160f01b6044820152606401610b39565b846001600160401b03168161014001516001600160401b031614611eea5760405162461bcd60e51b8152602060048201526002602482015261189960f11b6044820152606401610b39565b505b6000611ef6610a71565b5090506000606460da5483611f0b9190615caa565b611f159190615aef565b60cd5460cf546040516340c10f1960e01b81526001600160a01b0391821660048201526024810184905292935016906340c10f1990604401602060405180830381600087803b158015611f6757600080fd5b505af1158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9f9190615c8d565b506000611fac8284615ac2565b90508060d96000828254611fc09190615b03565b909155505060ce541561203a57600060d06000600160ce54611fe29190615ac2565b81526020810191909152604001600020805460ff191691151591909117905560ce5461201090600190615ac2565b6040517f4c808ece238f6486c5ceae7cb90b49f61cd4a84a864e106142e0e0ed33e323d790600090a25b604051806101c001604052806001151581526020016000151581526020018b6001600160401b03168152602001898152602001886001600160401b0316815260200187815260200160c9805461208f90615c52565b80601f01602080910402602001604051908101604052809291908181526020018280546120bb90615c52565b80156121085780601f106120dd57610100808354040283529160200191612108565b820191906000526020600020905b8154815290600101906020018083116120eb57829003601f168201915b5050505050815260200160ca60009054906101000a90046001600160a01b03166001600160a01b0316815260200142815260200160cb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561218a57600080fd5b505afa15801561219e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c29190615a93565b81526020808201849052604080830186905260006060808501829052608094850182905260ce54825260d084529082902085518154878601519488015161ffff1990911691151561ff00191691909117610100941515949094029390931769ffffffffffffffff00001916620100006001600160401b03948516021781559085015160018201559284015160028401805467ffffffffffffffff19169190921617905560a0830151805161227c9260038501920190615133565b5060c08201518051612298916004840191602090910190615133565b5060e08201516005820180546001600160a01b0319166001600160a01b039092169190911790556101008201516006820155610120820151600782015561014082015160088201556101608201516009820155610180820151600a8201556101a090910151600b9091015560ce546040517fb32766c59037d686ced179305d00c590d44f8c9222ccc75ea89c63a6f9f7e4d990600090a260ce805490600061233f83615c21565b919050555050505050505050505050565b600054600690610100900460ff16158015612372575060005460ff8083169116105b6123d55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b39565b6000805461ffff191660ff83161761010017815569043c33c193756480000060de556103e860e25560dc805469065a4da25d3016c00000929061241a5761241a615c0b565b90600052602060002001819055506a01a784379d99db4200000060dc60018154811061244857612448615c0b565b90600052602060002001819055506a034f086f3b33b68400000060dc60028154811061247657612476615c0b565b90600052602060002001819055506a069e10de76676d0800000060dc6003815481106124a4576124a4615c0b565b9060005260206000200181905550609660dd6000815481106124c8576124c8615c0b565b906000526020600020018190555060c860dd6001815481106124ec576124ec615c0b565b906000526020600020018190555061012c60dd60028154811061251157612511615c0b565b90600052602060002001819055506102bc60dd60038154811061253657612536615c0b565b600091825260208083209190910192909255805461ff001916905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891015b60405180910390a150565b60e3546001600160a01b031633146125b35760405162461bcd60e51b8152600401610b3990615e02565b6125bc826140e2565b6125ed5760405162461bcd60e51b81526020600482015260026024820152611a1960f11b6044820152606401610b39565b805160e2546001600160a01b038516600090815260e16020526040902054612616908390615b03565b11156126495760405162461bcd60e51b8152602060048201526002602482015261343360f01b6044820152606401610b39565b60cb546001600160a01b031660005b828110156127bf57600084828151811061267457612674615c0b565b602090810291909101810151600081815260e09092526040909120549091506001600160a01b0316156126ce5760405162461bcd60e51b81526020600482015260026024820152610d0d60f21b6044820152606401610b39565b6040516331a9108f60e11b8152600481018290526001600160a01b038088169190851690636352211e9060240160206040518083038186803b15801561271357600080fd5b505afa158015612727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274b9190615e1d565b6001600160a01b0316146127865760405162461bcd60e51b8152602060048201526002602482015261343560f01b6044820152606401610b39565b600090815260e06020526040902080546001600160a01b0319166001600160a01b038816179055806127b781615c21565b915050612658565b506001600160a01b038516600090815260e16020526040812080548492906127e8908490615b03565b90915550506001600160a01b038416600090815260e4602052604081208054849290612815908490615b03565b90915550505050505050565b600081815260d06020908152604080832081516101c081018352815460ff80821615158352610100820416151594820194909452620100009093046001600160401b0390811692840192909252600181015460608401526002810154909116608083015260038101805460a08401919061289a90615c52565b80601f01602080910402602001604051908101604052809291908181526020018280546128c690615c52565b80156129135780601f106128e857610100808354040283529160200191612913565b820191906000526020600020905b8154815290600101906020018083116128f657829003601f168201915b5050505050815260200160048201805461292c90615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461295890615c52565b80156129a55780601f1061297a576101008083540402835291602001916129a5565b820191906000526020600020905b81548152906001019060200180831161298857829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e090910152610100810151909150612a385760405162461bcd60e51b8152602060048201526002602482015261062760f31b6044820152606401610b39565b805115612a6c5760405162461bcd60e51b8152602060048201526002602482015261313960f01b6044820152606401610b39565b610100810151612a8090630163f500615b03565b4210612a8f5761155e82614106565b806020015115612ac65760405162461bcd60e51b8152602060048201526002602482015261032360f41b6044820152606401610b39565b60cb54604051636c36092360e01b8152600481018590526000916001600160a01b031690636c3609239060240160206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b439190615a93565b90508161010001518110612b7e5760405162461bcd60e51b8152602060048201526002602482015261323160f01b6044820152606401610b39565b600083815260d1602090815260408083208784528252808320815160a081018352815460ff808216151583526101008204811615159583019590955262010000900490931615159183019190915260018101546060830152600281018054608084019190612beb90615c52565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1790615c52565b8015612c645780601f10612c3957610100808354040283529160200191612c64565b820191906000526020600020905b815481529060010190602001808311612c4757829003601f168201915b50505091909252505060cb546040516331a9108f60e11b8152600481018990529293506000926001600160a01b039091169150636352211e9060240160206040518083038186803b158015612cb857600080fd5b505afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615e1d565b9050612cfb816140e2565b612d2c5760405162461bcd60e51b8152602060048201526002602482015261191960f11b6044820152606401610b39565b816020015115612d635760405162461bcd60e51b8152602060048201526002602482015261323360f01b6044820152606401610b39565b8160400151612d995760405162461bcd60e51b81526020600482015260026024820152610c8d60f21b6044820152606401610b39565b6000846101800151856101400151612db19190615aef565b600087815260d1602090815260408083208b84528252808320805461ff00191661010017905589835260d09091528120600b0180549293508392909190612df9908490615b03565b9091555050600087815260e060205260409020546001600160a01b031680612e1e5750815b60cc546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b158015612e6c57600080fd5b505af1158015612e80573d6000803e3d6000fd5b50505050867f38be9b012e428704c0fb2b81dfd53444b76ac4cd45c46cfd2d661f73d97cf47b83604051612eb691815260200190565b60405180910390a26001600160a01b038116600090815260d5602052604081208054849290612ee6908490615b03565b925050819055508160d96000828254612eff9190615ac2565b90915550505050505050505050565b6000612f1981614755565b60d2805460ff8082161560ff1990921682179092556040519116151581527f0ca19619554f210f87082317d4ae715858dd8c4f9248282703b743fd7827d59b9060200161257e565b6001600160a01b038116600090815260d360205260408120610a6b90614762565b60e3546001600160a01b03163314612fac5760405162461bcd60e51b8152600401610b3990615e02565b805160cb546001600160a01b031660005b8281101561311d576000848281518110612fd957612fd9615c0b565b602090810291909101810151600081815260e09092526040909120549091506001600160a01b038881169116146130375760405162461bcd60e51b8152602060048201526002602482015261343760f01b6044820152606401610b39565b6040516331a9108f60e11b8152600481018290526001600160a01b038088169190851690636352211e9060240160206040518083038186803b15801561307c57600080fd5b505afa158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b49190615e1d565b6001600160a01b0316146130ef5760405162461bcd60e51b8152602060048201526002602482015261068760f31b6044820152606401610b39565b600090815260e06020526040902080546001600160a01b03191690558061311581615c21565b915050612fbd565b506001600160a01b038516600090815260e1602052604081208054849290613146908490615ac2565b90915550506001600160a01b038416600090815260e4602052604081208054849290612815908490615ac2565b60d060205260009081526040902080546001820154600283015460038401805460ff808616966101008704909116956001600160401b036201000090910481169594169290916131c290615c52565b80601f01602080910402602001604051908101604052809291908181526020018280546131ee90615c52565b801561323b5780601f106132105761010080835404028352916020019161323b565b820191906000526020600020905b81548152906001019060200180831161321e57829003601f168201915b50505050509080600401805461325090615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461327c90615c52565b80156132c95780601f1061329e576101008083540402835291602001916132c9565b820191906000526020600020905b8154815290600101906020018083116132ac57829003601f168201915b5050505060058301546006840154600785015460088601546009870154600a880154600b9098015496976001600160a01b0390951696939550919390928e565b60008281526097602052604081206113b39083614858565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600083516001600160401b0381111561336957613369615423565b6040519080825280602002602001820160405280156133d257816020015b6133bf6040518060a0016040528060001515815260200160001515815260200160001515815260200160008152602001606081525090565b8152602001906001900390816133875790505b50905060005b84518110156135245760d160008683815181106133f7576133f7615c0b565b602090810291909101810151825281810192909252604090810160009081208782528352819020815160a081018352815460ff80821615158352610100820481161515958301959095526201000090049093161515918301919091526001810154606083015260028101805460808401919061347290615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461349e90615c52565b80156134eb5780601f106134c0576101008083540402835291602001916134eb565b820191906000526020600020905b8154815290600101906020018083116134ce57829003601f168201915b50505050508152505082828151811061350657613506615c0b565b6020026020010181905250808061351c90615c21565b9150506133d8565b509392505050565b600061353781614755565b60cb80546001600160a01b0319166001600160a01b0384169081179091556040519081527fb99f79dcf60064875987f76e194eb72a09d8b7a509059f3ce688f6e0e7d4dc8e90602001610c26565b60e3546001600160a01b031633146135af5760405162461bcd60e51b8152600401610b3990615e02565b6001600160a01b038216600090815260e1602052604081205460de546135d59190615caa565b6001600160a01b038416600090815260db602052604090205490915081906135fe908490615b03565b11156136315760405162461bcd60e51b8152602060048201526002602482015261343960f01b6044820152606401610b39565b6001600160a01b038316600090815260db602052604081208054849290613659908490615b03565b9091555050505050565b6001600160a01b038216600090815260d46020526040812061368490614762565b82106136b65760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610b39565b6001600160a01b038316600090815260d4602052604090206113b39083614858565b600082815260d0602052604090205460ff1661371b5760405162461bcd60e51b81526020600482015260026024820152610c4d60f21b6044820152606401610b39565b600082815260d16020908152604080832086845290915290205460ff161561376a5760405162461bcd60e51b8152602060048201526002602482015261313560f01b6044820152606401610b39565b600082815260d06020908152604091829020600101548251918201520160405160208183030381529060405280519060200120816040516020016137ae9190615e3a565b604051602081830303815290604052805190602001201461380857817ff2d198d86ebd10063061c37c7390bcb6db9fce0cc97882f2fba1b3ba057f3190846040516137fb91815260200190565b60405180910390a2505050565b60cb546040516331a9108f60e11b8152600481018590526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561384d57600080fd5b505afa158015613861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138859190615e1d565b600085815260e060205260409020549091506001600160a01b03166138aa82826148df565b6138db5760405162461bcd60e51b8152602060048201526002602482015261313760f01b6044820152606401610b39565b6138e88585858585614999565b5050505050565b600082815260d06020908152604080832081516101c081018352815460ff80821615158352610100820416151594820194909452620100009093046001600160401b0390811692840192909252600181015460608401526002810154909116608083015260038101805460a08401919061396890615c52565b80601f016020809104026020016040519081016040528092919081815260200182805461399490615c52565b80156139e15780601f106139b6576101008083540402835291602001916139e1565b820191906000526020600020905b8154815290600101906020018083116139c457829003601f168201915b505050505081526020016004820180546139fa90615c52565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2690615c52565b8015613a735780601f10613a4857610100808354040283529160200191613a73565b820191906000526020600020905b815481529060010190602001808311613a5657829003601f168201915b505050918352505060058201546001600160a01b03166020820152600682015460408201526007820154606082015260088201546080820152600982015460a0820152600a82015460c0820152600b9091015460e090910152610100810151909150613b065760405162461bcd60e51b8152602060048201526002602482015261323560f01b6044820152606401610b39565b805115613b3a5760405162461bcd60e51b8152602060048201526002602482015261191b60f11b6044820152606401610b39565b610100810151613b4e90630163f500615b03565b4210613b6357613b5d83614106565b50505050565b806020015115613b9a5760405162461bcd60e51b8152602060048201526002602482015261323760f01b6044820152606401610b39565b6000816101800151826101400151613bb29190615aef565b8551909150600080805b83811015613f7b576000898281518110613bd857613bd8615c0b565b602090810291909101015160cb54604051636c36092360e01b8152600481018390529192506000916001600160a01b0390911690636c3609239060240160206040518083038186803b158015613c2d57600080fd5b505afa158015613c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c659190615a93565b60cb546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e9060240160206040518083038186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce79190615e1d565b60008c815260d1602090815260408083208784528252808320815160a081018352815460ff808216151583526101008204811615159583019590955262010000900490931615159183019190915260018101546060830152600281018054949550929391929091608084019190613d5d90615c52565b80601f0160208091040260200160405190810160405280929190818152602001828054613d8990615c52565b8015613dd65780601f10613dab57610100808354040283529160200191613dd6565b820191906000526020600020905b815481529060010190602001808311613db957829003601f168201915b5050505050815250509050613dea826140e2565b8015613dfa575089610100015183105b8015613e0857508060200151155b8015613e15575080604001515b15613f645760008c815260d1602090815260408083208784528252808320805461ff0019166101001790558e835260d09091528120600b0180548b9290613e5d908490615b03565b9091555050600084815260e060205260409020546001600160a01b031680613e825750815b6001600160a01b038c1615801590613eab57508b6001600160a01b0316816001600160a01b0316145b15613ec157613eba8a88615b03565b9650613f55565b60cc546040516340c10f1960e01b81526001600160a01b038381166004830152602482018d9052909116906340c10f1990604401600060405180830381600087803b158015613f0f57600080fd5b505af1158015613f23573d6000803e3d6000fd5b505050506001600160a01b038116600090815260d56020526040812080548c9290613f4f908490615b03565b90915550505b87613f5f81615c21565b985050505b505050508080613f7390615c21565b915050613bbc565b5080156140165760cc546040516340c10f1960e01b81526001600160a01b03888116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b158015613fd057600080fd5b505af1158015613fe4573d6000803e3d6000fd5b505050506001600160a01b038616600090815260d5602052604081208054839290614010908490615b03565b90915550505b6140208483615caa565b60d960008282546140319190615ac2565b909155508790507fc2f0198a2312102291df14ebd1023d3e8bd1ef40cf7db3c902eb11bef8a90ac66140638685615caa565b60408051918252602082018690520160405180910390a25050505050505050565b600061408f81614755565b81516140a29060c9906020850190615133565b507fbe1ef3bf6bf73300d9f1276156b4b0c9e002bd09a6b8211447bd719a412ee99182604051610c2691906155eb565b60dc81815481106118d057600080fd5b6000610a6b60d7836148bd565b6000818152609760205260408120610a6b90614762565b600081815260d060205260409020600601546141495760405162461bcd60e51b8152602060048201526002602482015261064760f31b6044820152606401610b39565b600081815260d0602052604090206006015461416990630163f500615b03565b42101561419d5760405162461bcd60e51b8152602060048201526002602482015261323960f01b6044820152606401610b39565b600081815260d06020526040902054610100900460ff16156141e65760405162461bcd60e51b8152602060048201526002602482015261033360f41b6044820152606401610b39565b600081815260d060205260409020600b8101546008909101546142099190615ac2565b60d9600082825461421a9190615ac2565b9091555050600081815260d06020526040808220805461ff0019166101001790555182917f5e804f6ab65f629e96873f89acb6e5d1456139dc56369bcfc528171e348baa4291a250565b600061426f83612f61565b82106142a15760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610b39565b6001600160a01b038316600090815260d3602052604090206113b39083614858565b6000828152606560205260409020600101546142de81614755565b61155e8383614886565b60006142f381614755565b816143255760405162461bcd60e51b8152602060048201526002602482015261199960f11b6044820152606401610b39565b60e280549083905560408051828152602081018590527fc19e696891893b927ce75cac8a2ff22909e77e7d5ed656a68327be317bbee11691015b60405180910390a1505050565b600082815260d0602052604090205460ff166143af5760405162461bcd60e51b8152602060048201526002602482015261189b60f11b6044820152606401610b39565b8251600083815260d06020908152604091829020600101548251918201520160405160208183030381529060405280519060200120826040516020016143f59190615e3a565b604051602081830303815290604052805190602001201461445157604080513381526020810183905284917faf651273cc7d2df108d9a08328a7f364368ae20e1f498b8c23104db643add035910160405180910390a250505050565b60005b818110156138e857600085828151811061447057614470615c0b565b602090810291909101810151600087815260d183526040808220838352909352919091205490915060ff166145565760cb546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c9190615e1d565b600083815260e060205260409020549091506001600160a01b031661454182826148df565b15614553576145538388888585614999565b50505b508061456181615c21565b915050614454565b60e3546001600160a01b031633146145935760405162461bcd60e51b8152600401610b3990615e02565b6001600160a01b038216600090815260db60205260409020548111156145e05760405162461bcd60e51b8152602060048201526002602482015261035360f41b6044820152606401610b39565b6001600160a01b038216600090815260db602052604081208054839290614608908490615ac2565b90915550505050565b600061461c81614755565b8161464e5760405162461bcd60e51b8152602060048201526002602482015261333160f01b6044820152606401610b39565b60de80549083905560408051828152602081018590527f60f972c2277f8deaf9dd89400f1c124c7c6d02fbc2b2bdfa3ee9264e5fa94d03910161435f565b60006001600160e01b03198216637965db0b60e01b1480610a6b57506301ffc9a760e01b6001600160e01b0319831614610a6b565b600080608083901c156146d657608092831c92015b604083901c156146e857604092831c92015b602083901c156146fa57602092831c92015b601083901c1561470c57601092831c92015b600883901c1561471e57600892831c92015b600483901c1561473057600492831c92015b600283901c1561474257600292831c92015b600183901c15610a6b5760010192915050565b61475f8133614cd4565b50565b6000610a6b825490565b60006113b3836001600160a01b038416614d2d565b600060dc60008154811061479757614797615c0b565b90600052602060002001548210156147b157506064919050565b60dc5460015b818110156148275760dc81815481106147d2576147d2615c0b565b90600052602060002001548410156148155760dd6147f1600183615ac2565b8154811061480157614801615c0b565b906000526020600020015492505050919050565b8061481f81615c21565b9150506147b7565b5060dd614835600183615ac2565b8154811061484557614845615c0b565b9060005260206000200154915050919050565b60006113b38383614e20565b61486e8282614e4a565b600082815260976020526040902061155e90826148a8565b6148908282614ed0565b600082815260976020526040902061155e908261476c565b60006113b3836001600160a01b038416614f37565b6001600160a01b038116600090815260018301602052604081205415156113b3565b60006001600160a01b0383163314806148fd57506148fd833361189e565b806113b357506001600160a01b038216158015906113b3575060e35460405163072bf7cf60e31b81523360048201526001600160a01b0384811660248301529091169063395fbe789060440160206040518083038186803b15801561496157600080fd5b505afa158015614975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b39190615c8d565b6001600160a01b038116600081815260db602052604090205490614a8d57506001600160a01b03828116600081815260db602090815260408083205460e49092528083205460cb5491516370a0823160e01b8152600481019590955291949293919216906370a082319060240160206040518083038186803b158015614a1e57600080fd5b505afa158015614a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a569190615a93565b614a609190615ac2565b90508160de5482614a719190615caa565b1015614a875760de54614a849082615caa565b91505b50614ae3565b60de546001600160a01b038316600090815260e160205260409020548291614ab491615caa565b1015614ae35760de546001600160a01b038316600090815260e16020526040902054614ae09190615caa565b90505b6000614b958787614af385614781565b60008a815260d06020526040902060030180548a9190614b1290615c52565b80601f0160208091040260200160405190810160405280929190818152602001828054614b3e90615c52565b8015614b8b5780601f10614b6057610100808354040283529160200191614b8b565b820191906000526020600020905b815481529060010190602001808311614b6e57829003601f168201915b505050505061184a565b5090506040518060a0016040528060011515815260200160001515815260200182151581526020018881526020018681525060d16000888152602001908152602001600020600089815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550606082015181600101556080820151816002019080519060200190614c71929190615133565b509050508015614c9e57600086815260d060205260408120600a01805491614c9883615c21565b91905055505b604051879087907f53e6fd26321a5ed4a3c83b381c1174d9b942e6b43dee7b2b3adca67e32aaf23990600090a350505050505050565b614cde8282613321565b6117d457614ceb81614f86565b614cf6836020614f98565b604051602001614d07929190615e56565b60408051601f198184030181529082905262461bcd60e51b8252610b39916004016155eb565b60008181526001830160205260408120548015614e16576000614d51600183615ac2565b8554909150600090614d6590600190615ac2565b9050818114614dca576000866000018281548110614d8557614d85615c0b565b9060005260206000200154905080876000018481548110614da857614da8615c0b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ddb57614ddb615c3c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a6b565b6000915050610a6b565b6000826000018281548110614e3757614e37615c0b565b9060005260206000200154905092915050565b614e548282613321565b6117d45760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055614e8c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b614eda8282613321565b156117d45760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054614f7e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a6b565b506000610a6b565b6060610a6b6001600160a01b03831660145b60606000614fa7836002615caa565b614fb2906002615b03565b6001600160401b03811115614fc957614fc9615423565b6040519080825280601f01601f191660200182016040528015614ff3576020820181803683370190505b509050600360fc1b8160008151811061500e5761500e615c0b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061503d5761503d615c0b565b60200101906001600160f81b031916908160001a9053506000615061846002615caa565b61506c906001615b03565b90505b60018111156150e4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106150a0576150a0615c0b565b1a60f81b8282815181106150b6576150b6615c0b565b60200101906001600160f81b031916908160001a90535060049490941c936150dd81615ecb565b905061506f565b5083156113b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b39565b82805461513f90615c52565b90600052602060002090601f01602090048101928261516157600085556151a7565b82601f1061517a57805160ff19168380011785556151a7565b828001600101855582156151a7579182015b828111156151a757825182559160200191906001019061518c565b506151b39291506151b7565b5090565b5b808211156151b357600081556001016151b8565b6000602082840312156151de57600080fd5b81356001600160e01b0319811681146113b357600080fd5b6001600160a01b038116811461475f57600080fd5b60006020828403121561521d57600080fd5b81356113b3816151f6565b60006020828403121561523a57600080fd5b5035919050565b6000806040838503121561525457600080fd5b50508035926020909101359150565b60005b8381101561527e578181015183820152602001615266565b83811115613b5d5750506000910152565b600081518084526152a7816020860160208601615263565b601f01601f19169290920160200192915050565b602081526152ce60208201835115159052565b600060208301516152e3604084018215159052565b5060408301516001600160401b03811660608401525060608301516080830152608083015161531d60a08401826001600160401b03169052565b5060a08301516101c08060c085015261533a6101e085018361528f565b915060c0850151601f198584030160e0860152615357838261528f565b92505060e0850151610100615376818701836001600160a01b03169052565b860151610120868101919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601516101a0808701919091529095015193019290925250919050565b600080604083850312156153da57600080fd5b8235915060208301356153ec816151f6565b809150509250929050565b60008060006060848603121561540c57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b038111828210171561545c5761545c615423565b60405290565b604051601f8201601f191681016001600160401b038111828210171561548a5761548a615423565b604052919050565b600082601f8301126154a357600080fd5b81356001600160401b038111156154bc576154bc615423565b6154cf601f8201601f1916602001615462565b8181528460208386010111156154e457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561551957600080fd5b85359450602086013593506040860135925060608601356001600160401b038082111561554557600080fd5b61555189838a01615492565b9350608088013591508082111561556757600080fd5b5061557488828901615492565b9150509295509295909350565b6000806040838503121561559457600080fd5b823561559f816151f6565b915060208301356153ec816151f6565b85151581528415156020820152831515604082015282606082015260a0608082015260006155e060a083018461528f565b979650505050505050565b6020815260006113b3602083018461528f565b801515811461475f57600080fd5b6000806040838503121561561f57600080fd5b823561562a816151f6565b915060208301356153ec816155fe565b6001600160401b038116811461475f57600080fd5b600080600080600060a0868803121561566757600080fd5b85356156728161563a565b945060208601356156828161563a565b93506040860135925060608601356156998161563a565b915060808601356001600160401b038111156156b457600080fd5b61557488828901615492565b600082601f8301126156d157600080fd5b813560206001600160401b038211156156ec576156ec615423565b8160051b6156fb828201615462565b928352848101820192828101908785111561571557600080fd5b83870192505b848310156155e05782358252918301919083019061571b565b60008060006060848603121561574957600080fd5b8335615754816151f6565b92506020840135615764816151f6565b915060408401356001600160401b0381111561577f57600080fd5b61578b868287016156c0565b9150509250925092565b8e151581528d151560208201526001600160401b038d1660408201528b60608201526157cc608082018c6001600160401b03169052565b6101c060a082015260006157e46101c083018c61528f565b82810360c08401526157f6818c61528f565b91505061580e60e083018a6001600160a01b03169052565b8761010083015286610120830152856101408301528461016083015283610180830152826101a08301529f9e505050505050505050505050505050565b6000806040838503121561585e57600080fd5b82356001600160401b0381111561587457600080fd5b615880858286016156c0565b95602094909401359450505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561591c57888303603f19018552815180511515845287810151151588850152868101511515878501526060808201519085015260809081015160a0918501829052906159088186018361528f565b9689019694505050908601906001016158b6565b509098975050505050505050565b6000806040838503121561593d57600080fd5b8235615948816151f6565b946020939093013593505050565b60008060006060848603121561596b57600080fd5b833592506020840135915060408401356001600160401b0381111561598f57600080fd5b61578b86828701615492565b6000806000606084860312156159b057600080fd5b83356001600160401b038111156159c657600080fd5b6159d2868287016156c0565b9350506020840135915060408401356159ea816151f6565b809150509250925092565b600060208284031215615a0757600080fd5b81356001600160401b03811115615a1d57600080fd5b615a2984828501615492565b949350505050565b600080600060608486031215615a4657600080fd5b83356001600160401b0380821115615a5d57600080fd5b615a69878388016156c0565b9450602086013593506040860135915080821115615a8657600080fd5b5061578b86828701615492565b600060208284031215615aa557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015615ad457615ad4615aac565b500390565b634e487b7160e01b600052601260045260246000fd5b600082615afe57615afe615ad9565b500490565b60008219821115615b1657615b16615aac565b500190565b600181815b80851115615b56578160001904821115615b3c57615b3c615aac565b80851615615b4957918102915b93841c9390800290615b20565b509250929050565b600082615b6d57506001610a6b565b81615b7a57506000610a6b565b8160018114615b905760028114615b9a57615bb6565b6001915050610a6b565b60ff841115615bab57615bab615aac565b50506001821b610a6b565b5060208310610133831016604e8410600b8410161715615bd9575081810a610a6b565b615be38383615b1b565b8060001904821115615bf757615bf7615aac565b029392505050565b60006113b38383615b5e565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615c3557615c35615aac565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181811c90821680615c6657607f821691505b60208210811415615c8757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215615c9f57600080fd5b81516113b3816155fe565b6000816000190483118215151615615cc457615cc4615aac565b500290565b84815283602082015260008351615ce7816040850160208801615263565b835190830190615cfe816040840160208801615263565b016040019695505050505050565b600082615d1b57615d1b615ad9565b500690565b8051615d2b8161563a565b919050565b60006101808284031215615d4357600080fd5b615d4b615439565b825181526020830151602082015260408301516040820152615d6f60608401615d20565b6060820152615d8060808401615d20565b6080820152615d9160a08401615d20565b60a0820152615da260c08401615d20565b60c0820152615db360e08401615d20565b60e0820152610100615dc6818501615d20565b90820152610120615dd8848201615d20565b90820152610140615dea848201615d20565b90820152610160928301519281019290925250919050565b6020808252600190820152603160f81b604082015260600190565b600060208284031215615e2f57600080fd5b81516113b3816151f6565b60008251615e4c818460208701615263565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615e8e816017850160208801615263565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615ebf816028840160208801615263565b01602801949350505050565b600081615eda57615eda615aac565b50600019019056fea264697066735822122090b1afaa30e0d4bd43d32dfd87005a52ade73fd2cef884ac7e6fca638ee9727f64736f6c63430008090033