0 txs
1 call
constructor
No constructor.
functions
balancer2Vault
viewfunction balancer2Vault() view returns (address)
decodePath
purefunction decodePath(bytes path) pure returns (uint8 protocol, bytes rawPath)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
encodeTokenPair
purefunction encodeTokenPair(address tokenIn, address tokenOut) pure returns (bytes32)
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)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
listSwapPath
viewfunction listSwapPath(address tokenIn, address tokenOut, uint256 begin, uint256 end) view returns (bytes[] ret)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
susdc
viewfunction susdc() view returns (address)
uniswap3Quoter
viewfunction uniswap3Quoter() view returns (address)
uniswap3Router
viewfunction uniswap3Router() view returns (address)
usdc
viewfunction usdc() view returns (address)
weth
viewfunction weth() view returns (address)
appendSwapPath
nonpayablefunction appendSwapPath(address tokenIn, address tokenOut, bytes path)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address weth_)
quote
nonpayablefunction quote(address tokenIn, address tokenOut, uint256 amountIn) returns (bool quoteSuccess, uint256 bestPathIndex, bytes bestPath, uint256 bestOutAmount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBalancer2
nonpayablefunction setBalancer2(address balancer2Vault_)
setSUSDC
nonpayablefunction setSUSDC(address susdc_, address usdc_)
setSwapPath
nonpayablefunction setSwapPath(address tokenIn, address tokenOut, bytes[] paths)
setUniswap3
nonpayablefunction setUniswap3(address uniswap3Router_, address uniswap3Quoter_)
swapAndTransfer
nonpayablefunction swapAndTransfer(address tokenIn, uint256 amountIn, address tokenOut, uint256 minAmountOut, address receiver, bool isUnwrapWeth) returns (bool, uint256)
events
AppendSwapPath
event AppendSwapPath(address tokenIn, address tokenOut, bytes path)
Balancer2Call
event Balancer2Call(address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut)
BrokenBalancer2Path
event BrokenBalancer2Path(bytes path, uint256 amountIn)
BrokenUniswap3Path
event BrokenUniswap3Path(bytes path, uint256 amountIn)
Initialized
event Initialized(uint8 version)
MissingSwapPath
event MissingSwapPath(address tokenIn, address tokenOut)
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)
SetBalancer2
event SetBalancer2(address balancer2Vault)
SetSUSDC
event SetSUSDC(address susdc, address usdc)
SetSwapPath
event SetSwapPath(address tokenIn, address tokenOut, bytes[] paths)
SetUniswap3
event SetUniswap3(address uniswap3Router, address uniswap3Quoter)
SwapFailed
event SwapFailed(address tokenIn, uint256 amountIn, address tokenOut, uint256 minAmountOut, bool quoteSuccess, uint256 quoteBestOutAmount, bool swapSuccess, uint256 swapAmountOut)
SwapSuccess
event SwapSuccess(address tokenIn, uint256 amountIn, address tokenOut, uint256 amountOut)
TransferOut
event TransferOut(address token, uint256 amount, bool isUnwrapped)
Uniswap3Call
event Uniswap3Call(address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut)
errors
AllocationLengthMismatch
error AllocationLengthMismatch(uint256 len1, uint256 len2)
AllocationPositionMismatch
error AllocationPositionMismatch(uint256 positionSize1, uint256 positionSize2)
ArrayAppendFailed
error ArrayAppendFailed()
BadAllocation
error BadAllocation(int256 maxX, int256 xi)
CapacityExceeded
error CapacityExceeded(uint256 capacity, uint256 old, uint256 appending)
CollateralAlreadyExist
error CollateralAlreadyExist(address tokenAddress)
CollateralNotExist
error CollateralNotExist(address tokenAddress)
CreateProxyFailed
error CreateProxyFailed()
DuplicatedAddress
error DuplicatedAddress(address pool)
EssentialConfigNotSet
error EssentialConfigNotSet(string key)
IdMismatch
error IdMismatch(bytes32 id, bytes32 expectedId)
InitialLeverageOutOfRange
error InitialLeverageOutOfRange(uint256 leverage, uint256 leverageLimit)
InsufficientCollateral
error InsufficientCollateral(uint256 required, uint256 remain)
InsufficientCollateralBalance
error InsufficientCollateralBalance(address collateralToken, uint256 balance, uint256 requiredAmount)
InsufficientCollateralUsd
error InsufficientCollateralUsd(uint256 requiredUsd, uint256 remainUsd)
InsufficientLiquidity
error InsufficientLiquidity(uint256 requiredLiquidity, uint256 liquidityBalance)
InvalidAddress
error InvalidAddress(address addr)
InvalidAmount
error InvalidAmount(string key)
InvalidArrayLength
error InvalidArrayLength(uint256 a, uint256 b)
InvalidCloseSize
error InvalidCloseSize(uint256 closingSize, uint256 positionSize)
InvalidDecimals
error InvalidDecimals(uint256 decimals)
InvalidId
error InvalidId(string key)
InvalidLotSize
error InvalidLotSize(uint256 positionSize, uint256 lotSize)
InvalidMarketId
error InvalidMarketId(bytes32 marketId)
InvalidPrice
error InvalidPrice(uint256 price)
InvalidPriceExpiration
error InvalidPriceExpiration(uint256 expiration)
InvalidPriceTimestamp
error InvalidPriceTimestamp(uint256 timestamp)
InvalidSequence
error InvalidSequence(uint256 sequence, uint256 expectedSequence)
InvalidSinger
error InvalidSinger(address signer)
LimitPriceNotMet
error LimitPriceNotMet(uint256 expected, uint256 actual)
MarketAlreadyExist
error MarketAlreadyExist(bytes32 marketId)
MarketFull
error MarketFull()
MarketNotExists
error MarketNotExists(bytes32 marketId)
MarketTradeDisabled
error MarketTradeDisabled(bytes32 marketId)
MissingPrice
error MissingPrice(bytes32 oracleId)
MissingSignature
error MissingSignature()
NotOwner
error NotOwner(bytes32 positionId, address caller, address owner)
OnlySingleMarketPositionAllowed
error OnlySingleMarketPositionAllowed(bytes32 positionId)
OutOfBound
error OutOfBound(uint256 index, uint256 length)
PoolAlreadyExist
error PoolAlreadyExist(address pool)
PoolBankrupt
error PoolBankrupt()
PoolNotExists
error PoolNotExists(address pool)
PositionAccountAlreadyExist
error PositionAccountAlreadyExist(bytes32 positionId)
PositionAccountNotExist
error PositionAccountNotExist(bytes32 positionId)
PositionNotClosed
error PositionNotClosed(bytes32 positionId)
PriceExpired
error PriceExpired(uint256 timestamp, uint256 blockTimestamp)
SafePositionAccount
error SafePositionAccount(bytes32 positionId, uint256 safeType)
UnauthorizedAgent
error UnauthorizedAgent(address account, bytes32 positionId)
UnauthorizedCaller
error UnauthorizedCaller(address caller)
UnauthorizedRole
error UnauthorizedRole(bytes32 requiredRole, address caller)
UnexpectedState
error UnexpectedState(uint256 expected, uint256 actual)
UnmatchedDecimals
error UnmatchedDecimals(uint256 decimals, uint256 expectDecimals)
UnsafePositionAccount
error UnsafePositionAccount(bytes32 positionId, uint256 safeType)
creation bytecode
0x60808060405234601557614033908161001a8239f35b5f80fdfe60806040526004361015610022575b3615610018575f80fd5b610020611c45565b005b5f3560e01c806301ffc9a7146101c15780630841f8e2146101bc578063248a9ca3146101b757806326d1aece146101b25780632d8daaec146101ad5780632ebcb4bd146101a85780632f2ff15d146101a357806332b23a3d1461019e57806336568abe146101995780633669d9d1146101945780633e413bee1461018f5780633fc8cef31461018a57806349488b7a146101855780637129545e14610180578063766845eb1461017b5780639010d07c1461017657806390139c64146101715780639154721c1461016c57806391d1485414610167578063a217fddf14610162578063b64663841461015d578063c25ddce014610158578063c4d66de814610153578063ca15c8731461014e578063d547741f146101495763d788d8940361000e57610e62565b610e21565b610df7565b610d00565b610ca2565b610c1f565b610c05565b610bb3565b610af1565b6109bf565b61097a565b61084c565b610824565b6107c2565b610790565b610768565b610714565b610602565b6105e9565b6104d6565b6104ae565b6103b5565b61029a565b610267565b61023f565b346102315760203660031901126102315760043563ffffffff60e01b811680910361023157602090635a05180f60e01b8114908115610206575b506040519015158152f35b637965db0b60e01b811491508115610220575b505f6101fb565b6301ffc9a760e01b1490505f610219565b5f80fd5b5f91031261023157565b34610231575f3660031901126102315760ce546040516001600160a01b039091168152602090f35b346102315760203660031901126102315760206102926004355f526065602052600160405f20015490565b604051908152f35b34610231575f3660031901126102315760cb546040516001600160a01b039091168152602090f35b6001600160a01b0381160361023157565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b0382111761030257604052565b6102d3565b604081019081106001600160401b0382111761030257604052565b90601f801991011681019081106001600160401b0382111761030257604052565b6040519061035260a083610322565b565b6001600160401b03811161030257601f01601f191660200190565b81601f820112156102315780359061038682610354565b926103946040519485610322565b8284526020838301011161023157815f926020809301838601378301015290565b34610231576060366003190112610231576004356103d2816102c2565b6024356103de816102c2565b6044356001600160401b038111610231576103fd90369060040161036f565b91610406611c9e565b610411838383611db7565b61041b82826110e1565b5f5260cd60205260405f208054600160401b8110156103025761044391600182018155610f3f565b6104a957836104767f3097f321aee198ff6d0e058596579fe539c08d4e3afcaf68a1404c969067265d956104a49361101a565b60405193849360018060a01b0316845260018060a01b03166020840152606060408401526060830190610698565b0390a1005b610f59565b34610231575f3660031901126102315760ca546040516001600160a01b039091168152602090f35b34610231576040366003190112610231576100206024356105526004356104fc836102c2565b61051a610515825f526065602052600160405f20015490565b611d74565b5f8181526065602090815260408083206001600160a01b038716845290915290205460ff1615610557575f52609760205260405f2090565b612c3b565b5f8181526065602090815260408083206001600160a01b03871684529091529020805460ff19166001179055336001600160a01b038416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a45f52609760205260405f2090565b6040906003190112610231576004356105d9816102c2565b906024356105e6816102c2565b90565b346102315760206102926105fc366105c1565b906110e1565b3461023157604036600319011261023157600435602435610622816102c2565b336001600160a01b0382160361063b5761002091611e29565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9080602083519182815201916020808360051b8301019401925f915b8383106106e757505050505090565b9091929394602080610705600193601f198682030187528951610698565b970193019301919392906106d8565b3461023157608036600319011261023157610764610750600435610737816102c2565b602435610743816102c2565b6044359060643592611269565b6040519182916020835260208301906106bc565b0390f35b34610231575f3660031901126102315760d0546040516001600160a01b039091168152602090f35b34610231575f3660031901126102315760c9546040516001600160a01b039091168152602090f35b8015150361023157565b346102315760c03660031901126102315760406108166004356107e4816102c2565b6024356044356107f3816102c2565b6064359060843592610804846102c2565b60a43594610811866107b8565b6113e4565b825191151582526020820152f35b34610231575f3660031901126102315760cf546040516001600160a01b039091168152602090f35b346102315761085a366105c1565b610862611c9e565b6001600160a01b038216916108788315156116e5565b6001600160a01b0382169260049060209061089486151561172a565b6040516338d52e0f60e01b815292839182905afa938415610975577fc401efbb98e3268f2a910a543b7c2e68cbb885da56191265b96a8354aba0b49a946108ec925f91610946575b506001600160a01b031614611783565b60cf80546001600160a01b0319166001600160a01b03831617905560d080546001600160a01b0319166001600160a01b0384161790555b604080516001600160a01b039283168152929091166020830152819081016104a4565b610968915060203d60201161096e575b6109608183610322565b81019061176e565b5f6108dc565b503d610956565b61138d565b346102315760403660031901126102315760206109a6600435602435905f526097835260405f20610f3f565b905460405160039290921b1c6001600160a01b03168152f35b34610231576109cd366105c1565b6109d5611c9e565b6001600160a01b03821615610a95576001600160a01b03811615610a505760ca80546001600160a01b0319166001600160a01b0384161790557f82d389d9c9f0e18d7dffb4215751567ba66771802406cebff3d98d9a3ef6d4fd9160cb80546001600160a01b0319166001600160a01b038416179055610923565b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a494e56414c49445f554e49535741505f51554f544552006044820152606490fd5b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a494e56414c49445f554e49535741505f524f55544552006044820152606490fd5b6001600160401b0381116103025760051b60200190565b3461023157606036600319011261023157600435610b0e816102c2565b602435610b1a816102c2565b604435906001600160401b038211610231573660238301121561023157816004013592610b4684610ada565b92610b546040519485610322565b8484526024602085019560051b820101903682116102315760248101955b828710610b84576100208686866117cf565b86356001600160401b03811161023157602091610ba883926024369187010161036f565b815201960195610b72565b3461023157604036600319011261023157602060ff610bf9602435600435610bda826102c2565b5f526065845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b34610231575f3660031901126102315760206040515f8152f35b3461023157606036600319011261023157610c7a610c57600435610c42816102c2565b602435610c4e816102c2565b604435916123cc565b919390604051948594151585526020850152608060408501526080840190610698565b9060608301520390f35b60021115610c8e57565b634e487b7160e01b5f52602160045260245ffd5b34610231576020366003190112610231576004356001600160401b03811161023157610cd5610cda91369060040161036f565b6119c6565b906107646040519282610ced8594610c84565b8352604060208401526040830190610698565b3461023157602036600319011261023157600435610d1d816102c2565b610d6b5f5491610d51610d3b610d378560ff9060081c1690565b1590565b80948195610de9575b8115610dc9575b50611a8b565b82610d62600160ff195f5416175f55565b610db257611aee565b610d7157005b610d7f61ff00195f54165f55565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989080602081016104a4565b610dc461010061ff00195f5416175f55565b611aee565b303b15915081610ddb575b505f610d4b565b60ff1660011490505f610dd4565b600160ff8216109150610d44565b34610231576020366003190112610231576004355f526097602052602060405f2054604051908152f35b3461023157604036600319011261023157610020602435600435610e44826102c2565b610e5d610515825f526065602052600160405f20015490565b611e29565b3461023157602036600319011261023157600435610e7f816102c2565b610e87611c9e565b6001600160a01b0381168015610ee65760ce80546001600160a01b03191690911790556040516001600160a01b0390911681527f448813560b0cba5fbba10c59aeb7ad82bf10e74f2911b1ba93a4223fe46814209080602081016104a4565b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a494e56414c49445f42414c414e4345525f5641554c54006044820152606490fd5b634e487b7160e01b5f52603260045260245ffd5b8054821015610f54575f5260205f2001905f90565b610f2b565b634e487b7160e01b5f525f60045260245ffd5b90600182811c92168015610f9a575b6020831014610f8657565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610f7b565b91610fbd9183549060031b91821b915f19901b19161790565b9055565b818110610fcc575050565b5f8155600101610fc1565b9190601f8111610fe657505050565b610352925f5260205f20906020601f840160051c83019310611010575b601f0160051c0190610fc1565b9091508190611003565b91909182516001600160401b038111610302576110418161103b8454610f6c565b84610fd7565b6020601f821160011461107c578190610fbd9394955f92611071575b50508160011b915f199060031b1c19161790565b015190505f8061105d565b601f1982169061108f845f5260205f2090565b915f5b8181106110c9575095836001959697106110b1575b505050811b019055565b01515f1960f88460031b161c191690555f80806110a7565b9192602060018192868b015181550194019201611092565b906040519060208201926bffffffffffffffffffffffff199060601b1683526bffffffffffffffffffffffff199060601b16603482015260288152611127604882610322565b51902090565b9061113782610ada565b6111446040519182610322565b8281528092611155601f1991610ada565b01905f5b82811061116557505050565b806060602080938501015201611159565b634e487b7160e01b5f52601160045260245ffd5b5f1981019190821161119857565b611176565b9190820391821161119857565b805115610f545760200190565b8051821015610f545760209160051b010190565b9060405191825f8254926111de84610f6c565b80845293600181169081156112475750600114611203575b5061035292500383610322565b90505f9291925260205f20905f915b81831061122b575050906020610352928201015f6111f6565b6020919350806001915483858901015201910190918492611212565b90506020925061035294915060ff191682840152151560051b8201015f6111f6565b606094939291611278916110e1565b5f5260cd60205260405f20938454908183101561130057508083116112f8575b50808203828111611198576112ac9061112d565b93815b8381106112bc5750505050565b806112f16112cc60019385610f3f565b506112e06112da878561119d565b916111cb565b6112ea828b6111b7565b52886111b7565b50016112af565b91505f611298565b93945050505060405190611315602083610322565b5f82525f90815b8281106113295750505090565b808260208093870101520161131c565b1561134057565b60405162461bcd60e51b815260206004820152601660248201527529bbb0b83832b91d1d24a72b20a624a22faa27a5a2a760511b6044820152606490fd5b90816020910312610231575190565b6040513d5f823e3d90fd5b1561139f57565b60405162461bcd60e51b815260206004820152601a60248201527f537761707065723a3a494e56414c49445f544f4b454e5f4f55540000000000006044820152606490fd5b9091949295935f965f9660018060a01b03841691821515806116d3575b61140a90611339565b6001600160a01b038216908382146116be578690808488611429611fd2565b806116a1575b611683575b849061143e611fd2565b80611666575b6115de575b61145394506120da565b948592911561157b575050611466611fd2565b80611556575b611544575b506040516370a0823160e01b815230600482015290602090829060249082905afa938415610975577f80044f7893845e3883418a4d784224b0d2d9606ca5f19c2a910401c2c62761b5976114d685611510976114dd955f91611515575b501015611398565b8484611ec2565b604080516001600160a01b0395861681526020810196909652931692840192909252606083019190915281906080820190565b0390a1565b611537915060203d60201161153d575b61152f8183610322565b81019061137e565b5f6114ce565b503d611525565b61154f919350612317565b915f611471565b5060cf54611574906001600160a01b03165b6001600160a01b031690565b821461146c565b9350935050508498506115aa9697506115979594939295611fd2565b90816115bf575b506115af575b50611ec2565b5f9190565b6115b890612317565b505f6115a4565b60cf549091506115d7906001600160a01b0316611568565b145f61159e565b60d05460cf54611628969295506001600160a01b0391821694506020935061160891611568911681565b60405180809781946303d1689d60e11b8352600483019190602083019252565b03915afa928315610975576114539385915f91611647575b5092611449565b611660915060203d60201161153d5761152f8183610322565b5f611640565b5060cf5461167c906001600160a01b0316611568565b8714611444565b5060d0546001600160a01b0316935061169b8a611ffa565b93611434565b5060cf546116b7906001600160a01b0316611568565b881461142f565b50505050929195506115aa9394508590611ec2565b506001600160a01b0382161515611401565b156116ec57565b60405162461bcd60e51b8152602060048201526016602482015275537761707065723a3a494e56414c49445f535553444360501b6044820152606490fd5b1561173157565b60405162461bcd60e51b8152602060048201526015602482015274537761707065723a3a494e56414c49445f5553444360581b6044820152606490fd5b9081602091031261023157516105e6816102c2565b1561178a57565b60405162461bcd60e51b815260206004820152601760248201527f537761707065723a3a41535345545f4d49534d415443480000000000000000006044820152606490fd5b92916117d9611c9e565b5f5b815181101561180257806117fc6117f4600193856111b7565b518588611db7565b016117db565b509261180e82826110e1565b5f5260cd60205260405f20845190600160401b82116103025780548282558083106118a3575b5061184660208701915f5260205f2090565b5f915b83831061188657505050506115107f381bc307b77f9c96f51a2553aa36886cecd7f3273eaf359a6e3c8494f936d075939460405193849384611938565b60016020826118978394518661101a565b01920192019190611849565b815f528260205f2091820191015b8181106118be5750611834565b806118cb60019254610f6c565b806118d8575b50016118b1565b601f811183146118ed57505f81555b5f6118d1565b61190f9083601f611901855f5260205f2090565b920160051c82019101610fc1565b5f81815260208120818355556118e7565b600181901b91906001600160ff1b0381160361119857565b6001600160a01b039182168152911660208201526060604082018190526105e6929101906106bc565b1561196857565b60405162461bcd60e51b81526020600482015260156024820152740a6eec2e0e0cae47474929cac82989288bea082a89605b1b6044820152606490fd5b805160011015610f545760210190565b908151811015610f54570160200190565b906119d5600183511015611961565b815115610f5457602082015160f81c6119ed81610c84565b9180515f19810181811161119857611a0f81611a088161278b565b10156127c2565b611a268351611a1f8360016127b5565b11156127ff565b80611a3e575050506040515f81526020810160405290565b604051926001601f8316801560051b908181880101955f199087010193010101905b808410611a785750508252601f01601f191660405290565b9092602080918551815201930190611a60565b15611a9257565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b60ff5f5460081c1615611bec5760c980546001600160a01b0319166001600160a01b0392909216919091179055335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b6020526040902060ff90541615611b88575b5f80526097602052611b85337f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7612c3b565b50565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b60205260409020805460ff1916600117905533805f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4611b53565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b60c9546001600160a01b03163303611c5957565b60405162461bcd60e51b815260206004820152601760248201527f537761707065723a3a494e56414c49445f53454e4445520000000000000000006044820152606490fd5b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff1615611cd657565b611d70611d2c611d58611ce833613676565b611d4a611cf45f613710565b60116040519586946017602087017f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152019061283f565b7001034b99036b4b9b9b4b733903937b6329607d1b8152019061283f565b03601f198101835282610322565b60405162461bcd60e51b815291829160048301612851565b0390fd5b5f81815260656020908152604080832033845290915290205460ff1615611d985750565b611d2c611d58611d7092611d4a611cf4611db133613676565b92613710565b61035292909190611dda90610cd56001600160a01b038086169085161415611961565b9190925f93611de881610c84565b80611dfd5750611df89350612bb2565b611961565b600190611e0981610c84565b14611e17575b505050611961565b611e219350612a46565b5f8080611e0f565b90611b8591805f52606560205260ff611e558360405f209060018060a01b03165f5260205260405f2090565b5416611e6c575b5f52609760205260405f20612c4e565b5f8181526065602090815260408083206001600160a01b03861680855292528220805460ff19169055339183907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4611e5c565b60c9547f9647caebd3d2f0f0496dcf8a598afcfa5d696d0b51754bcd112553572462481c9492939192849290916001600160a01b0380861692911682149081611fca575b5015611f57575060c954611f2793506001600160a01b039182169116612c9e565b60c954604080516001600160a01b0390921682526020820193909352901515918101919091528060608101611510565b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044820192909252611f9f91611f9a82606481015b03601f198101845283610322565b613a11565b604080516001600160a01b03909216825260208201929092525f918101919091528060608101611510565b90505f611f06565b60cf546001600160a01b0316151580611fe85790565b5060d0546001600160a01b0316151590565b60206120575f926120168160cf5460018060a01b031680612e4b565b60cf54604051635d043b2960e11b8152600481019290925230602483018190526044830152909384926001600160a01b039092169183919082906064820190565b03925af1908115610975575f9161206c575090565b6105e6915060203d60201161153d5761152f8183610322565b90815461209181610ada565b9261209f6040519485610322565b81845260208401905f5260205f205f915b8383106120bd5750505050565b6001602081926120cc856111cb565b8152019201920191906120b0565b92939290916001600160a01b03808216908316146122925761211561211061210283856110e1565b5f5260cd60205260405f2090565b612085565b511561224a576121268382846123cc565b92809250158015612241575b6121cb578786858761214394612f17565b9790938415612159575050505050505060019190565b604080516001600160a01b03978816815260208101899052969091169086015260608501521515608084015260a0830152151560c082015260e0810193909352917f3ecc5fe213e07d9a087d842f5558c432459df68b27f96794d49a6713ae49b3b7908061010081015b0390a15f9190565b50604080516001600160a01b03958616815260208101879052949093169284019290925260608301959095521515608082015260a08101939093525f60c0840181905260e0840152917f3ecc5fe213e07d9a087d842f5558c432459df68b27f96794d49a6713ae49b3b7908061010081016121c3565b50878310612132565b604080516001600160a01b0393841681529290911660208301529193507f529f82ccbcd30185c06d044e0a6c31210fdff68b2ed42bc4ad066c2b6a4cf10491819081016121c3565b9193918491908383106122a9575050505060019190565b604080516001600160a01b03938416815260208101859052929091169082015260608101929092525f6080830181905260a0830182905260c083015260e08201527f3ecc5fe213e07d9a087d842f5558c432459df68b27f96794d49a6713ae49b3b7908061010081016121c3565b60d05460cf545f926020926120579261233e9183916001600160a01b039081169116612e4b565b60cf546001600160a01b0316604051636e553f6560e01b815260048101929092523060248301529093849283919082906044820190565b60405190612384602083610322565b5f8252565b1561239057565b60405162461bcd60e51b815260206004820152601460248201527314ddd85c1c195c8e8e9393d7d410551217d4d15560621b6044820152606490fd5b60cf545f94936060936001600160a01b0392831693919287928392918590879083168481831480612779575b80612765575b6126c7575b6001600160a01b031698828a1490816126b4575b50806126a0575b6125d4575b50505061210261243692612110926110e1565b9461244386511515612389565b5f5b86518110156125b1575f858161246461245e858c6111b7565b516119c6565b919061246f81610c84565b8061257257505060cb5461248c93506001600160a01b0316613500565b905b60cf546001600160a01b0316888114818161255f575b508061254b575b80612544575b6124e3575b50806124da575b6124cb575b50600101612445565b985060019350915081836124c2565b508981116124bd565b60405163ef8b30f760e01b81526004810193909352909190602090829060249082906001600160a01b03165afa908115610975575f91612526575b50905f6124b6565b61253e915060203d811161153d5761152f8183610322565b5f61251e565b50816124b1565b5060d0546001600160a01b031615156124ab565b6001600160a01b0316151590505f6124a4565b8061258260019295949395610c84565b1461258f575b505061248e565b60ce546125a99450919250906001600160a01b03166133a4565b90865f612588565b5094909592508186929794506125c5575050565b6125d09294506111b7565b5191565b9098969492919a979593506125f060d05460018060a01b031690565b906001600160a01b038216036126865750612641996020989097506001600160a01b03169550612621945050505050565b604051808096819463ef8b30f760e01b8352600483019190602083019252565b03915afa918215610975575f92612665575b506001915f91612661612375565b9190565b61267f91925060203d60201161153d5761152f8183610322565b905f612653565b969950949650929491939092919061210282612110612423565b5060d0546001600160a01b0316151561241e565b6001600160a01b0316151590505f612417565b60d05460405163266d6a8360e11b81526004810186905299506001600160a01b0390811695506020908a90602490829087165afa988915610975575f99612744575b50886001600160a01b0386166001600160a01b0383161461272a5750612403565b9c5050505050505050505050506001915f91612661612375565b61275e91995060203d60201161153d5761152f8183610322565b975f612709565b5060d0546001600160a01b031615156123fe565b506001600160a01b038a1615156123f8565b90601f820180921161119857565b906002820180921161119857565b906001820180921161119857565b9190820180921161119857565b156127c957565b60405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606490fd5b1561280657565b60405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606490fd5b805191908290602001825e015f815290565b9060206105e6928181520190610698565b9080601f830112156102315781519161287a83610ada565b926128886040519485610322565b80845260208085019160051b830101918383116102315760208101915b8383106128b457505050505090565b82516001600160401b0381116102315782019060a0828703601f19011261023157604051916128e2836102e7565b6020810151835260408101516020840152606081015160408401526080810151606084015260a08101516001600160401b0381116102315760209101019086601f830112156102315781519261293784610354565b6129446040519182610322565b8481528860208686010111610231575f6020868197828098018386015e8301015260808201528152019201916128a5565b602081830312610231578051906001600160401b038211610231570160408183031261023157604051916129a883610307565b81516001600160401b03811161023157820181601f82011215610231578051906129d182610ada565b916129df6040519384610322565b80835260208084019160051b8301019184831161023157602001905b828210612a2c57505050835260208201516001600160401b03811161023157612a249201612862565b602082015290565b602080918351612a3b816102c2565b8152019101906129fb565b916001600160a01b03808416921690828214612baa5780602080612a6f93518301019101612975565b9182516002815110612ba157611568611568612a8d612a9a936111aa565b516001600160a01b031690565b03612b9457612abd611568611568612a8d8551612ab7815161118a565b906111b7565b03612b9b576020810191600183515110612b9457925f935b83518051861015612b895785612aea916111b7565b51906060820151612b7f57608082015151612b7f576020820151845180519384831015612b72576040019384511015612b6657612a8d612b2d92611568926111b7565b6001600160a01b03918216911603612b5d57612b55611568612a8d60019386519051906111b7565b940193612ad5565b50925050505f90565b50505050925050505f90565b5050505050925050505f90565b5050925050505f90565b505092505050600190565b5050505f90565b50505f90565b50505050505f90565b505050505f90565b6001600160a01b039182169116808214612b9457602b835110612b9457612bd883613793565b50506001600160a01b031603612b9b575f9160429083905b8051826111985785611198578311612c1057612c0b9061383a565b612bf0565b915050612c1e919250613793565b506001600160a01b0316919091039050612c3757600190565b5f90565b6105e6916001600160a01b0316906138cb565b6105e6916001600160a01b031690613969565b15612c695750565b634726455360e11b5f9081526001600160a01b0391909116600452602490fd5b9081602091031261023157516105e6816107b8565b612cb3826001600160a01b0381161515612c61565b8215612b94576001600160a01b031691823b1561023157604051632e1a7d4d60e01b8152600481018290525f8160248183885af1801561097557612dcc575b505f808080848661c350f1612dc457823b1561023157604051630d0e30db60e41b8152925f8460048185855af192831561097557612d6a94602094612daa575b5060405163a9059cbb60e01b81526001600160a01b0390911660048201526024810192909252909283919082905f9082906044820190565b03925af1801561097557612d7d57505f90565b612d9e9060203d602011612da3575b612d968183610322565b810190612c89565b505f90565b503d612d8c565b80612db85f612dbe93610322565b80610235565b5f612d32565b505050600190565b80612db85f612dda93610322565b5f612cf2565b15612de757565b60405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608490fd5b91909181158015612e99575b61035293612e67611f9a92612de0565b60405163095ea7b360e01b60208201526001600160a01b03909116602482015260448101939093528260648101611f8c565b50604051636eb1769f60e11b81523060048201526001600160a01b038416602482015292602084806044810103816001600160a01b0386165afa90811561097557612e67611f9a92610352965f91612ef8575b50159250509350612e57565b612f11915060203d60201161153d5761152f8183610322565b5f612eec565b94939291905f95612f285f916119c6565b9190612f3381610c84565b80612f5657505060ca54959650612f52956001600160a01b0316613c7f565b9091565b80612f6960019299989694959399610c84565b14612f76575b5050505050565b919395509193955060018060a01b0360ce5416935f945f612fac8196612f9d841515613157565b60208082518301019101612975565b926020840192896060612fbf86516111aa565b510152612fd68a826001600160a01b038916613dff565b612fde6131a3565b308152936020850184905230604086015283606086015261301c613017613006885151613af9565b948d613011876111aa565b52613eef565b613b21565b61302f613029855161118a565b856111b7565b5251938386516130576040519788968795869463945bcec960e01b8652429360048701613b31565b03925af15f9181613133575b506130cb575b5050604080516001600160a01b0392831681529290911660208301528101939093526060830181905290917f0a17e1292f80a61862ff33ee8311a3db7012d7773ffbcdbb7cd07a629003606b9080608081015b0390a190915f80808080612f6f565b5f6130e06130da84515161118a565b836111b7565b5113613069576130bc919695507f0a17e1292f80a61862ff33ee8311a3db7012d7773ffbcdbb7cd07a629003606b945061312461312a91612ab7600199515161118a565b51613d86565b93959495613069565b6131509192503d805f833e6131488183610322565b8101906131d7565b905f613063565b1561315e57565b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a62616c616e636572325661756c74206e6f7420736574006044820152606490fd5b60405190608082018281106001600160401b03821117610302576040525f6060838281528260208201528260408201520152565b602081830312610231578051906001600160401b03821161023157019080601f8301121561023157815161320a81610ada565b926132186040519485610322565b81845260208085019260051b82010192831161023157602001905b8282106132405750505090565b8151815260209182019101613233565b9080602083519182815201916020808360051b8301019401925f915b83831061327b57505050505090565b90919293946020806132c8600193601f1986820301875260a060808b5180518452858101518685015260408101516040850152606081015160608501520151918160808201520190610698565b9701930193019193929061326c565b90602080835192838152019201905f5b8181106132f45750505090565b82516001600160a01b03168452602093840193909201916001016132e7565b93929061334e6103529361334060609361332c5f610c84565b5f895260e060208a015260e0890190613250565b9087820360408901526132d7565b9401906060809160018060a01b03815116845260208101511515602085015260018060a01b03604082015116604085015201511515910152565b92919061339f602091604086526040860190610698565b930152565b5f938493909290916001600160a01b03166133c0811515613157565b61342e5f6133d76020855186010160208601612975565b9260208401908660606133ea84516111aa565b5101526133f56131a3565b3081529160208301849052306040840152836060840152518386519160405196879586948593637c26833760e11b855260048501613313565b03925af15f91816134e4575b50613473575050907fd755ef384dfc1fa7827181c5b6b71031adb6cc4e545398168903e301d3ef5adb9161151060405192839283613388565b9394915f61348e61348884999694515161118a565b876111b7565b51136134ac57505050506131246105e691612ab7600195515161118a565b90919493507fd755ef384dfc1fa7827181c5b6b71031adb6cc4e545398168903e301d3ef5adb92955061151060405192839283613388565b6134f99192503d805f833e6131488183610322565b905f61343a565b5f938493909290916001600160a01b031680156135a8576020604051809263cdca175360e01b8252815f81613539898960048401613388565b03925af15f9181613587575b5061357d5750907f727e0443813adbd66bc376d096a44701e437169ed6ad44c8ac3fef790f9891e09161151060405192839283613388565b6001955093505050565b6135a191925060203d60201161153d5761152f8183610322565b905f613545565b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a756e69737761703351756f746572206e6f7420736574006044820152606490fd5b906135f782610354565b6136046040519182610322565b8281528092613615601f1991610354565b0190602036910137565b8015611198575f190190565b1561363257565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b6136886136836028612799565b6135ed565b906030613694836111aa565b5360786136a0836119a5565b536136b36136ae6014611920565b6127a7565b905b600182116136c8576105e691501561362b565b600f81166010811015610f545761370a91613704916f181899199a1a9b1b9c1cb0b131b232b360811b901a6136fd85876119b5565b5360041c90565b9161361f565b906136b5565b61371d6136836040612799565b906030613729836111aa565b536078613735836119a5565b536137436136ae6020611920565b905b60018211613758576105e691501561362b565b600f81166010811015610f545761378d91613704916f181899199a1a9b1b9c1cb0b131b232b360811b901a6136fd85876119b5565b90613745565b9060148251106137fd57602082015160601c9160178151106137c1576137be60178083015192613de0565b91565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606490fd5b805160161981018181116111985761385581611a088161278b565b6138658351611a1f8360176127b5565b8061387d575050506040515f81526020810160405290565b604051926017601f8316801560051b908181880101956016199087010193010101905b8084106138b85750508252601f01601f191660405290565b90926020809185518152019301906138a0565b6001810190825f528160205260405f2054155f14612b94578054600160401b8110156103025761391b613905826001879401855584610f3f565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b80548015613955575f1901906139448282610f3f565b8154905f199060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b6001810191805f528260205260405f2054928315155f14612baa575f1984018481116111985783545f19810194908511611198575f9585836139b7946139c498036139ca575b50505061392e565b905f5260205260405f2090565b55600190565b6139fa6139f4916139eb6139e1613a089588610f3f565b90549060031b1c90565b92839187610f3f565b90610fa4565b85905f5260205260405f2090565b555f80806139af565b90613a719160018060a01b03165f8060405193613a2f604086610322565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1613a6b613f3d565b91613f6c565b8051908115918215613adf575b505015613a8757565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b613af29250602080918301019101612c89565b5f80613a7e565b90613b0382610ada565b613b106040519182610322565b8281528092613615601f1991610ada565b600160ff1b8114611198575f0390565b95949391613b6d90613b5f613ba993613b495f610c84565b5f8a5261012060208b01526101208a0190613250565b9088820360408a01526132d7565b83516001600160a01b039081166060898101919091526020860151151560808a0152604086015190911660a089015290930151151560c0870152565b84820360e0860152602080825193848152019101915f5b818110613bd35750506101009150930152565b8351835260209384019390920191600101613bc0565b15613bf057565b60405162461bcd60e51b815260206004820152601f60248201527f537761707065723a3a756e697377617033526f75746572206e6f7420736574006044820152606490fd5b6020815260a06080613c52845183602086015260c0850190610698565b93600180841b03602082015116604085015260408101516060850152606081015182850152015191015290565b6020613cf35f929896939883998499613cb68760018060a01b03851694613ca7861515613be9565b6001600160a01b038b16613dff565b613cbe610343565b9182523085830152426040830152866060830152608082015260405194858094819363c04b8d5960e01b835260048301613c35565b03925af15f9181613d65575b50613d57575b50604080516001600160a01b03938416815293909216602084015290820152606081018390527fdd4173bbcbacc045fcc8ebf8734235413530120022289bf65e8eeaed8a419011908060808101611510565b600196509450611510613d05565b613d7f91925060203d60201161153d5761152f8183610322565b905f613cff565b5f8112156105e657600160ff1b8114613da2576105e690613b21565b60405162461bcd60e51b81526020600482015260166024820152754c696254797065436173743a3a554e444552464c4f5760501b6044820152606490fd5b908151601482019081831161119857106137fd57016020015160601c90565b60405163095ea7b360e01b602082019081526001600160a01b03841660248301526044808301959095529381529192613e6c90613e3d606485610322565b83516001600160a01b038416915f91829182855af190613e5b613f3d565b82613ebd575b5081613eb657501590565b613e7557505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f604484015261035292611f9a90613eb08160648101611d4a565b82613a11565b3b15919050565b80519192508115918215613ed5575b5050905f613e61565b613ee89250602080918301019101612c89565b5f80613ecc565b6001600160ff1b038111613f005790565b60405162461bcd60e51b81526020600482015260156024820152744c696254797065436173743a3a4f564552464c4f5760581b6044820152606490fd5b3d15613f67573d90613f4e82610354565b91613f5c6040519384610322565b82523d5f602084013e565b606090565b91929015613fce5750815115613f80575090565b3b15613f895790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015613fe15750805190602001fd5b60405162461bcd60e51b8152908190611d70906004830161285156fea2646970667358221220ec22ed66e1b6270859714918241e885d457e272a842f288e349b67e19aab915064736f6c634300081c0033