0 txs
39.2k calls
constructor
constructor(address core_)
functions
ADMIN_DELEGATE_ROLE
viewfunction ADMIN_DELEGATE_ROLE() view returns (bytes32)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
ammModule
viewfunction ammModule() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
calculateAmountsForLp
purefunction calculateAmountsForLp(uint256 lpAmount, uint256 totalSupply_, tuple position, uint160 sqrtRatioX96) pure returns (uint256 amount0, uint256 amount1)
calculateEarnedRewards
viewfunction calculateEarnedRewards(address account) view returns (uint256 rewardsEarned)
claimable
viewfunction claimable(address account) view returns (uint256 amount)
core
viewfunction core() view returns (address)
D9
viewfunction D9() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
earned
viewfunction earned(address account) view returns (uint256 earned_)
getInfo
viewfunction getInfo() view returns (tuple[] data)
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)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
initializationTimestamp
viewfunction initializationTimestamp() view returns (uint256)
isAdmin
viewfunction isAdmin(address sender) view returns (bool)
isOperator
viewfunction isOperator(address sender) view returns (bool)
lastBalancesUpdate
viewfunction lastBalancesUpdate(address account) view returns (uint256 timestamp)
name
viewfunction name() view returns (string)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
oracle
viewfunction oracle() view returns (address)
pool
viewfunction pool() view returns (address)
positionId
viewfunction positionId() view returns (uint256)
positionManager
viewfunction positionManager() view returns (address)
previewMint
viewfunction previewMint(uint256 lpAmount) view returns (uint256 amount0, uint256 amount1)
protocolParams
viewfunction protocolParams() view returns (tuple params, uint256 d9)
Q96
viewfunction Q96() view returns (uint256)
rewardDistributor
viewfunction rewardDistributor() view returns (address)
rewardRates
viewfunction rewardRates(uint256) view returns (uint256 timestamp, uint256 rewardRateX96)
rewardToken
viewfunction rewardToken() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
timestampToRewardRatesIndex
viewfunction timestampToRewardRatesIndex(uint256 timestamp) view returns (uint256 index)
token0
viewfunction token0() view returns (address)
token1
viewfunction token1() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupplyLimit
viewfunction totalSupplyLimit() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
collectRewards
nonpayablefunction collectRewards()
distribute
nonpayablefunction distribute(uint256 amount, address rewardToken_)
emptyRebalance
nonpayablefunction emptyRebalance()
getRewards
nonpayablefunction getRewards(address recipient) returns (uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(uint256 positionId_, uint256 initialTotalSupply, uint256 totalSupplyLimit_, address admin_, address manager_, string name_, string symbol_)
mint
nonpayablefunction mint(tuple mintParams) returns (uint256 actualAmount0, uint256 actualAmount1, uint256 actualLpAmount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCallbackParams
nonpayablefunction setCallbackParams(tuple callbackParams)
setPositionParams
nonpayablefunction setPositionParams(uint32 slippageD9, tuple callbackParams, tuple strategyParams, tuple securityParams)
setPositionParams
nonpayablefunction setPositionParams(uint32 slippageD9, bytes callbackParams, bytes strategyParams, bytes securityParams)
setSecurityParams
nonpayablefunction setSecurityParams(tuple securityParams)
setSlippageD9
nonpayablefunction setSlippageD9(uint32 slippageD9)
setStrategyParams
nonpayablefunction setStrategyParams(tuple strategyParams)
setTotalSupplyLimit
nonpayablefunction setTotalSupplyLimit(uint256 newTotalSupplyLimit)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
withdraw
nonpayablefunction withdraw(uint256 lpAmount, uint256 minAmount0, uint256 minAmount1, address to, uint256 deadline) returns (uint256 amount0, uint256 amount1, uint256 actualLpAmount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed sender, address indexed recipient, address indexed pool, uint256 amount0, uint256 amount1, uint256 lpAmount, uint256 totalSupply)
Initialized
event Initialized(uint64 version)
PositionParamsSet
event PositionParamsSet(uint56 slippageD9, (address farm, address gauge) callbackParams, (uint8 strategyType, int24 tickNeighborhood, int24 tickSpacing, int24 width, uint256 maxLiquidityRatioDeviationX96) strategyParams, (uint16 lookback, uint32 maxAge, int24 maxAllowedDelta) securityParams)
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)
TotalSupplyLimitUpdated
event TotalSupplyLimitUpdated(uint256 newTotalSupplyLimit, uint256 totalSupplyLimitOld, uint256 totalSupplyCurrent)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed recipient, address indexed pool, uint256 amount0, uint256 amount1, uint256 lpAmount, uint256 totalSupply)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressZero
error AddressZero()
Deadline
error Deadline()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
Forbidden
error Forbidden()
InsufficientAmounts
error InsufficientAmounts()
InsufficientLpAmount
error InsufficientLpAmount()
InvalidDistributor
error InvalidDistributor()
InvalidInitialization
error InvalidInitialization()
InvalidState
error InvalidState()
LiquidityOverflow
error LiquidityOverflow()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
T
error T()
TotalSupplyLimitReached
error TotalSupplyLimitReached()
creation bytecode
0x610120604052348015610010575f80fd5b506040516154fb3803806154fb83398101604081905261002f916101db565b60015f556001600160a01b038116608081905261005f57604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b03811660c0819052604080516307dc0d1d60e41b81529051637dc0d1d0916004808201926020929091908290030181865afa1580156100a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100cb91906101db565b6001600160a01b0316610100816001600160a01b03168152505060c0516001600160a01b03166354c8e3656040518163ffffffff1660e01b8152600401602060405180830381865afa158015610123573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014791906101db565b6001600160a01b031660e081905260408051631e46e62f60e21b8152905163791b98bc916004808201926020929091908290030181865afa15801561018e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b291906101db565b6001600160a01b031660a052506101fd565b6001600160a01b03811681146101d8575f80fd5b50565b5f602082840312156101eb575f80fd5b81516101f6816101c4565b9392505050565b60805160a05160c05160e051610100516152126102e95f395f81816106a2015281816119a7015261235501525f818161059101528181611a7501528181612423015281816125c60152612a4001525f81816108cd01528181610ad301528181610bbe01528181610dcc01528181610f470152818161113401528181611490015281816116ec0152818161181b015281816118d001528181611baf01528181611c810152818161220b01528181612b1d01528181613350015281816133a50152818161340701526139cf01525f8181610668015261158e01525f818161078f0152611fa801526152125ff3fe608060405234801561000f575f80fd5b50600436106103a8575f3560e01c806375b238fc116101ea578063b47f847311610114578063dd46bdc2116100a9578063f2caeb1e11610079578063f2caeb1e146108b5578063f2f4eb26146108c8578063f7c618c1146108ef578063fed9fbb014610902575f80fd5b8063dd46bdc214610873578063dd62ed3e14610886578063e1fa8b0214610899578063efa7f4ab146108ac575f80fd5b8063d006e7a9116100e4578063d006e7a914610827578063d21220a71461083a578063d3cd1c7c1461084d578063d547741f14610860575f80fd5b8063b47f8473146107d9578063b5b20aed146107f8578063bac21a221461080b578063ca15c87314610814575f80fd5b806395d89b411161018a578063a9059cbb1161015a578063a9059cbb14610764578063a9fd90cf14610777578063acc2166a1461078a578063b3d7f6b9146107b1575f80fd5b806395d89b4114610721578063983d273714610729578063a217fddf1461073d578063a3246ad314610744575f80fd5b80637dc0d1d0116101c55780637dc0d1d01461069d5780639010d07c146106c457806391d14854146106d757806393aab9d5146106ea575f80fd5b806375b238fc1461064f578063791b98bc1461066357806379ee54f71461068a575f80fd5b80632f2ff15d116102d6578063589caf931161026b5780636da733131161023b5780636da733131461060c57806370a082311461062b57806370bb45b31461063e57806371640de314610646575f80fd5b8063589caf93146105be5780635a3f27a7146105d15780635a9b0b89146105e45780636d70f7ae146105f9575f80fd5b806340792465116102a657806340792465146105535780634422a8dd1461055e57806354c8e3651461058c578063551530ae146105b3575f80fd5b80632f2ff15d146104ff578063313ce5671461051257806336568abe14610521578063402914f514610534575f80fd5b806316f0115b1161034c5780631bc88c981161031c5780631bc88c98146104b357806323b872dd146104c6578063248a9ca3146104d957806324d7806c146104ec575f80fd5b806316f0115b1461047157806318160ddd146104845780631b479f00146104985780631b5c1d0e146104a0575f80fd5b80630952ff54116103875780630952ff541461040a578063095ea7b31461041e5780630adef235146104315780630dfe168114610446575f80fd5b80628cc262146103ac57806301ffc9a7146103d257806306fdde03146103f5575b5f80fd5b6103bf6103ba36600461404c565b610915565b6040519081526020015b60405180910390f35b6103e56103e0366004614067565b610947565b60405190151581526020016103c9565b6103fd61096b565b6040516103c991906140db565b6103bf5f8051602061511d83398151915281565b6103e561042c3660046140ed565b610a2b565b61044461043f366004614158565b610a42565b005b600a54610459906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b600954610459906001600160a01b031681565b5f8051602061517d833981519152546103bf565b610444610ab1565b6104446104ae3660046141b0565b610b3d565b6104446104c13660046141c7565b610ba2565b6103e56104d43660046141e1565b610c72565b6103bf6104e73660046141b0565b610c97565b6103e56104fa36600461404c565b610cb7565b61044461050d36600461421f565b610cec565b604051601281526020016103c9565b61044461052f36600461421f565b610d08565b6103bf61054236600461404c565b60046020525f908152604090205481565b6103bf600160601b81565b61057161056c36600461424d565b610d40565b604080519384526020840192909252908201526060016103c9565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b6103bf633b9aca0081565b6104446105cc3660046143dd565b610f25565b6104446105df366004614471565b61102c565b6105ec61148b565b6040516103c9919061450f565b6103e561060736600461404c565b6115fa565b6103bf61061a3660046141b0565b60056020525f908152604090205481565b6103bf61063936600461404c565b611612565b610444611638565b6103bf60085481565b6103bf5f8051602061515d83398151915281565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b6103bf61069836600461404c565b611651565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b6104596106d2366004614622565b611673565b6103e56106e536600461421f565b6116a0565b6106f26116d6565b6040805183516001600160a01b0316815260209384015163ffffffff16938101939093528201526060016103c9565b6103fd61178b565b6103bf5f8051602061519d83398151915281565b6103bf5f81565b6107576107523660046141b0565b6117c9565b6040516103c99190614642565b6103e56107723660046140ed565b6117f2565b61044461078536600461468e565b6117ff565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b6107c46107bf3660046141b0565b6118cb565b604080519283526020830191909152016103c9565b6103bf6107e736600461404c565b60036020525f908152604090205481565b6104446108063660046146a8565b611b93565b6103bf600c5481565b6103bf6108223660046141b0565b611c41565b6104446108353660046146c3565b611c65565b600b54610459906001600160a01b031681565b6103bf61085b36600461404c565b611d1d565b61044461086e36600461421f565b611e1e565b6107c461088136600461471a565b611e3a565b6103bf6108943660046147d2565b611f5c565b6104446108a736600461421f565b611fa5565b6103bf60025481565b6107c46108c33660046141b0565b612172565b6104597f000000000000000000000000000000000000000000000000000000000000000081565b600154610459906001600160a01b031681565b6105716109103660046147fe565b61219e565b5f61091f82611d1d565b6001600160a01b0383165f908152600460205260409020546109419190614868565b92915050565b5f6001600160e01b03198216635a05180f60e01b1480610941575061094182612817565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f8051602061513d833981519152916109a99061487b565b80601f01602080910402602001604051908101604052809291908181526020018280546109d59061487b565b8015610a205780601f106109f757610100808354040283529160200191610a20565b820191905f5260205f20905b815481529060010190602001808311610a0357829003601f168201915b505050505091505090565b5f33610a3881858561284b565b5060019392505050565b610aab8484604051602001610a5791906148ad565b60405160208183030381529060405284604051602001610a779190614928565b60405160208183030381529060405284604051602001610a9791906149a5565b604051602081830303815290604052610f25565b50505050565b610ab9612858565b60085460405163f2bb571960e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f2bb5719906024015f604051808303815f87803b158015610b1c575f80fd5b505af1158015610b2e573d5f803e3d5ffd5b50505050610b3b60015f55565b565b610b45612880565b7f23f28df8c45a218cf95b9731d5026b031759b3546a4461307100f1c4cf8e058f81600c54610b7f5f8051602061517d8339815191525490565b6040805193845260208401929092529082015260600160405180910390a1600c55565b600854604051630ce00c9560e21b81525f916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633380325491610bf59160040190815260200190565b5f60405180830381865afa158015610c0f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c369190810190614ac5565b9050610c6e815f015183604051602001610c5091906148ad565b6040516020818303038152906040528360c001518460e00151610f25565b5050565b5f33610c7f8582856128a6565b610c8a858585612908565b60019150505b9392505050565b5f9081525f805160206151bd833981519152602052604090206001015490565b5f610ccf5f8051602061515d833981519152836116a0565b8061094157506109415f8051602061511d833981519152836116a0565b610cf582610c97565b610cfe81612965565b610aab8383612972565b6001600160a01b0381163314610d315760405163334bd91960e11b815260040160405180910390fd5b610d3b82826129b4565b505050565b5f805f610d4b612858565b83421115610d6c5760405163637910d560e11b815260040160405180910390fd5b33610d80610d7982611612565b8a906129ed565b9150815f03610da257604051630335b4b560e21b815260040160405180910390fd5b5f610db85f8051602061517d8339815191525490565b9050610dc482846129fc565b610e648382897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663338032546008546040518263ffffffff1660e01b8152600401610e1a91815260200190565b5f60405180830381865afa158015610e34573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e5b9190810190614ac5565b60800151612a30565b909550935088851080610e7657508784105b15610e9457604051631719de7160e21b815260040160405180910390fd5b610e9d87612c24565b506009546001600160a01b03908116908881169084167fd91ccdd5cef3c2bca03dc0bf0b42adf67c0d34121e6476bff161091e0411c11c888888610eec5f8051602061517d8339815191525490565b60408051948552602085019390935291830152606082015260800160405180910390a45050610f1a60015f55565b955095509592505050565b610f2d612880565b600854604051633a5f091960e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163e97c246491610f8391908890889088908890600401614bda565b5f604051808303815f87803b158015610f9a575f80fd5b505af1158015610fac573d5f803e3d5ffd5b505050507ff55e60d36e6dcd41538f4a6c87a812bd90e888dbf6cfa6789bc995bab659fe358484806020019051810190610fe69190614c30565b84806020019051810190610ffa9190614c6f565b8480602001905181019061100e9190614ce0565b60405161101e9493929190614d4f565b60405180910390a150505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156110705750825b90505f826001600160401b0316600114801561108b5750303b155b905081158015611099575080155b156110b75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110e157845460ff60401b1916600160401b1785555b6110ea89612c85565b6001600160a01b03881615611112576111105f8051602061515d83398151915289612972565b505b604051630ce00c9560e21b8152600481018d905230905f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906333803254906024015f60405180830381865afa158015611178573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261119f9190810190614ac5565b9050816001600160a01b031681604001516001600160a01b0316146111d757604051631dd2188d60e31b815260040160405180910390fd5b5f816060015190506112a8816001600160a01b031663a6f19c846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112429190614ded565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561127d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a19190614ded565b8b8b612d43565b60088f9055600c8d9055600980546001600160a01b0319166001600160a01b03831690811790915560408051630dfe168160e01b81529051630dfe1681916004808201926020929091908290030181865afa158015611309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132d9190614ded565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b29190614ded565b600b80546001600160a01b0319166001600160a01b03929092169190911790556113dc838f612dfd565b7f23f28df8c45a218cf95b9731d5026b031759b3546a4461307100f1c4cf8e058f600c545f6114165f8051602061517d8339815191525490565b6040805193845260208401929092529082015260600160405180910390a1505050831561147d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b60605f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663338032546008546040518263ffffffff1660e01b81526004016114de91815260200190565b5f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f9190810190614ac5565b90508060800151516001600160401b0381111561153e5761153e614292565b60405190808252806020026020018201604052801561157757816020015b611564613f99565b81526020019060019003908161155c5790505b5091505f5b8160800151518110156115f5576115d07f0000000000000000000000000000000000000000000000000000000000000000836080015183815181106115c3576115c3614e08565b6020026020010151612e31565b8382815181106115e2576115e2614e08565b602090810291909101015260010161157c565b505090565b5f6109415f8051602061519d833981519152836116a0565b6001600160a01b03165f9081525f8051602061513d833981519152602052604090205490565b611640612858565b611648612e6f565b610b3b60015f55565b5f61165a612858565b61166382612c24565b905061166e60015f55565b919050565b5f8281525f805160206150fd8339815191526020819052604082206116989084612e9f565b949350505050565b5f9182525f805160206151bd833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b604080518082019091525f80825260208201525f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166393aab9d56040518163ffffffff1660e01b81526004015f60405180830381865afa158015611745573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261176c9190810190614e1c565b80602001905181019061177f9190614e4d565b92633b9aca0092509050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061513d833981519152916109a99061487b565b5f8181525f805160206150fd8339815191526020819052604090912060609190610c9090612eaa565b5f33610a38818585612908565b600854604051630ce00c9560e21b81525f916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916333803254916118529160040190815260200190565b5f60405180830381865afa15801561186c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118939190810190614ac5565b9050610c6e815f01518260a00151846040516020016118b29190614928565b6040516020818303038152906040528460e00151610f25565b5f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663338032546008546040518263ffffffff1660e01b815260040161191e91815260200190565b5f60405180830381865afa158015611938573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261195f9190810190614ac5565b6080810151519091505f61197e5f8051602061517d8339815191525490565b6060840151604051631d7d882b60e21b81526001600160a01b0391821660048201529192505f917f0000000000000000000000000000000000000000000000000000000000000000909116906375f620ac906024016040805180830381865afa1580156119ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a119190614e80565b5090505f836001600160401b03811115611a2d57611a2d614292565b604051908082528060200260200182016040528015611a6657816020015b611a53614004565b815260200190600190039081611a4b5790505b5090505f5b84811015611b88577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f71f056287608001518381518110611ab857611ab8614e08565b60200260200101516040518263ffffffff1660e01b8152600401611ade91815260200190565b60c060405180830381865afa158015611af9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1d9190614ead565b828281518110611b2f57611b2f614e08565b60200260200101819052505f80611b618b87868681518110611b5357611b53614e08565b602002602001015188611e3a565b9092509050611b70828b614868565b9950611b7c818a614868565b98505050600101611a6b565b505050505050915091565b600854604051630ce00c9560e21b81525f916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633380325491611be69160040190815260200190565b5f60405180830381865afa158015611c00573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c279190810190614ac5565b9050610c6e828260a001518360c001518460e00151610f25565b5f8181525f805160206150fd833981519152602081905260408220610c9090612eb6565b600854604051630ce00c9560e21b81525f916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633380325491611cb89160040190815260200190565b5f60405180830381865afa158015611cd2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cf99190810190614ac5565b9050610c6e815f01518260a001518360c0015185604051602001610a9791906149a5565b6001600160a01b0381165f90815260036020526040812054801580611d4157504281145b15611d4e57505f92915050565b5f611d5884611612565b9050805f03611d6a57505f9392505050565b6006546002811015611d8057505f949350505050565b5f83815260056020526040812054600680549091908110611da357611da3614e08565b905f5260205f2090600202016001015490505f6006600184611dc59190614f38565b81548110611dd557611dd5614e08565b905f5260205f209060020201600101549050808203611dfa57505f9695505050505050565b611e13611e078383614f38565b8590600160601b612ebf565b979650505050505050565b611e2782610c97565b611e3081612965565b610aab83836129b4565b5f805f611e628560a001516001600160801b03168760018a612f75909392919063ffffffff16565b90506001600160801b03811115611e8c5760405163581a12d760e11b815260040160405180910390fd5b5f611e9a8660600151612fc0565b6001600160a01b031690505f611eb38760800151612fc0565b6001600160a01b0316905080866001600160a01b03161015611f0d575f611ee3836001600160a01b0389166132db565b9050611f09611f03611ef58385614f38565b606087901b90856001612f75565b826132ea565b9550505b81866001600160a01b03161115611f5057611f4d82611f35836001600160a01b038a166129ed565b611f3f9190614f38565b8490600160601b6001612f75565b93505b50505094509492505050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611feb57506001546001600160a01b03828116911614155b1561200957604051635c187b8d60e01b815260040160405180910390fd5b60026007556006805442915f90612021600184614f38565b8154811061203157612031614e08565b5f9182526020808320604080518082019091526002909302018054835260010154908201529150851561208857612083600160601b61207b5f8051602061517d8339815191525490565b889190612ebf565b61208a565b5f5b90505f81836020015161209d9190614868565b835190915085036120e55786156120e0578060066120bc600187614f38565b815481106120cc576120cc614e08565b905f5260205f209060020201600101819055505b612169565b6040805180820182528681526020808201848152600680546001810182555f91825293517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f60029095029485015590517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409093019290925587825260059052208490555b50505050505050565b60068181548110612181575f80fd5b5f9182526020909120600290910201805460019091015490915082565b5f805f6121a9612858565b83608001514211156121ce5760405163637910d560e11b815260040160405180910390fd5b83515f036121ef57604051630335b4b560e21b815260040160405180910390fd5b600854604051630ce00c9560e21b81525f916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916333803254916122429160040190815260200190565b5f60405180830381865afa15801561225c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122839190810190614ac5565b6080810151519091505f6122a25f8051602061517d8339815191525490565b90505f826001600160401b038111156122bd576122bd614292565b6040519080825280602002602001820160405280156122e6578160200160208202803683370190505b5090505f836001600160401b0381111561230257612302614292565b60405190808252806020026020018201604052801561232b578160200160208202803683370190505b506060860151604051631d7d882b60e21b81526001600160a01b0391821660048201529192505f917f0000000000000000000000000000000000000000000000000000000000000000909116906375f620ac906024016040805180830381865afa15801561239b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123bf9190614e80565b5090505f856001600160401b038111156123db576123db614292565b60405190808252806020026020018201604052801561241457816020015b612401614004565b8152602001906001900390816123f95790505b5090505f5b86811015612567577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f71f05628960800151838151811061246657612466614e08565b60200260200101516040518263ffffffff1660e01b815260040161248c91815260200190565b60c060405180830381865afa1580156124a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cb9190614ead565b8282815181106124dd576124dd614e08565b60200260200101819052505f806125048e5f015189868681518110611b5357611b53614e08565b915091508187848151811061251b5761251b614e08565b6020026020010181815250508086848151811061253a5761253a614e08565b602090810291909101015261254f828e614868565b9c5061255b818d614868565b9b505050600101612419565b508a602001518a118061257d57508a6040015189115b1561259b57604051631719de7160e21b815260040160405180910390fd5b6125a98a8a8686858c61331d565b909a5098505f1997506125ba614004565b5f5b87811015612727577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f71f05628a60800151838151811061260957612609614e08565b60200260200101516040518263ffffffff1660e01b815260040161262f91815260200190565b60c060405180830381865afa15801561264a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266e9190614ead565b915082818151811061268257612682614e08565b602002602001015160a001516001600160801b03165f031561271f575f61270f8483815181106126b4576126b4614e08565b602002602001015160a001518460a001516126cf9190614f4b565b6001600160801b03168584815181106126ea576126ea614e08565b602002602001015160a001516001600160801b03168a612ebf9092919063ffffffff16565b905061271b8b826129ed565b9a50505b6001016125bc565b5088158061273557508b5189105b1561275357604051630335b4b560e21b815260040160405180910390fd5b600c546127608a88614868565b111561277f5760405163b44f0f2760e01b815260040160405180910390fd5b61278d8c606001518a612dfd565b60095460608d01516001600160a01b039182169116337fee58b7a4a41f919b43841b7643761b258297cdd1aa967230d35bc23caf2b4f518e8e8e6127dc5f8051602061517d8339815191525490565b60408051948552602085019390935291830152606082015260800160405180910390a4505050505050505061281060015f55565b9193909250565b5f6001600160e01b03198216637965db0b60e01b148061094157506301ffc9a760e01b6001600160e01b0319831614610941565b610d3b838383600161358e565b60025f540361287a57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b61288933610cb7565b610b3b57604051631dd2188d60e31b815260040160405180910390fd5b5f6128b18484611f5c565b90505f198114610aab57818110156128fa57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610aab84848484035f61358e565b6001600160a01b03831661293157604051634b637e8f60e11b81525f60048201526024016128f1565b6001600160a01b03821661295a5760405163ec442f0560e01b81525f60048201526024016128f1565b610d3b838383613672565b61296f81336136b5565b50565b5f5f805160206150fd8339815191528161298c85856136ee565b90508015611698575f8581526020839052604090206129ab9085613796565b50949350505050565b5f5f805160206150fd833981519152816129ce85856137aa565b90508015611698575f8581526020839052604090206129ab9085613823565b5f828218828410028218610c90565b6001600160a01b038216612a2557604051634b637e8f60e11b81525f60048201526024016128f1565b610c6e825f83613672565b5f805f5b8351811015612c1a575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f71f0562868481518110612a7f57612a7f614e08565b60200260200101516040518263ffffffff1660e01b8152600401612aa591815260200190565b60c060405180830381865afa158015612ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae49190614ead565b90505f612b098260a001516001600160801b0316898b612ebf9092919063ffffffff16565b9050805f03612b19575050612c12565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e18d7e526008548a8881518110612b5f57612b5f614e08565b60209081029190910101516040516001600160e01b031960e085901b16815260048101929092526024820152604481018690526001600160a01b038c1660648201525f6084820181905260a482015260c40160408051808303815f875af1158015612bcc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf09190614f6b565b9092509050612bff8288614868565b9650612c0b8187614868565b9550505050505b600101612a34565b5094509492505050565b5f33612c2e612e6f565b612c3781613837565b6001600160a01b0381165f9081526004602052604090205491508115612c7f576001600160a01b038082165f90815260046020526040812055600154612c7f91168484613893565b50919050565b612c8d6138f2565b6001600160a01b038116612cb457604051639fabe1c160e01b815260040160405180910390fd5b612ccb5f8051602061519d83398151915282612972565b50612ce35f8051602061515d83398151915282612972565b50612cfb5f8051602061515d8339815191528061393b565b612d1f5f8051602061511d8339815191525f8051602061515d83398151915261393b565b61296f5f8051602061519d8339815191525f8051602061511d83398151915261393b565b612d4b6138f2565b612d55828261399b565b612d5d6139ad565b5050600180546001600160a01b039092166001600160a01b0319909216919091178155426002818155604080518082019091529182525f602083018181526006805480870182559252925191027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019190915590517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910155600755565b6001600160a01b038216612e265760405163ec442f0560e01b81525f60048201526024016128f1565b610c6e5f8383613672565b612e39613f99565b60405163133f757160e31b815282600482015261018082602483875afa905080612e61575f80fd5b508161018082015292915050565b6001600755612e7c6139b5565b600754600214610b3b5760405163baf3f0f760e01b815260040160405180910390fd5b5f610c908383613a2a565b60605f610c9083613a50565b5f610941825490565b5f838302815f1985870982811083820303915050805f03612ef357838281612ee957612ee9614f8d565b0492505050610c90565b808411612f0a57612f0a6003851502601118613aa9565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f612fa2612f8283613aba565b8015612f9d57505f8480612f9857612f98614f8d565b868809115b151590565b612fad868686612ebf565b612fb79190614868565b95945050505050565b5f805f8360020b12612fd5578260020b612fdc565b8260020b5f035b9050620d89e8811115613002576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f0361301757600160801b613029565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561305d576ffff97272373d413259a46990580e213a0260801c5b600482161561307c576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561309b576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156130ba576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156130d9576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156130f8576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613117576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613137576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613157576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613177576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613197576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156131b7576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156131d7576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156131f7576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613217576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613238576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613258576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613277576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613294576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156132b357805f19816132af576132af614f8d565b0490505b6401000000008106156132c75760016132c9565b5f5b60ff16602082901c0192505050919050565b5f828218828411028218610c90565b5f815f036132fc576132fc6012613aa9565b81600184038161330e5761330e614f8d565b04600101831515029392505050565b5f8033881561337557600a5461333e906001600160a01b031682308c613ae6565b600a54613375906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008b613b1f565b87156133ca57600b54613393906001600160a01b031682308b613ae6565b600b546133ca906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008a613b1f565b5f5b8551811015613531578581815181106133e7576133e7614e08565b602002602001015160a001516001600160801b03165f0315613529575f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9d2b5b46008548960800151868151811061344d5761344d614e08565b60200260200101518d878151811061346757613467614e08565b60200260200101518d888151811061348157613481614e08565b60209081029190910101516040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201525f6084820181905260a482015260c40160408051808303815f875af11580156134e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135099190614f6b565b90925090506135188287614868565b95506135248186614868565b945050505b6001016133cc565b5088831461355a5761355a81613547858c614f38565b600a546001600160a01b03169190613893565b878214613582576135828161356f848b614f38565b600b546001600160a01b03169190613893565b50965096945050505050565b5f8051602061513d8339815191526001600160a01b0385166135c55760405163e602df0560e01b81525f60048201526024016128f1565b6001600160a01b0384166135ee57604051634a1406b160e11b81525f60048201526024016128f1565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561366b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161366291815260200190565b60405180910390a35b5050505050565b61367a612e6f565b6001600160a01b038316156136925761369283613837565b6001600160a01b038216156136aa576136aa82613837565b610d3b838383613ba6565b6136bf82826116a0565b610c6e5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016128f1565b5f5f805160206151bd83398151915261370784846116a0565b613786575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561373c3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610941565b5f915050610941565b5092915050565b5f610c90836001600160a01b038416613cdf565b5f5f805160206151bd8339815191526137c384846116a0565b15613786575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610941565b5f610c90836001600160a01b038416613d2b565b5f61384182611d1d565b6001600160a01b0383165f90815260036020526040902042905590508015610c6e576001600160a01b0382165f908152600460205260408120805483929061388a908490614868565b90915550505050565b6040516001600160a01b03838116602483015260448201839052610d3b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613e05565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b3b57604051631afcd79f60e31b815260040160405180910390fd5b5f805160206151bd8339815191525f61395384610c97565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6139a36138f2565b610c6e8282613e71565b610b3b6138f2565b60085460405163b18486d760e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b18486d7906024015f604051808303815f87803b158015613a18575f80fd5b505af1158015610aab573d5f803e3d5ffd5b5f825f018281548110613a3f57613a3f614e08565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015613a9d57602002820191905f5260205f20905b815481526020019060010190808311613a89575b50505050509050919050565b634e487b715f52806020526024601cfd5b5f6002826003811115613acf57613acf6148f4565b613ad99190614fa1565b60ff166001149050919050565b6040516001600160a01b038481166024830152838116604483015260648201839052610aab9186918216906323b872dd906084016138c0565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015613b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b909190614fce565b9050610aab8484613ba18585614868565b613ec1565b5f8051602061513d8339815191526001600160a01b038416613be05781816002015f828254613bd59190614868565b90915550613c509050565b6001600160a01b0384165f9081526020829052604090205482811015613c325760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016128f1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316613c6e576002810180548390039055613c8c565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cd191815260200190565b60405180910390a350505050565b5f818152600183016020526040812054613d2457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610941565b505f610941565b5f8181526001830160205260408120548015613786575f613d4d600183614f38565b85549091505f90613d6090600190614f38565b9050808214613dbf575f865f018281548110613d7e57613d7e614e08565b905f5260205f200154905080875f018481548110613d9e57613d9e614e08565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613dd057613dd0614fe5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610941565b5f8060205f8451602086015f885af180613e24576040513d5f823e3d81fd5b50505f513d91508115613e3b578060011415613e48565b6001600160a01b0384163b155b15610aab57604051635274afe760e01b81526001600160a01b03851660048201526024016128f1565b613e796138f2565b5f8051602061513d8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03613eb2848261503d565b5060048101610aab838261503d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613f128482613f50565b610aab576040516001600160a01b0384811660248301525f6044830152613f4691869182169063095ea7b3906064016138c0565b610aab8482613e05565b5f805f8060205f8651602088015f8a5af192503d91505f519050828015613f8f57508115613f815780600114613f8f565b5f866001600160a01b03163b115b9695505050505050565b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b6001600160a01b038116811461296f575f80fd5b5f6020828403121561405c575f80fd5b8135610c9081614038565b5f60208284031215614077575f80fd5b81356001600160e01b031981168114610c90575f80fd5b5f5b838110156140a8578181015183820152602001614090565b50505f910152565b5f81518084526140c781602086016020860161408e565b601f01601f19169290920160200192915050565b602081525f610c9060208301846140b0565b5f80604083850312156140fe575f80fd5b823561410981614038565b946020939093013593505050565b63ffffffff8116811461296f575f80fd5b5f60408284031215612c7f575f80fd5b5f60a08284031215612c7f575f80fd5b5f60608284031215612c7f575f80fd5b5f805f80610160858703121561416c575f80fd5b843561417781614117565b93506141868660208701614128565b92506141958660608701614138565b91506141a5866101008701614148565b905092959194509250565b5f602082840312156141c0575f80fd5b5035919050565b5f604082840312156141d7575f80fd5b610c908383614128565b5f805f606084860312156141f3575f80fd5b83356141fe81614038565b9250602084013561420e81614038565b929592945050506040919091013590565b5f8060408385031215614230575f80fd5b82359150602083013561424281614038565b809150509250929050565b5f805f805f60a08688031215614261575f80fd5b853594506020860135935060408601359250606086013561428181614038565b949793965091946080013592915050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156142c8576142c8614292565b60405290565b60405160a081016001600160401b03811182821017156142c8576142c8614292565b60405161010081016001600160401b03811182821017156142c8576142c8614292565b604080519081016001600160401b03811182821017156142c8576142c8614292565b604051601f8201601f191681016001600160401b038111828210171561435d5761435d614292565b604052919050565b5f6001600160401b0382111561437d5761437d614292565b50601f01601f191660200190565b5f82601f83011261439a575f80fd5b81356143ad6143a882614365565b614335565b8181528460208386010111156143c1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156143f0575f80fd5b84356143fb81614117565b935060208501356001600160401b0380821115614416575f80fd5b6144228883890161438b565b94506040870135915080821115614437575f80fd5b6144438883890161438b565b93506060870135915080821115614458575f80fd5b506144658782880161438b565b91505092959194509250565b5f805f805f805f60e0888a031215614487575f80fd5b87359650602088013595506040880135945060608801356144a781614038565b935060808801356144b781614038565b925060a08801356001600160401b03808211156144d2575f80fd5b6144de8b838c0161438b565b935060c08a01359150808211156144f3575f80fd5b506145008a828b0161438b565b91505092959891949750929550565b602080825282518282018190525f919060409081850190868401855b8281101561461557815180516bffffffffffffffffffffffff168552868101516001600160a01b03908116888701528682015181168787015260608083015190911690860152608080820151600281900b82880152505060a0808201516145968288018260020b9052565b505060c0808201516145ac8288018260020b9052565b505060e0818101516001600160801b03908116918701919091526101008083015190870152610120808301519087015261014080830151821690870152610160808301519091169086015261018090810151908501526101a0909301929085019060010161452b565b5091979650505050505050565b5f8060408385031215614633575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156146825783516001600160a01b03168352928401929184019160010161465d565b50909695505050505050565b5f60a0828403121561469e575f80fd5b610c908383614138565b5f602082840312156146b8575f80fd5b8135610c9081614117565b5f606082840312156146d3575f80fd5b610c908383614148565b62ffffff8116811461296f575f80fd5b8060020b811461296f575f80fd5b6001600160801b038116811461296f575f80fd5b803561166e81614038565b5f805f8084860361012081121561472f575f80fd5b853594506020860135935060c0603f198201121561474b575f80fd5b506147546142a6565b604086013561476281614038565b8152606086013561477281614038565b60208201526080860135614785816146dd565b604082015260a0860135614798816146ed565b606082015260c08601356147ab816146ed565b608082015260e08601356147be816146fb565b60a082015291506141a5610100860161470f565b5f80604083850312156147e3575f80fd5b82356147ee81614038565b9150602083013561424281614038565b5f60a0828403121561480e575f80fd5b6148166142ce565b823581526020830135602082015260408301356040820152606083013561483c81614038565b60608201526080928301359281019290925250919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561094157610941614854565b600181811c9082168061488f57607f821691505b602082108103612c7f57634e487b7160e01b5f52602260045260245ffd5b6040810182356148bc81614038565b6001600160a01b0390811683526020840135906148d882614038565b8082166020850152505092915050565b6005811061296f575f80fd5b634e487b7160e01b5f52602160045260245ffd5b6005811061492457634e487b7160e01b5f52602160045260245ffd5b9052565b60a081018235614937816148e8565b6149418382614908565b506020830135614950816146ed565b60020b60208301526040830135614966816146ed565b60020b6040830152606083013561497c816146ed565b8060020b6060840152506080830135608083015292915050565b61ffff8116811461296f575f80fd5b6060810182356149b481614996565b61ffff16825260208301356149c881614117565b63ffffffff16602083015260408301356149e1816146ed565b8060020b60408401525092915050565b805161166e81614117565b805161166e816146dd565b805161166e81614038565b5f82601f830112614a21575f80fd5b815160206001600160401b03821115614a3c57614a3c614292565b8160051b614a4b828201614335565b9283528481018201928281019087851115614a64575f80fd5b83870192505b84831015611e1357825182529183019190830190614a6a565b5f82601f830112614a92575f80fd5b8151614aa06143a882614365565b818152846020838601011115614ab4575f80fd5b61169882602083016020870161408e565b5f60208284031215614ad5575f80fd5b81516001600160401b0380821115614aeb575f80fd5b908301906101008286031215614aff575f80fd5b614b076142f0565b614b10836149f1565b8152614b1e602084016149fc565b6020820152614b2f60408401614a07565b6040820152614b4060608401614a07565b6060820152608083015182811115614b56575f80fd5b614b6287828601614a12565b60808301525060a083015182811115614b79575f80fd5b614b8587828601614a83565b60a08301525060c083015182811115614b9c575f80fd5b614ba887828601614a83565b60c08301525060e083015182811115614bbf575f80fd5b614bcb87828601614a83565b60e08301525095945050505050565b85815263ffffffff8516602082015260a060408201525f614bfe60a08301866140b0565b8281036060840152614c1081866140b0565b90508281036080840152614c2481856140b0565b98975050505050505050565b5f60408284031215614c40575f80fd5b614c48614313565b8251614c5381614038565b81526020830151614c6381614038565b60208201529392505050565b5f60a08284031215614c7f575f80fd5b614c876142ce565b8251614c92816148e8565b81526020830151614ca2816146ed565b60208201526040830151614cb5816146ed565b60408201526060830151614cc8816146ed565b60608201526080928301519281019290925250919050565b5f60608284031215614cf0575f80fd5b604051606081018181106001600160401b0382111715614d1257614d12614292565b6040528251614d2081614996565b81526020830151614d3081614117565b60208201526040830151614d43816146ed565b60408201529392505050565b63ffffffff8516815283516001600160a01b039081166020808401919091528501511660408201528251610160820190614d8d906060840190614908565b602084015160020b6080830152604084015160020b60a0830152606084015160020b60c0830152608084015160e0830152612fb7610100830184805161ffff16825260208082015163ffffffff169083015260409081015160020b910152565b5f60208284031215614dfd575f80fd5b8151610c9081614038565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614e2c575f80fd5b81516001600160401b03811115614e41575f80fd5b61169884828501614a83565b5f60408284031215614e5d575f80fd5b614e65614313565b8251614e7081614038565b81526020830151614c6381614117565b5f8060408385031215614e91575f80fd5b8251614e9c81614038565b6020840151909250614242816146ed565b5f60c08284031215614ebd575f80fd5b614ec56142a6565b8251614ed081614038565b81526020830151614ee081614038565b60208201526040830151614ef3816146dd565b60408201526060830151614f06816146ed565b60608201526080830151614f19816146ed565b608082015260a0830151614f2c816146fb565b60a08201529392505050565b8181038181111561094157610941614854565b6001600160801b0382811682821603908082111561378f5761378f614854565b5f8060408385031215614f7c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680614fbf57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f60208284031215614fde575f80fd5b5051919050565b634e487b7160e01b5f52603160045260245ffd5b601f821115610d3b57805f5260205f20601f840160051c8101602085101561501e5750805b601f840160051c820191505b8181101561366b575f815560010161502a565b81516001600160401b0381111561505657615056614292565b61506a81615064845461487b565b84614ff9565b602080601f83116001811461509d575f84156150865750858301515b5f19600386901b1c1916600185901b1785556150f4565b5f85815260208120601f198616915b828110156150cb578886015182559484019460019091019084016150ac565b50858210156150e857878501515f19600388901b60f8161c191681555b505060018460011b0185555b50505050505056fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000c171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d752c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d852c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0246a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212205463657b37359f7dfd780ee6f5c39c288735c3928b4b761b0bf03e74037208c564736f6c634300081900330000000000000000000000000000000ce42d4981513060ab7e50b9e5e2d19af1