0 txs
7 calls
constructor
constructor()
functions
BRIDGE_SLIPPAGE_BASE
viewfunction BRIDGE_SLIPPAGE_BASE() view returns (uint256)
bridgeSlippage
viewfunction bridgeSlippage() view returns (uint256)
dstExternalFeeRate
viewfunction dstExternalFeeRate() view returns (uint16)
ETH_PLACEHOLDER
viewfunction ETH_PLACEHOLDER() view returns (address)
FEE_BASE
viewfunction FEE_BASE() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
quoteLayerZeroFee
viewfunction quoteLayerZeroFee(address to, tuple srcInfo, tuple dstInfo, tuple dstExtSwapInfo) view returns (uint256, uint256)
sgInfo
viewfunction sgInfo() view returns (address)
srcExternalFeeRate
viewfunction srcExternalFeeRate() view returns (uint16)
weth
viewfunction weth() view returns (address)
woofiCrossRouters
viewfunction woofiCrossRouters(uint32) view returns (address)
woofiRouter
viewfunction woofiRouter() view returns (address)
claimFee
nonpayablefunction claimFee(address token)
crossSwap
payablefunction crossSwap(address to, tuple srcInfo, tuple dstInfo, tuple srcExtSwapInfo, tuple dstExtSwapInfo) payable
inCaseTokenGotStuck
nonpayablefunction inCaseTokenGotStuck(address _stuckToken)
initialize
nonpayablefunction initialize(address _owner, address _weth, address _woofiRouter, address _sgInfo)
lzCompose
payablefunction lzCompose(address _from, bytes32 _guid, bytes _message, address, bytes) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setBridgeSlippage
nonpayablefunction setBridgeSlippage(uint256 _bridgeSlippage)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _feeRecipient)
setWOOFiCrossRouter
nonpayablefunction setWOOFiCrossRouter(uint32 _eid, address _crossRouter)
setWOOFiRouter
nonpayablefunction setWOOFiRouter(address _woofiRouter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
WOOFiCrossSwapOnDstChain
event WOOFiCrossSwapOnDstChain(uint32 srcEid, bytes32 indexed guid, address indexed sender, address indexed to, address bridgedToken, uint256 bridgedAmount, address toToken, address realToToken, uint256 minToAmount, uint256 realToAmount, uint8 swapType, uint256 fee)
WOOFiCrossSwapOnSrcChain
event WOOFiCrossSwapOnSrcChain(uint32 dstEid, bytes32 indexed guid, address indexed sender, address indexed to, address fromToken, uint256 fromAmount, address bridgeToken, uint256 minBridgeAmount, uint256 realBridgeAmount, uint8 swapType, uint256 fee)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidInitialization
error InvalidInitialization()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051614b739081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c8063027b4b6f146101cb5780633f4ba83a146101c65780633fc8cef3146101c1578063403a01e5146101bc57806346904840146101b757806348cdc47a146101b257806358800adf146101ad578063590bae89146101a85780635c975abb146101a35780636d21957e1461019e5780636d6e9f41146101995780636ebc51e114610194578063715018a61461018f57806381083bc61461018a57806383af5550146101855780638456cb59146101805780638da5cb5b1461017b578063b5daaf5814610176578063b929214114610171578063c45e15a01461016c578063d0a1026014610167578063e1a4e72a14610162578063e74b981b1461015d578063ecb911de14610158578063ecefc70514610153578063f2fde38b1461014e5763f8c8765e0361000e57611837565b6117ec565b6117b0565b611770565b6116e9565b6115e2565b611328565b6112ad565b61126a565b6111fb565b61118a565b6110d5565b611099565b61105e565b610f9c565b610e24565b610a12565b610925565b610753565b610642565b6105f0565b6104aa565b61042c565b610361565b61030f565b610232565b6101e0565b60009103126101db57565b600080fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57610269612d69565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156102e5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561039b612d69565b61271081116103a957600455005b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a20215f627269646765536c697060448201527f70616765000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b63ffffffff8116036101db57565b73ffffffffffffffffffffffffffffffffffffffff8116036101db57565b346101db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004356104e58161047e565b6024356104f18161048c565b6104f9612d69565b73ffffffffffffffffffffffffffffffffffffffff81161561056c5763ffffffff6100199216600052600660205260406000209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f63726f7373526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5773ffffffffffffffffffffffffffffffffffffffff6004356106928161048c565b61069a612d69565b1680156106cf577fffffffffffffffffffffffff00000000000000000000000000000000000000006000541617600055600080f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f776f6f6669526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176107fe57604052565b6107b3565b67ffffffffffffffff81116107fe57604052565b6040810190811067ffffffffffffffff8211176107fe57604052565b6020810190811067ffffffffffffffff8211176107fe57604052565b60a0810190811067ffffffffffffffff8211176107fe57604052565b6060810190811067ffffffffffffffff8211176107fe57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107fe57604052565b6040519060e0820182811067ffffffffffffffff8211176107fe57604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c60c09101126101db5760a490565b908160409103126101db5790565b6101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561095c8161048c565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101db5760405190610993826107e2565b60243561099f8161048c565b82526044356109ad8161048c565b6020830152606435604083015260843560608301526109cb366108e8565b67ffffffffffffffff9290610164358481116101db576109ef903690600401610917565b91610184359485116101db57610a0c610019953690600401610917565b93611a6d565b346101db576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57600435610a4e8161048c565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101db57610a81366108e8565b6101643567ffffffffffffffff81116101db57610aa2903690600401610917565b91602090610ab1828401612302565b90610b07604095610adb610ac6888801612302565b91885195869360608a013591878a8701612752565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610887565b610b24610b1261369e565b610b1e60a08701612801565b906136d3565b906080850190610b4b610b3683612801565b6fffffffffffffffffffffffffffffffff1690565b610df2575b5050610bb6610b9d610b83610b6d610b6788612748565b97612748565b63ffffffff166000526006602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b608435610bc28161387b565b91610bda610bce6108c8565b63ffffffff9098168852565b85870152868601526060850152608084015260a0830152610bf9612858565b60c0830152610c20610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b9183517f42407dc40000000000000000000000000000000000000000000000000000000081528281600481875afa8015610d8f57610cc8948492600092610dc3575b50610c6b6122f3565b87517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529094859190829081906044820190565b03915afa928315610d8f5773ffffffffffffffffffffffffffffffffffffffff938592610d2c92600092610d94575b5083519586809481937f3b6f743b0000000000000000000000000000000000000000000000000000000083526004830161297a565b0392165afa918215610d8f57600092610d5c575b50815191015191519081526020810191909152604090f35b0390f35b610d58919250610d8190843d8611610d88575b610d798183610887565b810190612893565b9190610d40565b503d610d6f565b6123ab565b610db5919250853d8711610dbc575b610dad8183610887565b8101906123b7565b9038610cf7565b503d610da3565b610de4919250833d8511610deb575b610ddc8183610887565b810190612396565b9038610c62565b503d610dd2565b73ffffffffffffffffffffffffffffffffffffffff610e13610e1c93612801565b911690836137dc565b503880610b50565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57600435610e5f8161048c565b610e67612e2e565b73ffffffffffffffffffffffffffffffffffffffff80600354168015610f1857610e913084613179565b9182610ec1575b61001960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03610f0a5750600354610f01925073ffffffffffffffffffffffffffffffffffffffff166139a5565b38808080610e98565b610f1392613899565b610f01565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a2021666565526563697069656e60448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261105b57610fd4612d69565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054907fffffffffffffffffffffffff000000000000000000000000000000000000000082169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760206040516127108152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576020600454604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5761110c612d69565b611114612dd9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5763ffffffff60043561123b8161047e565b166000526006602052602073ffffffffffffffffffffffffffffffffffffffff60406000205416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602061ffff60055460101c16604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b9181601f840112156101db5782359167ffffffffffffffff83116101db57602083818601950101116101db57565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004803561135f8161048c565b6024356044359267ffffffffffffffff938481116101db5761138490369083016112fa565b91909461139260643561048c565b6084359081116101db576113a990369083016112fa565b50506113cd610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b93604051937f42407dc4000000000000000000000000000000000000000000000000000000008552602094858185818a5afa908115610d8f576000916115c5575b50604051907f73f0c8f50000000000000000000000000000000000000000000000000000000082528682806114528489830191909163ffffffff6020820193169052565b03818b5afa938415610d8f57899487936000916115a8575b508873ffffffffffffffffffffffffffffffffffffffff998a97889687809516331461149590612997565b61149e91613a2a565b9c6114a98b82613a3c565b9a6114b391613a4b565b818082518301019101906114c691612a22565b9f929b91939e909e169a16978892169a6040518098819482937fbb0d15fe0000000000000000000000000000000000000000000000000000000084528301916115379290929173ffffffffffffffffffffffffffffffffffffffff60209163ffffffff604085019616845216910152565b03915afa8015610d8f5761155a94839260009261158b575b505016911614612aed565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee810361157f57506100199661420f565b92919061001997613b99565b6115a19250803d10610dbc57610dad8183610887565b388061154f565b6115bf9150893d8b11610dbc57610dad8183610887565b3861146a565b6115dc9150863d8811610deb57610ddc8183610887565b3861140e565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561161d8161048c565b611625612d69565b73ffffffffffffffffffffffffffffffffffffffff81169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee820361166457505061001947336139a5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291602090839060249082905afa908115610d8f57610019926000926116b8575b503390613899565b6116db91925060203d6020116116e2575b6116d38183610887565b8101906124e2565b90386116b0565b503d6116c9565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5773ffffffffffffffffffffffffffffffffffffffff6004356117398161048c565b611741612d69565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355600080f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602061ffff60055416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576020604051620186a08152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5761001960043561182a8161048c565b611832612d69565b612b78565b346101db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004356118728161048c565b6024359061187f8261048c565b60443561188b8161048c565b606435906118988261048c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff60ff8660401c1615951680159081611a65575b6001149081611a5b575b159081611a52575b50611a285761194b93856119427ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b6119cc57612c3b565b61195157005b61199d7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b611a237ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612c3b565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b905015386118e9565b303b1591506118e1565b8691506118d7565b9290611a77612dd9565b611a7f612e2e565b73ffffffffffffffffffffffffffffffffffffffff9081851695611aa4871515612203565b611acf611ac8610b9d845173ffffffffffffffffffffffffffffffffffffffff1690565b1515612268565b604092611aea611ae3610b9d868901612302565b151561230c565b611b0c610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b9380517f42407dc400000000000000000000000000000000000000000000000000000000815260209081816004818a5afa908115610d8f57611bd29183916000916121e6575b5081880198611b758a5173ffffffffffffffffffffffffffffffffffffffff1690565b86517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529092839190829081906044820190565b03915afa908115610d8f57611bf49185916000916121c9575b501615156123cc565b846000938885611c18845173ffffffffffffffffffffffffffffffffffffffff1690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee939081811685036121b35750611c4887860151341015612457565b845173ffffffffffffffffffffffffffffffffffffffff1693611c82610b9d8d5173ffffffffffffffffffffffffffffffffffffffff1690565b858316818103611e28575050505050505082915001515b82818751611cba9073ffffffffffffffffffffffffffffffffffffffff1690565b30611cc491613179565b1015611ccf90612625565b611cd8916126b0565b97606085019388868b8751811015611cef906126bd565b611cf8946132d1565b96611d0290612748565b97818551611d239073ffffffffffffffffffffffffffffffffffffffff1690565b950151955173ffffffffffffffffffffffffffffffffffffffff16935196611d4a90612302565b73ffffffffffffffffffffffffffffffffffffffff161560001496611df2947f8dbf61e74c14d5d835816a6bdaf0874bd5f7bff3ee4d8c4c83d0e6bf8da4cf7298611e20576000935b51978897339c899490989796929160ff9460e0979363ffffffff61010089019c16885273ffffffffffffffffffffffffffffffffffffffff80931660208901526040880152166060860152608085015260a08401521660c08201520152565b0390a4611e1e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b600193611d93565b8290611e4c610b9d60025473ffffffffffffffffffffffffffffffffffffffff1690565b1491826121a9575b505015611efb5750505050505050611e87610b9d610b9d60025473ffffffffffffffffffffffffffffffffffffffff1690565b81850190815190803b156101db5783517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829084905af18015610d8f57611ee2575b5051611c99565b80611eef611ef592610803565b806101d0565b38611edb565b611f32611f25610b9d859b969798999b5473ffffffffffffffffffffffffffffffffffffffff1690565b9689890197885191613114565b865173ffffffffffffffffffffffffffffffffffffffff169182160361219a578d8b611f62610b9d885197612302565b1561209b57925050508693929150611f92610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b918b612034611fa082612302565b611fa983612302565b92611ffa6060611feb611fd08d5173ffffffffffffffffffffffffffffffffffffffff1690565b985173ffffffffffffffffffffffffffffffffffffffff1690565b99519b0151918a8101906124f1565b9290918c519b8c9a8b998a987f199b83fa000000000000000000000000000000000000000000000000000000008a52309560048b01612581565b03925af1928315610d8f5760009361207c575b505061207661206d8361206761206060055461ffff1690565b61ffff1690565b9061260d565b620186a0900490565b91611c99565b612093929350803d106116e2576116d38183610887565b903880612047565b919594899561216560606120ea6120cf610b9d999e99899d97995473ffffffffffffffffffffffffffffffffffffffff1690565b965173ffffffffffffffffffffffffffffffffffffffff1690565b92519401518b517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9a8b166004820152928a166024840152604483019490945260648201939093523060848201529690931660a487015285928391829060c4820190565b03925af1928315610d8f579261217d575b5050611c99565b6121939250803d106116e2576116d38183610887565b3880612176565b8d8b611f62610b9d8597612302565b1490508138611e54565b858801516121c49130903390612ed0565b611c48565b6121e09150843d8611610dbc57610dad8183610887565b38611beb565b6121fd9150823d8411610deb57610ddc8183610887565b38611b52565b1561220a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f574f4f466943726f7373526f7574657256353a2021746f0000000000000000006044820152fd5b1561226f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d546f6b656e00000000000000000000000000000000000000000000000000006064820152fd5b6044356122ff8161048c565b90565b356122ff8161048c565b1561231357565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a2021647374496e666f2e746f5460448201527f6f6b656e000000000000000000000000000000000000000000000000000000006064820152fd5b908160209103126101db57516122ff8161047e565b6040513d6000823e3d90fd5b908160209103126101db57516122ff8161048c565b156123d357565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e62726960448201527f646765546f6b656e0000000000000000000000000000000000000000000000006064820152fd5b1561245e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d416d6f756e74000000000000000000000000000000000000000000000000006064820152fd5b908160209103126101db575190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101db570180359067ffffffffffffffff82116101db576020019181360383136101db57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b949095916122ff999793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e08201520191612542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561262057565b6125de565b1561262c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f574f4f466943726f7373526f7574657256353a2042414c414e43455f4e4f545f60448201527f454e4f55474800000000000000000000000000000000000000000000000000006064820152fd5b9190820391821161262057565b156126c457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e6d696e60448201527f427269646765416d6f756e7400000000000000000000000000000000000000006064820152fd5b356122ff8161047e565b9493919273ffffffffffffffffffffffffffffffffffffffff8094818094168852166020870152166040850152606084015260a0608084015281356127968161048c565b1660a083015260208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101db57016020813591019067ffffffffffffffff81116101db5780360382136101db5760e083604060c06122ff9601520191612542565b356fffffffffffffffffffffffffffffffff811681036101db5790565b67ffffffffffffffff81116107fe57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6040519061286582610833565b60008252565b91908260409103126101db5760405161288381610817565b6020808294805184520151910152565b906040828203126101db576122ff9161286b565b60005b8381106128ba5750506000910152565b81810151838201526020016128aa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612906815180928187528780880191016128a7565b0116010190565b6122ff9163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c0612969612957608085015160e0608086015260e08501906128ca565b60a085015184820360a08601526128ca565b9201519060c08184039101526128ca565b9190602061299260009260408652604086019061290d565b930152565b1561299e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f574f4f466943726f7373526f7574657256353a20494e56414c49445f43414c4c60448201527f45520000000000000000000000000000000000000000000000000000000000006064820152fd5b9060a0828203126101db578151612a388161048c565b9260209081840151612a498161048c565b936040810151612a588161048c565b93606082015193608083015167ffffffffffffffff938482116101db5701926040848403126101db5760405193612a8e85610817565b8051612a998161048c565b8552828101519182116101db570182601f820112156101db578051612abd8161281e565b93612acb6040519586610887565b8185528382840101116101db57612ae7918380860191016128a7565b82015290565b15612af457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f574f4f466943726f7373526f7574657256353a20215f66726f6d5f4e4f545f5060448201527f41495200000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116908115612c0a577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490837fffffffffffffffffffffffff00000000000000000000000000000000000000008316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b612c5290939193612c4a614ae4565b611832614ae4565b612c5a614ae4565b612c62614ae4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055612cb1614ae4565b612cb9614ae4565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005573ffffffffffffffffffffffffffffffffffffffff8092817fffffffffffffffffffffffff0000000000000000000000000000000000000000951685600254161760025516836000541617600055169060015416176001556064600455621900197fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006005541617600555565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612da957565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416612e0457565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006002815414612e5e5760029055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b3d15612eb3573d90612e998261281e565b91612ea76040519384610887565b82523d6000602084013e565b606090565b908160209103126101db575180151581036101db5790565b9091600080949381946040519160208301947f23b872dd00000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff8092166024850152166044830152606482015260648152612f3a8161084f565b51925af1612f46612e88565b81612fb2575b5015612f5457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b8051801592508215612fc7575b505038612f4c565b612fda9250602080918301019101612eb8565b3880612fbf565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff909316602482015260006044820181905292839291839061306d81606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610887565b51925af1613079612e88565b816130e5575b501561308757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152fd5b80518015925082156130fa575b50503861307f565b61310d9250602080918301019101612eb8565b38806130f2565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201526044810193909352600092839290839061306d8160648101613041565b73ffffffffffffffffffffffffffffffffffffffff9081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82036131b35750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115610d8f576000916131fe575090565b6122ff915060203d6020116116e2576116d38183610887565b9190820180921161262057565b919082810360c081126101db576080136101db576040519067ffffffffffffffff60608301818111848210176107fe5760405284518352602085015190811681036101db578260809160206122ff950152613282836040880161286b565b6040820152940161286b565b91939273ffffffffffffffffffffffffffffffffffffffff9060206132bd60609460808752608087019061290d565b968051828701520151604085015216910152565b939092916020916132e3838501612302565b61330c6040926130416132f7858901612302565b91855194859360608b0135918d8b8701612752565b61332361331761369e565b610b1e60a08801612801565b966080860190613335610b3683612801565b61366c575b505061335e610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b968251937f42407dc400000000000000000000000000000000000000000000000000000000855285856004818c5afa8015610d8f578680926134209760009361364d575b5001996133c38b5173ffffffffffffffffffffffffffffffffffffffff1690565b86517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529095869190829081906044820190565b03915afa938415610d8f5760009461362e575b5073ffffffffffffffffffffffffffffffffffffffff8094169461346b895173ffffffffffffffffffffffffffffffffffffffff1690565b888773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee809884160361361d575b5050506134aa610b9d610b83610b6d6134a48b612748565b9a612748565b6134b38961387b565b916134cb6134bf6108c8565b63ffffffff909a168a52565b88015287848801526060870152608086015260a08501526134ea612858565b60c08501528051947f3b6f743b000000000000000000000000000000000000000000000000000000008652818680613525886004830161297a565b0381875afa928315610d8f576135a89760c0976000956135f6575b50516135619073ffffffffffffffffffffffffffffffffffffffff16610b9d565b036135ed57613571908351613217565b905b518096819582947fc7c7f5b300000000000000000000000000000000000000000000000000000000845232916004850161328e565b03925af1908115610d8f576000916135bf57505190565b6135e1915060c03d60c0116135e6575b6135d98183610887565b810190613224565b505190565b503d6135cf565b50815190613573565b613561919550613615610b9d91863d8811610d8857610d798183610887565b959150613540565b61362692613114565b38888761348c565b613646919450853d8711610dbc57610dad8183610887565b9238613433565b613665919350823d8411610deb57610ddc8183610887565b91386133a2565b73ffffffffffffffffffffffffffffffffffffffff61368d61369693612801565b911690896137dc565b50388061333a565b6040517e030000000000000000000000000000000000000000000000000000000000006020820152600281526122ff81610817565b9061ffff916003836136e483614933565b16036137a1577fffffffffffffffffffffffffffffffff00000000000000000000000000000000604051926000602085015260801b1660228301526012825261372c82610817565b60038361373883614933565b16036137a1578151838111613769578316600101928311612620576130416122ff9260405194859360208501614a45565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252601060048301526024820152fd5b826137ad602492614933565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815291166004820152fd5b61ffff926003846137ec84614933565b160361386f577fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519360801b1660208401526030830152603082526138328261086b565b60038361383e83614933565b16036137a1578151838111613769578316600101928311612620576130416122ff92604051948593602085016149a1565b6024846137ad84614933565b60045490612710918203828111612620576138959161260d565b0490565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906138fe8160648101613041565b51925af161390a612e88565b81613976575b501561391857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152fd5b805180159250821561398b575b505038613910565b61399e9250602080918301019101612eb8565b3880613983565b60008080938193826040516139b981610833565b525af16139c4612e88565b50156139cc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152fd5b90600c116101db576008013560e01c90565b90602c116101db57600c013590565b81604c116101db577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4820190613a808261281e565b92613a8e6040519485610887565b82845236818301116101db57600092604c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4930160208601378301015290565b936122ff9796929395916101009673ffffffffffffffffffffffffffffffffffffffff809681809416895216602088015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040880152166060860152608085015260a08401521660c08201528160e082015201906128ca565b949095916122ff989793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e082015201906128ca565b94959290939573ffffffffffffffffffffffffffffffffffffffff9384881685841614600014613c9d5790613c90929185613c178a9b613bfd85897fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189c9d9e613899565b5173ffffffffffffffffffffffffffffffffffffffff1690565b16613c95576000925b8083604051988998169c339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b0390a4565b600192613c20565b84613cbf8a9994995173ffffffffffffffffffffffffffffffffffffffff1690565b1615613f9057613ce561206d613cdf61206060055461ffff9060101c1690565b8461260d565b613cef81846126b0565b613d1b81613d15610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b87613114565b896020868d8a60008b613da7613d48610b9d845473ffffffffffffffffffffffffffffffffffffffff1690565b9487613d68825173ffffffffffffffffffffffffffffffffffffffff1690565b910151908c8b6040519b8c9a8b998a987f199b83fa000000000000000000000000000000000000000000000000000000008a5216948060048a01613b3c565b03925af160009181613f6f575b50613ea35750505090613c909291613e23610b9d7fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af1898999a9b613e18613e12610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b87612fe1565b613bfd858988613899565b613e9b576000925b604051968796169a8382339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b600192613e2b565b919350917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af18979899613ef0610b9d613c90979d5173ffffffffffffffffffffffffffffffffffffffff1690565b613f6657806000945b604051998a99169d339d8a95919460ff956101009894929b9a999563ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b80600194613ef9565b613f8991925060203d6020116116e2576116d38183610887565b9038613db4565b908295969792939498600090828254613fbc9073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690613fdd9188613114565b81546040517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff998a166004820152868a16602482015260448101859052606481018690529b8816808a1660848e0152888a1660a48e01529b98168860c481855a94602095f1978883917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189a6141ee575b506141485750610b9d6140cb91613bfd85613c9098999a6140c56140bf610b9d895473ffffffffffffffffffffffffffffffffffffffff1690565b8d612fe1565b8b613899565b61413f57915b6040519586958382339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b506001916140d1565b92965090614172610b9d613c909695935173ffffffffffffffffffffffffffffffffffffffff1690565b6141e557925b80604051978897339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b50600192614178565b61420891925060203d6020116116e2576116d38183610887565b9038614084565b9490939295919573ffffffffffffffffffffffffffffffffffffffff9384821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee811461486a578561426a60025473ffffffffffffffffffffffffffffffffffffffff1690565b168091146146eb575084614292855173ffffffffffffffffffffffffffffffffffffffff1690565b16156145165760055460101c61ffff1661ffff166142b0908261260d565b620186a09004976142c189836126b0565b9060009182546142e49073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169a875161431a9073ffffffffffffffffffffffffffffffffffffffff1690565b9883169b60208901518d6040519b8c9283927f199b83fa0000000000000000000000000000000000000000000000000000000084528c888d85600488019661436197613ace565b0381855a94602095f1988985917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189b6144f5575b5061443f57505050610b9d613c90949596613bfd856143b3946139a5565b61443657905b60405194859482339a8792946101009460ff9373ffffffffffffffffffffffffffffffffffffffff6000989a99949a63ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee928360208a01526040890152166060870152608086015260a085015260c08401521660e08201520152565b506001906143b9565b92509350949161446a610b9d613c9096985173ffffffffffffffffffffffffffffffffffffffff1690565b6144ec57915b86604051978897339c8994909897969260ff94610100979363ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b50600191614470565b61450f91925060203d6020116116e2576116d38183610887565b9038614395565b9091969387937fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af18956000926020614564610b9d865473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f7dc2038200000000000000000000000000000000000000000000000000000000815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600482015273ffffffffffffffffffffffffffffffffffffffff898116602483015260448201899052606482019e909e52928416808e1660848501529c841660a4840152829060c490829089905af18491816146ca575b506146125750610b9d849392613bfd613c90966143b3946139a5565b91613c90949596939150610b9d61463d915173ffffffffffffffffffffffffffffffffffffffff1690565b6146c157915b85604051968796339b88939460ff9361010096600098939a999463ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b50600191614643565b6146e491925060203d6020116116e2576116d38183610887565b90386145f6565b8098939298959491953b156101db57600086916004604051809981937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1928315610d8f577fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af1896613c9094614857575b50614788828661478360025473ffffffffffffffffffffffffffffffffffffffff1690565b613899565b856147c66147ab60025473ffffffffffffffffffffffffffffffffffffffff1690565b945173ffffffffffffffffffffffffffffffffffffffff1690565b1661484f576000925b604051968796169a83339b88939460ff9361010096600098939a999463ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b6001926147cf565b80611eef61486492610803565b3861475e565b509182856148a37fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189796613bfd8c97613c90979d6139a5565b1661492b576000915b604051958695169982339a8792946101009460ff9373ffffffffffffffffffffffffffffffffffffffff6000989a99949a63ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee928360208a01526040890152166060870152608086015260a085015260c08401521660e08201520152565b6001916148ac565b6002815110614943576002015190565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152fd5b60207fffff000000000000000000000000000000000000000000000000000000000000916149d96004969594828151948592016128a7565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f02000000000000000000000000000000000000000000000000000000000000006003820152614a4082518093602086850191016128a7565b010190565b60207fffff00000000000000000000000000000000000000000000000000000000000091614a7d6004969594828151948592016128a7565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f03000000000000000000000000000000000000000000000000000000000000006003820152614a4082518093602086850191016128a7565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614b1357565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220d86ab1f4850c4b806fc805eab17198d1ddd7a233326a29d3276eee99c6b9524a64736f6c63430008160033