0 txs
0 calls
constructor
constructor(address _vePendle, address _pendleMsgSendEndpoint, uint256 initialApproxDestinationGas)
functions
addPoolHelper
viewfunction addPoolHelper() view returns (address)
approxDstExecutionGas
viewfunction approxDstExecutionGas() view returns (uint256)
deployedWTime
viewfunction deployedWTime() view returns (uint128)
getActiveChainPools
viewfunction getActiveChainPools(uint64 chainId) view returns (address[])
getAllActivePools
viewfunction getAllActivePools() view returns (address[])
getAllDestinationContracts
viewfunction getAllDestinationContracts() view returns (uint256[] chainIds, address[] addrs)
getAllRemovedPools
viewfunction getAllRemovedPools(uint256 start, uint256 end) view returns (uint256 lengthOfRemovedPools, address[] arr)
getBroadcastResultFee
viewfunction getBroadcastResultFee(uint64 chainId) view returns (uint256)
getPoolCap
viewfunction getPoolCap(address pool) view returns (uint256)
getPoolData
viewfunction getPoolData(address pool, uint128[] wTimes) view returns (uint64 chainId, uint128 lastSlopeChangeAppliedAt, tuple totalVote, uint128[] slopeChanges)
getPoolTotalVoteAt
viewfunction getPoolTotalVoteAt(address pool, uint128 wTime) view returns (uint128)
getUserData
viewfunction getUserData(address user, address[] pools) view returns (uint64 totalVotedWeight, tuple[] voteForPools)
getUserPoolHistoryAt
viewfunction getUserPoolHistoryAt(address user, address pool, uint256 index) view returns (tuple)
getUserPoolHistoryLength
viewfunction getUserPoolHistoryLength(address user, address pool) view returns (uint256)
getUserPoolVote
viewfunction getUserPoolVote(address user, address pool) view returns (tuple)
getWeekData
viewfunction getWeekData(uint128 wTime, address[] pools) view returns (bool isEpochFinalized, uint128 totalVotes, uint128[] poolVotes)
globalCap
viewfunction globalCap() view returns (uint256)
GOVERNANCE_PENDLE_VOTE
viewfunction GOVERNANCE_PENDLE_VOTE() view returns (uint128)
MAX_LOCK_TIME
viewfunction MAX_LOCK_TIME() view returns (uint128)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendleMsgSendEndpoint
viewfunction pendleMsgSendEndpoint() view returns (address)
pendlePerSec
viewfunction pendlePerSec() view returns (uint128)
poolCaps
viewfunction poolCaps(address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
removePoolHelper
viewfunction removePoolHelper() view returns (address)
vePendle
viewfunction vePendle() view returns (address)
WEEK
viewfunction WEEK() view returns (uint128)
addDestinationContract
payablefunction addDestinationContract(address _address, uint256 _chainId) payable
addMultiPools
nonpayablefunction addMultiPools(uint64[] chainIds, address[] pools)
addPool
nonpayablefunction addPool(uint64 chainId, address pool)
applyPoolSlopeChanges
nonpayablefunction applyPoolSlopeChanges(address pool)
broadcastResults
payablefunction broadcastResults(uint64 chainId) payable
claimOwnership
nonpayablefunction claimOwnership()
finalizeEpoch
nonpayablefunction finalizeEpoch()
forceBroadcastResults
payablefunction forceBroadcastResults(uint64 chainId, uint128 wTime, uint128 forcedPendlePerSec) payable
initialize
nonpayablefunction initialize(address _owner)
removePool
nonpayablefunction removePool(address pool)
setAddPoolHelper
nonpayablefunction setAddPoolHelper(address _helper)
setApproxDstExecutionGas
nonpayablefunction setApproxDstExecutionGas(uint256 gas)
setGlobalCap
nonpayablefunction setGlobalCap(uint256 cap)
setPendlePerSec
nonpayablefunction setPendlePerSec(uint128 newPendlePerSec)
setPoolCaps
nonpayablefunction setPoolCaps(address[] pools, uint256[] caps)
setRemovePoolHelper
nonpayablefunction setRemovePoolHelper(address _helper)
transferOwnership
nonpayablefunction transferOwnership(address newOwner, bool direct, bool renounce)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
vote
nonpayablefunction vote(address[] pools, uint64[] weights)
events
AddPool
event AddPool(uint64 indexed chainId, address indexed pool)
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
BroadcastResults
event BroadcastResults(uint64 indexed chainId, uint128 indexed wTime, uint128 totalPendlePerSec)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PoolVoteChange
event PoolVoteChange(address indexed pool, (uint128 bias, uint128 slope) vote)
RemovePool
event RemovePool(uint64 indexed chainId, address indexed pool)
SetGlobalCap
event SetGlobalCap(uint256 cap)
SetPendlePerSec
event SetPendlePerSec(uint256 newPendlePerSec)
SetPoolCaps
event SetPoolCaps(address[] pools, uint256[] caps)
Upgraded
event Upgraded(address indexed implementation)
Vote
event Vote(address indexed user, address indexed pool, uint64 weight, (uint128 bias, uint128 slope) vote)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
ArrayOutOfBounds
error ArrayOutOfBounds()
InsufficientFeeToSendMsg
error InsufficientFeeToSendMsg(uint256 currentFee, uint256 requiredFee)
InvalidWTime
error InvalidWTime(uint256 wTime)
VCEpochNotFinalized
error VCEpochNotFinalized(uint256 wTime)
VCExceededMaxWeight
error VCExceededMaxWeight(uint256 totalWeight, uint256 maxWeight)
VCInactivePool
error VCInactivePool(address pool)
VCInvalidCap
error VCInvalidCap(uint256 cap)
VCPoolAlreadyActive
error VCPoolAlreadyActive(address pool)
VCPoolAlreadyAddAndRemoved
error VCPoolAlreadyAddAndRemoved(address pool)
VCZeroVePendle
error VCZeroVePendle(address user)
VEZeroSlope
error VEZeroSlope(uint128 bias, uint128 slope)
creation bytecode
0x60e034620001ed57601f620053e138819003918201601f19168301916001600160401b03831184841017620001f157808492606094604052833981010312620001ed576200004d8162000205565b60406200005d6020840162000205565b9201516001600160a01b039283166080526032551660a0523060c0526001805460a881901c60ff1615908180620001dd575b8015620001c2575b15620001665760ff60a01b198116600160a01b178355816200014e575b5062000110575b6040516151c690816200021b82396080518181816113f701528181613c830152614684015260a05181818161146501528181611f420152612063015260c0518181816123ed015281816125690152612e8c0152f35b805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a15f620000bb565b61ffff60a01b191661010160a01b1782555f620000b4565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156200009757508260ff8260a01c161462000097565b508260ff8260a01c16106200008f565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620001ed5756fe60806040526004361015610011575f80fd5b5f3560e01c8063078dfbe71461353357806313d65dcb146132e757806316ac7e30146132425780631c9bdb49146131bc578063210490281461314c5780632477bfbe1461310b5780632982d519146130ba5780633659cfe614612e3b578063366c771d14612cc857806338b8765c14612c8e5780633b7d094614612aaf5780633e39b650146129d157806349be407d146129485780634e71e0c8146128425780634f1ef286146124c157806352d1902d146123a857806359255706146122e1578063632c096d146121d9578063646fb67c146120f5578063698766ee1461169d5780636aea28261461162457806382ae9ef71461148957806382dabb211461141b57806389c071ea146113ad5780638d66c284146112685780638da5cb5b146112185780638f45ff781461105957806392a8b2d314610ff6578063945f183814610f7e57806399a2af7514610f435780639efc757514610f085780639f752aef14610e7f578063a0e1163414610e2e578063a71f6f5f14610da1578063b292bf9514610d54578063bfa5b32414610d11578063c291230d14610c4b578063c4d66de81461094e578063cc88370e1461078a578063d45f5e2114610731578063d5cd7d2014610683578063d68ffecb14610539578063e30c3978146104e8578063e5c649351461036d578063f144cf17146102e2578063f4359ce5146102a7578063f7f03fea146102695763fa78668f14610229575f80fd5b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655760206040516303bfc4008152f35b5f80fd5b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576020609a5460801c604051908152f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602060405162093a808152f35b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602061031b6136b4565b6fffffffffffffffffffffffffffffffff9081610336613820565b165f5260a1835273ffffffffffffffffffffffffffffffffffffffff600160405f200191165f52825260405f205416604051908152f35b346102655761037b366139b2565b73ffffffffffffffffffffffffffffffffffffffff939193928360a45416331480156104dc575b6103ab90613a7c565b8181036104b257925f5b84811061046c575060405193806040860160408752526060850193915f905b828210610448575050505082820360208401528082527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610265577ff928912629bf241f6bddb48fd8de3f071422321e8118042858e8e4a901d2566993602092849260051b80928583013701030190a1005b9091929460019082610459886136fa565b16815260209081019601939201906103d4565b806104856104806001938888999699613e31565b6141d1565b8661049183878b613e31565b359161049c83614c74565b165f5260a660205260405f2055019390936103b5565b60046040517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b505f54841633146103a2565b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576105706137c0565b6105786136d7565b9073ffffffffffffffffffffffffffffffffffffffff8060a4541633148015610677575b6105a590613a7c565b8216916105bd835f52609c60205260405f2054151590565b610646576105d6835f52609e60205260405f2054151590565b61061557906105ee67ffffffffffffffff9282614214565b167f336f0b3cc523e98d21e261389542b62abaffc094a21a82f1eec2779d7c8323cb5f80a3005b602483604051907f4753d2830000000000000000000000000000000000000000000000000000000082526004820152fd5b602483604051907f9e7f1f410000000000000000000000000000000000000000000000000000000082526004820152fd5b505f548116331461059c565b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655760405180609b5491828152602080910192609b5f527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc349915f905b82821061071a576107168561070281890382613767565b6040519182916020835260208301906137d7565b0390f35b8354865294850194600193840193909101906106eb565b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761078273ffffffffffffffffffffffffffffffffffffffff5f54163314613a17565b600435603255005b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557609d8054600435602480359083821015610924576107d78383614207565b92600193600181018091116108f7576107ef90613af5565b95815b8481111561081857878761071660405192839283526040602084015260408301906137d7565b868110156108cb57815f5273ffffffffffffffffffffffffffffffffffffffff817fd26e832454299e9fabb89e0e5fffdc046d4e14431bc1bf607ffb2e8a1ddecf7b01541661087061086a8584614207565b8a613ae1565b527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461089f5785016107f2565b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60046040517f7f52b2bf000000000000000000000000000000000000000000000000000000008152fd5b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576109856136b4565b600190815460ff8160a81c161590818092610c3c575b8015610c23575b15610b9f5781740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8316178555610b5d575b5082549160ff8360a81c1615610ad95773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f556fffffffffffffffffffffffffffffffff610a5762093a8082421604614a35565b167fffffffffffffffffffffffffffffffff00000000000000000000000000000000609a541617609a55610a8757005b7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498917fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff602092168155604051908152a1005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167501010000000000000000000000000000000000000000178355836109e9565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b1580156109a257508360ff8260a01c16146109a2565b508360ff8260a01c161061099b565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557610c7d6137c0565b6fffffffffffffffffffffffffffffffff90610c9f62093a8083421604614a35565b91821691825f5260a160205260ff60405f20541615610ce057610ccd9250609a5460801c9060a75492614465565b47610cd457005b610cde473361433b565b005b602483604051907f760c443c0000000000000000000000000000000000000000000000000000000082526004820152fd5b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655760206040516a084595161401484a0000008152f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655760206fffffffffffffffffffffffffffffffff609a5416604051908152f35b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265577f8cbc4fe2c8f6dfa7ac4f8affa74f9664acfb5c6fd044f51706e458cb5a8b8fa46020600435610e1873ffffffffffffffffffffffffffffffffffffffff5f54163314613a17565b610e2181614c74565b8060a755604051908152a1005b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602073ffffffffffffffffffffffffffffffffffffffff60a55416604051908152f35b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557610eb66136b4565b73ffffffffffffffffffffffffffffffffffffffff90610eda825f54163314613a17565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060a454161760a4555f80f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576020603254604051908152f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602060a754604051908152f35b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655773ffffffffffffffffffffffffffffffffffffffff610fca6136b4565b165f90815260a660205260409020548015610feb576020905b604051908152f35b50602060a754610fe3565b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655773ffffffffffffffffffffffffffffffffffffffff6110426136b4565b165f5260a6602052602060405f2054604051908152f35b34610265576110673661388f565b909173ffffffffffffffffffffffffffffffffffffffff8091165f52602060a2815260405f209367ffffffffffffffff80865416946110a5816137a8565b946110b36040519687613767565b8186527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06110e0836137a8565b015f5b8181106111f35750505f916001809901925b8181106111925750505050505060405193849360408501908552604083860152835180915260609280606087019501935f905b8382106111355787870388f35b9185975082876111808799849895979951805167ffffffffffffffff16825260209081015180516fffffffffffffffffffffffffffffffff9081168385015291015116604090910152565b01970192018796959391949294611128565b9889836111a7610480849b9c9a9d868b613e31565b165f52848b5260405f206111ce83604051926111c28461371b565b89815416845201613e03565b8c8201526111dc828c613ae1565b526111e7818b613ae1565b500198959796986110f5565b958099979896611204969496614189565b82828c0101520198959796989492946110e3565b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761129f61383f565b60243567ffffffffffffffff8111610265576112bf90369060040161385e565b6fffffffffffffffffffffffffffffffff80931662093a80810661137c575f9291925260209060a160205260405f20908154936112fb81613af5565b936001938401915f5b81811061133957888861071689604051938360ff8695161515855260081c1660208401526060604084015260608301906138fe565b8073ffffffffffffffffffffffffffffffffffffffff61135e6104808994868a613e31565b165f528484528960405f205416611375828a613ae1565b5201611304565b602490604051907ff7e2d9d20000000000000000000000000000000000000000000000000000000082526004820152fd5b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557609b80545f5b8181106115a0576fffffffffffffffffffffffffffffffff6114e562093a8082421604614a35565b5b8180609a5416911690811180611589575b15610cde57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c580915f5260a160205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905501818111156114e6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50805f5260a160205260ff60405f205416156114f7565b82548110156115f757600190835f526115f173ffffffffffffffffffffffffffffffffffffffff827fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc349015416613e82565b016114bd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761165b6136b4565b6116636136d7565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260a360205260405f2091165f52602052602060405f2054604051908152f35b34610265576116ab366139b2565b92908383036104b25773ffffffffffffffffffffffffffffffffffffffff5f5416331493841580612019575b611fe957604051946116e88661371b565b5f808752602087015215611ef9576fffffffffffffffffffffffffffffffff6303bfc400814216018181116108f75762093a8082611727921604614a35565b1660208601526a084595161401484a00000085525b5f5b8481106117a557335f5260a260205267ffffffffffffffff60405f205416670de0b6b3a76400009081811161176f57005b604491604051917f903482f500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6117dd73ffffffffffffffffffffffffffffffffffffffff6117cb610480848989613e31565b165f52609c60205260405f2054151590565b611ede575b6117f0610480828787613e31565b906118046117ff828587613e31565b6141f2565b6040516118108161371b565b5f81525f602082015290335f5260a260205260405f209073ffffffffffffffffffffffffffffffffffffffff85165f5260a060205260405f209160018101602052611860600160405f2001613e03565b6fffffffffffffffffffffffffffffffff815116611cbf575b5067ffffffffffffffff8216611989575b50507fa512c82e73ec974de3c794a3ea6bbdfbad18531c1394ace9972f3f0166b67863604073ffffffffffffffffffffffffffffffffffffffff6001968783519501546fffffffffffffffffffffffffffffffff8116865260801c60208601521692a273ffffffffffffffffffffffffffffffffffffffff611910610480848a8a613e31565b61195b6119216117ff86898b613e31565b9367ffffffffffffffff604051951685526020850190602090816fffffffffffffffffffffffffffffffff91828151168552015116910152565b16907fc71e393f1527f71ce01b78ea87c9bd4fca84f1482359ce7ac9b73f358c61b1e160603392a30161173e565b9092506119b773ffffffffffffffffffffffffffffffffffffffff86165f52609c60205260405f2054151590565b15611c7857604051926119c98461371b565b5f84525f6020850152670de0b6b3a76400006303bfc400611a088d6fffffffffffffffffffffffffffffffff67ffffffffffffffff8616915116614452565b04046fffffffffffffffffffffffffffffffff811161026557611a4b8c6fffffffffffffffffffffffffffffffff6020818095169283828b015201511690614a5b565b168452611bff846fffffffffffffffffffffffffffffffff6020611a7160018801613e03565b611b038380611ab5818660405196611a888861371b565b5f88525f8289015282611aa38c828085511691511690613e5e565b16885201511682878a01511690613e5e565b1683850181905292517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060809490941b841691166fffffffffffffffffffffffffffffffff161760018a0155565b82828501511683611b1386614bbd565b165f5260028901835260405f20908285611b31845493828516613e5e565b1691161790556001604051611b458161371b565b67ffffffffffffffff8816815283810195865273ffffffffffffffffffffffffffffffffffffffff8d165f52818901845267ffffffffffffffff60405f209151167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781550193519083825116908554161784550151166fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b81549067ffffffffffffffff80821681841601116108f75767ffffffffffffffff90811681831601167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000919091161790557fa512c82e73ec974de3c794a3ea6bbdfbad18531c1394ace9972f3f0166b67863604061188a565b60248573ffffffffffffffffffffffffffffffffffffffff604051917f913accad000000000000000000000000000000000000000000000000000000008352166004820152fd5b611cea73ffffffffffffffffffffffffffffffffffffffff88165f52609c60205260405f2054151590565b80611e9b575b611da2575b5073ffffffffffffffffffffffffffffffffffffffff86165f526001810160205267ffffffffffffffff60405f20541681549067ffffffffffffffff8181841603116108f75767ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000918184160316911617815573ffffffffffffffffffffffffffffffffffffffff86165f52600181016020525f60016040822082815501558b611879565b60018401906fffffffffffffffffffffffffffffffff611e6181611dc585613e03565b611e5960405191611dd58361371b565b5f835283806020808601935f855282611df68c828085511691511690614a13565b1687520151169381611e1060208b01968288511690614a13565b1692839052517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060809390931b831691166fffffffffffffffffffffffffffffffff1617909755565b511692614bbd565b165f526002850160205260405f20916fffffffffffffffffffffffffffffffff611e8f845493828516614a13565b1691161790558b611cf5565b506fffffffffffffffffffffffffffffffff60208201511615158015611cf057506fffffffffffffffffffffffffffffffff611ed682614bbd565b164210611cf0565b611ef4611eef610480838888613e31565b613e82565b6117e2565b6040517fcb6b4f3c00000000000000000000000000000000000000000000000000000000815233600482015260408160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611fde575f905f92611f96575b506fffffffffffffffffffffffffffffffff809216602088015216855261173c565b9150506040813d604011611fd6575b81611fb260409383613767565b8101031261026557611fcf6020611fc8836141b4565b92016141b4565b9087611f74565b3d9150611fa5565b6040513d5f823e3d90fd5b60246040517fe7640c03000000000000000000000000000000000000000000000000000000008152336004820152fd5b506040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015611fde575f906120ac575b6fffffffffffffffffffffffffffffffff915016156116d7565b506020813d6020116120ed575b816120c660209383613767565b81010312610265576120e86fffffffffffffffffffffffffffffffff916141b4565b612092565b3d91506120b9565b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761212c6136b4565b6121346136d7565b9061213d614189565b5073ffffffffffffffffffffffffffffffffffffffff8091165f5260a2602052600160405f200191165f52602052606060405f206121976001604051926121838461371b565b67ffffffffffffffff815416845201613e03565b602082810191825260408051935167ffffffffffffffff168452915180516fffffffffffffffffffffffffffffffff908116858401529101511690820152f35bf35b346102655760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576122106136b4565b6122186136d7565b60443591612224614189565b5073ffffffffffffffffffffffffffffffffffffffff8091165f5260a360205260405f2091165f5260205260405f209061225c614189565b5081548110156115f7576060915f5260205f209060011b016121d7604051916122848361371b565b6122a760016fffffffffffffffffffffffffffffffff9283815416865201613e03565b90602084019182526040519351168352516020830190602090816fffffffffffffffffffffffffffffffff91828151168552015116910152565b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265577ffe870af61f024df0d7f960ad100676f3ffaa7ea6a44bc6c7adf2756cb8cf4b38602061233b61383f565b61235d73ffffffffffffffffffffffffffffffffffffffff5f54163314613a17565b6fffffffffffffffffffffffffffffffff609a54817fffffffffffffffffffffffffffffffff000000000000000000000000000000008460801b16911617609a5560405191168152a1005b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361243d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576124f36136b4565b6024359067ffffffffffffffff8211610265573660238301121561026557816004013561251f81613976565b9261252d6040519485613767565b81845260209182850191366024838301011161026557815f92602486930185378601015273ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169061259682301415613ced565b6125c57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc928284541614613d78565b6125d3815f54163314613a17565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561260b5750505050610cde9150614ad1565b84939416906040517f52d1902d0000000000000000000000000000000000000000000000000000000081528581600481865afa5f9181612813575b506126cf57608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152fd5b0361278f576126dd83614ad1565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2835115801590612787575b61271257005b5f8091610cde957f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c604051966127478861374b565b602788528701527f206661696c65640000000000000000000000000000000000000000000000000060408701525190845af461278161430c565b916150c0565b50600161270c565b608484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152fd5b9091508681813d831161283b575b61282b8183613767565b8101031261026557519088612646565b503d612821565b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655760015473ffffffffffffffffffffffffffffffffffffffff908181168033036128ea57805f549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000928316175f5516600155005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761297f6136b4565b73ffffffffffffffffffffffffffffffffffffffff906129a3825f54163314613a17565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060a554161760a5555f80f35b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557603354612a0b81613af5565b90612a1581613af5565b905f5b818110612a4957612a3b8461071685604051938493604085526040850190613943565b9083820360208501526137d7565b806001917f82a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a820154805f52603560205273ffffffffffffffffffffffffffffffffffffffff60405f205416612a9d8387613ae1565b52612aa88287613ae1565b5201612a18565b34610265576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557612ae76136b4565b73ffffffffffffffffffffffffffffffffffffffff8060a5541633148015612c82575b15612c2457811691612b27835f52609c60205260405f2054151590565b15612bf357825f5260a0815267ffffffffffffffff612b4c8160405f20541693613e82565b835f5260a0825260405f2054165f52609f8152612b6c8360405f20614ff8565b15612bc657612b7a83614f01565b15612bc657612b8883614d28565b15612bc65760a090835f52525f60016040822082815501557ff2e3b584c4d1ed5ead9a4b7de2a8225fd42d13f09e417cd294d03f1dd07fc9145f80a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b602483604051907f913accad0000000000000000000000000000000000000000000000000000000082526004820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f72656d6f766520706f6f6c206e6f7420616c6c6f7765640000000000000000006044820152fd5b50805f54163314612b0a565b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557610cde611eef6136b4565b3461026557612cd63661388f565b604051919273ffffffffffffffffffffffffffffffffffffffff90612cfa8461371b565b5f84525f602080950152165f5260a060205260405f20918254926fffffffffffffffffffffffffffffffff94600191612d3560018201613e03565b93612d3f86613af5565b9560025f9301925b818110612dae5789896107168a612d9d8b604051958567ffffffffffffffff889716875260401c1660208601526040850190602090816fffffffffffffffffffffffffffffffff91828151168552015116910152565b60a0608084015260a08301906138fe565b62093a808a612dc6612dc184868a613e31565b613e41565b1606612dfb57808a612ddd612dc18994868a613e31565b165f528484528a60405f205416612df4828b613ae1565b5201612d47565b612e0c612dc18b9260249488613e31565b6040517ff7e2d9d200000000000000000000000000000000000000000000000000000000815291166004820152fd5b34610265576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557612e736136b4565b73ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001692612eb984301415613ced565b612ee87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc948286541614613d78565b612ef6815f54163314613a17565b604051938285019185831067ffffffffffffffff84111761308d57826040525f865260ff7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914354165f14612f515750505050610cde9150614ad1565b84939416906040517f52d1902d0000000000000000000000000000000000000000000000000000000081528581600481865afa5f918161305e575b5061301557608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152fd5b0361278f5761302383614ad1565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28351158015906130575761271257005b505f61270c565b9091508681813d8311613086575b6130768183613767565b8101031261026557519088612f8c565b503d61306c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610265575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557602073ffffffffffffffffffffffffffffffffffffffff60a45416604051908152f35b346102655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576020610fe36131476137c0565b613b84565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261026557610cde6131816136b4565b6024359073ffffffffffffffffffffffffffffffffffffffff906131a9825f54163314613a17565b825f5260356020521660405f2055614cb7565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610265576131ee6137c0565b6131f6613820565b906044356fffffffffffffffffffffffffffffffff8116810361026557610ccd9261323973ffffffffffffffffffffffffffffffffffffffff5f54163314613a17565b60a75492614465565b34610265576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655767ffffffffffffffff6132836137c0565b165f52609f815260405f20906040518083838295549384815201905f52835f20925f5b858282106132d1575050506132bd92500383613767565b6107166040519282849384528301906137d7565b85548452600195860195889550930192016132a6565b346102655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655767ffffffffffffffff6004358181116102655736602382011215610265578060040135602492613345826137a8565b926133536040519485613767565b828452602092858486019160051b83010191368311610265578601905b82821061351b5750505083359181831161026557366023840112156102655782600401359261339e846137a8565b936133ac6040519586613767565b808552868386019160051b83010191368311610265578701905b828210613504575050505073ffffffffffffffffffffffffffffffffffffffff908160a45416331480156134f8575b6133fe90613a7c565b83518351036104b2575f5b8451811015610cde578161341d8287613ae1565b51168361342a8387613ae1565b511690613442825f52609c60205260405f2054151590565b6134c85761345b825f52609e60205260405f2054151590565b61349857908161346e8260019594614214565b7f336f0b3cc523e98d21e261389542b62abaffc094a21a82f1eec2779d7c8323cb5f80a301613409565b8782604051907f4753d2830000000000000000000000000000000000000000000000000000000082526004820152fd5b8782604051907f9e7f1f410000000000000000000000000000000000000000000000000000000082526004820152fd5b505f54821633146133f5565b838091613510846136fa565b8152019101906133c6565b81358481168103610265578152908401908401613370565b346102655760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102655761356a6136b4565b6024358015158103610265576044359081151582036102655773ffffffffffffffffffffffffffffffffffffffff9283916135a9835f54163314613a17565b1561368357169081159081159161367b575b501561361d57805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b9050836135bb565b915050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361026557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361026557565b359073ffffffffffffffffffffffffffffffffffffffff8216820361026557565b6040810190811067ffffffffffffffff82111761308d57604052565b67ffffffffffffffff811161308d57604052565b6060810190811067ffffffffffffffff82111761308d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761308d57604052565b67ffffffffffffffff811161308d5760051b60200190565b6004359067ffffffffffffffff8216820361026557565b9081518082526020808093019301915f5b8281106137f6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016137e8565b602435906fffffffffffffffffffffffffffffffff8216820361026557565b600435906fffffffffffffffffffffffffffffffff8216820361026557565b9181601f840112156102655782359167ffffffffffffffff8311610265576020808501948460051b01011161026557565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126102655760043573ffffffffffffffffffffffffffffffffffffffff8116810361026557916024359067ffffffffffffffff8211610265576138fa9160040161385e565b9091565b9081518082526020808093019301915f5b82811061391d575050505090565b83516fffffffffffffffffffffffffffffffff168552938101939281019260010161390f565b9081518082526020808093019301915f5b828110613962575050505090565b835185529381019392810192600101613954565b67ffffffffffffffff811161308d57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102655767ffffffffffffffff9160043583811161026557826139fd9160040161385e565b93909392602435918211610265576138fa9160040161385e565b15613a1e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15613a8357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f61646420706f6f6c206e6f7420616c6c6f7765640000000000000000000000006044820152fd5b80518210156115f75760209160051b010190565b90613aff826137a8565b613b0c6040519182613767565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613b3a82946137a8565b0190602036910137565b91613b73906fffffffffffffffffffffffffffffffff613b8195931684526060602085015260608401906137d7565b916040818403910152613943565b90565b67ffffffffffffffff16468114613ce857805f52602090609f825260405f20548015613ce157613be4613c2182613bc4613bbe8795613af5565b91613af5565b90613c156040519485925f888501526060604085015260808401906137d7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09384848303016060850152613943565b03908101835282613767565b73ffffffffffffffffffffffffffffffffffffffff80613c4085614e73565b169360325494613c7f604051968795869485947f84fe1721000000000000000000000000000000000000000000000000000000008652600486016149d6565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa918215611fde575f92613cb757505090565b90809250813d8311613cda575b613cce8183613767565b81010312610265575190565b503d613cc4565b5050505f90565b505f90565b15613cf457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152fd5b15613d7f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152fd5b90604051613e108161371b565b91546fffffffffffffffffffffffffffffffff8116835260801c6020830152565b91908110156115f75760051b0190565b356fffffffffffffffffffffffffffffffff811681036102655790565b9190916fffffffffffffffffffffffffffffffff808094169116019182116108f757565b73ffffffffffffffffffffffffffffffffffffffff16613ead815f52609c60205260405f2054151590565b1561415857805f5260a060209060a082526fffffffffffffffffffffffffffffffff9160409280845f2054851c169162093a809382613eef8682421604614a35565b16908185101561414e57939594875f5260a083526001948591613f166001895f2001613e03565b965b614015575b5050505f87815260a083528590208451928501517fffffffffffffffffffffffffffffffff0000000000000000000000000000000090851660801b16939092166fffffffffffffffffffffffffffffffff169290921760018201557fa512c82e73ec974de3c794a3ea6bbdfbad18531c1394ace9972f3f0166b6786394613fe792507fffffffffffffffff00000000000000000000000000000000ffffffffffffffff77ffffffffffffffffffffffffffffffff000000000000000083549260401b169116179055565b61401282518092602090816fffffffffffffffffffffffffffffffff91828151168552015116910152565ba2565b9091929697858116908882101561414657508101968588116108f7578388978b5f528487528a5f2060020190888b1691825f528852888b8d8280825f2054169151946140608661371b565b5f86528c828481838a01935f8552850151169061407c91614a13565b16905251169161408b91614a5b565b61409491614a13565b168152809a6140a291614a82565b90805f5260a1908189528c5f2080546008858d83831c16906140c391613e5e565b901b70ffffffffffffffffffffffffffffffff0016907fffffffffffffffffffffffffffffff00000000000000000000000000000000ff161790555f528752818b5f20018c5f528752878b5f20911681547fffffffffffffffffffffffffffffffff00000000000000000000000000000000161790559291909398979698613f18565b989750613f1d565b5050505050505050565b602490604051907f913accad0000000000000000000000000000000000000000000000000000000082526004820152fd5b604051906141968261371b565b5f82526040516020836141a88361371b565b5f83525f828401520152565b51906fffffffffffffffffffffffffffffffff8216820361026557565b3573ffffffffffffffffffffffffffffffffffffffff811681036102655790565b3567ffffffffffffffff811681036102655790565b919082039182116108f757565b67ffffffffffffffff1690815f52609f60205261424c73ffffffffffffffffffffffffffffffffffffffff60405f2092168092614e21565b15612bc65761425a81614d99565b15612bc6576139b091815f5260a060205260405f20907fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556142b762093a806fffffffffffffffffffffffffffffffff421604614a35565b905f5260a060205260405f20907fffffffffffffffff00000000000000000000000000000000ffffffffffffffff77ffffffffffffffffffffffffffffffff000000000000000083549260401b169116179055565b3d15614336573d9061431d82613976565b9161432b6040519384613767565b82523d5f602084013e565b606090565b8147106143f4575f80809373ffffffffffffffffffffffffffffffffffffffff8294165af161436861430c565b501561437057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b818102929181159184041417156108f757565b92906fffffffffffffffffffffffffffffffff81165f5260a16020526fffffffffffffffffffffffffffffffff60405f205460081c168015806149725767ffffffffffffffff86165f52609f60205260405f2091825490811561414e576040519360208584815201905f528460205f20915f5b85811061495857506144ec92500385613767565b6144f582613af5565b955f5b83811061482657505050505067ffffffffffffffff851646036145f35773ffffffffffffffffffffffffffffffffffffffff61453d67ffffffffffffffff8716614e73565b1692833b1561026557614583935f92836040518097819582947f72cbf8700000000000000000000000000000000000000000000000000000000084528960048501613b44565b03925af1918215611fde576fffffffffffffffffffffffffffffffff60209267ffffffffffffffff927fc78a580f215ba474e75ecbd7636c375e8d2cd25edb0f2467f99b2d0752e104ba956145e4575b505b816040519616865216941692a3565b6145ed90613737565b5f6145d3565b6146369061460a6040519485928560208501613b44565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283613767565b67ffffffffffffffff84165f52603460205260405f205415612bc6578173ffffffffffffffffffffffffffffffffffffffff8061467c67ffffffffffffffff8816614e73565b1690603254907f00000000000000000000000000000000000000000000000000000000000000001690602067ffffffffffffffff896146eb8460405198899485947f84fe17210000000000000000000000000000000000000000000000000000000086521689600486016149d6565b0381855afa938415611fde575f946147f2575b508347106147ba57813b15610265575f938861475567ffffffffffffffff93604051998a97889687957fb2267a7b0000000000000000000000000000000000000000000000000000000087521690600486016149d6565b03925af1918215611fde576fffffffffffffffffffffffffffffffff60209267ffffffffffffffff927fc78a580f215ba474e75ecbd7636c375e8d2cd25edb0f2467f99b2d0752e104ba956147ab575b506145d5565b6147b490613737565b5f6147a5565b6044844790604051917fe098b7ca00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b9093506020813d60201161481e575b8161480e60209383613767565b810103126102655751925f6146fe565b3d9150614801565b6fffffffffffffffffffffffffffffffff87165f5260a1602052600160405f20019073ffffffffffffffffffffffffffffffffffffffff9182614869838a613ae1565b51165f526020526fffffffffffffffffffffffffffffffff60405f205416916148928289613ae1565b51165f90815260a660205260409020548015614951575b670de0b6b3a764000092838102908082048514901517156108f75787614924578590048082101561491c5750915b62093a806fffffffffffffffffffffffffffffffff8c168181029181159183041417156108f75760019361490a91614452565b04614915828b613ae1565b52016144f8565b9050916148d7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50826148a9565b9150600160208192855481520193019101918691926144d8565b505050505050565b91908251928382525f5b8481106149c25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201614984565b94939260609273ffffffffffffffffffffffffffffffffffffffff614a0e93168752602087015260806040870152608086019061497a565b930152565b6fffffffffffffffffffffffffffffffff91821690821603919082116108f757565b9062093a806fffffffffffffffffffffffffffffffff809316029182169182036108f757565b9190916fffffffffffffffffffffffffffffffff808094169116029182169182036108f757565b602081016fffffffffffffffffffffffffffffffff92839283614aa88382865116614a5b565b9151169384911611614ac957613b8193614ac3925116614a5b565b90614a13565b505050505f90565b803b15614b395773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b60208101906fffffffffffffffffffffffffffffffff90818351168015614bf05750519151811691168115614924570490565b82604492511690604051917ffbd384a500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b609b548110156115f757609b5f527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34901905f90565b80548210156115f7575f5260205f2001905f90565b670de0b6b3a76400008111614c865750565b602490604051907f701170a20000000000000000000000000000000000000000000000000000000082526004820152fd5b805f52603460205260405f2054155f14613ce8576033546801000000000000000081101561308d5760018101806033558110156115f75781907f82a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a820155603354905f52603460205260405f2055600190565b805f52609e60205260405f2054155f14613ce857609d546801000000000000000081101561308d576001810180609d558110156115f75781907fd26e832454299e9fabb89e0e5fffdc046d4e14431bc1bf607ffb2e8a1ddecf7b0155609d54905f52609e60205260405f2055600190565b805f52609c60205260405f2054155f14613ce857609b546801000000000000000081101561308d57614e0a614dd5826001859401609b55614c2a565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b9055609b54905f52609c60205260405f2055600190565b6001810190825f528160205260405f2054155f14613ce15780546801000000000000000081101561308d57614e60614dd5826001879401855584614c5f565b905554915f5260205260405f2055600190565b5f52603560205260405f20548015801590614eef575b15614e915790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152fd5b50603460205260405f20541515614e89565b5f818152609c60205260409020548015614ff2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908181018181116108f757609b54908382019182116108f757808203614fbe575b505050609b548015614f9157810190614f6f82614c2a565b909182549160031b1b19169055609b555f52609c6020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b614fdc614fcd614dd593614c2a565b90549060031b1c928392614c2a565b90555f52609c60205260405f20555f8080614f57565b50505f90565b906001820191815f528260205260405f2054908115155f14614ac9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918281018181116108f7578254908482019182116108f75780820361508b575b50505080548015614f915782019161506d8383614c5f565b909182549160031b1b19169055555f526020525f6040812055600190565b6150ab61509b614dd59386614c5f565b90549060031b1c92839286614c5f565b90555f528460205260405f20555f8080615055565b9192901561513b57508151156150d4575090565b3b156150dd5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561514e5750805190602001fd5b61518c906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061497a565b0390fdfea2646970667358221220d053e564fabcf03e3585ca8b227d30616b48f243ac923a6417182f9cb73baa3164736f6c634300081800330000000000000000000000004f30a9d41b80ecc5b94306ab4364951ae317021000000000000000000000000007b1014c88f14c9e910092526db57a20052e989f00000000000000000000000000000000000000000000000000000000000f4240