Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- AlgemAdapter
- Optimization enabled
- false
- Compiler version
- v0.8.3+commit.8d00100c
- EVM Version
- default
- Verified at
- 2022-12-15T19:29:36.303695Z
Constructor Arguments
0x0000000000000000000000000000000000000000000000000000000000005001000000000000000000000000e511ed88575c57767bafb72bfd10775413e3f2b000000000000000000000000070d264472327b67898c919809a9dc4759b6c0f2700000000000000000000000088463254469c37b9cecb71a34746707e008fb5a9
Arg [0] (address) : <a href=/astar/address/0x0000000000000000000000000000000000005001>0x0000000000000000000000000000000000005001</a>
Arg [1] (address) : <a href=/astar/address/0xe511ed88575c57767bafb72bfd10775413e3f2b0>0xe511ed88575c57767bafb72bfd10775413e3f2b0</a>
Arg [2] (address) : <a href=/astar/address/0x70d264472327b67898c919809a9dc4759b6c0f27>0x70d264472327b67898c919809a9dc4759b6c0f27</a>
Arg [3] (address) : <a href=/astar/address/0x88463254469c37b9cecb71a34746707e008fb5a9>0x88463254469c37b9cecb71a34746707e008fb5a9</a>
Contract source code
// SPDX-License-Identifier: BSD-3-Clause pragma solidity >=0.7.0; /// Interface to the precompiled contract on Shibuya/Shiden/Astar /// Predeployed at the address 0x0000000000000000000000000000000000005001 /// For better understanding check the source code: /// repo: https://github.com/AstarNetwork/astar-frame /// code: frame/dapps-staking/src/pallet interface DappsStaking { // Storage getters /// @notice Read current era. /// @return era: The current era function read_current_era() external view returns (uint256); /// @notice Read unbonding period constant. /// @return period: The unbonding period in eras function read_unbonding_period() external view returns (uint256); /// @notice Read Total network reward for the given era /// @return reward: Total network reward for the given era function read_era_reward(uint32 era) external view returns (uint128); /// @notice Read Total staked amount for the given era /// @return staked: Total staked amount for the given era function read_era_staked(uint32 era) external view returns (uint128); /// @notice Read Staked amount for the staker /// @param staker: The staker address in form of 20 or 32 hex bytes /// @return amount: Staked amount by the staker function read_staked_amount(bytes calldata staker) external view returns (uint128); /// @notice Read Staked amount on a given contract for the staker /// @param contract_id: The smart contract address used for staking /// @param staker: The staker address in form of 20 or 32 hex bytes /// @return amount: Staked amount by the staker function read_staked_amount_on_contract(address contract_id, bytes calldata staker) external view returns (uint128); /// @notice Read the staked amount from the era when the amount was last staked/unstaked /// @return total: The most recent total staked amount on contract function read_contract_stake(address contract_id) external view returns (uint128); // Extrinsic calls /// @notice Register is root origin only and not allowed via evm precompile. /// This should always fail. function register(address) external; /// @notice Stake provided amount on the contract. function bond_and_stake(address, uint128) external; /// @notice Start unbonding process and unstake balance from the contract. function unbond_and_unstake(address, uint128) external; /// @notice Withdraw all funds that have completed the unbonding process. function withdraw_unbonded() external; /// @notice Claim earned staker rewards for the oldest unclaimed era. /// In order to claim multiple eras, this call has to be called multiple times. /// Staker account is derived from the caller address. /// @param smart_contract: The smart contract address used for staking function claim_staker(address smart_contract) external; /// @notice Claim one era of unclaimed dapp rewards for the specified contract and era. /// @param smart_contract: The smart contract address used for staking /// @param era: The era to be claimed function claim_dapp(address smart_contract, uint128 era) external; /// Instruction how to handle reward payout for staker. /// `FreeBalance` - Reward will be paid out to the staker (free balance). /// `StakeBalance` - Reward will be paid out to the staker and is immediately restaked (locked balance) enum RewardDestination {FreeBalance, StakeBalance} /// @notice Set reward destination for staker rewards /// @param reward_destination: The instruction on how the reward payout should be handled function set_reward_destination(RewardDestination reward_destination) external; /// @notice Withdraw staked funds from an unregistered contract. /// @param smart_contract: The smart contract address used for staking function withdraw_from_unregistered(address smart_contract) external; /// @notice Transfer part or entire nomination from origin smart contract to target smart contract /// @param origin_smart_contract: The origin smart contract address /// @param amount: The amount to transfer from origin to target /// @param target_smart_contract: The target smart contract address function nomination_transfer(address origin_smart_contract, uint128 amount, address target_smart_contract) external; } interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } interface DIAOracleV2 { function getValue(string memory key) external view returns (uint128, uint128); } contract AlgemAdapter { mapping (string => uint256) public values; address admin; address dappsStakingContractAddress; address nAstrContractAddress; address diaOracleContractAddress; address stakingArgument; DappsStaking dsInstance; IERC20 nAstrInstance; DIAOracleV2 diaOracleInstance; event OracleUpdate(string key, uint128 value, uint128 timestamp); event AdminAddressChange(address newUpdater); event DappsStakingContractAddressChange(address newAddress); event NAstrContractAddressChange(address newAddress); event DiaOracleContractAddressChange(address newAddress); event StakingArgumentAddressChange(address newAddress); constructor(address newDappsStakingContractAddress, address newNAstrContractAddress, address newStakingArgumentAddress, address newDiaOracleContractAddress) { admin = msg.sender; updateDappsStakingContractAddress(newDappsStakingContractAddress); updateNAstrContractAddress(newNAstrContractAddress); updateDIAOracleContractAddress(newDiaOracleContractAddress); updateStakingArgumentAddress(newStakingArgumentAddress); } function getNAstrPriceFromCollateralRatio() external view returns (uint256, uint128) { uint128 astrPrice; uint128 timestamp; (astrPrice, timestamp) = diaOracleInstance.getValue("ASTR/USD"); uint256 nAstrPrice = (astrPrice * getAstrInStakingContract()) / getNAstrTotalSupply(); return (nAstrPrice, timestamp); } function getAstrInStakingContract() public view returns (uint256) { return dsInstance.read_staked_amount_on_contract(stakingArgument, abi.encodePacked(stakingArgument)); } function getNAstrTotalSupply() public view returns (uint256) { return nAstrInstance.totalSupply(); } function updateAdminAddress(address newAdminAddress) public { require(msg.sender == admin); admin = newAdminAddress; emit AdminAddressChange(newAdminAddress); } function updateDappsStakingContractAddress(address newDappsStakingContractAddress) public { require(msg.sender == admin); dappsStakingContractAddress = newDappsStakingContractAddress; dsInstance = DappsStaking(newDappsStakingContractAddress); emit DappsStakingContractAddressChange(newDappsStakingContractAddress); } function updateNAstrContractAddress(address newNAstrContractAddress) public { require(msg.sender == admin); nAstrContractAddress = newNAstrContractAddress; nAstrInstance = IERC20(newNAstrContractAddress); emit NAstrContractAddressChange(newNAstrContractAddress); } function updateDIAOracleContractAddress(address newDiaOracleContractAddress) public { require(msg.sender == admin); diaOracleContractAddress = newDiaOracleContractAddress; diaOracleInstance = DIAOracleV2(diaOracleContractAddress); emit DiaOracleContractAddressChange(newDiaOracleContractAddress); } function updateStakingArgumentAddress(address newStakingArgumentAddress) public { require(msg.sender == admin); stakingArgument = newStakingArgumentAddress; emit StakingArgumentAddressChange(newStakingArgumentAddress); } }
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"newDappsStakingContractAddress","internalType":"address"},{"type":"address","name":"newNAstrContractAddress","internalType":"address"},{"type":"address","name":"newStakingArgumentAddress","internalType":"address"},{"type":"address","name":"newDiaOracleContractAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getAstrInStakingContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint128","name":"","internalType":"uint128"}],"name":"getNAstrPriceFromCollateralRatio","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getNAstrTotalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateAdminAddress","inputs":[{"type":"address","name":"newAdminAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDIAOracleContractAddress","inputs":[{"type":"address","name":"newDiaOracleContractAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDappsStakingContractAddress","inputs":[{"type":"address","name":"newDappsStakingContractAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateNAstrContractAddress","inputs":[{"type":"address","name":"newNAstrContractAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateStakingArgumentAddress","inputs":[{"type":"address","name":"newStakingArgumentAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"values","inputs":[{"type":"string","name":"","internalType":"string"}]},{"type":"event","name":"AdminAddressChange","inputs":[{"type":"address","name":"newUpdater","indexed":false}],"anonymous":false},{"type":"event","name":"DappsStakingContractAddressChange","inputs":[{"type":"address","name":"newAddress","indexed":false}],"anonymous":false},{"type":"event","name":"DiaOracleContractAddressChange","inputs":[{"type":"address","name":"newAddress","indexed":false}],"anonymous":false},{"type":"event","name":"NAstrContractAddressChange","inputs":[{"type":"address","name":"newAddress","indexed":false}],"anonymous":false},{"type":"event","name":"OracleUpdate","inputs":[{"type":"string","name":"key","indexed":false},{"type":"uint128","name":"value","indexed":false},{"type":"uint128","name":"timestamp","indexed":false}],"anonymous":false},{"type":"event","name":"StakingArgumentAddressChange","inputs":[{"type":"address","name":"newAddress","indexed":false}],"anonymous":false}]
Contract Creation Code
0x60806040523480156200001157600080fd5b506040516200162838038062001628833981810160405281019062000037919062000522565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200008984620000c660201b60201c565b6200009a83620001df60201b60201c565b620000ab81620002f860201b60201c565b620000bc826200043360201b60201c565b505050506200060a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200012157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fda6b386d29e15c2ba2c35e36b8e6abfb1dd02083278df68a65cba3130c5c425181604051620001d491906200059f565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200023a57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5fbf63dda15b634077cd94eb7d6826dd9dd35579074cc9145d5219937d06223481604051620002ed91906200059f565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200035357600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4f0ac3bab7dbccd5ecfb7109b27237b2607e4b270f17d2ef48d343307cc35a49816040516200042891906200059f565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200048e57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ef6b24d44140c5d9489cb1ebbcf3ffe4c78d3ba8c1a4bbdb3bfbf3d0e709144816040516200050091906200059f565b60405180910390a150565b6000815190506200051c81620005f0565b92915050565b600080600080608085870312156200053957600080fd5b600062000549878288016200050b565b94505060206200055c878288016200050b565b93505060406200056f878288016200050b565b925050606062000582878288016200050b565b91505092959194509250565b6200059981620005bc565b82525050565b6000602082019050620005b660008301846200058e565b92915050565b6000620005c982620005d0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005fb81620005bc565b81146200060757600080fd5b50565b61100e806200061a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063cff08b0411610066578063cff08b041461011c578063d48ce5a51461013b578063f25f974114610157578063f3cede3414610175578063f9660cf01461019357610093565b80633b1d4307146100985780635a9ade8b146100b457806385e2381c146100e4578063c830738b14610100575b600080fd5b6100b260048036038101906100ad9190610a60565b6101af565b005b6100ce60048036038101906100c99190610a89565b610284565b6040516100db9190610c7e565b60405180910390f35b6100fe60048036038101906100f99190610a60565b6102b2565b005b61011a60048036038101906101159190610a60565b610387565b005b61012461049d565b604051610132929190610c99565b60405180910390f35b61015560048036038101906101509190610a60565b61059b565b005b61015f6106b1565b60405161016c9190610c7e565b60405180910390f35b61017d6107da565b60405161018a9190610c7e565b60405180910390f35b6101ad60048036038101906101a89190610a60565b610881565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461020957600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ef6b24d44140c5d9489cb1ebbcf3ffe4c78d3ba8c1a4bbdb3bfbf3d0e709144816040516102799190610c13565b60405180910390a150565b6000818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030c57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75d8326a81519a727b7dbf8b04ac3117b7b428d302fd40ceb09bca3156fd8c048160405161037c9190610c13565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5fbf63dda15b634077cd94eb7d6826dd9dd35579074cc9145d5219937d062234816040516104929190610c13565b60405180910390a150565b600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663960384a06040518163ffffffff1660e01b81526004016104fc90610c5e565b604080518083038186803b15801561051357600080fd5b505afa158015610527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054b9190610af3565b8092508193505050600061055d6107da565b6105656106b1565b846fffffffffffffffffffffffffffffffff166105829190610d76565b61058c9190610d45565b90508082945094505050509091565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f557600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fda6b386d29e15c2ba2c35e36b8e6abfb1dd02083278df68a65cba3130c5c4251816040516106a69190610c13565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd33172d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516020016107479190610bf8565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610773929190610c2e565b60206040518083038186803b15801561078b57600080fd5b505afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c39190610aca565b6fffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561084457600080fd5b505afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c9190610b2f565b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108db57600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4f0ac3bab7dbccd5ecfb7109b27237b2607e4b270f17d2ef48d343307cc35a49816040516109ae9190610c13565b60405180910390a150565b60006109cc6109c784610ce7565b610cc2565b9050828152602081018484840111156109e457600080fd5b6109ef848285610e28565b509392505050565b600081359050610a0681610f93565b92915050565b600082601f830112610a1d57600080fd5b8135610a2d8482602086016109b9565b91505092915050565b600081519050610a4581610faa565b92915050565b600081519050610a5a81610fc1565b92915050565b600060208284031215610a7257600080fd5b6000610a80848285016109f7565b91505092915050565b600060208284031215610a9b57600080fd5b600082013567ffffffffffffffff811115610ab557600080fd5b610ac184828501610a0c565b91505092915050565b600060208284031215610adc57600080fd5b6000610aea84828501610a36565b91505092915050565b60008060408385031215610b0657600080fd5b6000610b1485828601610a36565b9250506020610b2585828601610a36565b9150509250929050565b600060208284031215610b4157600080fd5b6000610b4f84828501610a4b565b91505092915050565b610b6181610dd0565b82525050565b610b78610b7382610dd0565b610e9b565b82525050565b6000610b8982610d18565b610b938185610d23565b9350610ba3818560208601610e37565b610bac81610f4c565b840191505092915050565b6000610bc4600883610d34565b9150610bcf82610f6a565b602082019050919050565b610be381610de2565b82525050565b610bf281610e1e565b82525050565b6000610c048284610b67565b60148201915081905092915050565b6000602082019050610c286000830184610b58565b92915050565b6000604082019050610c436000830185610b58565b8181036020830152610c558184610b7e565b90509392505050565b60006020820190508181036000830152610c7781610bb7565b9050919050565b6000602082019050610c936000830184610be9565b92915050565b6000604082019050610cae6000830185610be9565b610cbb6020830184610bda565b9392505050565b6000610ccc610cdd565b9050610cd88282610e6a565b919050565b6000604051905090565b600067ffffffffffffffff821115610d0257610d01610f1d565b5b610d0b82610f4c565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610d5082610e1e565b9150610d5b83610e1e565b925082610d6b57610d6a610eee565b5b828204905092915050565b6000610d8182610e1e565b9150610d8c83610e1e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610dc557610dc4610ebf565b5b828202905092915050565b6000610ddb82610dfe565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610e55578082015181840152602081019050610e3a565b83811115610e64576000848401525b50505050565b610e7382610f4c565b810181811067ffffffffffffffff82111715610e9257610e91610f1d565b5b80604052505050565b6000610ea682610ead565b9050919050565b6000610eb882610f5d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f415354522f555344000000000000000000000000000000000000000000000000600082015250565b610f9c81610dd0565b8114610fa757600080fd5b50565b610fb381610de2565b8114610fbe57600080fd5b50565b610fca81610e1e565b8114610fd557600080fd5b5056fea2646970667358221220f34e58c0b60d6fe0d957e6cff1933a5804e21be9aa40c3066e20b0a41723367764736f6c634300080300330000000000000000000000000000000000000000000000000000000000005001000000000000000000000000e511ed88575c57767bafb72bfd10775413e3f2b000000000000000000000000070d264472327b67898c919809a9dc4759b6c0f2700000000000000000000000088463254469c37b9cecb71a34746707e008fb5a9
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063cff08b0411610066578063cff08b041461011c578063d48ce5a51461013b578063f25f974114610157578063f3cede3414610175578063f9660cf01461019357610093565b80633b1d4307146100985780635a9ade8b146100b457806385e2381c146100e4578063c830738b14610100575b600080fd5b6100b260048036038101906100ad9190610a60565b6101af565b005b6100ce60048036038101906100c99190610a89565b610284565b6040516100db9190610c7e565b60405180910390f35b6100fe60048036038101906100f99190610a60565b6102b2565b005b61011a60048036038101906101159190610a60565b610387565b005b61012461049d565b604051610132929190610c99565b60405180910390f35b61015560048036038101906101509190610a60565b61059b565b005b61015f6106b1565b60405161016c9190610c7e565b60405180910390f35b61017d6107da565b60405161018a9190610c7e565b60405180910390f35b6101ad60048036038101906101a89190610a60565b610881565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461020957600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ef6b24d44140c5d9489cb1ebbcf3ffe4c78d3ba8c1a4bbdb3bfbf3d0e709144816040516102799190610c13565b60405180910390a150565b6000818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030c57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75d8326a81519a727b7dbf8b04ac3117b7b428d302fd40ceb09bca3156fd8c048160405161037c9190610c13565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5fbf63dda15b634077cd94eb7d6826dd9dd35579074cc9145d5219937d062234816040516104929190610c13565b60405180910390a150565b600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663960384a06040518163ffffffff1660e01b81526004016104fc90610c5e565b604080518083038186803b15801561051357600080fd5b505afa158015610527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054b9190610af3565b8092508193505050600061055d6107da565b6105656106b1565b846fffffffffffffffffffffffffffffffff166105829190610d76565b61058c9190610d45565b90508082945094505050509091565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f557600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fda6b386d29e15c2ba2c35e36b8e6abfb1dd02083278df68a65cba3130c5c4251816040516106a69190610c13565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd33172d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516020016107479190610bf8565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610773929190610c2e565b60206040518083038186803b15801561078b57600080fd5b505afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c39190610aca565b6fffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561084457600080fd5b505afa158015610858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087c9190610b2f565b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108db57600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4f0ac3bab7dbccd5ecfb7109b27237b2607e4b270f17d2ef48d343307cc35a49816040516109ae9190610c13565b60405180910390a150565b60006109cc6109c784610ce7565b610cc2565b9050828152602081018484840111156109e457600080fd5b6109ef848285610e28565b509392505050565b600081359050610a0681610f93565b92915050565b600082601f830112610a1d57600080fd5b8135610a2d8482602086016109b9565b91505092915050565b600081519050610a4581610faa565b92915050565b600081519050610a5a81610fc1565b92915050565b600060208284031215610a7257600080fd5b6000610a80848285016109f7565b91505092915050565b600060208284031215610a9b57600080fd5b600082013567ffffffffffffffff811115610ab557600080fd5b610ac184828501610a0c565b91505092915050565b600060208284031215610adc57600080fd5b6000610aea84828501610a36565b91505092915050565b60008060408385031215610b0657600080fd5b6000610b1485828601610a36565b9250506020610b2585828601610a36565b9150509250929050565b600060208284031215610b4157600080fd5b6000610b4f84828501610a4b565b91505092915050565b610b6181610dd0565b82525050565b610b78610b7382610dd0565b610e9b565b82525050565b6000610b8982610d18565b610b938185610d23565b9350610ba3818560208601610e37565b610bac81610f4c565b840191505092915050565b6000610bc4600883610d34565b9150610bcf82610f6a565b602082019050919050565b610be381610de2565b82525050565b610bf281610e1e565b82525050565b6000610c048284610b67565b60148201915081905092915050565b6000602082019050610c286000830184610b58565b92915050565b6000604082019050610c436000830185610b58565b8181036020830152610c558184610b7e565b90509392505050565b60006020820190508181036000830152610c7781610bb7565b9050919050565b6000602082019050610c936000830184610be9565b92915050565b6000604082019050610cae6000830185610be9565b610cbb6020830184610bda565b9392505050565b6000610ccc610cdd565b9050610cd88282610e6a565b919050565b6000604051905090565b600067ffffffffffffffff821115610d0257610d01610f1d565b5b610d0b82610f4c565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610d5082610e1e565b9150610d5b83610e1e565b925082610d6b57610d6a610eee565b5b828204905092915050565b6000610d8182610e1e565b9150610d8c83610e1e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610dc557610dc4610ebf565b5b828202905092915050565b6000610ddb82610dfe565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610e55578082015181840152602081019050610e3a565b83811115610e64576000848401525b50505050565b610e7382610f4c565b810181811067ffffffffffffffff82111715610e9257610e91610f1d565b5b80604052505050565b6000610ea682610ead565b9050919050565b6000610eb882610f5d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f415354522f555344000000000000000000000000000000000000000000000000600082015250565b610f9c81610dd0565b8114610fa757600080fd5b50565b610fb381610de2565b8114610fbe57600080fd5b50565b610fca81610e1e565b8114610fd557600080fd5b5056fea2646970667358221220f34e58c0b60d6fe0d957e6cff1933a5804e21be9aa40c3066e20b0a41723367764736f6c63430008030033