0 txs
3.7k calls
constructor
constructor()
functions
ap
viewfunction ap() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
balanceOfNFT
viewfunction balanceOfNFT(uint256 _tokenId) view returns (address[] _assets, uint256[] _balances, uint256[] _boosts)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getTotalEthValueOfTokens
viewfunction getTotalEthValueOfTokens(address _owner) view returns (uint256 totalValue)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
PRECISION
viewfunction PRECISION() view returns (uint256)
s_aeroVoterBoost
viewfunction s_aeroVoterBoost() view returns (uint256)
s_aeroVoting
viewfunction s_aeroVoting() view returns (address)
s_canSplit
viewfunction s_canSplit(address) view returns (bool)
s_delegations
viewfunction s_delegations(uint256, uint256, uint8) view returns (uint256)
s_delegatorsBlocked
viewfunction s_delegatorsBlocked(uint256, address) view returns (bool)
s_distributedFees
viewfunction s_distributedFees(uint8) view returns (uint256)
s_ionicPool
viewfunction s_ionicPool() view returns (address)
s_limitedBoost
viewfunction s_limitedBoost() view returns (uint256)
s_limitedBoostActive
viewfunction s_limitedBoostActive() view returns (bool)
s_locked
viewfunction s_locked(uint256, uint8) view returns (address tokenAddress, uint256 amount, uint256 delegateAmount, uint256 start, uint256 end, bool isPermanent, uint256 boost)
s_lpType
viewfunction s_lpType(address) view returns (uint8)
s_maxEarlyWithdrawFee
viewfunction s_maxEarlyWithdrawFee() view returns (uint256)
s_minimumLockAmount
viewfunction s_minimumLockAmount(uint8) view returns (uint256)
s_minimumLockDuration
viewfunction s_minimumLockDuration() view returns (uint256)
s_permanentLockBalance
viewfunction s_permanentLockBalance(uint8) view returns (uint256)
s_protocolFees
viewfunction s_protocolFees(uint8) view returns (uint256)
s_stakeStrategy
viewfunction s_stakeStrategy(uint8) view returns (address)
s_supply
viewfunction s_supply(uint8) view returns (uint256)
s_tokenId
viewfunction s_tokenId() view returns (uint256)
s_underlyingStake
viewfunction s_underlyingStake(uint256, address) view returns (uint256)
s_userCumulativeAssetValues
viewfunction s_userCumulativeAssetValues(address, address) view returns (uint256)
s_userPointEpoch
viewfunction s_userPointEpoch(uint256, uint8) view returns (uint256)
s_userPointHistory
viewfunction s_userPointHistory(uint256, uint8, uint256) view returns (uint256 bias, uint256 slope, uint256 ts, uint256 blk, uint256 permanent, uint256 permanentDelegate)
s_veAERO
viewfunction s_veAERO() view returns (address)
s_voted
viewfunction s_voted(uint256) view returns (bool)
s_voter
viewfunction s_voter() view returns (address)
s_whitelistedToken
viewfunction s_whitelistedToken(address) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
veIONFirstExtension
viewfunction veIONFirstExtension() view returns (address)
veIONSecondExtension
viewfunction veIONSecondExtension() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
allowDelegators
nonpayablefunction allowDelegators(uint256 _tokenId, address _tokenAddress, bool _blocked)
approve
nonpayablefunction approve(address to, uint256 tokenId)
claimEmissions
nonpayablefunction claimEmissions(address _tokenAddress)
merge
nonpayablefunction merge(uint256 _from, uint256 _to)
removeDelegatees
nonpayablefunction removeDelegatees(uint256 fromTokenId, uint256[] toTokenIds, address lpToken, uint256[] amounts)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
split
nonpayablefunction split(address _tokenAddress, uint256 _from, uint256 _splitAmount) returns (uint256 _tokenId1, uint256 _tokenId2)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(address _tokenAddress, uint256 _tokenId)
events
AeroVoterBoostSet
event AeroVoterBoostSet(uint256 newAeroVoterBoost)
AeroVotingSet
event AeroVotingSet(address indexed newAeroVoting)
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
Delegated
event Delegated(uint256 indexed fromTokenId, uint256 indexed toTokenId, address lpToken, uint256 amount)
DelegationRemoved
event DelegationRemoved(uint256 indexed fromTokenId, uint256 indexed toTokenId, address lpToken, uint256 amount)
DelegatorsBlocked
event DelegatorsBlocked(uint256 indexed _tokenId, address indexed _lpToken, bool _blocked)
Deposit
event Deposit(address indexed provider, uint256 indexed tokenId, uint8 indexed depositType, uint256 value, uint256 locktime, uint256 ts)
DistributedFeesWithdrawn
event DistributedFeesWithdrawn(address indexed tokenAddress, address indexed recipient, uint256 amount)
EmissionsClaimed
event EmissionsClaimed(address indexed claimant, address indexed tokenAddress)
ExtensionsSet
event ExtensionsSet(address indexed _firstExtension, address indexed _secondExtension)
Initialized
event Initialized(address indexed addressesProvider)
Initialized
event Initialized(uint8 version)
IonicPoolSet
event IonicPoolSet(address indexed newIonicPool)
LimitedBoostToggled
event LimitedBoostToggled(bool isBoosted)
LimitedTimeBoostSet
event LimitedTimeBoostSet(uint256 boostAmount)
LpTokenTypeSet
event LpTokenTypeSet(address indexed token, uint8 lpTokenType)
MaxEarlyWithdrawFeeSet
event MaxEarlyWithdrawFeeSet(uint256 maxEarlyWithdrawFee)
MergeCompleted
event MergeCompleted(uint256 indexed fromTokenId, uint256 indexed toTokenId, address[] assetsLocked, uint256 lengthOfAssets)
MinimumLockAmountSet
event MinimumLockAmountSet(address indexed tokenAddress, uint256 minimumAmount)
MinimumLockDurationSet
event MinimumLockDurationSet(uint256 minimumDuration)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PermanentLockCreated
event PermanentLockCreated(address indexed tokenAddress, uint256 indexed tokenId, uint256 amount)
PermanentLockRemoved
event PermanentLockRemoved(address indexed tokenAddress, uint256 indexed tokenId, uint256 amount)
ProtocolFeesWithdrawn
event ProtocolFeesWithdrawn(address indexed tokenAddress, address indexed recipient, uint256 amount)
SplitCompleted
event SplitCompleted(uint256 indexed fromTokenId, uint256 indexed tokenId1, uint256 indexed tokenId2, uint256 splitAmount, address tokenAddress)
SplitToggle
event SplitToggle(address indexed account, bool isAllowed)
StakeStrategySet
event StakeStrategySet(uint8 indexed lpTokenType, address indexed strategy)
Supply
event Supply(uint256 prevSupply, uint256 supply)
TokensWhitelisted
event TokensWhitelisted(address[] token, bool[] isWhitelisted)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
VeAEROSet
event VeAEROSet(address indexed veAERO)
Voted
event Voted(uint256 _tokenId, bool _voting)
VoterSet
event VoterSet(address indexed newVoter)
Withdraw
event Withdraw(address indexed provider, uint256 indexed tokenId, uint256 value, uint256 ts)
errors
AeroBoostAmountMustBeGreaterThanZero
error AeroBoostAmountMustBeGreaterThanZero()
AlreadyVoted
error AlreadyVoted()
AmountTooBig
error AmountTooBig()
ArrayMismatch
error ArrayMismatch()
BoostAmountMustBeGreaterThanZero
error BoostAmountMustBeGreaterThanZero()
DuplicateAsset
error DuplicateAsset()
InvalidAddress
error InvalidAddress()
InvalidStrategyAddress
error InvalidStrategyAddress()
InvalidTokenAddress
error InvalidTokenAddress()
InvalidVeAEROAddress
error InvalidVeAEROAddress()
LockDurationNotInFuture
error LockDurationNotInFuture()
LockDurationTooLong
error LockDurationTooLong()
LockDurationTooShort
error LockDurationTooShort()
LockExpired
error LockExpired()
MaxEarlyWithdrawFeeMustBeGreaterThanZero
error MaxEarlyWithdrawFeeMustBeGreaterThanZero()
MinimumAmountMustBeGreaterThanZero
error MinimumAmountMustBeGreaterThanZero()
MinimumLockDurationMustBeGreaterThanZero
error MinimumLockDurationMustBeGreaterThanZero()
MinimumNotMet
error MinimumNotMet()
NoDelegationBetweenTokens
error NoDelegationBetweenTokens(uint256 _tokenId1, uint256 _tokenId2)
NoLockFound
error NoLockFound()
NotAcceptingDelegators
error NotAcceptingDelegators()
NotEnoughRemainingAfterSplit
error NotEnoughRemainingAfterSplit()
NotOwner
error NotOwner()
NotPermanentLock
error NotPermanentLock()
NotVoter
error NotVoter()
NoUnderlyingStake
error NoUnderlyingStake()
PermanentLock
error PermanentLock()
SameNFT
error SameNFT()
SplitNotAllowed
error SplitNotAllowed()
SplitTooSmall
error SplitTooSmall()
TokenHasDelegatees
error TokenHasDelegatees()
TokenHasDelegators
error TokenHasDelegators()
TokenNotWhitelisted
error TokenNotWhitelisted()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615c5f80620000f46000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806392415b08116101de578063c87b56dd1161010f578063e30c3978116100ad578063ec0940951161007c578063ec094095146109ed578063eec83d8714610a11578063f2fde38b14610a1b578063f3fef3a314610a2e57610383565b8063e30c397814610967578063e526789414610978578063e7e242d4146109b8578063e985e9c5146109da57610383565b8063d8a82611116100e9578063d8a826111461091f578063df25197414610929578063e1d514bd14610933578063e2fd66301461095457610383565b8063c87b56dd146108d8578063cc8cb245146108eb578063d1c2babb1461090c57610383565b8063b04f9fc51161017c578063b9e77c5f11610156578063b9e77c5f14610853578063ba99c4df14610867578063bae1cb5e14610893578063c682ee68146108b457610383565b8063b04f9fc5146107fe578063b1113baf14610811578063b88d4fde1461084057610383565b8063a22cb465116101b8578063a22cb465146107b9578063aaf5eb68146107cc578063ab2d99db146107db578063ad975d71146107e557610383565b806392415b08146106db57806395d89b411461070c5780639ac1cc9d1461071457610383565b8063535d9aaf116102b857806372b4c2761161025657806380e13a571161023057806380e13a571461066d57806384cf379c1461068e5780638afbc1ed146106a25780638da5cb5b146106ca57610383565b806372b4c2761461062e57806376912f871461065257806379ba50971461066557610383565b80636b2fe4c7116102925780636b2fe4c7146105f15780636cbdce56146105ff57806370a0823114610613578063715018a61461062657610383565b8063535d9aaf1461059f5780635ff17f3f146105cb5780636352211e146105de57610383565b8063171314f1116103255780632879e840116102ff5780632879e8401461053a5780633c4f743c146105645780633d2cdbd11461057857806342842e0e1461058c57610383565b8063171314f1146104fc5780631df595c71461050657806323b872dd1461052757610383565b8063081812fc11610361578063081812fc14610478578063095ea7b3146104a357806312ba89ef146104b657806314b3bdde146104e857610383565b806301ffc9a71461040157806306fdde031461042957806307b67fe81461043e575b610138546001600160a01b0316806103db5760405162461bcd60e51b8152602060048201526016602482015275125b5c1b195b595b9d185d1a5bdb881b9bdd081cd95d60521b60448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156103fa573d6000f35b3d6000fd5b005b61041461040f366004615275565b610a41565b60405190151581526020015b60405180910390f35b610431610a93565b60405161042091906152e2565b61046a61044c366004615309565b61013e60209081526000928352604080842090915290825290205481565b604051908152602001610420565b61048b610486366004615335565b610b25565b6040516001600160a01b039091168152602001610420565b6103ff6104b1366004615363565b610b4c565b61046a6104c436600461538f565b61014860209081526000938452604080852082529284528284209052825290205481565b6101375461048b906001600160a01b031681565b61046a61012d5481565b61046a6105143660046153c4565b6101466020526000908152604090205481565b6103ff6105353660046153df565b610c61565b61048b6105483660046153c4565b610144602052600090815260409020546001600160a01b031681565b6101365461048b906001600160a01b031681565b6101315461048b906001600160a01b031681565b6103ff61059a3660046153df565b610c92565b61046a6105ad366004615420565b61014560209081526000928352604080842090915290825290205481565b6103ff6105d936600461545e565b610cad565b61048b6105ec366004615335565b610d57565b61012f546104149060ff1681565b6101305461048b906001600160a01b031681565b61046a6106213660046154a0565b610db7565b6103ff610e3d565b61041461063c3660046154a0565b61013a6020526000908152604090205460ff1681565b61046a6106603660046154a0565b610e51565b6103ff610f91565b61046a61067b3660046153c4565b6101476020526000908152604090205481565b6101385461048b906001600160a01b031681565b6106b56106b03660046154bd565b61100b565b60408051928352602083019190915201610420565b6033546001600160a01b031661048b565b6106ff6106e93660046154a0565b61013b6020526000908152604090205460ff1681565b6040516104209190615508565b61043161148d565b610778610722366004615309565b61013d60209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460058601546006909601546001600160a01b0390951695939492939192909160ff169087565b604080516001600160a01b03909816885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e001610420565b6103ff6107c7366004615530565b61149c565b61046a670de0b6b3a764000081565b61046a6101345481565b61012f5461048b9061010090046001600160a01b031681565b6103ff61080c366004615638565b6114ab565b61041461081f366004615420565b61014d60209081526000928352604080842090915290825290205460ff1681565b6103ff61084e3660046156ba565b61153a565b6101325461048b906001600160a01b031681565b61046a61087536600461577e565b61014c60209081526000928352604080842090915290825290205481565b61046a6108a13660046153c4565b6101436020526000908152604090205481565b6104146108c23660046154a0565b61013c6020526000908152604090205460ff1681565b6104316108e6366004615335565b61156c565b61046a6108f93660046153c4565b6101396020526000908152604090205481565b6103ff61091a3660046157ac565b6115e0565b61046a6101335481565b61046a61012e5481565b61046a6109413660046153c4565b6101426020526000908152604090205481565b6103ff6109623660046154a0565b611d3e565b6065546001600160a01b031661048b565b61098b6109863660046157ce565b611efa565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610420565b6109cb6109c6366004615335565b611f53565b60405161042093929190615879565b6104146109e836600461577e565b6121dc565b6104146109fb366004615335565b6101416020526000908152604090205460ff1681565b61046a6101355481565b6103ff610a293660046154a0565b61220a565b6103ff610a3c366004615363565b61227b565b60006001600160e01b031982166380ac58cd60e01b1480610a7257506001600160e01b03198216635b5e139f60e01b145b80610a8d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060c98054610aa2906158b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ace906158b2565b8015610b1b5780601f10610af057610100808354040283529160200191610b1b565b820191906000526020600020905b815481529060010190602001808311610afe57829003601f168201915b5050505050905090565b6000610b3082612b0a565b50600090815260cd60205260409020546001600160a01b031690565b6000610b5782610d57565b9050806001600160a01b0316836001600160a01b031603610bc45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103d2565b336001600160a01b0382161480610be05750610be081336121dc565b610c525760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103d2565b610c5c8383612b69565b505050565b610c6b3382612bd7565b610c875760405162461bcd60e51b81526004016103d2906158ec565b610c5c838383612c36565b610c5c8383836040518060200160405280600081525061153a565b610cb5612da5565b33610cbf84610d57565b6001600160a01b031614610ce6576040516330cd747160e01b815260040160405180910390fd5b600083815261014d602090815260408083206001600160a01b03861680855290835292819020805460ff1916851515908117909155905190815285917fa4c4c327df17fa1217281d9f66203d87d19b72321a0bd31dc77d84396ac4c6b2910160405180910390a3610c5c600160fb55565b600081815260cb60205260408120546001600160a01b031680610a8d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103d2565b60006001600160a01b038216610e215760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103d2565b506001600160a01b0316600090815260cc602052604090205490565b610e45612dfe565b610e4f6000612e58565b565b6101325460408051633709ffff60e11b815290516000926001600160a01b03169183918391636e13fffe91600480830192869291908290030181865afa158015610e9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ec79190810190615939565b805190915060005b81811015610f88576000670de0b6b3a7640000610f04858481518110610ef757610ef76159c8565b6020026020010151612e71565b6001600160a01b038916600090815261014c602052604081208751909190889087908110610f3457610f346159c8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054610f6791906159f4565b610f719190615a0b565b9050610f7d8187615a2d565b955050600101610ecf565b50505050919050565b60655433906001600160a01b03168114610fff5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103d2565b61100881612e58565b50565b600080611016612da5565b600084815260cb60205260408120546001600160a01b03166001600160a01b038716600090815261013b602090815260408083205489845261013d909252822092935060ff169181836005811115611070576110706154f2565b6005811115611081576110816154f2565b815260208082019290925260409081016000908120825160e08101845281546001600160a01b03168152600182015494810194909452600281015492840192909252600382015460608401526004820154608084015260058083015460ff16151560a085015260069092015460c0840152919250610139908290859081111561110c5761110c6154f2565b600581111561111d5761111d6154f2565b815260208082019290925260409081016000908120548b8252610141909352205490915060ff161561116257604051637c9a1cf960e01b815260040160405180910390fd5b6001600160a01b038416600090815261013c602052604090205460ff161580156111b857506000805261013c6020527f578733b006779204653b8998ee475356168576e277339184064b7a2ea97ba30e5460ff16155b156111d657604051633df16fd960e21b815260040160405180910390fd5b6001600160a01b03841633146111ff576040516330cd747160e01b815260040160405180910390fd5b4282608001511115801561121557508160a00151155b15611233576040516307b7d7dd60e51b815260040160405180910390fd5b8160200151871061125757604051636b2f218360e01b815260040160405180910390fd5b80871015611278576040516301fdb65160e61b815260040160405180910390fd5b808783602001516112899190615a40565b10156112a8576040516342234a9d60e01b815260040160405180910390fd5b602082018051839189916112bd908390615a40565b905250600089815261013d6020526040812084918660058111156112e3576112e36154f2565b60058111156112f4576112f46154f2565b81526020808201929092526040908101600020835181546001600160a01b0319166001600160a01b039091161781559183015160018301558201516002820155606082015160038201556080820151600482015560a082015160058201805460ff191691151591909117905560c090910151600690910155611377898486612f73565b602081018890528061138b8682878e613295565b965089975061014560008b815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205460001461142e5760008a8152610145602090815260408083206001600160a01b038f168452909152812080548b9290611402908490615a40565b90915550506000878152610145602090815260408083206001600160a01b038f16845290915290208990555b604080518a81526001600160a01b038d16602082015288918a918d917fcb4ab8752f9068d5341c67e01ebaf34339dc4902bd6be531e46c47417d93bd5e910160405180910390a4505050505050611485600160fb55565b935093915050565b606060ca8054610aa2906158b2565b6114a733838361338b565b5050565b6114b3612da5565b80518351146114d55760405163b7c1140d60e01b815260040160405180910390fd5b825160005b8181101561152857611520868683815181106114f8576114f86159c8565b602002602001015186868581518110611513576115136159c8565b6020026020010151613459565b6001016114da565b5050611534600160fb55565b50505050565b6115443383612bd7565b6115605760405162461bcd60e51b81526004016103d2906158ec565b61153484848484613bf8565b606061157782612b0a565b600061158e60408051602081019091526000815290565b905060008151116115ae57604051806020016040528060008152506115d9565b806115b884613c2b565b6040516020016115c9929190615a53565b6040516020818303038152906040525b9392505050565b6115e8612da5565b808203611608576040516349da877960e11b815260040160405180910390fd5b6000828152610141602052604090205460ff168061163557506000818152610141602052604090205460ff165b1561165357604051637c9a1cf960e01b815260040160405180910390fd5b3361165d83610d57565b6001600160a01b031614611684576040516330cd747160e01b815260040160405180910390fd5b3361168e82610d57565b6001600160a01b0316146116b5576040516330cd747160e01b815260040160405180910390fd5b6000828152610140602052604081206116cd90613cbe565b805190915060005b81811015611cec5760008382815181106116f1576116f16159c8565b6020908102919091018101516001600160a01b038116600090815261013b835260408082205489835261013d909452812091935060ff90921691908183600581111561173f5761173f6154f2565b6005811115611750576117506154f2565b815260208082019290925260409081016000908120825160e08101845281546001600160a01b03168152600182015481860152600282015481850152600382015460608201526004820154608082015260058083015460ff16151560a083015260069092015460c08201528c835261013d9094529181209293509190829085908111156117df576117df6154f2565b60058111156117f0576117f06154f2565b81526020808201929092526040908101600020815160e08101835281546001600160a01b03168152600182015493810193909352600281015491830191909152600381015460608301526004810154608080840191909152600582015460ff16151560a084015260069091015460c08301528301519091501580159061187a575042826080015111155b15611898576040516307b7d7dd60e51b815260040160405180910390fd5b6080810151158015906118af575042816080015111155b156118cd576040516307b7d7dd60e51b815260040160405180910390fd5b8060a00151156118f0576040516334d10f9560e11b815260040160405180910390fd5b8160a0015115611913576040516334d10f9560e11b815260040160405180910390fd5b61195e6040518060e0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525090565b6001600160a01b03851681526020808301519084015161197e9190615a2d565b60208201526060808301519084015110801561199d5750606083015115155b6119ab5781606001516119b1565b82606001515b606082015260808083015190840151116119cf5781608001516119d5565b82608001515b6080820181905260608201516119f4916119ef9190615a40565b613ccb565b8160c00181815250506040518060e0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525061013d60008c81526020019081526020016000206000866005811115611a6a57611a6a6154f2565b6005811115611a7b57611a7b6154f2565b815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b039091161781558484015160018201558483015160028201556060808601516003830155608080870151600484015560a08088015160058501805460ff191691151591909117905560c097880151600690940193909355845160e081018652848152958601849052938501839052840182905291830181905290820181905291810191909152611b37908b9086612f73565b600089815261013d602052604081208291866005811115611b5a57611b5a6154f2565b6005811115611b6b57611b6b6154f2565b81526020808201929092526040908101600020835181546001600160a01b0319166001600160a01b039091161781559183015160018301558201516002820155606082015160038201556080820151600482015560a082015160058201805460ff191691151591909117905560c090910151600690910155611bee898286612f73565b60008a815261014060205260409020611c079086613d4f565b50600089815261014060205260409020611c219086613d64565b611c4057600089815261014060205260409020611c3e9086613d86565b505b60008a8152610145602090815260408083206001600160a01b038916845290915290205415611cdb5760008a8152610145602081815260408084206001600160a01b038a16808652908352818520548e86529383528185209085529091528220805491929091611cb1908490615a2d565b909155505060008a8152610145602090815260408083206001600160a01b03891684529091528120555b5050600190930192506116d5915050565b50611cf684613d9b565b82847fdf7d236438dff847e946559b215addd6e449c4a5d81d9336cea31ad8e0417407848551604051611d2a929190615a82565b60405180910390a350506114a7600160fb55565b611d46612da5565b6001600160a01b038116600090815261013b602052604081205460ff169061014481836005811115611d7a57611d7a6154f2565b6005811115611d8b57611d8b6154f2565b815260208101919091526040016000908120546001600160a01b031691508163ae919173336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190615aa4565b6001600160a01b031603611e3f57604051632e0fa00560e11b815260040160405180910390fd5b6001600160a01b038116631e83409a336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b50505050826001600160a01b0316611eb93390565b6001600160a01b03167f2ab1307600592562a92cb056bcd322443b620d9bf2709950fff6222b96e91bca60405160405180910390a35050611008600160fb55565b61013f60205282600052604060002060205281600052604060002081633b9aca008110611f2657600080fd5b60060201805460018201546002830154600384015460048501546005909501549397509195509350919086565b60608060606000611f766101406000878152602001908152602001600020613cbe565b9050805167ffffffffffffffff811115611f9257611f9261555e565b604051908082528060200260200182016040528015611fbb578160200160208202803683370190505b509350805167ffffffffffffffff811115611fd857611fd861555e565b604051908082528060200260200182016040528015612001578160200160208202803683370190505b509250805167ffffffffffffffff81111561201e5761201e61555e565b604051908082528060200260200182016040528015612047578160200160208202803683370190505b50815190925060005b818110156121d257600083828151811061206c5761206c6159c8565b6020908102919091018101516001600160a01b038116600090815261013b83526040808220548c835261013d909452812091935060ff9092169190818360058111156120ba576120ba6154f2565b60058111156120cb576120cb6154f2565b81526020808201929092526040908101600020815160e08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460ff16151560a08301526006015460c082015290506121438a83613da4565b878581518110612155576121556159c8565b60200260200101818152505082898581518110612174576121746159c8565b60200260200101906001600160a01b031690816001600160a01b0316815250506121aa61013e61013f848d428660a00151614088565b8885815181106121bc576121bc6159c8565b6020908102919091010152505050600101612050565b5050509193909250565b6001600160a01b03918216600090815260ce6020908152604080832093909416825291909152205460ff1690565b612212612dfe565b606580546001600160a01b0383166001600160a01b031990911681179091556122436033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612283612da5565b6000336001600160a01b038416600090815261013b602090815260408083205486845261013d909252822092935060ff1691818360058111156122c8576122c86154f2565b60058111156122d9576122d96154f2565b81526020808201929092526040908101600020815160e08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460ff16151560a08301526006015460c082015290503361235185610d57565b6001600160a01b031614612378576040516330cd747160e01b815260040160405180910390fd5b6000848152610141602052604090205460ff16156123a957604051637c9a1cf960e01b815260040160405180910390fd5b8060a00151156123cc576040516334d10f9560e11b815260040160405180910390fd5b6001600160a01b038516600090815261013a602052604090205460ff16612406576040516307c241ad60e51b815260040160405180910390fd5b6020810151158061242d575060008481526101406020526040902061242b9086613d64565b155b1561244b5760405163f90e998d60e01b815260040160405180910390fd5b6020808201516001600160a01b03808616600090815261014c84526040808220928a168252919093528220805491928392612487908490615a40565b9091555050608082015160009042101561273957600062015180846060015185608001516124b59190615a40565b6124c790670de0b6b3a76400006159f4565b6124d19190615a0b565b90506000620151804286608001516124e99190615a40565b6124fb90670de0b6b3a76400006159f4565b6125059190615a0b565b905060008261251c83670de0b6b3a76400006159f4565b6125269190615a0b565b905060006101426000896005811115612541576125416154f2565b6005811115612552576125526154f2565b815260200190815260200160002054905060008b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c79190615ac1565b90506000816125de84670de0b6b3a76400006159f4565b6125e89190615a0b565b6125fa90670de0b6b3a7640000615a40565b90506ec097ce7bc90715b34b9f10000000008960c00151828661261d91906159f4565b61262791906159f4565b6126319190615a0b565b965061013554871115612645576101355496505b670de0b6b3a7640000612658888a6159f4565b6126629190615a0b565b965061266e8789615a40565b97506000606461267f89604b6159f4565b6126899190615a0b565b90506000612697828a615a40565b90508061014660008e60058111156126b1576126b16154f2565b60058111156126c2576126c26154f2565b815260200190815260200160002060008282546126df9190615a2d565b9091555082905061014760008e60058111156126fd576126fd6154f2565b600581111561270e5761270e6154f2565b8152602001908152602001600020600082825461272b9190615a2d565b909155505050505050505050505b6040805160e08101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905289825261013d90529182209091866005811115612791576127916154f2565b60058111156127a2576127a26154f2565b815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a085015160058201805460ff191691151591909117905560c09094015160069094019390935588835261014090915290206128359088613d4f565b506000610142600086600581111561284f5761284f6154f2565b6005811115612860576128606154f2565b815260208082019290925260409081016000908120548a825261014584528282206001600160a01b038d168352909352205490915080156128c85760006128a6876141c7565b5090506001600160a01b038116156128c6576128c688308b8d8686614228565b505b60208501516128d79083615a40565b61014260008860058111156128ee576128ee6154f2565b60058111156128ff576128ff6154f2565b815260200190815260200160002081905550612960886040518060e0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525088612f73565b6000888152610140602052604081206001919061297c90613cbe565b805190915060005b81811015612a4357600061013b60008584815181106129a5576129a56159c8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff169050600061013d60008f81526020019081526020016000206000836005811115612a0757612a076154f2565b6005811115612a1857612a186154f2565b8152602001908152602001600020600101541115612a3a576000945050612a43565b50600101612984565b508215612a5357612a538b613d9b565b612a676001600160a01b038d168b8961432f565b604080518881524260208201528c916001600160a01b038d16917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94910160405180910390a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c85896020015187612ade9190615a40565b6040805192835260208301919091520160405180910390a1505050505050505050506114a7600160fb55565b600081815260cb60205260409020546001600160a01b03166110085760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103d2565b600081815260cd6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b9e82610d57565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612be383610d57565b9050806001600160a01b0316846001600160a01b03161480612c0a5750612c0a81856121dc565b80612c2e5750836001600160a01b0316612c2384610b25565b6001600160a01b0316145b949350505050565b826001600160a01b0316612c4982610d57565b6001600160a01b031614612c6f5760405162461bcd60e51b81526004016103d290615ada565b6001600160a01b038216612cd15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103d2565b612cdc838383614381565b826001600160a01b0316612cef82610d57565b6001600160a01b031614612d155760405162461bcd60e51b81526004016103d290615ada565b600081815260cd6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260cc855283862080546000190190559087168086528386208054600101905586865260cb90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600260fb5403612df75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d2565b600260fb55565b6033546001600160a01b03163314610e4f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d2565b606580546001600160a01b0319169055611008816147b1565b6101365460405163bf40fac160e01b81526020600482015260116024820152704d617374657250726963654f7261636c6560781b604482015260009182916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015612ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f059190615aa4565b6040516315d5220f60e31b81526001600160a01b0385811660048301529192509082169063aea9107890602401602060405180830381865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190615ac1565b612fac6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8260a00151612fbc576000612fc2565b82602001515b608082015260a0830151612fd7576000612fdd565b82604001515b60a0820152608083015142108015612ff9575060008360200151115b15613039576303c2670083602001516130129190615a0b565b60208201526080830151613027904290615a40565b816020015161303691906159f4565b81525b42604080830191909152436060830152600085815261013e6020529081208184600581111561306a5761306a6154f2565b600581111561307b5761307b6154f2565b8152602001908152602001600020549050806000141580156130f85750600085815261013f6020526040812042918560058111156130bb576130bb6154f2565b60058111156130cc576130cc6154f2565b815260200190815260200160002082633b9aca0081106130ee576130ee6159c8565b6006020160020154145b1561319b57600085815261013f602052604081208391856005811115613120576131206154f2565b6005811115613131576131316154f2565b815260200190815260200160002082633b9aca008110613153576131536159c8565b60060201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015590505061328e565b6131a481615b1f565b600086815261013e602052604081209192508291908560058111156131cb576131cb6154f2565b60058111156131dc576131dc6154f2565b8152602001908152602001600020819055508161013f60008781526020019081526020016000206000856005811115613217576132176154f2565b6005811115613228576132286154f2565b815260200190815260200160002082633b9aca00811061324a5761324a6159c8565b60060201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501559050505b5050505050565b600061012d600081546132a790615b1f565b918290555090506132b88582614803565b600081815261013d6020526040812085918560058111156132db576132db6154f2565b60058111156132ec576132ec6154f2565b815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a085015160058201805460ff191691151591909117905560c090940151600690940193909355838352610140909152902061337f9083613d86565b50612c2e818585612f73565b816001600160a01b0316836001600160a01b0316036133ec5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103d2565b6001600160a01b03838116600081815260ce6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038216600090815261013b602090815260408083205487845261013d909252822060ff90911691908183600581111561349b5761349b6154f2565b60058111156134ac576134ac6154f2565b815260208082019290925260409081016000908120825160e08101845281546001600160a01b03168152600182015481860152600282015481850152600382015460608201526004820154608082015260058083015460ff16151560a083015260069092015460c082015289835261013d90945291812092935091908290859081111561353b5761353b6154f2565b600581111561354c5761354c6154f2565b81526020808201929092526040908101600020815160e08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460ff16151560a08301526006015460c08201529050336135c488610d57565b6001600160a01b0316141580156135ec5750336135e087610d57565b6001600160a01b031614155b1561360a576040516330cd747160e01b815260040160405180910390fd5b600087815261014860209081526040808320898452909152812090846005811115613637576136376154f2565b6005811115613648576136486154f2565b8152602001908152602001600020546000036136815760405163102d5cc760e01b815260048101889052602481018790526044016103d2565b6000878152610148602090815260408083208984529091528120908460058111156136ae576136ae6154f2565b60058111156136bf576136bf6154f2565b81526020019081526020016000205484116136da5783613728565b600087815261014860209081526040808320898452909152812090846005811115613707576137076154f2565b6005811115613718576137186154f2565b8152602001908152602001600020545b9350838160400181815161373c9190615a40565b905250602082018051859190613753908390615a2d565b90525060008781526101486020908152604080832089845290915281208591856005811115613784576137846154f2565b6005811115613795576137956154f2565b815260200190815260200160002060008282546137b29190615a40565b90915550506000878152610148602090815260408083208984529091528120908460058111156137e4576137e46154f2565b60058111156137f5576137f56154f2565b81526020019081526020016000205460000361388b5760008781526101496020526040812061386091889190866005811115613833576138336154f2565b6005811115613844576138446154f2565b815260200190815260200160002061481d90919063ffffffff16565b50600086815261014a6020526040812061388991899190866005811115613833576138336154f2565b505b600086815261013d6020526040812082918560058111156138ae576138ae6154f2565b60058111156138bf576138bf6154f2565b815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a08501516005808301805460ff19169215159290921790915560c0909501516006909101558a815261013d90925281208492909190869081111561395d5761395d6154f2565b600581111561396e5761396e6154f2565b815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a08501516005808301805460ff19169215159290921790915560c09095015160069091015589815261013d9092528120613a91928992908790811115613a0e57613a0e6154f2565b6005811115613a1f57613a1f6154f2565b81526020808201929092526040908101600020815160e08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460ff16151560a08301526006015460c082015285612f73565b600087815261013d60205260408120613ab991899190866005811115613a0e57613a0e6154f2565b6000868152610141602052604090205460ff1615613b31576101325460405163032145f960e41b8152600481018890526001600160a01b03909116906332145f9090602401600060405180830381600087803b158015613b1857600080fd5b505af1158015613b2c573d6000803e3d6000fd5b505050505b6000878152610141602052604090205460ff1615613ba9576101325460405163032145f960e41b8152600481018990526001600160a01b03909116906332145f9090602401600060405180830381600087803b158015613b9057600080fd5b505af1158015613ba4573d6000803e3d6000fd5b505050505b604080516001600160a01b038716815260208101869052879189917f808381795a343c1feb4679e53b6f0a9f56bb9da80d2bef0b5526fc9d6226065d910160405180910390a350505050505050565b613c03848484612c36565b613c0f84848484614829565b6115345760405162461bcd60e51b81526004016103d290615b38565b60606000613c3883614927565b600101905060008167ffffffffffffffff811115613c5857613c5861555e565b6040519080825280601f01601f191660200182016040528015613c82576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613c8c57509392505050565b606060006115d9836149ff565b610134546000906303c26700670de0b6b3a7640000671bc16d674ec80000838611613cf95750949350505050565b828610613d095795945050505050565b613d138484615a40565b613d1d8383615a40565b613d278689615a40565b613d3191906159f4565b613d3b9190615a0b565b613d459083615a2d565b9695505050505050565b60006115d9836001600160a01b038416614a5b565b6001600160a01b038116600090815260018301602052604081205415156115d9565b60006115d9836001600160a01b038416614b4e565b61100881614b9d565b600082815261013d60205260408120819081846005811115613dc857613dc86154f2565b6005811115613dd957613dd96154f2565b815260208101919091526040016000206006015461012f5490915060ff1615613e0d5761012e54613e0a9082615a2d565b90505b61012f5461010090046001600160a01b0316613e2a579050610a8d565b6000613e3585610d57565b6101305461012f546040516370a0823160e01b81526001600160a01b03808516600483015293945091831692610100909104169060009082906370a0823190602401602060405180830381865afa158015613e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb89190615ac1565b905060005b8181101561407b576040516322fe761360e21b81526001600160a01b0386811660048301526024820183905260009190851690638bf9d84c90604401602060405180830381865afa158015613f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3a9190615ac1565b610131546040516353e5642360e11b81526001600160a01b0391821660048201529192506000919087169063a7cac84690602401602060405180830381865afa158015613f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613faf9190615ac1565b6101315460405163348c952d60e21b8152600481018590526001600160a01b0391821660248201529088169063d23254b490604401602060405180830381865afa158015614001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140259190615ac1565b61403790670de0b6b3a76400006159f4565b6140419190615a0b565b9050670de0b6b3a7640000816101335461405b91906159f4565b6140659190615a0b565b61406f9089615a2d565b97505050600101613ebd565b5093979650505050505050565b6000806140988888888888614c3e565b9050806000036140ac576000915050613d45565b6000858152602088905260408120818860058111156140cd576140cd6154f2565b60058111156140de576140de6154f2565b815260200190815260200160002082633b9aca008110614100576141006159c8565b600602016040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090508315614170578060a0015181608001516141679190615a2d565b92505050613d45565b60008160400151866141829190615a40565b826020015161419191906159f4565b82519091508111156141a657600082526141bc565b80826000018181516141b89190615a40565b9052505b50519150613d459050565b60006060600061014460008560058111156141e4576141e46154f2565b60058111156141f5576141f56154f2565b81526020808201929092526040908101600090812054825193840190925282526001600160a01b03169590945092505050565b604051630f41a04d60e11b81526001600160a01b038781166004830152821690631e83409a90602401600060405180830381600087803b15801561426b57600080fd5b505af115801561427f573d6000803e3d6000fd5b5050604051636ce5768960e11b81526001600160a01b0389811660048301528881166024830152604482018690528416925063d9caed129150606401600060405180830381600087803b1580156142d557600080fd5b505af11580156142e9573d6000803e3d6000fd5b5050506000858152610145602090815260408083206001600160a01b038816845290915281208054859350909190614322908490615a40565b9091555050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c5c908490614e2f565b6001600160a01b038316156143b5576001600160a01b038316600090815261014b602052604090206143b3908261481d565b505b6001600160a01b038216156143e9576001600160a01b038216600090815261014b602052604090206143e79082614f01565b505b6001600160a01b0383161580159061440957506001600160a01b03821615155b15610c5c5760008181526101406020526040812061442690613cbe565b805190915060005b818110156147a957600083828151811061444a5761444a6159c8565b6020908102919091018101516001600160a01b038116600090815261013b8352604080822054898352610149909452812091935060ff90921691906144c0908284600581111561449c5761449c6154f2565b60058111156144ad576144ad6154f2565b8152602001908152602001600020613cbe565b90506000815167ffffffffffffffff8111156144de576144de61555e565b604051908082528060200260200182016040528015614507578160200160208202803683370190505b50825190915060005b818110156145405760001983828151811061452d5761452d6159c8565b6020908102919091010152600101614510565b50801561455357614553898487856114ab565b6000898152610145602090815260408083206001600160a01b038916845290915290205480156146295760006101446000876005811115614596576145966154f2565b60058111156145a7576145a76154f2565b81526020810191909152604090810160002054905163e31d753160e01b81526001600160a01b038f811660048301528e81166024830152604482018590529091169150819063e31d753190606401600060405180830381600087803b15801561460f57600080fd5b505af1158015614623573d6000803e3d6000fd5b50505050505b60008a815261013d602052604081208187600581111561464b5761464b6154f2565b600581111561465c5761465c6154f2565b81526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016006820154815250509050806020015161014c60008f6001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002060008282546147509190615a40565b90915550506020808201516001600160a01b03808f16600090815261014c84526040808220928c168252919093528220805491929091614791908490615a2d565b90915550506001909701965061442e95505050505050565b505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6114a7828260405180602001604052806000815250614f0d565b60006115d98383614a5b565b60006001600160a01b0384163b1561491f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061486d903390899088908890600401615b8a565b6020604051808303816000875af19250505080156148a8575060408051601f3d908101601f191682019092526148a591810190615bbd565b60015b614905573d8080156148d6576040519150601f19603f3d011682016040523d82523d6000602084013e6148db565b606091505b5080516000036148fd5760405162461bcd60e51b81526004016103d290615b38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612c2e565b506001612c2e565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106149665772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614992576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106149b057662386f26fc10000830492506010015b6305f5e10083106149c8576305f5e100830492506008015b61271083106149dc57612710830492506004015b606483106149ee576064830492506002015b600a8310610a8d5760010192915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614a4f57602002820191906000526020600020905b815481526020019060010190808311614a3b575b50505050509050919050565b60008181526001830160205260408120548015614b44576000614a7f600183615a40565b8554909150600090614a9390600190615a40565b9050818114614af8576000866000018281548110614ab357614ab36159c8565b9060005260206000200154905080876000018481548110614ad657614ad66159c8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b0957614b09615bda565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a8d565b6000915050610a8d565b6000818152600183016020526040812054614b9557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a8d565b506000610a8d565b6000614ba882610d57565b9050614bb681600084614381565b614bbf82610d57565b600083815260cd6020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260cc8452828520805460001901905587855260cb909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000828152602086905260408120819081866005811115614c6157614c616154f2565b6005811115614c7257614c726154f2565b815260200190815260200160002054905080600003614c95576000915050614e26565b60008481526020879052604081208491876005811115614cb757614cb76154f2565b6005811115614cc857614cc86154f2565b815260200190815260200160002082633b9aca008110614cea57614cea6159c8565b600602016002015411614cfe579050614e26565b60008481526020879052604081208491876005811115614d2057614d206154f2565b6005811115614d3157614d316154f2565b81526020810191909152604001600020600801541115614d55576000915050614e26565b6000815b81811115614e215760006002614d6f8484615a40565b614d799190615a0b565b614d839083615a40565b600088815260208b90526040812091925090818a6005811115614da857614da86154f2565b6005811115614db957614db96154f2565b815260200190815260200160002082633b9aca008110614ddb57614ddb6159c8565b60060201905086816002015403614df857509350614e2692505050565b8681600201541015614e0c57819350614e1a565b614e17600183615a40565b92505b5050614d59565b509150505b95945050505050565b6000614e84826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f409092919063ffffffff16565b805190915015610c5c5780806020019051810190614ea29190615bf0565b610c5c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d2565b60006115d98383614b4e565b614f178383614f4f565b614f246000848484614829565b610c5c5760405162461bcd60e51b81526004016103d290615b38565b6060612c2e84846000856150e6565b6001600160a01b038216614fa55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103d2565b600081815260cb60205260409020546001600160a01b03161561500a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103d2565b61501660008383614381565b600081815260cb60205260409020546001600160a01b03161561507b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103d2565b6001600160a01b038216600081815260cc602090815260408083208054600101905584835260cb90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060824710156151475760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d2565b600080866001600160a01b031685876040516151639190615c0d565b60006040518083038185875af1925050503d80600081146151a0576040519150601f19603f3d011682016040523d82523d6000602084013e6151a5565b606091505b50915091506151b6878383876151c1565b979650505050505050565b60608315615230578251600003615229576001600160a01b0385163b6152295760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d2565b5081612c2e565b612c2e83838151156152455781518083602001fd5b8060405162461bcd60e51b81526004016103d291906152e2565b6001600160e01b03198116811461100857600080fd5b60006020828403121561528757600080fd5b81356115d98161525f565b60005b838110156152ad578181015183820152602001615295565b50506000910152565b600081518084526152ce816020860160208601615292565b601f01601f19169290920160200192915050565b6020815260006115d960208301846152b6565b80356006811061530457600080fd5b919050565b6000806040838503121561531c57600080fd5b8235915061532c602084016152f5565b90509250929050565b60006020828403121561534757600080fd5b5035919050565b6001600160a01b038116811461100857600080fd5b6000806040838503121561537657600080fd5b82356153818161534e565b946020939093013593505050565b6000806000606084860312156153a457600080fd5b83359250602084013591506153bb604085016152f5565b90509250925092565b6000602082840312156153d657600080fd5b6115d9826152f5565b6000806000606084860312156153f457600080fd5b83356153ff8161534e565b9250602084013561540f8161534e565b929592945050506040919091013590565b6000806040838503121561543357600080fd5b8235915060208301356154458161534e565b809150509250929050565b801515811461100857600080fd5b60008060006060848603121561547357600080fd5b8335925060208401356154858161534e565b9150604084013561549581615450565b809150509250925092565b6000602082840312156154b257600080fd5b81356115d98161534e565b6000806000606084860312156154d257600080fd5b83356154dd8161534e565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b602081016006831061552a57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806040838503121561554357600080fd5b823561554e8161534e565b9150602083013561544581615450565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561559d5761559d61555e565b604052919050565b600067ffffffffffffffff8211156155bf576155bf61555e565b5060051b60200190565b600082601f8301126155da57600080fd5b813560206155ef6155ea836155a5565b615574565b8083825260208201915060208460051b87010193508684111561561157600080fd5b602086015b8481101561562d5780358352918301918301615616565b509695505050505050565b6000806000806080858703121561564e57600080fd5b84359350602085013567ffffffffffffffff8082111561566d57600080fd5b615679888389016155c9565b94506040870135915061568b8261534e565b909250606086013590808211156156a157600080fd5b506156ae878288016155c9565b91505092959194509250565b600080600080608085870312156156d057600080fd5b84356156db8161534e565b93506020858101356156ec8161534e565b935060408601359250606086013567ffffffffffffffff8082111561571057600080fd5b818801915088601f83011261572457600080fd5b8135818111156157365761573661555e565b615748601f8201601f19168501615574565b9150808252898482850101111561575e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561579157600080fd5b823561579c8161534e565b915060208301356154458161534e565b600080604083850312156157bf57600080fd5b50508035926020909101359150565b6000806000606084860312156157e357600080fd5b833592506157f3602085016152f5565b9150604084013590509250925092565b60008151808452602080850194506020840160005b8381101561583d5781516001600160a01b031687529582019590820190600101615818565b509495945050505050565b60008151808452602080850194506020840160005b8381101561583d5781518752958201959082019060010161585d565b60608152600061588c6060830186615803565b828103602084015261589e8186615848565b90508281036040840152613d458185615848565b600181811c908216806158c657607f821691505b6020821081036158e657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6000602080838503121561594c57600080fd5b825167ffffffffffffffff81111561596357600080fd5b8301601f8101851361597457600080fd5b80516159826155ea826155a5565b81815260059190911b820183019083810190878311156159a157600080fd5b928401925b828410156151b65783516159b98161534e565b825292840192908401906159a6565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a8d57610a8d6159de565b600082615a2857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a8d57610a8d6159de565b81810381811115610a8d57610a8d6159de565b60008351615a65818460208801615292565b835190830190615a79818360208801615292565b01949350505050565b604081526000615a956040830185615803565b90508260208301529392505050565b600060208284031215615ab657600080fd5b81516115d98161534e565b600060208284031215615ad357600080fd5b5051919050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060018201615b3157615b316159de565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d45908301846152b6565b600060208284031215615bcf57600080fd5b81516115d98161525f565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615c0257600080fd5b81516115d981615450565b60008251615c1f818460208701615292565b919091019291505056fea2646970667358221220c6b4e55b2532841222f658d224fac5ec6d94b3c4d328dda14693cb7a90b9701064736f6c63430008160033