2 txs
4 calls
constructor
constructor(address owner_, address controller_, bool useControllerPools_)
functions
connectorPoolIds
viewfunction connectorPoolIds(address) view returns (uint256)
getCurrentReceivingLimit
viewfunction getCurrentReceivingLimit(address connector_) view returns (uint256)
getCurrentSendingLimit
viewfunction getCurrentSendingLimit(address connector_) view returns (uint256)
getReceivingLimitParams
viewfunction getReceivingLimitParams(address connector_) view returns (tuple)
getSendingLimitParams
viewfunction getSendingLimitParams(address connector_) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role_, address address_) view returns (bool)
hookType
viewfunction hookType() view returns (bytes32)
lyraTSAShareHandler
viewfunction lyraTSAShareHandler() view returns (address)
nominee
viewfunction nominee() view returns (address)
owner
viewfunction owner() view returns (address)
poolLockedAmounts
viewfunction poolLockedAmounts(uint256) view returns (uint256)
srcPostHookCall
viewfunction srcPostHookCall(tuple params_) view returns (tuple)
useControllerPools
viewfunction useControllerPools() view returns (bool)
vaultOrController
viewfunction vaultOrController() view returns (address)
withdrawalMinGasLimit
viewfunction withdrawalMinGasLimit() view returns (uint256)
claimOwner
nonpayablefunction claimOwner()
dstPostHookCall
nonpayablefunction dstPostHookCall(tuple params_) returns (tuple cacheData)
dstPreHookCall
nonpayablefunction dstPreHookCall(tuple params_) returns (bytes postHookData, tuple transferInfo)
getConnectorPendingAmount
nonpayablefunction getConnectorPendingAmount(address connector_) returns (uint256)
getIdentifierPendingAmount
nonpayablefunction getIdentifierPendingAmount(bytes32 messageId_) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role_, address grantee_)
nominateOwner
nonpayablefunction nominateOwner(address nominee_)
postRetryHook
nonpayablefunction postRetryHook(tuple params_) returns (tuple cacheData)
preRetryHook
nonpayablefunction preRetryHook(tuple params_) returns (bytes postHookData, tuple transferInfo)
recoverERC20
nonpayablefunction recoverERC20(address token, address recipient)
recoverEth
nonpayablefunction recoverEth(address recipient)
rescueFunds
nonpayablefunction rescueFunds(address token_, address rescueTo_, uint256 amount_)
revokeRole
nonpayablefunction revokeRole(bytes32 role_, address revokee_)
setShareHandler
nonpayablefunction setShareHandler(address shareHandler)
setWithdrawalMinGasLimit
nonpayablefunction setWithdrawalMinGasLimit(uint256 limit)
srcPreHookCall
nonpayablefunction srcPreHookCall(tuple params_) returns (tuple transferInfo, bytes postHookData)
updateConnectorPoolId
nonpayablefunction updateConnectorPoolId(address[] connectors, uint256[] poolIds_)
updateLimitParams
nonpayablefunction updateLimitParams(tuple[] updates)
updatePoolLockedAmounts
nonpayablefunction updatePoolLockedAmounts(uint256[] poolIds_, uint256[] amounts_)
events
ConnectorPoolIdUpdated
event ConnectorPoolIdUpdated(address connector, uint256 poolId)
LimitParamsUpdated
event LimitParamsUpdated((bool isMint, address connector, uint256 maxLimit, uint256 ratePerSecond)[] updates)
OwnerClaimed
event OwnerClaimed(address indexed claimer)
OwnerNominated
event OwnerNominated(address indexed nominee)
PendingTokensBridged
event PendingTokensBridged(address connector, address receiver, uint256 consumedAmount, uint256 pendingAmount, bytes32 messageId)
PoolLockedAmountUpdated
event PoolLockedAmountUpdated(uint256 poolId, uint256 amount)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed grantee)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed revokee)
TokensPending
event TokensPending(address connector, address receiver, uint256 consumedAmount, uint256 pendingAmount, bytes32 messageId)
errors
AmountOutsideLimit
error AmountOutsideLimit()
InsufficientFunds
error InsufficientFunds()
InvalidConnector
error InvalidConnector()
InvalidPoolId
error InvalidPoolId()
InvalidTokenAddress
error InvalidTokenAddress()
NoPermit
error NoPermit(bytes32 role)
NotAuthorized
error NotAuthorized()
OnlyNominee
error OnlyNominee()
OnlyOwner
error OnlyOwner()
SiblingNotSupported
error SiblingNotSupported()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405260016000556207a1206009553480156200001d57600080fd5b50604051620042d1380380620042d18339810160408190526200004091620001e8565b8282828282828282818062000055816200011c565b50506001600160a01b038116608052620000907fc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f292538362000170565b505080151560a0527f3b7129f10106e202769096fb024bf2ffbeba2cd8f6d0fc43430d78dad12acb26600455620000e87f129109734c476f17817fbe7bcf461de566dcce58e4c0cb61b62d1b9af26fe47f8462000170565b50507f86066dfbea55a6e765d21082827844cb6624b95f43f06d7d38569d27bdfa6a9c600455506200023a95505050505050565b600180546001600160a01b0383166001600160a01b031991821681179092556002805490911690556040517ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8790600090a250565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551909184917f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f39190a35050565b80516001600160a01b0381168114620001e357600080fd5b919050565b600080600060608486031215620001fe57600080fd5b6200020984620001cb565b92506200021960208501620001cb565b9150604084015180151581146200022f57600080fd5b809150509250925092565b60805160a051614024620002ad6000396000818161070e01528181611b7f015261237e015260008181610481015281816107a801528181610875015281816112a5015281816116de01528181611b2601528181611dbf01528181611e3701528181612257015261230f01526140246000f3fe60806040526004361061021d5760003560e01c80637504db3e1161011d578063cf36b917116100b0578063e3082b781161007f578063e73915c211610064578063e73915c2146106dc578063f2f09c96146106fc578063f59ad9901461073057600080fd5b8063e3082b78146106a6578063e445e7dd146106c657600080fd5b8063cf36b91714610619578063d4bbfea314610639578063d547741f14610666578063dd19fe381461068657600080fd5b806391d14854116100ec57806391d148541461057c578063af93f83b146105ac578063b5f1e82a146105cc578063bff2afb1146105ec57600080fd5b80637504db3e146104e35780637afb995314610503578063886f039a146105315780638da5cb5b1461055157600080fd5b80634d533e00116101b057806362811bf21161017f5780636651232a116101645780636651232a1461046f5780636ccae054146104a357806374f86ade146104c357600080fd5b806362811bf2146103ef578063629a03931461041c57600080fd5b80634d533e0014610379578063529571781461038f57806356e743e6146103af5780635b94db27146103cf57600080fd5b80632f2ff15d116101ec5780632f2ff15d146102f757806336cc21b8146103175780633bd1adec146103445780633caef0f41461035957600080fd5b8063093c5eb1146102295780631306ac3b1461025c57806320f99c0a146102895780632bc9c08a146102d557600080fd5b3661022457005b600080fd5b34801561023557600080fd5b50610249610244366004613247565b61075e565b6040519081526020015b60405180910390f35b34801561026857600080fd5b5061027c610277366004613264565b610849565b6040516102539190613315565b34801561029557600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610253565b3480156102e157600080fd5b506102f56102f0366004613375565b610b2b565b005b34801561030357600080fd5b506102f56103123660046133ea565b610ea8565b34801561032357600080fd5b50610249610332366004613247565b60086020526000908152604090205481565b34801561035057600080fd5b506102f5610f07565b34801561036557600080fd5b506102f5610374366004613466565b610f63565b34801561038557600080fd5b5061024960095481565b34801561039b57600080fd5b506102496103aa366004613247565b611127565b3480156103bb57600080fd5b506102f56103ca3660046134d2565b61115b565b3480156103db57600080fd5b506102f56103ea366004613247565b6111b1565b3480156103fb57600080fd5b5061040f61040a3660046136fc565b611271565b604051610253919061380b565b34801561042857600080fd5b5061043c610437366004613247565b611308565b60405161025391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561047b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104af57600080fd5b506102f56104be36600461381e565b61138e565b3480156104cf57600080fd5b506102f56104de366004613466565b61142c565b3480156104ef57600080fd5b506102f56104fe366004613247565b6115a7565b34801561050f57600080fd5b5061052361051e36600461385f565b61163a565b604051610253929190613936565b34801561053d57600080fd5b506102f561054c36600461395b565b611885565b34801561055d57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166102b0565b34801561058857600080fd5b5061059c6105973660046133ea565b611a07565b6040519015158152602001610253565b3480156105b857600080fd5b5061043c6105c7366004613247565b611a3f565b3480156105d857600080fd5b506102496105e7366004613247565b611ac5565b3480156105f857600080fd5b50600a546102b09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561062557600080fd5b50610523610634366004613989565b611af3565b34801561064557600080fd5b506102496106543660046134d2565b60076020526000908152604090205481565b34801561067257600080fd5b506102f56106813660046133ea565b611d38565b34801561069257600080fd5b5061027c6106a1366004613a2d565b611d93565b3480156106b257600080fd5b506102f56106c1366004613247565b612176565b3480156106d257600080fd5b5061024960045481565b3480156106e857600080fd5b506102496106f73660046134d2565b61220e565b34801561070857600080fd5b5061059c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073c57600080fd5b5061075061074b366004613afd565b6122f1565b604051610253929190613b75565b6040517f4b0a885400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690634b0a8854906024016000604051808303816000875af11580156107f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108379190810190613b9a565b9050610842816123e6565b9392505050565b60408051808201909152606080825260208201523373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108cc576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460011461093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6002600090815580806109536040860186613c08565b8101906109609190613c6d565b919450925090507f8b3544fa225539b17e942d41841bf832b900055aa60660631db9559bbdcd8b366109956020870187613247565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291861660208381019190915290820185905260608201849052870135608082015260a00160405180910390a16000610a396109f16060880188613ca2565b6109ff906020810190613c08565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123e692505050565b9050610a458382613d0f565b604051602001610a5791815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905260208681019190915284908390610a9e90890189613247565b6040805173ffffffffffffffffffffffffffffffffffffffff9485166020820152908101929092529091166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905285526000829003610b1c5760408051600081526020810190915285525b50506001600055509092915050565b3360009081527fbd500bc6ab4a9bcd7eb9f453a5938fad0b08d3dbaae22ba7976ac385056bde2960205260409020547f129109734c476f17817fbe7bcf461de566dcce58e4c0cb61b62d1b9af26fe47f9060ff16610bb8576040517f962f633300000000000000000000000000000000000000000000000000000000815260048101829052602401610934565b60005b82811015610e6957838382818110610bd557610bd5613d26565b610beb9260206080909202019081019150613d63565b15610d5157610c62600060056000878786818110610c0b57610c0b613d26565b9050608002016020016020810190610c239190613247565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061240c565b5050838382818110610c7657610c76613d26565b9050608002016040013560056000868685818110610c9657610c96613d26565b9050608002016020016020810190610cae9190613247565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002060020155838382818110610cea57610cea613d26565b9050608002016060013560056000868685818110610d0a57610d0a613d26565b9050608002016020016020810190610d229190613247565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002060010155610e57565b610d6c600060066000878786818110610c0b57610c0b613d26565b5050838382818110610d8057610d80613d26565b9050608002016040013560066000868685818110610da057610da0613d26565b9050608002016020016020810190610db89190613247565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002060020155838382818110610df457610df4613d26565b9050608002016060013560066000868685818110610e1457610e14613d26565b9050608002016020016020810190610e2c9190613247565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020600101555b80610e6181613d80565b915050610bbb565b507f19863caed14ed012a54f927e56250018b7ac3c04fd197e0edf23369f75a6ccd48383604051610e9b929190613db8565b60405180910390a1505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ef9576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f038282612460565b5050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610f58576040517f7c91ccdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f61336124e6565b565b60015473ffffffffffffffffffffffffffffffffffffffff163314610fb4576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260005b8181101561111f57838382818110610fd257610fd2613d26565b90506020020135600003611012576040517f0afa7ee800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83838281811061102457611024613d26565b905060200201356008600088888581811061104157611041613d26565b90506020020160208101906110569190613247565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020557f0fdcc1015152882d3bf501506be25357c645aff7e0df94d2b21c45e102e81a0c8686838181106110b0576110b0613d26565b90506020020160208101906110c59190613247565b8585848181106110d7576110d7613d26565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526020918202939093013590840152500160405180910390a18061111781613d80565b915050610fb8565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081206111559061255f565b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146111ac576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600955565b60015473ffffffffffffffffffffffffffffffffffffffff163314611202576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b604080516060808201835260008083526020830152918101919091523373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146112fc576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060608101515b919050565b6113336040518060800160405280600081526020016000815260200160008152602001600081525090565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260056020908152604091829020825160808101845281548152600182015492810192909252600281015492820192909252600390910154606082015290565b3360009081527f271b3e2292ab6fd3ff496cd98d6d375af02f11568a701741f48bba7789f13a7060205260409020547fc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f292539060ff1661141b576040517f962f633300000000000000000000000000000000000000000000000000000000815260048101829052602401610934565b6114268484846125c6565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461147d576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260005b8181101561111f5785858281811061149b5761149b613d26565b905060200201356000036114db576040517f0afa7ee800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8383828181106114ed576114ed613d26565b905060200201356007600088888581811061150a5761150a613d26565b905060200201358152602001908152602001600020819055507f6cc2f5d066d41fc5850125943b942623567700e44d15463154a87bb5d3332e9186868381811061155657611556613d26565b9050602002013585858481811061156f5761156f613d26565b9050602002013560405161158d929190918252602082015260400190565b60405180910390a18061159f81613d80565b915050611481565b60015473ffffffffffffffffffffffffffffffffffffffff1633146115f8576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02916000818181858888f19350505050158015610f03573d6000803e3d6000fd5b6040805160608181018352600080835260208301529181018290526000546001146116c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152606401610934565b60026000553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611735576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008560200151600001518060200190518101906117569190613e3d565b925092509250856000015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117c5576040517f5b0a758300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806117d68860000151856126b6565b6040805173ffffffffffffffffffffffffffffffffffffffff89166020820152908101839052606081018290529193509150608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260608301825273ffffffffffffffffffffffffffffffffffffffff9097168252602082810194909452805193840181526000808552908201939093526001909255509296929550919350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146118d6576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb90839083906370a0823190602401602060405180830381865afa15801561194a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196e9190613e80565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613e99565b505050565b600082815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610842565b611a6a6040518060800160405280600081526020016000815260200160008152602001600081525090565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260066020908152604091829020825160808101845281548152600182015492810192909252600281015492820192909252600390910154606082015290565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081206111559061255f565b6040805160608181018352600080835260208301529181018290523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611b7d576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015611bbb57611bb98360000151846040015160200151612754565b505b600080611bd485600001518660400151602001516126b6565b6040808801805160208101859052905182015151909650929450909250148015611bfc575080155b15611d0b57600080866040015160400151806020019051810190611c209190613eb6565b909250905073ffffffffffffffffffffffffffffffffffffffff82161580611c5c575073ffffffffffffffffffffffffffffffffffffffff8116155b15611c8b5760408051602081018690529081018490526060016040516020818303038152906040529550611d04565b6040878101515181516020810187905291820185905273ffffffffffffffffffffffffffffffffffffffff90811660608301528084166080830152821660a082015260c001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905230865295505b5050611d31565b604080516020810184905290810182905260600160405160208183030381529060405293505b5050915091565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d89576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0382826127de565b60408051808201909152606080825260208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611e16576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600080611e2586612861565b93509350935093508015611fd25760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec49190613ee5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190613e80565b905085811015611fc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d494e5445445f42414c414e43455f4d49534d415443480000000000000000006044820152606401610934565b611fcf828588612a4b565b50505b6000611fe187604001516123e6565b90508315612122576040805180820190915260808881015151895173ffffffffffffffffffffffffffffffffffffffff91821660608501529183018790521660a08201528060c08101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016120678684613f02565b60405160200161207991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915288516080808b0151516020808d0151855173ffffffffffffffffffffffffffffffffffffffff958616815294909216908401528284018a9052606083018990529082015290519197507fec590f5738bffdca5d4fb4f9e9d902924be6ad3aedb5c5d0b39b208ea41c1e1b919081900360a00190a161216c565b604080516060810182526000918101918252908152602081016121458684613f02565b60405160200161215791815260200190565b60405160208183030381529060405281525095505b5050505050919050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146121c7576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517ff290aafa00000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f290aafa906024016000604051808303816000875af11580156122a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526122e69190810190613b9a565b905061084281612c62565b604080516060808201835260008083526020830152918101829052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461237c576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000156123b8576123b88360000151846040015160200151612c8b565b6123ce8360000151846040015160200151612d5b565b50506040908101518151602081019092526000825291565b80516000901561240457818060200190518101906111559190613e80565b506000919050565b600080600061241a8461255f565b4285559050848110612441576124308582613d0f565b600385015584925060009150612458565b600060038501559150816124558186613d0f565b91505b509250929050565b600082815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551909184917f2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f39190a35050565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092556002805490911690556040517ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8790600090a250565b805460009081906125709042613d0f565b905060008360010154826125849190613f1a565b9050836002015484600301548261259b9190613f02565b11156125ad57836002015492506125bf565b60038401546125bc9082613f02565b92505b5050919050565b73ffffffffffffffffffffffffffffffffffffffff8216612613576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff84160161265a57611a028282612dec565b8273ffffffffffffffffffffffffffffffffffffffff163b6000036126ab576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a02838383612e61565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081206002015481908103612719576040517fec914c0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020526040902061274990849061240c565b909590945092505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600860205260408120548082036127b3576040517f0afa7ee800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526007602052604081208054935084916127d18386613f02565b9091555091949350505050565b600082815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551909184917f155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a529190a35050565b60408051606081018252600080825260208201819052918101829052819060008460600151516040036128b45784606001518060200190518101906128a69190613f57565b909450925060009050612a44565b84606001515160a0036129e25784606001518060200190518101906128d99190613f7b565b73ffffffffffffffffffffffffffffffffffffffff908116604088015290811686521660208501529094509250821561296e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e56414c49445f50454e44494e475f414d4f554e54000000000000000000006044820152606401610934565b602082015173ffffffffffffffffffffffffffffffffffffffff1615806129aa5750815173ffffffffffffffffffffffffffffffffffffffff16155b806129cd5750604082015173ffffffffffffffffffffffffffffffffffffffff16155b156129da57506000612a44565b506001612a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f70617273653a20494e56414c49445f444154415f4c454e4754480000000000006044820152606401610934565b9193509193565b6000612a5a8360400151612f30565b90506000612a6782613027565b9050612a72816130a8565b600a546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018590529086169063095ea7b3906044016020604051808303816000875af1158015612aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0f9190613e99565b50600a546020850151604080870151875191517fb7cad56300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529384166024820152908316604482015290821660648201526084810186905291169063b7cad5639060a401600060405180830381600087803b158015612ba757600080fd5b505af1925050508015612bb8575060015b612c5b5760208401516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018590529086169063a9059cbb906044016020604051808303816000875af1158015612c37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111f9190613e99565b5050505050565b80516000901561240457600082806020019051810190612c829190613e3d565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081205490819003612ceb576040517f0afa7ee800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020526040902054821115612d33576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526007602052604081208054849290612d51908490613d0f565b9091555050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260408120600201549003612dbc576040517fec914c0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020610f039082906131bd565b600080600080600085875af1905080611a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610934565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610934565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167faa128e8f0000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff861691612fb19190613fdc565b6000604051808303816000865af19150503d8060008114612fee576040519150601f19603f3d011682016040523d82523d6000602084013e612ff3565b606091505b509150915081158061300457508051155b15613013575060009392505050565b808060200190518101906125bc9190613ee5565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffc0c546a0000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff861691612fb19190613fdc565b6040517fdea0e746000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff82169063dea0e74690602401602060405180830381865afa925050508015613154575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261315191810190613e80565b60015b610f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c5952415f46454544535f5354414c45000000000000000000000000000000006044820152606401610934565b50565b60006131c88261255f565b90508281106131e8574282556131de8382613d0f565b6003830155505050565b6040517f47ebad2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146131ba57600080fd5b80356113038161321a565b60006020828403121561325957600080fd5b81356108428161321a565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b82016080818503121561084257600080fd5b60005b838110156132ba5781810151838201526020016132a2565b838111156114265750506000910152565b600081518084526132e381602086016020860161329f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600082516040602084015261333160608401826132cb565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261336c82826132cb565b95945050505050565b6000806020838503121561338857600080fd5b823567ffffffffffffffff808211156133a057600080fd5b818501915085601f8301126133b457600080fd5b8135818111156133c357600080fd5b8660208260071b85010111156133d857600080fd5b60209290920196919550909350505050565b600080604083850312156133fd57600080fd5b82359150602083013561340f8161321a565b809150509250929050565b60008083601f84011261342c57600080fd5b50813567ffffffffffffffff81111561344457600080fd5b6020830191508360208260051b850101111561345f57600080fd5b9250929050565b6000806000806040858703121561347c57600080fd5b843567ffffffffffffffff8082111561349457600080fd5b6134a08883890161341a565b909650945060208701359150808211156134b957600080fd5b506134c68782880161341a565b95989497509550505050565b6000602082840312156134e457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561353d5761353d6134eb565b60405290565b6040516080810167ffffffffffffffff8111828210171561353d5761353d6134eb565b6040805190810167ffffffffffffffff8111828210171561353d5761353d6134eb565b60405160a0810167ffffffffffffffff8111828210171561353d5761353d6134eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135f3576135f36134eb565b604052919050565b600067ffffffffffffffff821115613615576136156134eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261365257600080fd5b8135613665613660826135fb565b6135ac565b81815284602083860101111561367a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000606082840312156136a957600080fd5b6136b161351a565b905081356136be8161321a565b815260208281013590820152604082013567ffffffffffffffff8111156136e457600080fd5b6136f084828501613641565b60408301525092915050565b60006020828403121561370e57600080fd5b813567ffffffffffffffff8082111561372657600080fd5b908301906080828603121561373a57600080fd5b613742613543565b823561374d8161321a565b815260208301358281111561376157600080fd5b61376d87828601613641565b60208301525060408301358281111561378557600080fd5b61379187828601613641565b6040830152506060830135828111156137a957600080fd5b6137b587828601613697565b60608301525095945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101516020830152600060408201516060604085015261380360608501826132cb565b949350505050565b60208152600061084260208301846137c4565b60008060006060848603121561383357600080fd5b833561383e8161321a565b9250602084013561384e8161321a565b929592945050506040919091013590565b60006020828403121561387157600080fd5b813567ffffffffffffffff8082111561388957600080fd5b908301906040828603121561389d57600080fd5b6138a5613566565b82356138b08161321a565b81526020830135828111156138c457600080fd5b9290920191604083870312156138d957600080fd5b6138e1613566565b8335838111156138f057600080fd5b6138fc88828701613641565b82525060208401358381111561391157600080fd5b61391d88828701613641565b6020830152508060208301525080935050505092915050565b60408152600061394960408301856132cb565b828103602084015261336c81856137c4565b6000806040838503121561396e57600080fd5b82356139798161321a565b9150602083013561340f8161321a565b60006020828403121561399b57600080fd5b813567ffffffffffffffff808211156139b357600080fd5b90830190606082860312156139c757600080fd5b6139cf61351a565b82356139da8161321a565b81526020830135828111156139ee57600080fd5b6139fa87828601613641565b602083015250604083013582811115613a1257600080fd5b613a1e87828601613697565b60408301525095945050505050565b600060208284031215613a3f57600080fd5b813567ffffffffffffffff80821115613a5757600080fd5b9083019060a08286031215613a6b57600080fd5b613a73613589565b613a7c8361323c565b815260208301356020820152604083013582811115613a9a57600080fd5b613aa687828601613641565b604083015250606083013582811115613abe57600080fd5b613aca87828601613641565b606083015250608083013582811115613ae257600080fd5b613aee87828601613697565b60808301525095945050505050565b600060208284031215613b0f57600080fd5b813567ffffffffffffffff80821115613b2757600080fd5b9083019060608286031215613b3b57600080fd5b613b4361351a565b8235613b4e8161321a565b81526020830135613b5e8161321a565b6020820152604083013582811115613a1257600080fd5b604081526000613b8860408301856137c4565b828103602084015261336c81856132cb565b600060208284031215613bac57600080fd5b815167ffffffffffffffff811115613bc357600080fd5b8201601f81018413613bd457600080fd5b8051613be2613660826135fb565b818152856020838501011115613bf757600080fd5b61336c82602083016020860161329f565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c3d57600080fd5b83018035915067ffffffffffffffff821115613c5857600080fd5b60200191503681900382131561345f57600080fd5b600080600060608486031215613c8257600080fd5b8335613c8d8161321a565b95602085013595506040909401359392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613cd657600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613d2157613d21613ce0565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80151581146131ba57600080fd5b600060208284031215613d7557600080fd5b813561084281613d55565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613db157613db1613ce0565b5060010190565b6020808252818101839052600090604080840186845b87811015613e30578135613de181613d55565b1515835281850135613df28161321a565b73ffffffffffffffffffffffffffffffffffffffff168386015281840135848401526060808301359084015260809283019290910190600101613dce565b5090979650505050505050565b600080600060608486031215613e5257600080fd5b8351613e5d8161321a565b602085015160408601519194509250613e758161321a565b809150509250925092565b600060208284031215613e9257600080fd5b5051919050565b600060208284031215613eab57600080fd5b815161084281613d55565b60008060408385031215613ec957600080fd5b8251613ed48161321a565b602084015190925061340f8161321a565b600060208284031215613ef757600080fd5b81516108428161321a565b60008219821115613f1557613f15613ce0565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5257613f52613ce0565b500290565b60008060408385031215613f6a57600080fd5b505080516020909101519092909150565b600080600080600060a08688031215613f9357600080fd5b85519450602086015193506040860151613fac8161321a565b6060870151909350613fbd8161321a565b6080870151909250613fce8161321a565b809150509295509295909350565b60008251613cd681846020870161329f56fea2646970667358221220d14967329ca15faa0ba2f9bb8bf396dde1278cd1853415395a4b72e7746f17d864736f6c634300080d0033000000000000000000000000a82994cc5e9d94fed2916f762e03245fcbe79f23000000000000000000000000420446557adb05fa0ecca96619cd9f20e1e044dc0000000000000000000000000000000000000000000000000000000000000000