Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
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:
- Crowdsale
- Optimization enabled
- false
- Compiler version
- v0.4.21+commit.dfe3193c
- EVM Version
- byzantium
- Verified at
- 2026-06-19T10:23:12.308269Z
Constructor Arguments
000000000000000000000000ced4eb91efe1b708782afd33aa529a6a9ace6671
Arg [0] (address) : 0xced4eb91efe1b708782afd33aa529a6a9ace6671
Crowdsale.sol
pragma solidity 0.4.21;
library SafeMath {
function mul(uint a, uint b) internal pure returns(uint) {
uint c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function sub(uint a, uint b) internal pure returns(uint) {
assert(b <= a);
return a - b;
}
function add(uint a, uint b) internal pure returns(uint) {
uint c = a + b;
assert(c >= a && c >= b);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
address public newOwner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function Ownable() public {
owner = msg.sender;
newOwner = address(0);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function transferOwnership(address _newOwner) public onlyOwner {
require(address(0) != _newOwner);
newOwner = _newOwner;
}
function acceptOwnership() public {
require(msg.sender == newOwner);
emit OwnershipTransferred(owner, msg.sender);
owner = msg.sender;
newOwner = address(0);
}
}
/**
* @title Pausable
* @dev Base contract which allows children to implement an emergency stop mechanism.
*/
contract Pausable is Ownable {
event Pause();
event Unpause();
bool public paused = false;
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() public onlyOwner whenNotPaused {
paused = true;
emit Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() public onlyOwner whenPaused {
paused = false;
emit Unpause();
}
}
// Crowdsale Smart Contract
// This smart contract collects ETH and in return sends tokens to contributors
contract Crowdsale is Pausable {
using SafeMath for uint;
struct Backer {
uint weiReceived; // amount of ETH contributed
uint tokensToSend; // amount of tokens sent
bool refunded;
}
Token public token; // Token contract reference
address public multisig; // Multisig contract that will receive the ETH
address public team; // Address at which the team tokens will be sent
uint public ethReceivedPresale; // Number of ETH received in presale
uint public ethReceivedMain; // Number of ETH received in public sale
uint public tokensSentPresale; // Tokens sent during presale
uint public tokensSentMain; // Tokens sent during public ICO
uint public totalTokensSent; // Total number of tokens sent to contributors
uint public startBlock; // Crowdsale start block
uint public endBlock; // Crowdsale end block
uint public maxCap; // Maximum number of tokens to sell
uint public minInvestETH; // Minimum amount to invest
bool public crowdsaleClosed; // Is crowdsale still in progress
Step public currentStep; // To allow for controlled steps of the campaign
uint public refundCount; // Number of refunds
uint public totalRefunded; // Total amount of Eth refunded
uint public numOfBlocksInMinute; // number of blocks in one minute * 100. eg.
WhiteList public whiteList; // whitelist contract
uint public tokenPriceWei; // Price of token in wei
mapping(address => Backer) public backers; // contributors list
address[] public backersIndex; // to be able to iterate through backers for verification.
uint public priorTokensSent;
uint public presaleCap;
// @notice to verify if action is not performed out of the campaign range
modifier respectTimeFrame() {
require(block.number >= startBlock && block.number <= endBlock);
_;
}
// @notice to set and determine steps of crowdsale
enum Step {
FundingPreSale, // presale mode
FundingPublicSale, // public mode
Refunding // in case campaign failed during this step contributors will be able to receive refunds
}
// Events
event ReceivedETH(address indexed backer, uint amount, uint tokenAmount);
event RefundETH(address indexed backer, uint amount);
// Crowdsale {constructor}
// @notice fired when contract is crated. Initializes all constant and initial values.
// @param _dollarToEtherRatio {uint} how many dollars are in one eth. $333.44/ETH would be passed as 33344
function Crowdsale(WhiteList _whiteList) public {
require(_whiteList != address(0));
multisig = 0x10f78f2a70B52e6c3b490113c72Ba9A90ff1b5CA;
team = 0x10f78f2a70B52e6c3b490113c72Ba9A90ff1b5CA;
maxCap = 1510000000e8;
minInvestETH = 1 ether/2;
currentStep = Step.FundingPreSale;
numOfBlocksInMinute = 408; // E.g. 4.38 block/per minute wold be entered as 438
priorTokensSent = 4365098999e7; //tokens distributed in private sale and airdrops
whiteList = _whiteList; // white list address
presaleCap = 160000000e8; // max for sell in presale
tokenPriceWei = 57142857142857; // 17500 tokens per ether
}
// @notice Specify address of token contract
// @param _tokenAddress {address} address of token contract
// @return res {bool}
function setTokenAddress(Token _tokenAddress) external onlyOwner() returns(bool res) {
require(token == address(0));
token = _tokenAddress;
return true;
}
// @notice set the step of the campaign from presale to public sale
// contract is deployed in presale mode
// WARNING: there is no way to go back
function advanceStep() public onlyOwner() {
require(Step.FundingPreSale == currentStep);
currentStep = Step.FundingPublicSale;
minInvestETH = 1 ether/4;
}
// @notice in case refunds are needed, money can be returned to the contract
// and contract switched to mode refunding
function prepareRefund() public payable onlyOwner() {
require(crowdsaleClosed);
require(msg.value == ethReceivedPresale.add(ethReceivedMain)); // make sure that proper amount of ether is sent
currentStep = Step.Refunding;
}
// @notice return number of contributors
// @return {uint} number of contributors
function numberOfBackers() public view returns(uint) {
return backersIndex.length;
}
// {fallback function}
// @notice It will call internal function which handles allocation of Ether and calculates tokens.
// Contributor will be instructed to specify sufficient amount of gas. e.g. 250,000
function () external payable {
contribute(msg.sender);
}
// @notice It will be called by owner to start the sale
function start(uint _block) external onlyOwner() {
require(startBlock == 0);
require(_block <= (numOfBlocksInMinute * 60 * 24 * 54)/100); // allow max 54 days for campaign
startBlock = block.number;
endBlock = startBlock.add(_block);
}
// @notice Due to changing average of block time
// this function will allow on adjusting duration of campaign closer to the end
function adjustDuration(uint _block) external onlyOwner() {
require(startBlock > 0);
require(_block < (numOfBlocksInMinute * 60 * 24 * 60)/100); // allow for max of 60 days for campaign
require(_block > block.number.sub(startBlock)); // ensure that endBlock is not set in the past
endBlock = startBlock.add(_block);
}
// @notice It will be called by fallback function whenever ether is sent to it
// @param _backer {address} address of contributor
// @return res {bool} true if transaction was successful
function contribute(address _backer) internal whenNotPaused() respectTimeFrame() returns(bool res) {
require(!crowdsaleClosed);
require(whiteList.isWhiteListed(_backer)); // ensure that user is whitelisted
uint tokensToSend = determinePurchase();
Backer storage backer = backers[_backer];
if (backer.weiReceived == 0)
backersIndex.push(_backer);
backer.tokensToSend += tokensToSend; // save contributor's total tokens sent
backer.weiReceived = backer.weiReceived.add(msg.value); // save contributor's total ether contributed
if (Step.FundingPublicSale == currentStep) { // Update the total Ether received and tokens sent during public sale
ethReceivedMain = ethReceivedMain.add(msg.value);
tokensSentMain += tokensToSend;
}else { // Update the total Ether recived and tokens sent during presale
ethReceivedPresale = ethReceivedPresale.add(msg.value);
tokensSentPresale += tokensToSend;
}
totalTokensSent += tokensToSend; // update the total amount of tokens sent
multisig.transfer(address(this).balance); // transfer funds to multisignature wallet
require(token.transfer(_backer, tokensToSend)); // Transfer tokens
emit ReceivedETH(_backer, msg.value, tokensToSend); // Register event
return true;
}
// @notice determine if purchase is valid and return proper number of tokens
// @return tokensToSend {uint} proper number of tokens based on the timline
function determinePurchase() internal view returns (uint) {
require(msg.value >= minInvestETH); // ensure that min contributions amount is met
uint tokensToSend = msg.value.mul(1e8) / tokenPriceWei; //1e8 ensures that token gets 8 decimal values
if (Step.FundingPublicSale == currentStep) { // calculate price of token in public sale
require(totalTokensSent + tokensToSend + priorTokensSent <= maxCap); // Ensure that max cap hasn't been reached
}else {
tokensToSend += (tokensToSend * 50) / 100;
require(totalTokensSent + tokensToSend <= presaleCap); // Ensure that max cap hasn't been reached for presale
}
return tokensToSend;
}
// @notice This function will finalize the sale.
// It will only execute if predetermined sale time passed or all tokens are sold.
// it will fail if minimum cap is not reached
function finalize() external onlyOwner() {
require(!crowdsaleClosed);
// purchasing precise number of tokens might be impractical, thus subtract 1000
// tokens so finalization is possible near the end
require(block.number >= endBlock || totalTokensSent + priorTokensSent >= maxCap - 1000);
crowdsaleClosed = true;
require(token.transfer(team, token.balanceOf(this))); // transfer all remaining tokens to team address
token.unlock();
}
// @notice Fail-safe drain
function drain() external onlyOwner() {
multisig.transfer(address(this).balance);
}
// @notice Fail-safe token transfer
function tokenDrain() external onlyOwner() {
if (block.number > endBlock) {
require(token.transfer(multisig, token.balanceOf(this)));
}
}
// @notice it will allow contributors to get refund in case campaign failed
// @return {bool} true if successful
function refund() external whenNotPaused() returns (bool) {
require(currentStep == Step.Refunding);
Backer storage backer = backers[msg.sender];
require(backer.weiReceived > 0); // ensure that user has sent contribution
require(!backer.refunded); // ensure that user hasn't been refunded yet
backer.refunded = true; // save refund status to true
refundCount++;
totalRefunded = totalRefunded + backer.weiReceived;
require(token.transfer(msg.sender, backer.tokensToSend)); // return allocated tokens
msg.sender.transfer(backer.weiReceived); // send back the contribution
emit RefundETH(msg.sender, backer.weiReceived);
return true;
}
}
contract ERC20 {
uint public totalSupply;
function balanceOf(address who) public view returns(uint);
function allowance(address owner, address spender) public view returns(uint);
function transfer(address to, uint value) public returns(bool ok);
function transferFrom(address from, address to, uint value) public returns(bool ok);
function approve(address spender, uint value) public returns(bool ok);
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
}
// The token
contract Token is ERC20, Ownable {
using SafeMath for uint;
// Public variables of the token
string public name;
string public symbol;
uint8 public decimals; // How many decimals to show.
string public version = "v0.1";
uint public totalSupply;
bool public locked;
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowed;
address public crowdSaleAddress;
// Lock transfer for contributors during the ICO
modifier onlyUnlocked() {
if (msg.sender != crowdSaleAddress && msg.sender != owner && locked)
revert();
_;
}
modifier onlyAuthorized() {
if (msg.sender != owner && msg.sender != crowdSaleAddress)
revert();
_;
}
// @notice The Token contract
function Token(address _crowdsaleAddress) public {
require(_crowdsaleAddress != address(0));
locked = true; // Lock the transfer of tokens during the crowdsale
totalSupply = 2600000000e8;
name = "Kripton"; // Set the name for display purposes
symbol = "LPK"; // Set the symbol for display purposes
decimals = 8; // Amount of decimals
crowdSaleAddress = _crowdsaleAddress;
balances[_crowdsaleAddress] = totalSupply;
}
// @notice unlock token for trading
function unlock() public onlyAuthorized {
locked = false;
}
// @lock token from trading during ICO
function lock() public onlyAuthorized {
locked = true;
}
// @notice transfer tokens to given address
// @param _to {address} address or recipient
// @param _value {uint} amount to transfer
// @return {bool} true if successful
function transfer(address _to, uint _value) public onlyUnlocked returns(bool) {
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
// @notice transfer tokens from given address to another address
// @param _from {address} from whom tokens are transferred
// @param _to {address} to whom tokens are transferred
// @parm _value {uint} amount of tokens to transfer
// @return {bool} true if successful
function transferFrom(address _from, address _to, uint256 _value) public onlyUnlocked returns(bool success) {
require(balances[_from] >= _value); // Check if the sender has enough
require(_value <= allowed[_from][msg.sender]); // Check if allowed is greater or equal
balances[_from] = balances[_from].sub(_value); // Subtract from the sender
balances[_to] = balances[_to].add(_value); // Add the same to the recipient
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
// @notice to query balance of account
// @return _owner {address} address of user to query balance
function balanceOf(address _owner) public view returns(uint balance) {
return balances[_owner];
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* 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
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint _value) public returns(bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
// @notice to query of allowance of one user to the other
// @param _owner {address} of the owner of the account
// @param _spender {address} of the spender of the account
// @return remaining {uint} amount of remaining allowance
function allowance(address _owner, address _spender) public view returns(uint remaining) {
return allowed[_owner][_spender];
}
/**
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
*/
function increaseApproval (address _spender, uint _addedValue) public returns (bool success) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
// Whitelist smart contract
// This smart contract keeps list of addresses to whitelist
contract WhiteList is Ownable {
mapping(address => bool) public whiteList;
uint public totalWhiteListed; //white listed users number
event LogWhiteListed(address indexed user, uint whiteListedNum);
event LogWhiteListedMultiple(uint whiteListedNum);
event LogRemoveWhiteListed(address indexed user);
// @notice it will return status of white listing
// @return true if user is white listed and false if is not
function isWhiteListed(address _user) external view returns (bool) {
return whiteList[_user];
}
// @notice it will remove whitelisted user
// @param _contributor {address} of user to unwhitelist
function removeFromWhiteList(address _user) external onlyOwner() {
require(whiteList[_user] == true);
whiteList[_user] = false;
totalWhiteListed--;
emit LogRemoveWhiteListed(_user);
}
// @notice it will white list one member
// @param _user {address} of user to whitelist
// @return true if successful
function addToWhiteList(address _user) external onlyOwner() {
if (whiteList[_user] != true) {
whiteList[_user] = true;
totalWhiteListed++;
emit LogWhiteListed(_user, totalWhiteListed);
}else
revert();
}
// @notice it will white list multiple members
// @param _user {address[]} of users to whitelist
// @return true if successful
function addToWhiteListMultiple(address[] _users) external onlyOwner() {
for (uint i = 0; i < _users.length; ++i) {
if (whiteList[_users[i]] != true) {
whiteList[_users[i]] = true;
totalWhiteListed++;
}
}
emit LogWhiteListedMultiple(totalWhiteListed);
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":0,"enabled":false},"libraries":{},"evmVersion":"byzantium","compilationTarget":{"Crowdsale.sol":"Crowdsale"}}
Contract ABI
[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"tokenPriceWei","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"endBlock","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"refundCount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"numberOfBackers","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"maxCap","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"res"}],"name":"setTokenAddress","inputs":[{"type":"address","name":"_tokenAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"whiteList","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"minInvestETH","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"advanceStep","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"unpause","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"multisig","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"startBlock","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"finalize","inputs":[],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"prepareRefund","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"refund","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"currentStep","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"priorTokensSent","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"paused","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"tokenDrain","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"presaleCap","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"acceptOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"pause","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"team","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"ethReceivedMain","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"adjustDuration","inputs":[{"type":"uint256","name":"_block"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"start","inputs":[{"type":"uint256","name":"_block"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"drain","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"ethReceivedPresale","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"numOfBlocksInMinute","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalTokensSent","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"tokensSentPresale","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"weiReceived"},{"type":"uint256","name":"tokensToSend"},{"type":"bool","name":"refunded"}],"name":"backers","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"crowdsaleClosed","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"newOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalRefunded","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"tokensSentMain","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"token","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"backersIndex","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_whiteList"}]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"ReceivedETH","inputs":[{"type":"address","name":"backer","indexed":true},{"type":"uint256","name":"amount","indexed":false},{"type":"uint256","name":"tokenAmount","indexed":false}],"anonymous":false},{"type":"event","name":"RefundETH","inputs":[{"type":"address","name":"backer","indexed":true},{"type":"uint256","name":"amount","indexed":false}],"anonymous":false},{"type":"event","name":"Pause","inputs":[],"anonymous":false},{"type":"event","name":"Unpause","inputs":[],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
Contract Creation Code
0x60606040526000600160146101000a81548160ff021916908315150217905550341561002a57600080fd5b60405160208061249d83398101604052808051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561010457600080fd5b7310f78f2a70b52e6c3b490113c72ba9a90ff1b5ca600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507310f78f2a70b52e6c3b490113c72ba9a90ff1b5ca600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067021875b331158000600c819055506706f05b59d3b20000600d819055506000600e60016101000a81548160ff021916908360028111156101eb57fe5b0217905550610198601181905550669b14581872b58060168190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506638d7ea4c6800006017819055506533f89bb392496013819055505061222a806102736000396000f3006060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d0f15b146101fa578063083c6323146102235780630bda4dbf1461024c5780630dbd52701461027557806323548b8b1461029e57806326a4e8d2146102c75780633544a8641461031857806335c2d49d1461036d5780633cac38e4146103965780633f4ba83a146103ab5780634783c35b146103c057806348cd4cb1146104155780634bb278f31461043e5780634e3b33d414610453578063590e1ae31461045d5780635bc34f711461048a5780635c56afa3146104c15780635c975abb146104ea578063618407e51461051757806363d5502f1461052c57806379ba5097146105555780638456cb591461056a57806385f2aef21461057f5780638da5cb5b146105d45780639263b5591461062957806394465bf61461065257806395805dad146106755780639890220b14610698578063a5cf56f2146106ad578063ab9a81c3146106d6578063ac1559d2146106ff578063b630aa4814610728578063b85dfb8014610751578063ccb07cef146107b0578063d4ee1d90146107dd578063d908296214610832578063ed810d021461085b578063f2fde38b14610884578063fc0c546a146108bd578063fdbdc11214610912575b6101f733610975565b50005b341561020557600080fd5b61020d610df6565b6040518082815260200191505060405180910390f35b341561022e57600080fd5b610236610dfc565b6040518082815260200191505060405180910390f35b341561025757600080fd5b61025f610e02565b6040518082815260200191505060405180910390f35b341561028057600080fd5b610288610e08565b6040518082815260200191505060405180910390f35b34156102a957600080fd5b6102b1610e15565b6040518082815260200191505060405180910390f35b34156102d257600080fd5b6102fe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e1b565b604051808215151515815260200191505060405180910390f35b341561032357600080fd5b61032b610f1f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561037857600080fd5b610380610f45565b6040518082815260200191505060405180910390f35b34156103a157600080fd5b6103a9610f4b565b005b34156103b657600080fd5b6103be61100f565b005b34156103cb57600080fd5b6103d36110ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561042057600080fd5b6104286110f4565b6040518082815260200191505060405180910390f35b341561044957600080fd5b6104516110fa565b005b61045b611425565b005b341561046857600080fd5b6104706114e5565b604051808215151515815260200191505060405180910390f35b341561049557600080fd5b61049d61176f565b604051808260028111156104ad57fe5b60ff16815260200191505060405180910390f35b34156104cc57600080fd5b6104d4611782565b6040518082815260200191505060405180910390f35b34156104f557600080fd5b6104fd611788565b604051808215151515815260200191505060405180910390f35b341561052257600080fd5b61052a61179b565b005b341561053757600080fd5b61053f6119dd565b6040518082815260200191505060405180910390f35b341561056057600080fd5b6105686119e3565b005b341561057557600080fd5b61057d611b3e565b005b341561058a57600080fd5b610592611bfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105df57600080fd5b6105e7611c23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063457600080fd5b61063c611c48565b6040518082815260200191505060405180910390f35b341561065d57600080fd5b6106736004808035906020019091905050611c4e565b005b341561068057600080fd5b6106966004808035906020019091905050611d1f565b005b34156106a357600080fd5b6106ab611dd6565b005b34156106b857600080fd5b6106c0611eac565b6040518082815260200191505060405180910390f35b34156106e157600080fd5b6106e9611eb2565b6040518082815260200191505060405180910390f35b341561070a57600080fd5b610712611eb8565b6040518082815260200191505060405180910390f35b341561073357600080fd5b61073b611ebe565b6040518082815260200191505060405180910390f35b341561075c57600080fd5b610788600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ec4565b6040518084815260200183815260200182151515158152602001935050505060405180910390f35b34156107bb57600080fd5b6107c3611efb565b604051808215151515815260200191505060405180910390f35b34156107e857600080fd5b6107f0611f0e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083d57600080fd5b610845611f34565b6040518082815260200191505060405180910390f35b341561086657600080fd5b61086e611f3a565b6040518082815260200191505060405180910390f35b341561088f57600080fd5b6108bb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f40565b005b34156108c857600080fd5b6108d061201b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561091d57600080fd5b6109336004808035906020019091905050612041565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000600160149054906101000a900460ff1615151561099657600080fd5b600a5443101580156109aa5750600b544311155b15156109b557600080fd5b600e60009054906101000a900460ff161515156109d157600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f9170f6856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610a8d57600080fd5b5af11515610a9a57600080fd5b505050604051805190501515610aaf57600080fd5b610ab7612080565b9150601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541415610b6b5760158054806001018281610b1b91906121ad565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b818160010160008282540192505081905550610b9434826000015461213790919063ffffffff16565b8160000181905550600e60019054906101000a900460ff166002811115610bb757fe5b60016002811115610bc457fe5b1415610bfa57610bdf3460065461213790919063ffffffff16565b60068190555081600860008282540192505081905550610c26565b610c0f3460055461213790919063ffffffff16565b600581905550816007600082825401925050819055505b81600960008282540192505081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515610caf57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610d7357600080fd5b5af11515610d8057600080fd5b505050604051805190501515610d9557600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167f81e2ef3ab008d32268f605e85c227e20ef36880e0c4367d2d68966822cd92c6e3484604051808381526020018281526020019250505060405180910390a2600192505050919050565b60135481565b600b5481565b600f5481565b6000601580549050905090565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610ed557600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fa657600080fd5b600e60019054906101000a900460ff166002811115610fc157fe5b60006002811115610fce57fe5b141515610fda57600080fd5b6001600e60016101000a81548160ff02191690836002811115610ff957fe5b02179055506703782dace9d90000600d81905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561106a57600080fd5b600160149054906101000a900460ff16151561108557600080fd5b6000600160146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561115557600080fd5b600e60009054906101000a900460ff1615151561117157600080fd5b600b544310158061118e57506103e8600c54036016546009540110155b151561119957600080fd5b6001600e60006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156112d157600080fd5b5af115156112de57600080fd5b505050604051805190506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561136c57600080fd5b5af1151561137957600080fd5b50505060405180519050151561138e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561141357600080fd5b5af1151561142057600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561148057600080fd5b600e60009054906101000a900460ff16151561149b57600080fd5b6114b260065460055461213790919063ffffffff16565b341415156114bf57600080fd5b6002600e60016101000a81548160ff021916908360028111156114de57fe5b0217905550565b600080600160149054906101000a900460ff1615151561150457600080fd5b60028081111561151057fe5b600e60019054906101000a900460ff16600281111561152b57fe5b14151561153757600080fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411151561158b57600080fd5b8060020160009054906101000a900460ff161515156115a957600080fd5b60018160020160006101000a81548160ff021916908315150217905550600f60008154809291906001019190505550806000015460105401601081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156116af57600080fd5b5af115156116bc57600080fd5b5050506040518051905015156116d157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc82600001549081150290604051600060405180830381858888f19350505050151561171557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f289360176646a5f99cb4b6300628426dca46b723f40db3c04449d6ed1745a0e782600001546040518082815260200191505060405180910390a2600191505090565b600e60019054906101000a900460ff1681565b60165481565b600160149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f657600080fd5b600b544311156119db57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561191d57600080fd5b5af1151561192a57600080fd5b505050604051805190506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156119b857600080fd5b5af115156119c557600080fd5b5050506040518051905015156119da57600080fd5b5b565b60175481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9957600080fd5b600160149054906101000a900460ff16151515611bb557600080fd5b60018060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ca957600080fd5b6000600a54111515611cba57600080fd5b6064603c6018603c601154020202811515611cd157fe5b0481101515611cdf57600080fd5b611cf4600a544361216190919063ffffffff16565b81111515611d0157600080fd5b611d1681600a5461213790919063ffffffff16565b600b8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d7a57600080fd5b6000600a54141515611d8b57600080fd5b606460366018603c601154020202811515611da257fe5b048111151515611db157600080fd5b43600a81905550611dcd81600a5461213790919063ffffffff16565b600b8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3157600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515611eaa57600080fd5b565b60055481565b60115481565b60095481565b60075481565b60146020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b600e60009054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60085481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f9b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515611fd757600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158181548110151561205057fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600d54341015151561209457600080fd5b6013546120ae6305f5e1003461217a90919063ffffffff16565b8115156120b757fe5b049050600e60019054906101000a900460ff1660028111156120d557fe5b600160028111156120e257fe5b141561210657600c546016548260095401011115151561210157600080fd5b612130565b60646032820281151561211557fe5b048101905060175481600954011115151561212f57600080fd5b5b8091505090565b600080828401905083811015801561214f5750828110155b151561215757fe5b8091505092915050565b600082821115151561216f57fe5b818303905092915050565b6000808284029050600084148061219b575082848281151561219857fe5b04145b15156121a357fe5b8091505092915050565b8154818355818115116121d4578183600052602060002091820191016121d391906121d9565b5b505050565b6121fb91905b808211156121f75760008160009055506001016121df565b5090565b905600a165627a7a72305820dcd77f946318d59971d3811a3cdebd9a6e5c19f2e529062fa8e091a14857ce2a0029000000000000000000000000ced4eb91efe1b708782afd33aa529a6a9ace6671
Deployed ByteCode
0x6060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d0f15b146101fa578063083c6323146102235780630bda4dbf1461024c5780630dbd52701461027557806323548b8b1461029e57806326a4e8d2146102c75780633544a8641461031857806335c2d49d1461036d5780633cac38e4146103965780633f4ba83a146103ab5780634783c35b146103c057806348cd4cb1146104155780634bb278f31461043e5780634e3b33d414610453578063590e1ae31461045d5780635bc34f711461048a5780635c56afa3146104c15780635c975abb146104ea578063618407e51461051757806363d5502f1461052c57806379ba5097146105555780638456cb591461056a57806385f2aef21461057f5780638da5cb5b146105d45780639263b5591461062957806394465bf61461065257806395805dad146106755780639890220b14610698578063a5cf56f2146106ad578063ab9a81c3146106d6578063ac1559d2146106ff578063b630aa4814610728578063b85dfb8014610751578063ccb07cef146107b0578063d4ee1d90146107dd578063d908296214610832578063ed810d021461085b578063f2fde38b14610884578063fc0c546a146108bd578063fdbdc11214610912575b6101f733610975565b50005b341561020557600080fd5b61020d610df6565b6040518082815260200191505060405180910390f35b341561022e57600080fd5b610236610dfc565b6040518082815260200191505060405180910390f35b341561025757600080fd5b61025f610e02565b6040518082815260200191505060405180910390f35b341561028057600080fd5b610288610e08565b6040518082815260200191505060405180910390f35b34156102a957600080fd5b6102b1610e15565b6040518082815260200191505060405180910390f35b34156102d257600080fd5b6102fe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e1b565b604051808215151515815260200191505060405180910390f35b341561032357600080fd5b61032b610f1f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561037857600080fd5b610380610f45565b6040518082815260200191505060405180910390f35b34156103a157600080fd5b6103a9610f4b565b005b34156103b657600080fd5b6103be61100f565b005b34156103cb57600080fd5b6103d36110ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561042057600080fd5b6104286110f4565b6040518082815260200191505060405180910390f35b341561044957600080fd5b6104516110fa565b005b61045b611425565b005b341561046857600080fd5b6104706114e5565b604051808215151515815260200191505060405180910390f35b341561049557600080fd5b61049d61176f565b604051808260028111156104ad57fe5b60ff16815260200191505060405180910390f35b34156104cc57600080fd5b6104d4611782565b6040518082815260200191505060405180910390f35b34156104f557600080fd5b6104fd611788565b604051808215151515815260200191505060405180910390f35b341561052257600080fd5b61052a61179b565b005b341561053757600080fd5b61053f6119dd565b6040518082815260200191505060405180910390f35b341561056057600080fd5b6105686119e3565b005b341561057557600080fd5b61057d611b3e565b005b341561058a57600080fd5b610592611bfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105df57600080fd5b6105e7611c23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063457600080fd5b61063c611c48565b6040518082815260200191505060405180910390f35b341561065d57600080fd5b6106736004808035906020019091905050611c4e565b005b341561068057600080fd5b6106966004808035906020019091905050611d1f565b005b34156106a357600080fd5b6106ab611dd6565b005b34156106b857600080fd5b6106c0611eac565b6040518082815260200191505060405180910390f35b34156106e157600080fd5b6106e9611eb2565b6040518082815260200191505060405180910390f35b341561070a57600080fd5b610712611eb8565b6040518082815260200191505060405180910390f35b341561073357600080fd5b61073b611ebe565b6040518082815260200191505060405180910390f35b341561075c57600080fd5b610788600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ec4565b6040518084815260200183815260200182151515158152602001935050505060405180910390f35b34156107bb57600080fd5b6107c3611efb565b604051808215151515815260200191505060405180910390f35b34156107e857600080fd5b6107f0611f0e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083d57600080fd5b610845611f34565b6040518082815260200191505060405180910390f35b341561086657600080fd5b61086e611f3a565b6040518082815260200191505060405180910390f35b341561088f57600080fd5b6108bb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f40565b005b34156108c857600080fd5b6108d061201b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561091d57600080fd5b6109336004808035906020019091905050612041565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000600160149054906101000a900460ff1615151561099657600080fd5b600a5443101580156109aa5750600b544311155b15156109b557600080fd5b600e60009054906101000a900460ff161515156109d157600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f9170f6856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610a8d57600080fd5b5af11515610a9a57600080fd5b505050604051805190501515610aaf57600080fd5b610ab7612080565b9150601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541415610b6b5760158054806001018281610b1b91906121ad565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b818160010160008282540192505081905550610b9434826000015461213790919063ffffffff16565b8160000181905550600e60019054906101000a900460ff166002811115610bb757fe5b60016002811115610bc457fe5b1415610bfa57610bdf3460065461213790919063ffffffff16565b60068190555081600860008282540192505081905550610c26565b610c0f3460055461213790919063ffffffff16565b600581905550816007600082825401925050819055505b81600960008282540192505081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515610caf57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610d7357600080fd5b5af11515610d8057600080fd5b505050604051805190501515610d9557600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167f81e2ef3ab008d32268f605e85c227e20ef36880e0c4367d2d68966822cd92c6e3484604051808381526020018281526020019250505060405180910390a2600192505050919050565b60135481565b600b5481565b600f5481565b6000601580549050905090565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610ed557600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fa657600080fd5b600e60019054906101000a900460ff166002811115610fc157fe5b60006002811115610fce57fe5b141515610fda57600080fd5b6001600e60016101000a81548160ff02191690836002811115610ff957fe5b02179055506703782dace9d90000600d81905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561106a57600080fd5b600160149054906101000a900460ff16151561108557600080fd5b6000600160146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561115557600080fd5b600e60009054906101000a900460ff1615151561117157600080fd5b600b544310158061118e57506103e8600c54036016546009540110155b151561119957600080fd5b6001600e60006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156112d157600080fd5b5af115156112de57600080fd5b505050604051805190506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561136c57600080fd5b5af1151561137957600080fd5b50505060405180519050151561138e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a69df4b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561141357600080fd5b5af1151561142057600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561148057600080fd5b600e60009054906101000a900460ff16151561149b57600080fd5b6114b260065460055461213790919063ffffffff16565b341415156114bf57600080fd5b6002600e60016101000a81548160ff021916908360028111156114de57fe5b0217905550565b600080600160149054906101000a900460ff1615151561150457600080fd5b60028081111561151057fe5b600e60019054906101000a900460ff16600281111561152b57fe5b14151561153757600080fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411151561158b57600080fd5b8060020160009054906101000a900460ff161515156115a957600080fd5b60018160020160006101000a81548160ff021916908315150217905550600f60008154809291906001019190505550806000015460105401601081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156116af57600080fd5b5af115156116bc57600080fd5b5050506040518051905015156116d157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc82600001549081150290604051600060405180830381858888f19350505050151561171557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f289360176646a5f99cb4b6300628426dca46b723f40db3c04449d6ed1745a0e782600001546040518082815260200191505060405180910390a2600191505090565b600e60019054906101000a900460ff1681565b60165481565b600160149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f657600080fd5b600b544311156119db57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561191d57600080fd5b5af1151561192a57600080fd5b505050604051805190506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156119b857600080fd5b5af115156119c557600080fd5b5050506040518051905015156119da57600080fd5b5b565b60175481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9957600080fd5b600160149054906101000a900460ff16151515611bb557600080fd5b60018060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ca957600080fd5b6000600a54111515611cba57600080fd5b6064603c6018603c601154020202811515611cd157fe5b0481101515611cdf57600080fd5b611cf4600a544361216190919063ffffffff16565b81111515611d0157600080fd5b611d1681600a5461213790919063ffffffff16565b600b8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d7a57600080fd5b6000600a54141515611d8b57600080fd5b606460366018603c601154020202811515611da257fe5b048111151515611db157600080fd5b43600a81905550611dcd81600a5461213790919063ffffffff16565b600b8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3157600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515611eaa57600080fd5b565b60055481565b60115481565b60095481565b60075481565b60146020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b600e60009054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60085481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f9b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515611fd757600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158181548110151561205057fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600d54341015151561209457600080fd5b6013546120ae6305f5e1003461217a90919063ffffffff16565b8115156120b757fe5b049050600e60019054906101000a900460ff1660028111156120d557fe5b600160028111156120e257fe5b141561210657600c546016548260095401011115151561210157600080fd5b612130565b60646032820281151561211557fe5b048101905060175481600954011115151561212f57600080fd5b5b8091505090565b600080828401905083811015801561214f5750828110155b151561215757fe5b8091505092915050565b600082821115151561216f57fe5b818303905092915050565b6000808284029050600084148061219b575082848281151561219857fe5b04145b15156121a357fe5b8091505092915050565b8154818355818115116121d4578183600052602060002091820191016121d391906121d9565b5b505050565b6121fb91905b808211156121f75760008160009055506001016121df565b5090565b905600a165627a7a72305820dcd77f946318d59971d3811a3cdebd9a6e5c19f2e529062fa8e091a14857ce2a0029