0 txs
273 calls
constructor
constructor(address _contango)
functions
baseQuoteRate
viewfunction baseQuoteRate(bytes32 positionId) view returns (uint256)
contango
viewfunction contango() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
limits
viewfunction limits(bytes32 positionId) view returns (tuple limits_)
liquidity
viewfunction liquidity(bytes32 positionId) view returns (uint256 borrowing, uint256 lending)
moneyMarketId
viewfunction moneyMarketId(bytes32 positionId) view returns (uint8)
moneyMarketId
viewfunction moneyMarketId(uint8 mmId) view returns (uint8)
moneyMarketName
viewfunction moneyMarketName(bytes32 positionId) view returns (string)
moneyMarketName
viewfunction moneyMarketName(uint8 mmId) view returns (string)
moneyMarketView
viewfunction moneyMarketView(bytes32 positionId) view returns (address moneyMarketView_)
moneyMarketView
viewfunction moneyMarketView(uint8 mmId) view returns (address moneyMarketView_)
moneyMarketViews
viewfunction moneyMarketViews(uint8 mmId) view returns (address mmv)
positionNFT
viewfunction positionNFT() view returns (address)
priceInNativeToken
viewfunction priceInNativeToken(bytes32 positionId, address asset) view returns (uint256 price_)
priceInNativeToken
viewfunction priceInNativeToken(uint8 mmId, address asset) view returns (uint256 price_)
priceInUSD
viewfunction priceInUSD(bytes32 positionId, address asset) view returns (uint256 price_)
priceInUSD
viewfunction priceInUSD(uint8 mmId, address asset) view returns (uint256 price_)
prices
viewfunction prices(bytes32 positionId) view returns (tuple prices_)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rates
viewfunction rates(bytes32 positionId) view returns (uint256 borrowing, uint256 lending)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
thresholds
viewfunction thresholds(bytes32 positionId) view returns (uint256 ltv, uint256 liquidationThreshold)
availableActions
nonpayablefunction availableActions(bytes32 positionId) returns (uint8[] available)
balances
nonpayablefunction balances(bytes32 positionId) returns (tuple balances_)
balancesUSD
nonpayablefunction balancesUSD(bytes32 positionId) returns (tuple balancesUSD_)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address timelock)
irmRaw
nonpayablefunction irmRaw(bytes32 positionId) returns (bytes data)
leverage
nonpayablefunction leverage(bytes32 positionId) returns (uint256 leverage_)
metaData
nonpayablefunction metaData(bytes32 positionId) returns (tuple metaData_)
netRate
nonpayablefunction netRate(bytes32 positionId) returns (int256 netRate_)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rewards
nonpayablefunction rewards(bytes32 positionId) returns (tuple[] borrowing, tuple[] lending)
setMoneyMarketView
nonpayablefunction setMoneyMarketView(address immv)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
Initialized
event Initialized(uint8 version)
MoneyMarketViewRegistered
event MoneyMarketViewRegistered(uint8 indexed mm, address indexed moneyMarketView)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
errors
CallFailed
error CallFailed(address target, bytes4 selector)
InvalidMoneyMarket
error InvalidMoneyMarket(uint8 mm)
creation bytecode
0x60e060405230608052348015610013575f5ffd5b50604051613ced380380613ced833981016040819052610032916100c7565b6001600160a01b03811660a0819052604080516323228ecb60e01b815290516323228ecb916004808201926020929091908290030181865afa15801561007a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009e91906100c7565b6001600160a01b031660c052506100e9565b6001600160a01b03811681146100c4575f5ffd5b50565b5f602082840312156100d7575f5ffd5b81516100e2816100b0565b9392505050565b60805160a05160c051613b866101675f395f81816102e8015281816108cc01528181611697015281816117fe015281816119150152611e8b01525f81816102710152818161081701528181610ea20152611f1201525f81816111af015281816111ef015281816113c101528181611401015261149c0152613b865ff3fe608060405260043610610228575f3560e01c80637993925111610129578063ba5621c2116100a8578063c7396ff81161006d578063c7396ff814610733578063d547741f14610752578063dc72620514610771578063e9a0ebcf14610790578063eb892a62146107af575f5ffd5b8063ba5621c214610698578063bd5bc4d3146106b7578063bf6163a7146106d6578063c1d4d830146106f5578063c4d66de814610714575f5ffd5b8063a15e9c5d116100ee578063a15e9c5d146105d5578063a1cfbaa614610606578063a217fddf14610632578063adf7dec414610645578063b0f5925714610679575f5ffd5b8063799392511461051f5780638909aa3f1461053e5780638f39dc341461056a57806391d1485414610589578063938d967a146105a8575f5ffd5b80633659cfe6116101b55780634f61f8191161017a5780634f61f8191461047557806352d1902d146104945780635c1b7d38146104a857806360846bc6146104d457806374d6bab014610500575f5ffd5b80633659cfe6146103d15780633b5a9403146103f0578063450e80711461040f5780634ee4d1011461042e5780634f1ef28614610462575f5ffd5b8063248a9ca3116101fb578063248a9ca31461030a57806329167673146103465780632a57805e146103725780632f2ff15d1461039157806336568abe146103b2575f5ffd5b806301ffc9a71461022c5780630a29597514610260578063116dd37a146102ab57806323228ecb146102d7575b5f5ffd5b348015610237575f5ffd5b5061024b610246366004612c2a565b6107ce565b60405190151581526020015b60405180910390f35b34801561026b575f5ffd5b506102937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610257565b3480156102b6575f5ffd5b506102ca6102c5366004612c51565b610804565b6040516102579190612e15565b3480156102e2575f5ffd5b506102937f000000000000000000000000000000000000000000000000000000000000000081565b348015610315575f5ffd5b50610338610324366004612c51565b5f9081526065602052604090206001015490565b604051908152602001610257565b348015610351575f5ffd5b50610365610360366004612c51565b61103c565b6040516102579190613041565b34801561037d575f5ffd5b5061029361038c366004613061565b6110b6565b34801561039c575f5ffd5b506103b06103ab366004613090565b6110fe565b005b3480156103bd575f5ffd5b506103b06103cc366004613090565b611127565b3480156103dc575f5ffd5b506103b06103eb3660046130be565b6111a5565b3480156103fb575f5ffd5b5061033861040a366004613090565b611282565b34801561041a575f5ffd5b506103386104293660046130d9565b6112fe565b348015610439575f5ffd5b5061044d610448366004612c51565b611338565b60408051928352602083019190915201610257565b6103b06104703660046131b9565b6113b7565b348015610480575f5ffd5b5061029361048f366004612c51565b611482565b34801561049f575f5ffd5b50610338611490565b3480156104b3575f5ffd5b506104c76104c2366004612c51565b611541565b6040516102579190613245565b3480156104df575f5ffd5b506104f36104ee366004612c51565b6115e9565b6040516102579190613288565b34801561050b575f5ffd5b5061033861051a366004612c51565b61167f565b34801561052a575f5ffd5b50610338610539366004612c51565b611759565b348015610549575f5ffd5b5061055d610558366004612c51565b6117cf565b60405161025791906132a9565b348015610575575f5ffd5b5061055d610584366004612c51565b6118e6565b348015610594575f5ffd5b5061024b6105a3366004613090565b6119be565b3480156105b3575f5ffd5b506105c76105c2366004612c51565b6119e8565b6040516102579291906132c0565b3480156105e0575f5ffd5b506105f46105ef366004612c51565b611a63565b60405160ff9091168152602001610257565b348015610611575f5ffd5b50610625610620366004612c51565b611acc565b60405161025791906132e4565b34801561063d575f5ffd5b506103385f81565b348015610650575f5ffd5b5061029361065f366004613061565b60fb6020525f90815260409020546001600160a01b031681565b348015610684575f5ffd5b5061044d610693366004612c51565b611b37565b3480156106a3575f5ffd5b506103386106b2366004613090565b611b6f565b3480156106c2575f5ffd5b506103386106d13660046130d9565b611b79565b3480156106e1575f5ffd5b506105f46106f0366004613061565b611b83565b348015610700575f5ffd5b5061062561070f366004612c51565b611b8d565b34801561071f575f5ffd5b506103b061072e3660046130be565b611c07565b34801561073e575f5ffd5b5061062561074d366004613061565b611d24565b34801561075d575f5ffd5b506103b061076c366004613090565b611d2f565b34801561077c575f5ffd5b5061044d61078b366004612c51565b611d53565b34801561079b575f5ffd5b506103b06107aa3660046130be565b611d8b565b3480156107ba575f5ffd5b506103386107c9366004612c51565b611e73565b5f6001600160e01b03198216637965db0b60e01b14806107fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b61080c612a51565b5f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c4dac5d5846040516001600160e01b031960e084901b1681526001600160801b0319909116600482015260240160a060405180830381865afa158015610880573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a49190613305565b90505f6108b084611482565b828452604051630e29a66960e21b8152600481018690529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906338a699a490602401602060405180830381865afa158015610919573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061336b565b15610a1b57604051638909aa3f60e01b8152600481018590526001600160a01b03821690638909aa3f9060240160408051808303815f875af1158015610985573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a99190613384565b60208401526040516323ce770d60e21b8152600481018590526001600160a01b03821690638f39dc349060240160408051808303815f875af11580156109f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a159190613384565b60408401525b60405163304235e360e11b8152600481018590526001600160a01b038216906360846bc690602401606060405180830381865afa158015610a5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8291906133d2565b6060840152815160405163c5c8ef1f60e01b81526001600160a01b0391821660048201529082169063c5c8ef1f90602401602060405180830381865afa158015610ace573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af2919061342a565b608084015152604082810151905163c5c8ef1f60e01b81526001600160a01b0391821660048201529082169063c5c8ef1f90602401602060405180830381865afa158015610b42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b66919061342a565b6080840180516020019190915251670de0b6b3a764000060409182015251634ee4d10160e01b8152600481018590526001600160a01b03821690634ee4d101906024016040805180830381865afa158015610bc3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be79190613441565b60c085015260a084015260405163dc72620560e01b8152600481018590526001600160a01b0382169063dc726205906024016040805180830381865afa158015610c33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c579190613441565b60e085015160208101919091525260405163b0f5925760e01b8152600481018590526001600160a01b0382169063b0f59257906024016040805180830381865afa158015610ca7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccb9190613441565b6101008501516020810191909152526040516349c6cb3d60e11b8152600481018590526001600160a01b0382169063938d967a906024015f604051808303815f875af1158015610d1d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d44919081019061364b565b610140850152610120840152604051630c1d4d8360e41b8152600481018590526001600160a01b0382169063c1d4d830906024015f604051808303815f875af1158015610d93573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dba91908101906136ae565b610160840152604051632916767360e01b8152600481018590526001600160a01b038216906329167673906024015f604051808303815f875af1158015610e03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e2a91908101906136f2565b610180840152604051630b836fa760e31b8152600481018590526001600160a01b03821690635c1b7d389060240160c060405180830381865afa158015610e73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e979190613784565b836101a001819052507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d24415b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2091906137fa565b6001600160a01b031663f0be98ba610f388660781c90565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015610f74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9891906137fa565b6040516301ffc9a760e01b815263a7db160d60e01b60048201526001600160a01b0391909116906301ffc9a790602401602060405180830381865afa158015610fe3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611007919061336b565b15156101e0840152815161101a90612032565b610200840152604082015161102e90612032565b610220840152509092915050565b606061104782611482565b6001600160a01b03166329167673836040518263ffffffff1660e01b815260040161107491815260200190565b5f604051808303815f875af115801561108f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107fe91908101906136f2565b60ff81165f90815260fb60205260409020546001600160a01b0316806110f95760405163107793ff60e01b815260ff831660048201526024015b60405180910390fd5b919050565b5f8281526065602052604090206001015461111881612117565b6111228383612121565b505050565b6001600160a01b03811633146111975760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016110f0565b6111a182826121a6565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111ed5760405162461bcd60e51b81526004016110f090613815565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112355f516020613b3f5f395f51905f52546001600160a01b031690565b6001600160a01b03161461125b5760405162461bcd60e51b81526004016110f090613861565b6112648161220c565b604080515f8082526020820190925261127f91839190612216565b50565b5f61128c83611482565b60405163a84c7e7f60e01b81526001600160a01b038481166004830152919091169063a84c7e7f906024015b602060405180830381865afa1580156112d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f7919061342a565b9392505050565b5f611308836110b6565b60405163c5c8ef1f60e01b81526001600160a01b038481166004830152919091169063c5c8ef1f906024016112b8565b5f5f61134383611482565b6001600160a01b0316634ee4d101846040518263ffffffff1660e01b815260040161137091815260200190565b6040805180830381865afa15801561138a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ae9190613441565b91509150915091565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113ff5760405162461bcd60e51b81526004016110f090613815565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114475f516020613b3f5f395f51905f52546001600160a01b031690565b6001600160a01b03161461146d5760405162461bcd60e51b81526004016110f090613861565b6114768261220c565b6111a182826001612216565b5f6107fe61038c8360781c90565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016110f0565b505f516020613b3f5f395f51905f5290565b6115746040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61157d82611482565b6001600160a01b0316635c1b7d38836040518263ffffffff1660e01b81526004016115aa91815260200190565b60c060405180830381865afa1580156115c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fe9190613784565b61160a60405180606001604052805f81526020015f81526020015f81525090565b61161382611482565b6001600160a01b03166360846bc6836040518263ffffffff1660e01b815260040161164091815260200190565b606060405180830381865afa15801561165b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fe91906133d2565b604051630e29a66960e21b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906338a699a490602401602060405180830381865afa1580156116e4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611708919061336b565b61171357505f919050565b5f5f61171e84611d53565b9150915061172b84611e73565b61173d670de0b6b3a7640000846138c1565b61174791906138d8565b61175190826138f7565b949350505050565b5f61176382611482565b6001600160a01b03166379939251836040518263ffffffff1660e01b815260040161179091815260200190565b602060405180830381865afa1580156117ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fe919061342a565b6040805180820182525f80825260208201529051630e29a66960e21b8152600481018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338a699a490602401602060405180830381865afa158015611843573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611867919061336b565b61187157806107fe565b61187a82611482565b6001600160a01b0316638909aa3f836040518263ffffffff1660e01b81526004016118a791815260200190565b60408051808303815f875af11580156118c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fe9190613384565b6040805180820182525f80825260208201529051630e29a66960e21b8152600481018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338a699a490602401602060405180830381865afa15801561195a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197e919061336b565b61198857806107fe565b61199182611482565b6001600160a01b0316638f39dc34836040518263ffffffff1660e01b81526004016118a791815260200190565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060806119f483611482565b6001600160a01b031663938d967a846040518263ffffffff1660e01b8152600401611a2191815260200190565b5f604051808303815f875af1158015611a3c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113ae919081019061364b565b5f611a6d82611482565b6001600160a01b031663aa5823286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fe919061391d565b6060611ad782611482565b6001600160a01b031662ca69976040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b10573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107fe9190810190613938565b5f5f611b4283611482565b6001600160a01b031663b0f59257846040518263ffffffff1660e01b815260040161137091815260200190565b5f61130883611482565b5f61128c836110b6565b5f611a6d826110b6565b6060611b9882611482565b6001600160a01b031663c1d4d830836040518263ffffffff1660e01b8152600401611bc591815260200190565b5f604051808303815f875af1158015611be0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107fe91908101906136ae565b5f54610100900460ff1615808015611c2557505f54600160ff909116105b80611c3e5750303b158015611c3e57505f5460ff166001145b611ca15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016110f0565b5f805460ff191660011790558015611cc2575f805461ff0019166101001790555b611cca612380565b611cd2612380565b611cdc5f83612121565b80156111a1575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060611ad7826110b6565b5f82815260656020526040902060010154611d4981612117565b61112283836121a6565b5f5f611d5e83611482565b6001600160a01b031663dc726205846040518263ffffffff1660e01b815260040161137091815260200190565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611db581612117565b5f826001600160a01b031663aa5823286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e16919061391d565b60ff81165f81815260fb602052604080822080546001600160a01b0319166001600160a01b0389169081179091559051939450927f72ae2480c066cc0112ae41711bf3e17ea1bd5062288b6a19dca832a7631674489190a3505050565b604051630e29a66960e21b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906338a699a490602401602060405180830381865afa158015611ed8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611efc919061336b565b611f0757505f919050565b5f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c4dac5d5846040516001600160e01b031960e084901b1681526001600160801b0319909116600482015260240160a060405180830381865afa158015611f7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9f9190613305565b90505f611fab846117cf565b90505f611fb7856115e9565b6020840151815184519293505f92611fcf91906138c1565b611fd991906138d8565b90505f846060015183602001518560200151611ff591906138c1565b611fff91906138d8565b905061200b8183613969565b61201d670de0b6b3a7640000846138c1565b61202791906138d8565b979650505050505050565b61205e604051806080016040528060608152602001606081526020015f60ff1681526020015f81525090565b61207682836001600160a01b03166306fdde036123ec565b8152612090826001600160a01b0381166395d89b416123ec565b8160200181905250816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f8919061391d565b60ff166040820181905261210d90600a613a5f565b6060820152919050565b61127f8133612500565b61212b82826119be565b6111a1575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556121623390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6121b082826119be565b156111a1575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6111a181612117565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156122495761112283612559565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122a3575060408051601f3d908101601f191682019092526122a09181019061342a565b60015b6123065760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016110f0565b5f516020613b3f5f395f51905f5281146123745760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016110f0565b506111228383836125f4565b5f54610100900460ff166123ea5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016110f0565b565b60408051600481526024810182526020810180516001600160e01b03166001600160e01b031960e086901b1617905290516060915f9182916001600160a01b038816916124399190613a84565b5f60405180830381855afa9150503d805f8114612471576040519150601f19603f3d011682016040523d82523d5f602084013e612476565b606091505b5091509150816124b857604051630c8c737760e21b81526001600160a01b03871660048201526001600160e01b031960e086901b1660248201526044016110f0565b60208151116124e2576124dd818060200190518101906124d8919061342a565b61261e565b6124f6565b808060200190518101906124f69190613938565b9695505050505050565b61250a82826119be565b6111a15761251781612749565b61252283602061275b565b604051602001612533929190613a8f565b60408051601f198184030181529082905262461bcd60e51b82526110f0916004016132e4565b6001600160a01b0381163b6125c65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016110f0565b5f516020613b3f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6125fd836128f0565b5f825111806126095750805b1561112257612618838361292f565b50505050565b60605f5b60208160ff161080156126565750828160ff166020811061264557612645613ae4565b1a60f81b6001600160f81b03191615155b1561266d578061266581613af8565b915050612622565b5f8160ff166001600160401b0381111561268957612689613105565b6040519080825280601f01601f1916602001820160405280156126b3576020820181803683370190505b5090505f91505b60208260ff161080156126ee5750838260ff16602081106126dd576126dd613ae4565b1a60f81b6001600160f81b03191615155b156112f757838260ff166020811061270857612708613ae4565b1a60f81b818360ff168151811061272157612721613ae4565b60200101906001600160f81b03191690815f1a9053508161274181613af8565b9250506126ba565b60606107fe6001600160a01b03831660145b60605f6127698360026138c1565b612774906002613b16565b6001600160401b0381111561278b5761278b613105565b6040519080825280601f01601f1916602001820160405280156127b5576020820181803683370190505b509050600360fc1b815f815181106127cf576127cf613ae4565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106127fd576127fd613ae4565b60200101906001600160f81b03191690815f1a9053505f61281f8460026138c1565b61282a906001613b16565b90505b60018111156128a1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061285e5761285e613ae4565b1a60f81b82828151811061287457612874613ae4565b60200101906001600160f81b03191690815f1a90535060049490941c9361289a81613b29565b905061282d565b5083156112f75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016110f0565b6128f981612559565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606112f78383604051806060016040528060278152602001613b5f6027913960605f5f856001600160a01b03168560405161296b9190613a84565b5f60405180830381855af49150503d805f81146129a3576040519150601f19603f3d011682016040523d82523d5f602084013e6129a8565b606091505b50915091506124f68683838760608315612a225782515f03612a1b576001600160a01b0385163b612a1b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016110f0565b5081611751565b6117518383815115612a375781518083602001fd5b8060405162461bcd60e51b81526004016110f091906132e4565b604080516102e081019091525f6102408201818152610260830182905261028083018290526102a083018290526102c083019190915281908152602001612aa960405180604001604052805f81526020015f81525090565b8152602001612ac960405180604001604052805f81526020015f81525090565b8152602001612aef60405180606001604052805f81526020015f81526020015f81525090565b8152602001612b1560405180606001604052805f81526020015f81526020015f81525090565b81526020015f81526020015f8152602001612b4160405180604001604052805f81526020015f81525090565b8152602001612b6160405180604001604052805f81526020015f81525090565b815260200160608152602001606081526020016060815260200160608152602001612bb56040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b81526020015f81526020015f15158152602001612bf4604051806080016040528060608152602001606081526020015f60ff1681526020015f81525090565b8152602001612c25604051806080016040528060608152602001606081526020015f60ff1681526020015f81525090565b905290565b5f60208284031215612c3a575f5ffd5b81356001600160e01b0319811681146112f7575f5ffd5b5f60208284031215612c61575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f82825180855260208501945060208160051b830101602085015f5b83811015612d5f57848303601f1901885281518051608080865281516001600160a01b031690860152602081015160a080870152612cf4610120870182612c68565b90506040820151607f198783030160c0880152612d118282612c68565b60608481015160ff1660e08a0152608090940151610100890152602085810151818a0152604080870151908a0152948401519790930196909652509881019893509190910190600101612cb2565b50909695505050505050565b5f8151808452602084019350602083015f5b82811015612dba5781515f60048210612da457634e487b7160e01b5f52602160045260245ffd5b5086526020958601959190910190600101612d7d565b5093949350505050565b5f815160808452612dd86080850182612c68565b905060208301518482036020860152612df18282612c68565b91505060ff6040840151166040850152606083015160608501528091505092915050565b60208152612e5f60208201835180516001600160a01b0390811683526020808301519084015260408083015190911690830152606080820151908301526080908101511515910152565b5f6020830151612e7c60c084018280518252602090810151910152565b50604083810151805161010085810191909152602091820151610120808701919091526060870151805161014088015280840151610160880152840151610180870152608087015180516101a0880152808401516101c0880152909301516101e086015260a086015161020086015260c086015161022086015260e08601518051610240870152820151610260860152850151805161028086015201516102a08401528301516104606102c0840152612f39610480840182612c96565b9050610140840151601f19848303016102e0850152612f588282612c96565b915050610160840151601f1984830301610300850152612f788282612c68565b915050610180840151601f1984830301610320850152612f988282612d6b565b6101a086015180516103408701526020810151610360870152604081015161038087015260608101516103a087015260808101516103c087015260a001516103e08601526101c08601516104008601526101e08601511515610420860152610200860151858203601f190161044087015290925090506130188282612dc4565b915050610220840151601f19848303016104608501526130388282612dc4565b95945050505050565b602081525f6112f76020830184612d6b565b60ff8116811461127f575f5ffd5b5f60208284031215613071575f5ffd5b81356112f781613053565b6001600160a01b038116811461127f575f5ffd5b5f5f604083850312156130a1575f5ffd5b8235915060208301356130b38161307c565b809150509250929050565b5f602082840312156130ce575f5ffd5b81356112f78161307c565b5f5f604083850312156130ea575f5ffd5b82356130f581613053565b915060208301356130b38161307c565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b038111828210171561313b5761313b613105565b60405290565b604051608081016001600160401b038111828210171561313b5761313b613105565b604051601f8201601f191681016001600160401b038111828210171561318b5761318b613105565b604052919050565b5f6001600160401b038211156131ab576131ab613105565b50601f01601f191660200190565b5f5f604083850312156131ca575f5ffd5b82356131d58161307c565b915060208301356001600160401b038111156131ef575f5ffd5b8301601f810185136131ff575f5ffd5b803561321261320d82613193565b613163565b818152866020838501011115613226575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b60c081016107fe8284805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b815181526020808301519082015260408083015190820152606081016107fe565b8151815260208083015190820152604081016107fe565b604081525f6132d26040830185612c96565b82810360208401526130388185612c96565b602081525f6112f76020830184612c68565b805180151581146110f9575f5ffd5b5f60a0828403128015613316575f5ffd5b5061331f613119565b825161332a8161307c565b81526020838101519082015260408301516133448161307c565b60408201526060838101519082015261335f608084016132f6565b60808201529392505050565b5f6020828403121561337b575f5ffd5b6112f7826132f6565b5f6040828403128015613395575f5ffd5b50604080519081016001600160401b03811182821017156133b8576133b8613105565b604052825181526020928301519281019290925250919050565b5f60608284031280156133e3575f5ffd5b50604051606081016001600160401b038111828210171561340657613406613105565b60409081528351825260208085015190830152928301519281019290925250919050565b5f6020828403121561343a575f5ffd5b5051919050565b5f5f60408385031215613452575f5ffd5b505080516020909101519092909150565b5f6001600160401b0382111561347b5761347b613105565b5060051b60200190565b5f61349261320d84613193565b90508281528383830111156134a5575f5ffd5b8282602083015e5f602084830101529392505050565b5f82601f8301126134ca575f5ffd5b6112f783835160208501613485565b5f82601f8301126134e8575f5ffd5b81516134f661320d82613463565b8082825260208201915060208360051b860101925085831115613517575f5ffd5b602085015b838110156136415780516001600160401b03811115613539575f5ffd5b86016080818903601f1901121561354e575f5ffd5b613556613141565b60208201516001600160401b0381111561356e575f5ffd5b602081840101905060a0818b031215613585575f5ffd5b61358d613119565b81516135988161307c565b815260208201516001600160401b038111156135b2575f5ffd5b6135be8c8285016134bb565b60208301525060408201516001600160401b038111156135dc575f5ffd5b6135e88c8285016134bb565b60408301525060608201516135fc81613053565b6060828101919091526080928301518383015290835260408481015160208086019190915285830151918501919091529390910151908201528452928301920161351c565b5095945050505050565b5f5f6040838503121561365c575f5ffd5b82516001600160401b03811115613671575f5ffd5b61367d858286016134d9565b92505060208301516001600160401b03811115613698575f5ffd5b6136a4858286016134d9565b9150509250929050565b5f602082840312156136be575f5ffd5b81516001600160401b038111156136d3575f5ffd5b8201601f810184136136e3575f5ffd5b61175184825160208401613485565b5f60208284031215613702575f5ffd5b81516001600160401b03811115613717575f5ffd5b8201601f81018413613727575f5ffd5b805161373561320d82613463565b8082825260208201915060208360051b850101925086831115613756575f5ffd5b6020840193505b828410156124f657835160048110613773575f5ffd5b82526020938401939091019061375d565b5f60c0828403128015613795575f5ffd5b5060405160c081016001600160401b03811182821017156137b8576137b8613105565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f6020828403121561380a575f5ffd5b81516112f78161307c565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107fe576107fe6138ad565b5f826138f257634e487b7160e01b5f52601260045260245ffd5b500490565b8181035f831280158383131683831282161715613916576139166138ad565b5092915050565b5f6020828403121561392d575f5ffd5b81516112f781613053565b5f60208284031215613948575f5ffd5b81516001600160401b0381111561395d575f5ffd5b611751848285016134bb565b818103818111156107fe576107fe6138ad565b6001815b60018411156139b75780850481111561399b5761399b6138ad565b60018416156139a957908102905b60019390931c928002613980565b935093915050565b5f826139cd575060016107fe565b816139d957505f6107fe565b81600181146139ef57600281146139f957613a15565b60019150506107fe565b60ff841115613a0a57613a0a6138ad565b50506001821b6107fe565b5060208310610133831016604e8410600b8410161715613a38575081810a6107fe565b613a445f19848461397c565b805f1904821115613a5757613a576138ad565b029392505050565b5f6112f760ff8416836139bf565b5f81518060208401855e5f93019283525090919050565b5f6112f78284613a6d565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f613ac06017830185613a6d565b7001034b99036b4b9b9b4b733903937b6329607d1b81526130386011820185613a6d565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff8103613b0d57613b0d6138ad565b60010192915050565b808201808211156107fe576107fe6138ad565b5f81613b3757613b376138ad565b505f19019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000006cae28b3d09d8f8fc74ccd496ac986fc84c0c24e