Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- StarambaToken
- Optimization enabled
- false
- Compiler version
- v0.4.24+commit.e67f0147
- EVM Version
- byzantium
- Verified at
- 2026-05-15T18:10:29.331247Z
Constructor Arguments
0000000000000000000000000ec4cc1dc980d2d371c53011f6c408f6a0f3c3dd000000000000000000000000e9a96dc46ecb3ba736f8108078d34268ca0edd070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000001fc69c9b0cebebcb4de3f92df92c8f6b3fb040660000000000000000000000009a2b856605bf9846c1bbe9558a85dfdca03d9d0c0000000000000000000000008fbb5457dbcf5dea20b15161bfa7899a2fd06cf40000000000000000000000009490f343d4ec38542b1f287cfa03ab7e82b3d9190000000000000000000000006c83ecdf51f3fd621377ba902a9f341c4794ee93000000000000000000000000e8c9a5395b2927c9a8d30f9c828d65ee5f9e38190000000000000000000000009aadfd9cbaf52f9bd63bf4d543f216c91e5805a5000000000000000000000000334f7945d402f2f34081535d064c02898a6b3ef8000000000000000000000000084afecf0468483ef768763dbbb1b7b800699c3b000000000000000000000000dc82c9f87e77c7700188e03e3deff26c3112adbb
StarambaToken.sol
pragma solidity ^0.4.24;
/**
* @title The STT Token contract.
*
* By Nikita Fuchs
* Credit: Taking ideas from BAT token, NET token and Nimiq token.
*/
/**
* @title Safe math operations that throw error on overflow.
*
* Credit: Taking ideas from FirstBlood token
*/
library SafeMath {
/**
* @dev Safely add two numbers.
*
* @param x First operant.
* @param y Second operant.
* @return The result of x+y.
*/
function add(uint256 x, uint256 y)
internal pure
returns(uint256) {
uint256 z = x + y;
assert((z >= x) && (z >= y));
return z;
}
/**
* @dev Safely substract two numbers.
*
* @param x First operant.
* @param y Second operant.
* @return The result of x-y.
*/
function sub(uint256 x, uint256 y)
internal pure
returns(uint256) {
assert(x >= y);
uint256 z = x - y;
return z;
}
/**
* @dev Safely multiply two numbers.
*
* @param x First operant.
* @param y Second operant.
* @return The result of x*y.
*/
function mul(uint256 x, uint256 y)
internal pure
returns(uint256) {
uint256 z = x * y;
assert((x == 0) || (z/x == y));
return z;
}
}
/**
* @title The abstract ERC-20 Token Standard definition.
*
* https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
*/
contract Token {
/// @dev Returns the total token supply.
uint256 public totalSupply;
function balanceOf(address _owner) public view returns (uint256 balance);
function transfer(address _to, uint256 _value) public returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
function approve(address _spender, uint256 _value) public returns (bool success);
function allowance(address _owner, address _spender) public view returns (uint256 remaining);
/// @dev MUST trigger when tokens are transferred, including zero value transfers.
event Transfer(address indexed _from, address indexed _to, uint256 _value);
/// @dev MUST trigger on any successful call to approve(address _spender, uint256 _value).
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
/**
* @title Default implementation of the ERC-20 Token Standard.
*/
contract StandardToken is Token {
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
/**
* @dev Transfers _value amount of tokens to address _to, and MUST fire the Transfer event.
* @dev The function SHOULD throw if the _from account balance does not have enough tokens to spend.
*
* @dev A token contract which creates new tokens SHOULD trigger a Transfer event with the _from address set to 0x0 when tokens are created.
*
* Note Transfers of 0 values MUST be treated as normal transfers and fire the Transfer event.
*
* @param _to The receiver of the tokens.
* @param _value The amount of tokens to send.
* @return True on success, false otherwise.
*/
function transfer(address _to, uint256 _value)
public
returns (bool success) {
if (balances[msg.sender] >= _value && _value > 0 && balances[_to] + _value > balances[_to]) {
balances[msg.sender] = SafeMath.sub(balances[msg.sender], _value);
balances[_to] = SafeMath.add(balances[_to], _value);
emit Transfer(msg.sender, _to, _value);
return true;
} else {
return false;
}
}
/**
* @dev Transfers _value amount of tokens from address _from to address _to, and MUST fire the Transfer event.
*
* @dev The transferFrom method is used for a withdraw workflow, allowing contracts to transfer tokens on your behalf.
* @dev This can be used for example to allow a contract to transfer tokens on your behalf and/or to charge fees in
* @dev sub-currencies. The function SHOULD throw unless the _from account has deliberately authorized the sender of
* @dev the message via some mechanism.
*
* Note Transfers of 0 values MUST be treated as normal transfers and fire the Transfer event.
*
* @param _from The sender of the tokens.
* @param _to The receiver of the tokens.
* @param _value The amount of tokens to send.
* @return True on success, false otherwise.
*/
function transferFrom(address _from, address _to, uint256 _value)
public
returns (bool success) {
if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0 && balances[_to] + _value > balances[_to]) {
balances[_to] = SafeMath.add(balances[_to], _value);
balances[_from] = SafeMath.sub(balances[_from], _value);
allowed[_from][msg.sender] = SafeMath.sub(allowed[_from][msg.sender], _value);
emit Transfer(_from, _to, _value);
return true;
} else {
return false;
}
}
/**
* @dev Returns the account balance of another account with address _owner.
*
* @param _owner The address of the account to check.
* @return The account balance.
*/
function balanceOf(address _owner)
public view
returns (uint256 balance) {
return balances[_owner];
}
/**
* @dev Allows _spender to withdraw from your account multiple times, up to the _value amount.
* @dev If this function is called again it overwrites the current allowance with _value.
*
* @dev NOTE: To prevent attack vectors like the one described in [1] and discussed in [2], clients
* @dev SHOULD make sure to create user interfaces in such a way that they set the allowance first
* @dev to 0 before setting it to another value for the same spender. THOUGH The contract itself
* @dev shouldn't enforce it, to allow backwards compatilibilty with contracts deployed before.
* @dev [1] https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/
* @dev [2] https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
* @return True on success, false otherwise.
*/
function approve(address _spender, uint256 _value)
public
returns (bool success) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Returns the amount which _spender is still allowed to withdraw from _owner.
*
* @param _owner The address of the sender.
* @param _spender The address of the receiver.
* @return The allowed withdrawal amount.
*/
function allowance(address _owner, address _spender)
public view
returns (uint256 remaining) {
return allowed[_owner][_spender];
}
}
contract RelocationToken {
// function of possible new contract to recieve tokenbalance to relocate - to be protected by msg.sender == StarambaToken
function recieveRelocation(address _creditor, uint _balance) external returns (bool);
}
/*is StandardToken */
contract StarambaToken is StandardToken {
// Token metadata
string public constant name = "STARAMBA.Token";
string public constant symbol = "STT";
uint256 public constant decimals = 18;
string public constant version = "1";
uint256 public TOKEN_CREATION_CAP = 1000 * (10**6) * 10**decimals; // 1000 million STTs
uint256 public constant TOKEN_MIN = 1 * 10**decimals; // 1 STT
address public STTadmin1; // First administrator for multi-sig mechanism
address public STTadmin2; // Second administrator for multi-sig mechanism
// Contracts current state (transactions still paused during sale or already publicly available)
bool public transactionsActive;
// Indicate if the token is in relocation mode
bool public relocationActive;
address public newTokenContractAddress;
// How often was the supply adjusted ? (See STT Whitepaper Version 1.0 from 23. May 2018 )
uint8 supplyAdjustmentCount = 0;
// Keep track of holders and icoBuyers
mapping (address => bool) public isHolder; // track if a user is a known token holder to the smart contract - important for payouts later
address[] public holders; // array of all known holders - important for payouts later
// Store the hashes of admins' msg.data
mapping (address => bytes32) private multiSigHashes;
// Declare vendor keys
mapping (address => bool) public vendors;
// Count amount of vendors for easier verification of correct contract deployment
uint8 public vendorCount;
// Events used for logging
event LogDeliverSTT(address indexed _to, uint256 _value);
//event Log
modifier onlyVendor() {
require(vendors[msg.sender] == true);
_;
}
modifier isTransferable() {
require (transactionsActive == true);
_;
}
modifier onlyOwner() {
// check if transaction sender is admin.
require (msg.sender == STTadmin1 || msg.sender == STTadmin2);
// if yes, store his msg.data.
multiSigHashes[msg.sender] = keccak256(msg.data);
// check if his stored msg.data hash equals to the one of the other admin
if ((multiSigHashes[STTadmin1]) == (multiSigHashes[STTadmin2])) {
// if yes, both admins agreed - continue.
_;
// Reset hashes after successful execution
multiSigHashes[STTadmin1] = 0x0;
multiSigHashes[STTadmin2] = 0x0;
} else {
// if not (yet), return.
return;
}
}
/**
* @dev Create a new STTToken contract.
*
* _admin1 The first admin account that owns this contract.
* _admin2 The second admin account that owns this contract.
* _vendors List of exactly 10 addresses that are allowed to deliver tokens.
*/
constructor(address _admin1, address _admin2, address[] _vendors)
public
{
// Check if the parameters make sense
// admin1 and admin2 address must be set and must be different
require (_admin1 != 0x0);
require (_admin2 != 0x0);
require (_admin1 != _admin2);
// 10 vendor instances for delivering token purchases
require (_vendors.length == 10);
totalSupply = 0;
// define state
STTadmin1 = _admin1;
STTadmin2 = _admin2;
for (uint8 i = 0; i < _vendors.length; i++){
vendors[_vendors[i]] = true;
vendorCount++;
}
}
// Overridden method to check for end of fundraising before allowing transfer of tokens
function transfer(address _to, uint256 _value)
public
isTransferable // Only allow token transfer after the fundraising has ended
returns (bool success)
{
bool result = super.transfer(_to, _value);
if (result) {
trackHolder(_to); // track the owner for later payouts
}
return result;
}
// Overridden method to check for end of fundraising before allowing transfer of tokens
function transferFrom(address _from, address _to, uint256 _value)
public
isTransferable // Only allow token transfer after the fundraising has ended
returns (bool success)
{
bool result = super.transferFrom(_from, _to, _value);
if (result) {
trackHolder(_to); // track the owner for later payouts
}
return result;
}
// Allow for easier balance checking
function getBalanceOf(address _owner)
public
view
returns (uint256 _balance)
{
return balances[_owner];
}
// Perform an atomic swap between two token contracts
function relocate()
external
{
// Check if relocation was activated
require (relocationActive == true);
// Define new token contract is
RelocationToken newSTT = RelocationToken(newTokenContractAddress);
// Burn the old balance
uint256 balance = balances[msg.sender];
balances[msg.sender] = 0;
// Perform the relocation of balances to new contract
require(newSTT.recieveRelocation(msg.sender, balance));
}
// Allows to figure out the amount of known token holders
function getHolderCount()
public
view
returns (uint256 _holderCount)
{
return holders.length;
}
// Allows for easier retrieval of holder by array index
function getHolder(uint256 _index)
public
view
returns (address _holder)
{
return holders[_index];
}
function trackHolder(address _to)
private
returns (bool success)
{
// Check if the recipient is a known token holder
if (isHolder[_to] == false) {
// if not, add him to the holders array and mark him as a known holder
holders.push(_to);
isHolder[_to] = true;
}
return true;
}
/// @dev delivers STT tokens from Leondra (Leondrino Exchange Germany)
function deliverTokens(address _buyer, uint256 _amount)
external
onlyVendor
{
require(_amount >= TOKEN_MIN);
uint256 checkedSupply = SafeMath.add(totalSupply, _amount);
require(checkedSupply <= TOKEN_CREATION_CAP);
// Adjust the balance
uint256 oldBalance = balances[_buyer];
balances[_buyer] = SafeMath.add(oldBalance, _amount);
totalSupply = checkedSupply;
trackHolder(_buyer);
// Log the creation of these tokens
emit LogDeliverSTT(_buyer, _amount);
}
/// @dev Creates new STT tokens
function deliverTokensBatch(address[] _buyer, uint256[] _amount)
external
onlyVendor
{
require(_buyer.length == _amount.length);
for (uint8 i = 0 ; i < _buyer.length; i++) {
require(_amount[i] >= TOKEN_MIN);
require(_buyer[i] != 0x0);
uint256 checkedSupply = SafeMath.add(totalSupply, _amount[i]);
require(checkedSupply <= TOKEN_CREATION_CAP);
// Adjust the balance
uint256 oldBalance = balances[_buyer[i]];
balances[_buyer[i]] = SafeMath.add(oldBalance, _amount[i]);
totalSupply = checkedSupply;
trackHolder(_buyer[i]);
// Log the creation of these tokens
emit LogDeliverSTT(_buyer[i], _amount[i]);
}
}
// Allow / Deny transfer of tokens
function transactionSwitch(bool _transactionsActive)
external
onlyOwner
{
transactionsActive = _transactionsActive;
}
// For eventual later moving to another token contract
function relocationSwitch(bool _relocationActive, address _newTokenContractAddress)
external
onlyOwner
{
if (_relocationActive) {
require(_newTokenContractAddress != 0x0);
} else {
require(_newTokenContractAddress == 0x0);
}
relocationActive = _relocationActive;
newTokenContractAddress = _newTokenContractAddress;
}
// Adjust the cap according to the white paper terms (See STT Whitepaper Version 1.0 from 23. May 2018 )
function adjustCap()
external
onlyOwner
{
require (supplyAdjustmentCount < 4);
TOKEN_CREATION_CAP = SafeMath.add(TOKEN_CREATION_CAP, 50 * (10**6) * 10**decimals); // 50 million STTs
supplyAdjustmentCount++;
}
// Burn function - name indicating the burn of ALL owner's tokens
function burnWholeBalance()
external
{
require(balances[msg.sender] > 0);
totalSupply = SafeMath.sub(totalSupply, balances[msg.sender]);
balances[msg.sender] = 0;
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":0,"enabled":false},"libraries":{},"evmVersion":"byzantium","compilationTarget":{"StarambaToken.sol":"StarambaToken"}}
Contract ABI
[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"approve","inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"newTokenContractAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"vendors","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"holders","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"deliverTokens","inputs":[{"type":"address","name":"_buyer"},{"type":"uint256","name":"_amount"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"STTadmin2","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"version","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"adjustCap","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"STTadmin1","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"balance"}],"name":"balanceOf","inputs":[{"type":"address","name":"_owner"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_holderCount"}],"name":"getHolderCount","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transactionSwitch","inputs":[{"type":"bool","name":"_transactionsActive"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"vendorCount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"_balance"}],"name":"getBalanceOf","inputs":[{"type":"address","name":"_owner"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"success"}],"name":"transfer","inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"relocationSwitch","inputs":[{"type":"bool","name":"_relocationActive"},{"type":"address","name":"_newTokenContractAddress"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"relocate","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"burnWholeBalance","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"transactionsActive","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"deliverTokensBatch","inputs":[{"type":"address[]","name":"_buyer"},{"type":"uint256[]","name":"_amount"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"isHolder","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"remaining"}],"name":"allowance","inputs":[{"type":"address","name":"_owner"},{"type":"address","name":"_spender"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"relocationActive","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"TOKEN_MIN","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"_holder"}],"name":"getHolder","inputs":[{"type":"uint256","name":"_index"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"TOKEN_CREATION_CAP","inputs":[],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_admin1"},{"type":"address","name":"_admin2"},{"type":"address[]","name":"_vendors"}]},{"type":"event","name":"LogDeliverSTT","inputs":[{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"_from","indexed":true},{"type":"address","name":"_to","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"_owner","indexed":true},{"type":"address","name":"_spender","indexed":true},{"type":"uint256","name":"_value","indexed":false}],"anonymous":false}]
Contract Creation Code
0x60806040526012600a0a633b9aca00026003556000600660146101000a81548160ff021916908360ff1602179055503480156200003b57600080fd5b5060405162002b8238038062002b828339810180604052810190808051906020019092919080519060200190929190805182019291905050506000808473ffffffffffffffffffffffffffffffffffffffff16141515156200009c57600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff1614151515620000c357600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515620000ff57600080fd5b600a82511415156200011057600080fd5b6000808190555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600090505b81518160ff1610156200025e576001600a6000848460ff16815181101515620001c357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff1602179055505080806001019150506200019e565b5050505061291080620002726000396000f30060806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610190578063095ea7b31461022057806318160ddd146102855780631aa359ff146102b057806323b872dd1461030757806327e30c361461038c5780632a11ced0146103e7578063313ce567146104545780634dd49e081461047f57806351ec8433146104cc57806354fd4d501461052357806367de698d146105b35780636a5c44a9146105ca57806370a08231146106215780637136982b1461067857806382401f06146106a35780638858287b146106d257806395d89b41146107035780639b96eece14610793578063a9059cbb146107ea578063a906f8371461084f578063b73afe4f1461089e578063bbe2b727146108b5578063c69e06db146108cc578063cf72085f146108fb578063d4d7b19a1461094e578063dd62ed3e146109a9578063de25577814610a20578063e74799b414610a4f578063e8a96b4614610a7a578063f9fae4f714610ae7575b600080fd5b34801561019c57600080fd5b506101a5610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e55780820151818401526020810190506101ca565b50505050905090810190601f1680156102125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022c57600080fd5b5061026b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b4b565b604051808215151515815260200191505060405180910390f35b34801561029157600080fd5b5061029a610c3d565b6040518082815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5610c43565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b50610372600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c69565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cb7565b604051808215151515815260200191505060405180910390f35b3480156103f357600080fd5b5061041260048036038101908080359060200190929190505050610cd7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046057600080fd5b50610469610d15565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b506104ca600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1a565b005b3480156104d857600080fd5b506104e1610ea5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052f57600080fd5b50610538610ecb565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057857808201518184015260208101905061055d565b50505050905090810190601f1680156105a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bf57600080fd5b506105c8610f04565b005b3480156105d657600080fd5b506105df611247565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062d57600080fd5b50610662600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126d565b6040518082815260200191505060405180910390f35b34801561068457600080fd5b5061068d6112b6565b6040518082815260200191505060405180910390f35b3480156106af57600080fd5b506106d06004803603810190808035151590602001909291905050506112c3565b005b3480156106de57600080fd5b506106e76115b2565b604051808260ff1660ff16815260200191505060405180910390f35b34801561070f57600080fd5b506107186115c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075857808201518184015260208101905061073d565b50505050905090810190601f1680156107855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079f57600080fd5b506107d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115fe565b6040518082815260200191505060405180910390f35b3480156107f657600080fd5b50610835600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611647565b604051808215151515815260200191505060405180910390f35b34801561085b57600080fd5b5061089c600480360381019080803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611693565b005b3480156108aa57600080fd5b506108b3611a1b565b005b3480156108c157600080fd5b506108ca611bd9565b005b3480156108d857600080fd5b506108e1611cbf565b604051808215151515815260200191505060405180910390f35b34801561090757600080fd5b5061094c600480360381019080803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050611cd2565b005b34801561095a57600080fd5b5061098f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff9565b604051808215151515815260200191505060405180910390f35b3480156109b557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612019565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356120a0565b604051808215151515815260200191505060405180910390f35b348015610a5b57600080fd5b50610a646120b3565b6040518082815260200191505060405180910390f35b348015610a8657600080fd5b50610aa5600480360381019080803590602001909291905050506120be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610af357600080fd5b50610afc612101565b6040518082815260200191505060405180910390f35b6040805190810160405280600e81526020017f53544152414d42412e546f6b656e00000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060011515600560149054906101000a900460ff161515141515610c8e57600080fd5b610c99858585612107565b90508015610cac57610caa84612508565b505b809150509392505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600881815481101515610ce657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610d7c57600080fd5b6012600a0a6001028310151515610d9257600080fd5b610d9e6000548461262a565b91506003548211151515610db157600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610dfd818461262a565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600081905550610e5084612508565b508373ffffffffffffffffffffffffffffffffffffffff167f06f56047b1254ca76de671227d293f8bac23fe1a2c4d3e4a455de259bfa04ee2846040518082815260200191505060405180910390a250505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fad5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610fb857600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460001916141561123f576004600660149054906101000a900460ff1660ff1610151561111057600080fd5b6111266003546012600a0a6302faf0800261262a565b6003819055506006601481819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff16021790555050600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550611244565b611245565b5b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600880549050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061136c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561137757600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191614156115a95780600560146101000a81548160ff021916908315150217905550600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081600019169055506115ae565b6115af565b5b50565b600b60009054906101000a900460ff1681565b6040805190810160405280600381526020017f535454000000000000000000000000000000000000000000000000000000000081525081565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060011515600560149054906101000a900460ff16151514151561166c57600080fd5b6116768484612654565b905080156116895761168784612508565b505b8091505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061173c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561174757600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600019161415611a115781156118af5760008173ffffffffffffffffffffffffffffffffffffffff16141515156118aa57600080fd5b6118d5565b60008173ffffffffffffffffffffffffffffffffffffffff161415156118d457600080fd5b5b81600560156101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550611a16565b611a17565b5b5050565b60008060011515600560159054906101000a900460ff161515141515611a4057600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16636c464c3d33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050506040513d6020811015611bb957600080fd5b81019080805190602001909291905050501515611bd557600080fd5b5050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515611c2757600080fd5b611c72600054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c6565b6000819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600560149054906101000a900460ff1681565b600080600060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d3657600080fd5b8484905087879050141515611d4a57600080fd5b600092505b868690508360ff161015611ff0576012600a0a60010285858560ff168181101515611d7657fe5b9050602002013510151515611d8a57600080fd5b600087878560ff168181101515611d9d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611ddd57600080fd5b611e0060005486868660ff168181101515611df457fe5b9050602002013561262a565b91506003548211151515611e1357600080fd5b6001600088888660ff168181101515611e2857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ea38186868660ff168181101515611e9757fe5b9050602002013561262a565b6001600089898760ff168181101515611eb857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600081905550611f5087878560ff168181101515611f2e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612508565b5086868460ff168181101515611f6257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f06f56047b1254ca76de671227d293f8bac23fe1a2c4d3e4a455de259bfa04ee286868660ff168181101515611fc757fe5b905060200201356040518082815260200191505060405180910390a28280600101935050611d4f565b50505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560159054906101000a900460ff1681565b6012600a0a60010281565b60006008828154811015156120cf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60035481565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156121d4575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156121e05750600082115b801561226b5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156124fc576122b9600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361262a565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612345600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240e600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050612501565b600090505b9392505050565b6000801515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126215760088290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60019050919050565b60008082840190508381101580156126425750828110155b151561264a57fe5b8091505092915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156126a55750600082115b80156127305750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156128bb5761277e600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061280a600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361262a565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506128c0565b600090505b92915050565b6000808284101515156128d557fe5b828403905080915050929150505600a165627a7a72305820a047beec369da1f69fb0c5f39d5354cec3724c45ef7497aa136ba4cfb66204b800290000000000000000000000000ec4cc1dc980d2d371c53011f6c408f6a0f3c3dd000000000000000000000000e9a96dc46ecb3ba736f8108078d34268ca0edd070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000001fc69c9b0cebebcb4de3f92df92c8f6b3fb040660000000000000000000000009a2b856605bf9846c1bbe9558a85dfdca03d9d0c0000000000000000000000008fbb5457dbcf5dea20b15161bfa7899a2fd06cf40000000000000000000000009490f343d4ec38542b1f287cfa03ab7e82b3d9190000000000000000000000006c83ecdf51f3fd621377ba902a9f341c4794ee93000000000000000000000000e8c9a5395b2927c9a8d30f9c828d65ee5f9e38190000000000000000000000009aadfd9cbaf52f9bd63bf4d543f216c91e5805a5000000000000000000000000334f7945d402f2f34081535d064c02898a6b3ef8000000000000000000000000084afecf0468483ef768763dbbb1b7b800699c3b000000000000000000000000dc82c9f87e77c7700188e03e3deff26c3112adbb
Deployed ByteCode
0x60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610190578063095ea7b31461022057806318160ddd146102855780631aa359ff146102b057806323b872dd1461030757806327e30c361461038c5780632a11ced0146103e7578063313ce567146104545780634dd49e081461047f57806351ec8433146104cc57806354fd4d501461052357806367de698d146105b35780636a5c44a9146105ca57806370a08231146106215780637136982b1461067857806382401f06146106a35780638858287b146106d257806395d89b41146107035780639b96eece14610793578063a9059cbb146107ea578063a906f8371461084f578063b73afe4f1461089e578063bbe2b727146108b5578063c69e06db146108cc578063cf72085f146108fb578063d4d7b19a1461094e578063dd62ed3e146109a9578063de25577814610a20578063e74799b414610a4f578063e8a96b4614610a7a578063f9fae4f714610ae7575b600080fd5b34801561019c57600080fd5b506101a5610b12565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e55780820151818401526020810190506101ca565b50505050905090810190601f1680156102125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022c57600080fd5b5061026b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b4b565b604051808215151515815260200191505060405180910390f35b34801561029157600080fd5b5061029a610c3d565b6040518082815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5610c43565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b50610372600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c69565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cb7565b604051808215151515815260200191505060405180910390f35b3480156103f357600080fd5b5061041260048036038101908080359060200190929190505050610cd7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046057600080fd5b50610469610d15565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b506104ca600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1a565b005b3480156104d857600080fd5b506104e1610ea5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052f57600080fd5b50610538610ecb565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057857808201518184015260208101905061055d565b50505050905090810190601f1680156105a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bf57600080fd5b506105c8610f04565b005b3480156105d657600080fd5b506105df611247565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062d57600080fd5b50610662600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126d565b6040518082815260200191505060405180910390f35b34801561068457600080fd5b5061068d6112b6565b6040518082815260200191505060405180910390f35b3480156106af57600080fd5b506106d06004803603810190808035151590602001909291905050506112c3565b005b3480156106de57600080fd5b506106e76115b2565b604051808260ff1660ff16815260200191505060405180910390f35b34801561070f57600080fd5b506107186115c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075857808201518184015260208101905061073d565b50505050905090810190601f1680156107855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079f57600080fd5b506107d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115fe565b6040518082815260200191505060405180910390f35b3480156107f657600080fd5b50610835600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611647565b604051808215151515815260200191505060405180910390f35b34801561085b57600080fd5b5061089c600480360381019080803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611693565b005b3480156108aa57600080fd5b506108b3611a1b565b005b3480156108c157600080fd5b506108ca611bd9565b005b3480156108d857600080fd5b506108e1611cbf565b604051808215151515815260200191505060405180910390f35b34801561090757600080fd5b5061094c600480360381019080803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050611cd2565b005b34801561095a57600080fd5b5061098f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff9565b604051808215151515815260200191505060405180910390f35b3480156109b557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612019565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356120a0565b604051808215151515815260200191505060405180910390f35b348015610a5b57600080fd5b50610a646120b3565b6040518082815260200191505060405180910390f35b348015610a8657600080fd5b50610aa5600480360381019080803590602001909291905050506120be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610af357600080fd5b50610afc612101565b6040518082815260200191505060405180910390f35b6040805190810160405280600e81526020017f53544152414d42412e546f6b656e00000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060011515600560149054906101000a900460ff161515141515610c8e57600080fd5b610c99858585612107565b90508015610cac57610caa84612508565b505b809150509392505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600881815481101515610ce657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610d7c57600080fd5b6012600a0a6001028310151515610d9257600080fd5b610d9e6000548461262a565b91506003548211151515610db157600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610dfd818461262a565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600081905550610e5084612508565b508373ffffffffffffffffffffffffffffffffffffffff167f06f56047b1254ca76de671227d293f8bac23fe1a2c4d3e4a455de259bfa04ee2846040518082815260200191505060405180910390a250505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fad5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610fb857600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460001916141561123f576004600660149054906101000a900460ff1660ff1610151561111057600080fd5b6111266003546012600a0a6302faf0800261262a565b6003819055506006601481819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff16021790555050600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550611244565b611245565b5b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600880549050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061136c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561137757600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191614156115a95780600560146101000a81548160ff021916908315150217905550600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081600019169055506115ae565b6115af565b5b50565b600b60009054906101000a900460ff1681565b6040805190810160405280600381526020017f535454000000000000000000000000000000000000000000000000000000000081525081565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060011515600560149054906101000a900460ff16151514151561166c57600080fd5b6116768484612654565b905080156116895761168784612508565b505b8091505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061173c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561174757600080fd5b600036604051808383808284378201915050925050506040518091039020600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020816000191690555060096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000191660096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600019161415611a115781156118af5760008173ffffffffffffffffffffffffffffffffffffffff16141515156118aa57600080fd5b6118d5565b60008173ffffffffffffffffffffffffffffffffffffffff161415156118d457600080fd5b5b81600560156101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060010260096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550600060010260096000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208160001916905550611a16565b611a17565b5b5050565b60008060011515600560159054906101000a900460ff161515141515611a4057600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16636c464c3d33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050506040513d6020811015611bb957600080fd5b81019080805190602001909291905050501515611bd557600080fd5b5050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515611c2757600080fd5b611c72600054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128c6565b6000819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600560149054906101000a900460ff1681565b600080600060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d3657600080fd5b8484905087879050141515611d4a57600080fd5b600092505b868690508360ff161015611ff0576012600a0a60010285858560ff168181101515611d7657fe5b9050602002013510151515611d8a57600080fd5b600087878560ff168181101515611d9d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611ddd57600080fd5b611e0060005486868660ff168181101515611df457fe5b9050602002013561262a565b91506003548211151515611e1357600080fd5b6001600088888660ff168181101515611e2857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ea38186868660ff168181101515611e9757fe5b9050602002013561262a565b6001600089898760ff168181101515611eb857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600081905550611f5087878560ff168181101515611f2e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612508565b5086868460ff168181101515611f6257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f06f56047b1254ca76de671227d293f8bac23fe1a2c4d3e4a455de259bfa04ee286868660ff168181101515611fc757fe5b905060200201356040518082815260200191505060405180910390a28280600101935050611d4f565b50505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560159054906101000a900460ff1681565b6012600a0a60010281565b60006008828154811015156120cf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60035481565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156121d4575081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156121e05750600082115b801561226b5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156124fc576122b9600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361262a565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612345600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240e600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050612501565b600090505b9392505050565b6000801515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126215760088290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60019050919050565b60008082840190508381101580156126425750828110155b151561264a57fe5b8091505092915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156126a55750600082115b80156127305750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156128bb5761277e600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128c6565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061280a600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361262a565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506128c0565b600090505b92915050565b6000808284101515156128d557fe5b828403905080915050929150505600a165627a7a72305820a047beec369da1f69fb0c5f39d5354cec3724c45ef7497aa136ba4cfb66204b80029