0 txs
0 calls
constructor
No constructor.
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getDepositsInAssets
viewfunction getDepositsInAssets(address _from) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStrategies
viewfunction getStrategies() view returns (address[])
getStrategist
viewfunction getStrategist() view returns (address)
getTokenOracles
viewfunction getTokenOracles() view returns (address[], address[])
getWithdrawQueue
viewfunction getWithdrawQueue() view returns (tuple[] withdrawItems)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
name
viewfunction name() view returns (string)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
withdrawQueue
viewfunction withdrawQueue(uint256) view returns (uint256 id, address receiver, address owner, uint256 sharesAmount, uint256 assetsAmount, bool isOpen)
addStrategy
nonpayablefunction addStrategy(address _strategy)
addTokenOracle
nonpayablefunction addTokenOracle(address _token, address _tokenOracle)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
approveWithdraw
nonpayablefunction approveWithdraw(uint256 _withdrawQueueItemId) returns (uint256)
closeWithdraw
nonpayablefunction closeWithdraw(uint256 _withdrawQueueItemId)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 requestedDecrease) returns (bool)
delegate
nonpayablefunction delegate(address _to, uint256 _assets)
deposit
nonpayablefunction deposit(uint256 _assets, address _receiver) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
initialize
nonpayablefunction initialize(string _name, string _symbol, address _asset, address _strategist)
mint
nonpayablefunction mint(uint256 _shares, address _receiver) returns (uint256)
redeem
nonpayablefunction redeem(uint256 _shares, address _receiver, address _owner) returns (uint256)
removeStrategy
nonpayablefunction removeStrategy(address _strategy)
removeTokenOracle
nonpayablefunction removeTokenOracle(address _token)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setEthToAssetOracle
nonpayablefunction setEthToAssetOracle(address _oracle)
setFeeInBp
nonpayablefunction setFeeInBp(uint256 _fee)
setStrategist
nonpayablefunction setStrategist(address _strategist)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
withdraw
nonpayablefunction withdraw(uint256 _assets, address _receiver, address _owner) returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Delegated
event Delegated(address indexed strategist, uint256 assets)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Deposited
event Deposited(address receiver, uint256 assets, uint256 shares)
FeeCollected
event FeeCollected(address from, uint256 shares, uint256 assets)
Initialized
event Initialized(uint64 version)
RequestWithdraw
event RequestWithdraw(uint256 id, address receiver, uint256 assets, uint256 shares)
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)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawApproved
event WithdrawApproved(address strategist, uint256 id, address receiver, address owner, uint256 assets, uint256 shares)
Withdrawn
event Withdrawn(address receiver, uint256 assets, uint256 shares)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
ERC20FailedDecreaseAllowance
error ERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
FailedInnerCall
error FailedInnerCall()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405234801561001057600080fd5b50615a8680620000216000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c80636e553f651161019d578063b49a60bb116100e9578063ce96cb77116100a2578063dcbbe47a1161007c578063dcbbe47a14610a02578063dd62ed3e14610a32578063ec4673d114610a62578063ef8b30f714610a92576102f1565b8063ce96cb7714610986578063d547741f146109b6578063d905777e146109d2576102f1565b8063b49a60bb146108a0578063b5c16dff146108be578063ba087652146108da578063c63d75b61461090a578063c6e6f5921461093a578063c7b9d5301461096a576102f1565b806394bf804d11610156578063a457c2d711610130578063a457c2d7146107e0578063a9059cbb14610810578063b3d7f6b914610840578063b460af9414610870576102f1565b806394bf804d1461077457806395d89b41146107a4578063a217fddf146107c2576102f1565b80636e553f651461069057806370a08231146106c057806383b773b6146106f057806388e32fc21461070c5780638f15b4141461072857806391d1485414610744576102f1565b8063248a9ca31161025c57806338d52e0f116102155780634cdad506116101ef5780634cdad506146105f057806350e296a514610620578063519d5bee1461063c57806362518ddf1461065b576102f1565b806338d52e0f146105725780633950935114610590578063402d267d146105c0576102f1565b8063248a9ca3146104b25780632f2ff15d146104e2578063313ce567146104fe57806334d9b2dc1461051c57806336568abe1461053a57806338404df514610556576102f1565b80630a28a477116102ae5780630a28a477146103de578063111830521461040e578063175188e81461042c57806318160ddd14610448578063223e54791461046657806323b872dd14610482576102f1565b806301e1d114146102f657806301ffc9a714610314578063026e402b1461034457806306fdde031461036057806307a2d13a1461037e578063095ea7b3146103ae575b600080fd5b6102fe610ac2565b60405161030b9190614384565b60405180910390f35b61032e6004803603810190610329919061440b565b610dad565b60405161033b9190614453565b60405180910390f35b61035e600480360381019061035991906144f8565b610e27565b005b610368610f08565b60405161037591906145c8565b60405180910390f35b610398600480360381019061039391906145ea565b610f9a565b6040516103a59190614384565b60405180910390f35b6103c860048036038101906103c391906144f8565b610fae565b6040516103d59190614453565b60405180910390f35b6103f860048036038101906103f391906145ea565b610fd1565b6040516104059190614384565b60405180910390f35b610416610fe5565b604051610423919061476e565b60405180910390f35b61044660048036038101906104419190614790565b611187565b005b610450611214565b60405161045d9190614384565b60405180910390f35b610480600480360381019061047b9190614790565b61121e565b005b61049c600480360381019061049791906147bd565b6112ab565b6040516104a99190614453565b60405180910390f35b6104cc60048036038101906104c79190614846565b6112e8565b6040516104d99190614882565b60405180910390f35b6104fc60048036038101906104f7919061489d565b611308565b005b61050661132a565b60405161051391906148f9565b60405180910390f35b610524611353565b6040516105319190614923565b60405180910390f35b610554600480360381019061054f919061489d565b61137e565b005b610570600480360381019061056b919061493e565b6113f9565b005b61057a611506565b6040516105879190614923565b60405180910390f35b6105aa60048036038101906105a591906144f8565b611530565b6040516105b79190614453565b60405180910390f35b6105da60048036038101906105d59190614790565b611567565b6040516105e79190614384565b60405180910390f35b61060a600480360381019061060591906145ea565b611591565b6040516106179190614384565b60405180910390f35b61063a600480360381019061063591906145ea565b6115a5565b005b610644611680565b604051610652929190614a2d565b60405180910390f35b610675600480360381019061067091906145ea565b6117d7565b60405161068796959493929190614a64565b60405180910390f35b6106aa60048036038101906106a59190614ac5565b611861565b6040516106b79190614384565b60405180910390f35b6106da60048036038101906106d59190614790565b61191e565b6040516106e79190614384565b60405180910390f35b61070a600480360381019061070591906145ea565b611967565b005b61072660048036038101906107219190614790565b6119ef565b005b610742600480360381019061073d9190614c3a565b611adf565b005b61075e6004803603810190610759919061489d565b611d82565b60405161076b9190614453565b60405180910390f35b61078e60048036038101906107899190614ac5565b611ded565b60405161079b9190614384565b60405180910390f35b6107ac611eac565b6040516107b991906145c8565b60405180910390f35b6107ca611f3e565b6040516107d79190614882565b60405180910390f35b6107fa60048036038101906107f591906144f8565b611f45565b6040516108079190614453565b60405180910390f35b61082a600480360381019061082591906144f8565b611fc2565b6040516108379190614453565b60405180910390f35b61085a600480360381019061085591906145ea565b611fff565b6040516108679190614384565b60405180910390f35b61088a60048036038101906108859190614cd9565b612013565b6040516108979190614384565b60405180910390f35b6108a86120c8565b6040516108b59190614d2c565b60405180910390f35b6108d860048036038101906108d39190614790565b6120da565b005b6108f460048036038101906108ef9190614cd9565b61219c565b6040516109019190614384565b60405180910390f35b610924600480360381019061091f9190614790565b61224f565b6040516109319190614384565b60405180910390f35b610954600480360381019061094f91906145ea565b612279565b6040516109619190614384565b60405180910390f35b610984600480360381019061097f9190614790565b61228d565b005b6109a0600480360381019061099b9190614790565b6122e0565b6040516109ad9190614384565b60405180910390f35b6109d060048036038101906109cb919061489d565b6122fc565b005b6109ec60048036038101906109e79190614790565b61231e565b6040516109f99190614384565b60405180910390f35b610a1c6004803603810190610a179190614790565b612330565b604051610a299190614384565b60405180910390f35b610a4c6004803603810190610a47919061493e565b61234f565b604051610a599190614384565b60405180910390f35b610a7c6004803603810190610a7791906145ea565b6123d6565b604051610a899190614384565b60405180910390f35b610aac6004803603810190610aa791906145ea565b61274b565b604051610ab99190614384565b60405180910390f35b600080610acd61275f565b905060005b610add61012d6127e7565b811015610bb2576000610af261012d836127fc565b90508073ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f61012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610b509190614923565b602060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190614d63565b83610b9c9190614dbf565b9250508080610baa90614df3565b915050610ad2565b5060005b610bc161012f6127e7565b811015610d7b576000610bd661012f836127fc565b9050600061013160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a0823161012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610c9b9190614923565b602060405180830381865afa158015610cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc9190614d63565b90508173ffffffffffffffffffffffffffffffffffffffff1663b869773f826040518263ffffffff1660e01b8152600401610d179190614384565b602060405180830381865afa158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d589190614d63565b85610d639190614dbf565b94505050508080610d7390614df3565b915050610bb6565b50610d84612816565b81610d8f9190614dbf565b9050610d996128c1565b81610da49190614dbf565b90508091505090565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e205750610e1f826129a4565b5b9050919050565b610e346000801b33611d82565b80610e655750610e647f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90614e87565b60405180910390fd5b610eb6610eaf611506565b8383612a0e565b8173ffffffffffffffffffffffffffffffffffffffff167f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab82604051610efc9190614384565b60405180910390a25050565b606060358054610f1790614ed6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4390614ed6565b8015610f905780601f10610f6557610100808354040283529160200191610f90565b820191906000526020600020905b815481529060010190602001808311610f7357829003601f168201915b5050505050905090565b6000610fa7826000612a8d565b9050919050565b600080610fb9612ae6565b9050610fc6818585612aee565b600191505092915050565b6000610fde826001612b00565b9050919050565b60606101335467ffffffffffffffff81111561100457611003614b0f565b5b60405190808252806020026020018201604052801561103d57816020015b61102a614307565b8152602001906001900390816110225790505b50905060005b610133548110156111835761013460008281526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff16151515158152505082828151811061116557611164614f07565b5b6020026020010181905250808061117b90614df3565b915050611043565b5090565b6111946000801b33611d82565b806111c557506111c47f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90614e87565b60405180910390fd5b61121061012d82612b59565b5050565b6000603454905090565b61122b6000801b33611d82565b8061125c575061125b7f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b61129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290614e87565b60405180910390fd5b6112a761012d82612b89565b5050565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90614f82565b60405180910390fd5b600060fa6000838152602001908152602001600020600101549050919050565b611311826112e8565b61131a81612bb9565b6113248383612bcd565b50505050565b6000611334612cbf565b606460149054906101000a900460ff1661134e9190614fa2565b905090565b600061012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611386612ae6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f48282612cc4565b505050565b6114066000801b33611d82565b8061143757506114367f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90614e87565b60405180910390fd5b61148261012f83612b89565b508061013160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061153b612ae6565b905061155c81858561154d858961234f565b6115579190614dbf565b612aee565b600191505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b600061159e826000612a8d565b9050919050565b6115b26000801b33611d82565b806115e357506115e27f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614e87565b60405180910390fd5b610134600082815260200190815260200160002060050160009054906101000a900460ff161561167d576000610134600083815260200190815260200160002060050160006101000a81548160ff0219169083151502179055505b50565b606080600061169061012f6127e7565b67ffffffffffffffff8111156116a9576116a8614b0f565b5b6040519080825280602002602001820160405280156116d75781602001602082028036833780820191505090505b50905060005b6116e861012f6127e7565b8110156117c15760006116fd61012f836127fc565b905061013160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683838151811061177357611772614f07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505080806117b990614df3565b9150506116dd565b506117cd61012f612db7565b8192509250509091565b6101346020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050160009054906101000a900460ff16905086565b600061186c82611567565b8311156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590615023565b60405180910390fd5b60006118b984612279565b90506118c733848684612dd8565b6118cf612e7d565b6118d98385612f4e565b7f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca83858360405161190c93929190615043565b60405180910390a18091505092915050565b6000603260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119746000801b33611d82565b806119a557506119a47f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b6119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614e87565b60405180910390fd5b806101358190555050565b6119fc6000801b33611d82565b80611a2d5750611a2c7f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390614e87565b60405180910390fd5b611a7861012f82612b59565b5061013160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b6000611ae9612fa1565b905060008160000160089054906101000a900460ff16159050808015611b31575060018260000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16105b158015611b84575060003073ffffffffffffffffffffffffffffffffffffffff163b148015611b82575060018260000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16145b155b15611bbb576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508015611c0b5760018260000160086101000a81548160ff0219169083151502179055505b611c186000801b33612bcd565b50611c437f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a84612bcd565b50611c4d84612fc9565b611c578686612fdd565b611c5f612ff3565b611c67613005565b63b2d05e00610132819055508261012c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000610133819055506107d061013581905550736f0a1016c99dd7b3fbf4a84b72d719bd680f96ce61013960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015611d7a5760008260000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051611d7191906150d3565b60405180910390a15b505050505050565b600060fa600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611df88261224f565b831115611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190615023565b60405180910390fd5b6000611e47846001612a8d565b9050611e5533848387612dd8565b611e5d612e7d565b611e678382612f4e565b7f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca838286604051611e9a93929190615043565b60405180910390a18091505092915050565b606060368054611ebb90614ed6565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee790614ed6565b8015611f345780601f10611f0957610100808354040283529160200191611f34565b820191906000526020600020905b815481529060010190602001808311611f1757829003601f168201915b5050505050905090565b6000801b81565b600080611f50612ae6565b90506000611f5e828661234f565b905083811015611fa9578481856040517fa60f030c000000000000000000000000000000000000000000000000000000008152600401611fa093929190615043565b60405180910390fd5b611fb68286868403612aee565b60019250505092915050565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614f82565b60405180910390fd5b600061200c826001612a8d565b9050919050565b600061201e826122e0565b841115612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120579061513a565b60405180910390fd5b600061206d856001612b00565b9050600061207d8585848961300f565b90507fa3b1a4d2ee2c2719b1bb36f65253f603494fa4ded422a527771189d674dd58c2818688856040516120b4949392919061515a565b60405180910390a181925050509392505050565b60606120d561012d612db7565b905090565b6120e76000801b33611d82565b8061211857506121177f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614e87565b60405180910390fd5b8061013960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006121a78261231e565b8411156121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e0906151eb565b60405180910390fd5b60006121f485610f9a565b905060006122048585888561300f565b90507fa3b1a4d2ee2c2719b1bb36f65253f603494fa4ded422a527771189d674dd58c28186848960405161223b949392919061515a565b60405180910390a181925050509392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b6000612286826000612b00565b9050919050565b6000801b61229a81612bb9565b8161012c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006122f56122ee8361191e565b6000612a8d565b9050919050565b612305826112e8565b61230e81612bb9565b6123188383612cc4565b50505050565b60006123298261191e565b9050919050565b6000806000612341610136856130ff565b915091508092505050919050565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006123e56000801b33611d82565b8061241657506124157f1fb23559c898e838518c01547a011f164725e367cc7198538c79bf20ae2bb19a33611d82565b5b612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614e87565b60405180910390fd5b6000610134600084815260200190815260200160002090508060050160009054906101000a900460ff166124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b59061527d565b60405180910390fd5b60006124c861275f565b905060006124d98360030154610f9a565b90508082101561251e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125159061530f565b60405180910390fd5b600061254e8460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613141565b90506125828460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856003015461326a565b6125b861258d611506565b8560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a0e565b6000610134600088815260200190815260200160002060050160006101000a81548160ff0219169083151502179055508360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8588600301546040516126aa92919061532f565b60405180910390a47f5efc3f4c498d3401abf0574eef8e21bcc7635143ddc2eedbf7a1bc46cfaf53c033878660010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686896003015460405161273796959493929190615358565b60405180910390a181945050505050919050565b6000612758826000612b00565b9050919050565b6000612769611506565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127a19190614923565b602060405180830381865afa1580156127be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e29190614d63565b905090565b60006127f5826000016132ec565b9050919050565b600061280b83600001836132fd565b60001c905092915050565b6000612820611506565b73ffffffffffffffffffffffffffffffffffffffff166370a0823161012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161287b9190614923565b602060405180830381865afa158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc9190614d63565b905090565b60008061013960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b869773f61012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16316040518263ffffffff1660e01b815260040161295d9190614384565b602060405180830381865afa15801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e9190614d63565b91505090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a88838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612a419291906153b9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613328565b505050565b6000612ade6001612a9c610ac2565b612aa69190614dbf565b612aae612cbf565b600a612aba9190615515565b612ac2611214565b612acc9190614dbf565b84866133bf909392919063ffffffff16565b905092915050565b600033905090565b612afb8383836001613416565b505050565b6000612b51612b0d612cbf565b600a612b199190615515565b612b21611214565b612b2b9190614dbf565b6001612b35610ac2565b612b3f9190614dbf565b84866133bf909392919063ffffffff16565b905092915050565b6000612b81836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6135ed565b905092915050565b6000612bb1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613701565b905092915050565b612bca81612bc5612ae6565b613771565b50565b6000612bd98383611d82565b612cb457600160fa600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612c51612ae6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050612cb9565b600090505b92915050565b600090565b6000612cd08383611d82565b15612dac57600060fa600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612d49612ae6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050612db1565b600090505b92915050565b60606000612dc7836000016137c2565b905060608190508092505050919050565b612e06606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685308561381e565b612e1083826138a0565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051612e6f92919061532f565b60405180910390a350505050565b6000612e8761275f565b90506000612e9782612328613922565b9050610132548110612f4a57612ed8612eae611506565b61012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a0e565b61012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab82604051612f419190614384565b60405180910390a25b5050565b612f5a6101368361395f565b15612f8e576000612f6d6101368461398f565b9050612f87610136848484612f829190614dbf565b6139c2565b5050612f9d565b612f9b61013683836139c2565b505b5050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e905090565b612fd16139f7565b612fda81613a37565b50565b612fe56139f7565b612fef8282613abd565b5050565b612ffb6139f7565b613003613ae9565b565b61300d6139f7565b565b60008061301a613afb565b9050600061013460008381526020019081526020016000209050818160000181905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816003018190555083816004018190555060018160050160006101000a81548160ff0219169083151502179055508192505050949350505050565b60008060008061312b866000018673ffffffffffffffffffffffffffffffffffffffff1660001b613b1a565b91509150818160001c9350935050509250929050565b60008061314d8461191e565b9050600061315a82610f9a565b9050600061316a6101368761398f565b90506000818311156131855781836131829190615560565b90505b6000869050818711156131b157600082886131a09190615560565b90508291506131af8982613b69565b505b6127108110156131c8578695505050505050613264565b60006131d78261013554613922565b905080886131e59190615560565b965060006131f282612279565b905061322161012c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826138a0565b7f108516ddcf5ba43cea6bb2cd5ff6d59ac196c1c86ccb9178332b9dd72d1ca5618a828460405161325493929190615043565b60405180910390a1505050505050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132dc5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016132d39190614923565b60405180910390fd5b6132e882600083613b97565b5050565b600081600001805490509050919050565b600082600001828154811061331557613314614f07565b5b9060005260206000200154905092915050565b6000613353828473ffffffffffffffffffffffffffffffffffffffff16613dbf90919063ffffffff16565b9050600081511415801561337857508080602001905181019061337691906155c0565b155b156133ba57826040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016133b19190614923565b60405180910390fd5b505050565b6000806133cd868686613dd5565b90506133d883613edc565b80156133f55750600084806133f0576133ef6155ed565b5b868809115b1561340a576001816134079190614dbf565b90505b80915050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036134885760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161347f9190614923565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134fa5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134f19190614923565b60405180910390fd5b81603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156135e7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135de9190614384565b60405180910390a35b50505050565b600080836001016000848152602001908152602001600020549050600081146136f557600060018261361f9190615560565b90506000600186600001805490506136379190615560565b90508181146136a657600086600001828154811061365857613657614f07565b5b906000526020600020015490508087600001848154811061367c5761367b614f07565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806136ba576136b961561c565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506136fb565b60009150505b92915050565b600061370d8383613f0a565b61376657826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061376b565b600090505b92915050565b61377b8282611d82565b6137be5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016137b592919061564b565b60405180910390fd5b5050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561381257602002820191906000526020600020905b8154815260200190600101908083116137fe575b50505050509050919050565b61389a848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161385393929190615674565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613328565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139125760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016139099190614923565b60405180910390fd5b61391e60008383613b97565b5050565b6000612710828461393391906156ab565b101561393e57600080fd5b612710828461394d91906156ab565b61395791906156ed565b905092915050565b6000613987836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613f2d565b905092915050565b60006139b7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613f4d565b60001c905092915050565b60006139ee846000018473ffffffffffffffffffffffffffffffffffffffff1660001b8460001b613fcd565b90509392505050565b6139ff614008565b613a35576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613a3f6139f7565b600080613a4b83614028565b9150915081613a5b576012613a5d565b805b606460146101000a81548160ff021916908360ff16021790555082606460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613ac56139f7565b8160359081613ad491906158c0565b508060369081613ae491906158c0565b505050565b613af16139f7565b6001609681905550565b60006101336000815480929190613b1190614df3565b91905055905090565b60008060008460020160008581526020019081526020016000205490506000801b8103613b5957613b4b8585613f2d565b6000801b9250925050613b62565b60018192509250505b9250929050565b6000613b776101368461398f565b9050613b91610136848484613b8c9190615560565b6139c2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613be9578060346000828254613bdd9190614dbf565b92505081905550613cbe565b6000603260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c76578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613c6d93929190615043565b60405180910390fd5b818103603260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d075780603460008282540392505081905550613d55565b80603260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613db29190614384565b60405180910390a3505050565b6060613dcd83836000614138565b905092915050565b6000808385029050600080198587098281108382030391505060008103613e1057838281613e0657613e056155ed565b5b0492505050613ed5565b808411613e49576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084868809905082811182039150808303925060008560000386169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b600060016002836003811115613ef557613ef4615992565b5b613eff91906159c1565b60ff16149050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000613f45828460000161420590919063ffffffff16565b905092915050565b6000808360020160008481526020019081526020016000205490506000801b81148015613f815750613f7f8484613f2d565b155b15613fc357826040517f02b56686000000000000000000000000000000000000000000000000000000008152600401613fba9190614882565b60405180910390fd5b8091505092915050565b60008184600201600085815260200190815260200160002081905550613fff838560000161421c90919063ffffffff16565b90509392505050565b6000614012612fa1565b60000160089054906101000a900460ff16905090565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1660405160240160405160208183030381529060405263313ce56760e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161409d9190615a39565b600060405180830381855afa9150503d80600081146140d8576040519150601f19603f3d011682016040523d82523d6000602084013e6140dd565b606091505b50915091508180156140f157506020815110155b156141295760008180602001905181019061410c9190614d63565b905060ff801681116141275760018194509450505050614133565b505b6000809350935050505b915091565b60608147101561417f57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016141769190614923565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516141a89190615a39565b60006040518083038185875af1925050503d80600081146141e5576040519150601f19603f3d011682016040523d82523d6000602084013e6141ea565b606091505b50915091506141fa868383614233565b925050509392505050565b60006142148360000183613f0a565b905092915050565b600061422b8360000183613701565b905092915050565b60608261424857614243826142c2565b6142ba565b60008251148015614270575060008473ffffffffffffffffffffffffffffffffffffffff163b145b156142b257836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016142a99190614923565b60405180910390fd5b8190506142bb565b5b9392505050565b6000815111156142d55780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b6000819050919050565b61437e8161436b565b82525050565b60006020820190506143996000830184614375565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6143e8816143b3565b81146143f357600080fd5b50565b600081359050614405816143df565b92915050565b600060208284031215614421576144206143a9565b5b600061442f848285016143f6565b91505092915050565b60008115159050919050565b61444d81614438565b82525050565b60006020820190506144686000830184614444565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144998261446e565b9050919050565b6144a98161448e565b81146144b457600080fd5b50565b6000813590506144c6816144a0565b92915050565b6144d58161436b565b81146144e057600080fd5b50565b6000813590506144f2816144cc565b92915050565b6000806040838503121561450f5761450e6143a9565b5b600061451d858286016144b7565b925050602061452e858286016144e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b60008484015250505050565b6000601f19601f8301169050919050565b600061459a82614538565b6145a48185614543565b93506145b4818560208601614554565b6145bd8161457e565b840191505092915050565b600060208201905081810360008301526145e2818461458f565b905092915050565b600060208284031215614600576145ff6143a9565b5b600061460e848285016144e3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61464c8161436b565b82525050565b61465b8161448e565b82525050565b61466a81614438565b82525050565b60c0820160008201516146866000850182614643565b5060208201516146996020850182614652565b5060408201516146ac6040850182614652565b5060608201516146bf6060850182614643565b5060808201516146d26080850182614643565b5060a08201516146e560a0850182614661565b50505050565b60006146f78383614670565b60c08301905092915050565b6000602082019050919050565b600061471b82614617565b6147258185614622565b935061473083614633565b8060005b8381101561476157815161474888826146eb565b975061475383614703565b925050600181019050614734565b5085935050505092915050565b600060208201905081810360008301526147888184614710565b905092915050565b6000602082840312156147a6576147a56143a9565b5b60006147b4848285016144b7565b91505092915050565b6000806000606084860312156147d6576147d56143a9565b5b60006147e4868287016144b7565b93505060206147f5868287016144b7565b9250506040614806868287016144e3565b9150509250925092565b6000819050919050565b61482381614810565b811461482e57600080fd5b50565b6000813590506148408161481a565b92915050565b60006020828403121561485c5761485b6143a9565b5b600061486a84828501614831565b91505092915050565b61487c81614810565b82525050565b60006020820190506148976000830184614873565b92915050565b600080604083850312156148b4576148b36143a9565b5b60006148c285828601614831565b92505060206148d3858286016144b7565b9150509250929050565b600060ff82169050919050565b6148f3816148dd565b82525050565b600060208201905061490e60008301846148ea565b92915050565b61491d8161448e565b82525050565b60006020820190506149386000830184614914565b92915050565b60008060408385031215614955576149546143a9565b5b6000614963858286016144b7565b9250506020614974858286016144b7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006149b68383614652565b60208301905092915050565b6000602082019050919050565b60006149da8261497e565b6149e48185614989565b93506149ef8361499a565b8060005b83811015614a20578151614a0788826149aa565b9750614a12836149c2565b9250506001810190506149f3565b5085935050505092915050565b60006040820190508181036000830152614a4781856149cf565b90508181036020830152614a5b81846149cf565b90509392505050565b600060c082019050614a796000830189614375565b614a866020830188614914565b614a936040830187614914565b614aa06060830186614375565b614aad6080830185614375565b614aba60a0830184614444565b979650505050505050565b60008060408385031215614adc57614adb6143a9565b5b6000614aea858286016144e3565b9250506020614afb858286016144b7565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b478261457e565b810181811067ffffffffffffffff82111715614b6657614b65614b0f565b5b80604052505050565b6000614b7961439f565b9050614b858282614b3e565b919050565b600067ffffffffffffffff821115614ba557614ba4614b0f565b5b614bae8261457e565b9050602081019050919050565b82818337600083830152505050565b6000614bdd614bd884614b8a565b614b6f565b905082815260208101848484011115614bf957614bf8614b0a565b5b614c04848285614bbb565b509392505050565b600082601f830112614c2157614c20614b05565b5b8135614c31848260208601614bca565b91505092915050565b60008060008060808587031215614c5457614c536143a9565b5b600085013567ffffffffffffffff811115614c7257614c716143ae565b5b614c7e87828801614c0c565b945050602085013567ffffffffffffffff811115614c9f57614c9e6143ae565b5b614cab87828801614c0c565b9350506040614cbc878288016144b7565b9250506060614ccd878288016144b7565b91505092959194509250565b600080600060608486031215614cf257614cf16143a9565b5b6000614d00868287016144e3565b9350506020614d11868287016144b7565b9250506040614d22868287016144b7565b9150509250925092565b60006020820190508181036000830152614d4681846149cf565b905092915050565b600081519050614d5d816144cc565b92915050565b600060208284031215614d7957614d786143a9565b5b6000614d8784828501614d4e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dca8261436b565b9150614dd58361436b565b9250828201905080821115614ded57614dec614d90565b5b92915050565b6000614dfe8261436b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e3057614e2f614d90565b5b600182019050919050565b7f5065726d697373696f6e2064656e696564000000000000000000000000000000600082015250565b6000614e71601183614543565b9150614e7c82614e3b565b602082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614eee57607f821691505b602082108103614f0157614f00614ea7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e206e6f6e207472616e7366657261626c6500000000000000000000600082015250565b6000614f6c601683614543565b9150614f7782614f36565b602082019050919050565b60006020820190508181036000830152614f9b81614f5f565b9050919050565b6000614fad826148dd565b9150614fb8836148dd565b9250828201905060ff811115614fd157614fd0614d90565b5b92915050565b7f6d61784d696e7400000000000000000000000000000000000000000000000000600082015250565b600061500d600783614543565b915061501882614fd7565b602082019050919050565b6000602082019050818103600083015261503c81615000565b9050919050565b60006060820190506150586000830186614914565b6150656020830185614375565b6150726040830184614375565b949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b60006150bd6150b86150b38461507a565b615098565b615084565b9050919050565b6150cd816150a2565b82525050565b60006020820190506150e860008301846150c4565b92915050565b7f6d61785769746864726177000000000000000000000000000000000000000000600082015250565b6000615124600b83614543565b915061512f826150ee565b602082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b600060808201905061516f6000830187614375565b61517c6020830186614914565b6151896040830185614375565b6151966060830184614375565b95945050505050565b7f6d617852656465656d0000000000000000000000000000000000000000000000600082015250565b60006151d5600983614543565b91506151e08261519f565b602082019050919050565b60006020820190508181036000830152615204816151c8565b9050919050565b7f5175657565207265717565737420636c6f736564206f72206e6f74206465666960008201527f6e65640000000000000000000000000000000000000000000000000000000000602082015250565b6000615267602383614543565b91506152728261520b565b604082019050919050565b600060208201905081810360008301526152968161525a565b9050919050565b7f4e6f7420656e6f7567682061737365747320746f20617070726f76652077697460008201527f6864726177000000000000000000000000000000000000000000000000000000602082015250565b60006152f9602583614543565b91506153048261529d565b604082019050919050565b60006020820190508181036000830152615328816152ec565b9050919050565b60006040820190506153446000830185614375565b6153516020830184614375565b9392505050565b600060c08201905061536d6000830189614914565b61537a6020830188614375565b6153876040830187614914565b6153946060830186614914565b6153a16080830185614375565b6153ae60a0830184614375565b979650505050505050565b60006040820190506153ce6000830185614914565b6153db6020830184614375565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156154395780860481111561541557615414614d90565b5b60018516156154245780820291505b8081029050615432856153e2565b94506153f9565b94509492505050565b600082615452576001905061550e565b81615460576000905061550e565b81600181146154765760028114615480576154af565b600191505061550e565b60ff84111561549257615491614d90565b5b8360020a9150848211156154a9576154a8614d90565b5b5061550e565b5060208310610133831016604e8410600b84101617156154e45782820a9050838111156154df576154de614d90565b5b61550e565b6154f184848460016153ef565b9250905081840481111561550857615507614d90565b5b81810290505b9392505050565b60006155208261436b565b915061552b836148dd565b92506155587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615442565b905092915050565b600061556b8261436b565b91506155768361436b565b925082820390508181111561558e5761558d614d90565b5b92915050565b61559d81614438565b81146155a857600080fd5b50565b6000815190506155ba81615594565b92915050565b6000602082840312156155d6576155d56143a9565b5b60006155e4848285016155ab565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006040820190506156606000830185614914565b61566d6020830184614873565b9392505050565b60006060820190506156896000830186614914565b6156966020830185614914565b6156a36040830184614375565b949350505050565b60006156b68261436b565b91506156c18361436b565b92508282026156cf8161436b565b915082820484148315176156e6576156e5614d90565b5b5092915050565b60006156f88261436b565b91506157038361436b565b925082615713576157126155ed565b5b828204905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026157807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615743565b61578a8683615743565b95508019841693508086168417925050509392505050565b60006157bd6157b86157b38461436b565b615098565b61436b565b9050919050565b6000819050919050565b6157d7836157a2565b6157eb6157e3826157c4565b848454615750565b825550505050565b600090565b6158006157f3565b61580b8184846157ce565b505050565b5b8181101561582f576158246000826157f8565b600181019050615811565b5050565b601f821115615874576158458161571e565b61584e84615733565b8101602085101561585d578190505b61587161586985615733565b830182615810565b50505b505050565b600082821c905092915050565b600061589760001984600802615879565b1980831691505092915050565b60006158b08383615886565b9150826002028217905092915050565b6158c982614538565b67ffffffffffffffff8111156158e2576158e1614b0f565b5b6158ec8254614ed6565b6158f7828285615833565b600060209050601f83116001811461592a5760008415615918578287015190505b61592285826158a4565b86555061598a565b601f1984166159388661571e565b60005b828110156159605784890151825560018201915060208501945060208101905061593b565b8683101561597d5784890151615979601f891682615886565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006159cc826148dd565b91506159d7836148dd565b9250826159e7576159e66155ed565b5b828206905092915050565b600081519050919050565b600081905092915050565b6000615a13826159f2565b615a1d81856159fd565b9350615a2d818560208601614554565b80840191505092915050565b6000615a458284615a08565b91508190509291505056fea2646970667358221220bb29a62e2f01b9311c2410eca22a0fbd17e56e08c4c0130a188c34971e64462c64736f6c63430008140033