Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 405 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Ends At | 5166280 | 2939 days ago | IN | 0 ETH | 0.0005835 | ||||
| Buy With Custome... | 5165011 | 2939 days ago | IN | 1 ETH | 0.00773784 | ||||
| Buy With Custome... | 5160559 | 2940 days ago | IN | 0.1 ETH | 0.00773522 | ||||
| Buy With Custome... | 5158299 | 2940 days ago | IN | 0.09544161 ETH | 0.00773784 | ||||
| Transfer | 5152146 | 2941 days ago | IN | 1 ETH | 0.00029464 | ||||
| Buy With Custome... | 5151830 | 2941 days ago | IN | 0.10875425 ETH | 0.00773784 | ||||
| Buy With Custome... | 5143897 | 2942 days ago | IN | 0.1 ETH | 0.00056618 | ||||
| Buy With Custome... | 5136318 | 2944 days ago | IN | 0.229803 ETH | 0.00773784 | ||||
| Buy With Custome... | 5135821 | 2944 days ago | IN | 0.2 ETH | 0.00773784 | ||||
| Buy With Custome... | 5135718 | 2944 days ago | IN | 0.025 ETH | 0.00773784 | ||||
| Buy With Custome... | 5124727 | 2946 days ago | IN | 0.15 ETH | 0.00849276 | ||||
| Buy With Custome... | 5113289 | 2948 days ago | IN | 1 ETH | 0.00396328 | ||||
| Buy With Custome... | 5113018 | 2948 days ago | IN | 0.05141 ETH | 0.0094364 | ||||
| Transfer | 5111016 | 2948 days ago | IN | 0.00085698 ETH | 0.00208355 | ||||
| Transfer | 5110988 | 2948 days ago | IN | 0.00029532 ETH | 0.002079 | ||||
| Buy With Custome... | 5098037 | 2950 days ago | IN | 0.14 ETH | 0.00773784 | ||||
| Buy With Custome... | 5089668 | 2952 days ago | IN | 0.5 ETH | 0.00773784 | ||||
| Buy With Custome... | 5086922 | 2952 days ago | IN | 0.03187278 ETH | 0.00377456 | ||||
| Buy With Custome... | 5086161 | 2952 days ago | IN | 0.06 ETH | 0.00041547 | ||||
| Transfer | 5084206 | 2953 days ago | IN | 0.236268 ETH | 0.00042092 | ||||
| Buy With Custome... | 5078983 | 2953 days ago | IN | 1.7131715 ETH | 0.00773784 | ||||
| Buy With Custome... | 5073868 | 2954 days ago | IN | 0.1 ETH | 0.00773784 | ||||
| Buy With Custome... | 5070882 | 2955 days ago | IN | 0.08 ETH | 0.00018872 | ||||
| Buy With Custome... | 5070264 | 2955 days ago | IN | 0.25 ETH | 0.00773784 | ||||
| Transfer | 5066170 | 2956 days ago | IN | 0.1 ETH | 0.00084184 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 5165011 | 2939 days ago | 1 ETH | ||||
| Transfer | 5160559 | 2940 days ago | 0.1 ETH | ||||
| Transfer | 5158299 | 2940 days ago | 0.09544161 ETH | ||||
| Transfer | 5151830 | 2941 days ago | 0.10875425 ETH | ||||
| Transfer | 5143897 | 2942 days ago | 0.1 ETH | ||||
| Transfer | 5136318 | 2944 days ago | 0.229803 ETH | ||||
| Transfer | 5135821 | 2944 days ago | 0.2 ETH | ||||
| Transfer | 5135718 | 2944 days ago | 0.025 ETH | ||||
| Transfer | 5124727 | 2946 days ago | 0.15 ETH | ||||
| Transfer | 5113289 | 2948 days ago | 1 ETH | ||||
| Transfer | 5113018 | 2948 days ago | 0.05141 ETH | ||||
| Transfer | 5098037 | 2950 days ago | 0.14 ETH | ||||
| Transfer | 5089668 | 2952 days ago | 0.5 ETH | ||||
| Transfer | 5086922 | 2952 days ago | 0.03187278 ETH | ||||
| Transfer | 5086161 | 2952 days ago | 0.06 ETH | ||||
| Transfer | 5078983 | 2953 days ago | 1.7131715 ETH | ||||
| Transfer | 5073868 | 2954 days ago | 0.1 ETH | ||||
| Transfer | 5070882 | 2955 days ago | 0.08 ETH | ||||
| Transfer | 5070264 | 2955 days ago | 0.25 ETH | ||||
| Transfer | 5063316 | 2956 days ago | 0.112139 ETH | ||||
| Transfer | 5061838 | 2956 days ago | 0.15 ETH | ||||
| Transfer | 5061594 | 2956 days ago | 0.15 ETH | ||||
| Transfer | 5060051 | 2957 days ago | 0.065 ETH | ||||
| Transfer | 5059588 | 2957 days ago | 0.15 ETH | ||||
| Transfer | 5059570 | 2957 days ago | 1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract contains unverified libraries: SafeMathLib
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
AllocatedCrowdsale
Compiler Version
v0.4.18-nightly.2017.9.22+commit.a2a58789
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-01-15
*/
pragma solidity ^0.4.13;
contract Ownable {
address public owner;
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function Ownable() {
owner = msg.sender;
}
/**
* @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) onlyOwner {
require(newOwner != address(0));
owner = newOwner;
}
}
contract Haltable is Ownable {
bool public halted;
modifier stopInEmergency {
if (halted) throw;
_;
}
modifier stopNonOwnersInEmergency {
if (halted && msg.sender != owner) throw;
_;
}
modifier onlyInEmergency {
if (!halted) throw;
_;
}
// called by the owner on emergency, triggers stopped state
function halt() external onlyOwner {
halted = true;
}
// called by the owner on end of emergency, returns to normal state
function unhalt() external onlyOwner onlyInEmergency {
halted = false;
}
}
contract PricingStrategy {
/** Interface declaration. */
function isPricingStrategy() public constant returns (bool) {
return true;
}
/** Self check if all references are correctly set.
*
* Checks that pricing strategy matches crowdsale parameters.
*/
function isSane(address crowdsale) public constant returns (bool) {
return true;
}
/**
* @dev Pricing tells if this is a presale purchase or not.
@param purchaser Address of the purchaser
@return False by default, true if a presale purchaser
*/
function isPresalePurchase(address purchaser) public constant returns (bool) {
return false;
}
/**
* When somebody tries to buy tokens for X eth, calculate how many tokens they get.
*
*
* @param value - What is the value of the transaction send in as wei
* @param tokensSold - how much tokens have been sold this far
* @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale
* @param msgSender - who is the investor of this transaction
* @param decimals - how many decimal units the token has
* @return Amount of tokens the investor receives
*/
function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount);
}
contract FinalizeAgent {
function isFinalizeAgent() public constant returns(bool) {
return true;
}
/** Return true if we can run finalizeCrowdsale() properly.
*
* This is a safety check function that doesn't allow crowdsale to begin
* unless the finalizer has been set up properly.
*/
function isSane() public constant returns (bool);
/** Called once by crowdsale finalize() if the sale was success. */
function finalizeCrowdsale();
}
contract ERC20Basic {
uint256 public totalSupply;
function balanceOf(address who) constant returns (uint256);
function transfer(address to, uint256 value) returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) constant returns (uint256);
function transferFrom(address from, address to, uint256 value) returns (bool);
function approve(address spender, uint256 value) returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract FractionalERC20 is ERC20 {
uint public decimals;
}
library SafeMathLib {
function times(uint a, uint b) returns (uint) {
uint c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function minus(uint a, uint b) returns (uint) {
assert(b <= a);
return a - b;
}
function plus(uint a, uint b) returns (uint) {
uint c = a + b;
assert(c>=a);
return c;
}
}
contract CrowdsaleBase is Haltable {
/* Max investment count when we are still allowed to change the multisig address */
uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5;
using SafeMathLib for uint;
/* The token we are selling */
FractionalERC20 public token;
/* How we are going to price our offering */
PricingStrategy public pricingStrategy;
/* Post-success callback */
FinalizeAgent public finalizeAgent;
/* tokens will be transfered from this address */
address public multisigWallet;
/* if the funding goal is not reached, investors may withdraw their funds */
uint public minimumFundingGoal;
/* the UNIX timestamp start date of the crowdsale */
uint public startsAt;
/* the UNIX timestamp end date of the crowdsale */
uint public endsAt;
/* the number of tokens already sold through this contract*/
uint public tokensSold = 0;
/* How many wei of funding we have raised */
uint public weiRaised = 0;
/* Calculate incoming funds from presale contracts and addresses */
uint public presaleWeiRaised = 0;
/* How many distinct addresses have invested */
uint public investorCount = 0;
/* How much wei we have returned back to the contract after a failed crowdfund. */
uint public loadedRefund = 0;
/* How much wei we have given back to investors.*/
uint public weiRefunded = 0;
/* Has this crowdsale been finalized */
bool public finalized;
/** How much ETH each address has invested to this crowdsale */
mapping (address => uint256) public investedAmountOf;
/** How much tokens this crowdsale has credited for each investor address */
mapping (address => uint256) public tokenAmountOf;
/** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */
mapping (address => bool) public earlyParticipantWhitelist;
/** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */
uint public ownerTestValue;
/** State machine
*
* - Preparing: All contract initialization calls and variables have not been set yet
* - Prefunding: We have not passed start time yet
* - Funding: Active crowdsale
* - Success: Minimum funding goal reached
* - Failure: Minimum funding goal not reached before ending time
* - Finalized: The finalized has been called and succesfully executed
* - Refunding: Refunds are loaded on the contract for reclaim.
*/
enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized, Refunding}
// A new investment was made
event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId);
// Refund was processed for a contributor
event Refund(address investor, uint weiAmount);
// The rules were changed what kind of investments we accept
event InvestmentPolicyChanged(bool newRequireCustomerId, bool newRequiredSignedAddress, address newSignerAddress);
// Address early participation whitelist status changed
event Whitelisted(address addr, bool status);
// Crowdsale end time has been changed
event EndsAtChanged(uint newEndsAt);
State public testState;
function CrowdsaleBase(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) {
owner = msg.sender;
token = FractionalERC20(_token);
setPricingStrategy(_pricingStrategy);
multisigWallet = _multisigWallet;
if(multisigWallet == 0) {
throw;
}
if(_start == 0) {
throw;
}
startsAt = _start;
if(_end == 0) {
throw;
}
endsAt = _end;
// Don't mess the dates
if(startsAt >= endsAt) {
throw;
}
// Minimum funding goal can be zero
minimumFundingGoal = _minimumFundingGoal;
}
/**
* Don't expect to just send in money and get tokens.
*/
function() payable {
throw;
}
/**
* Make an investment.
*
* Crowdsale must be running for one to invest.
* We must have not pressed the emergency brake.
*
* @param receiver The Ethereum address who receives the tokens
* @param customerId (optional) UUID v4 to track the successful payments on the server side'
*
* @return tokenAmount How mony tokens were bought
*/
function investInternal(address receiver, uint128 customerId) stopInEmergency internal returns(uint tokensBought) {
// Determine if it's a good time to accept investment from this participant
if(getState() == State.PreFunding) {
// Are we whitelisted for early deposit
if(!earlyParticipantWhitelist[receiver]) {
throw;
}
} else if(getState() == State.Funding) {
// Retail participants can only come in when the crowdsale is running
// pass
} else {
// Unwanted state
throw;
}
uint weiAmount = msg.value;
// Account presale sales separately, so that they do not count against pricing tranches
uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised - presaleWeiRaised, tokensSold, msg.sender, token.decimals());
// Dust transaction
require(tokenAmount != 0);
if(investedAmountOf[receiver] == 0) {
// A new investor
investorCount++;
}
// Update investor
investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount);
tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount);
// Update totals
weiRaised = weiRaised.plus(weiAmount);
tokensSold = tokensSold.plus(tokenAmount);
if(pricingStrategy.isPresalePurchase(receiver)) {
presaleWeiRaised = presaleWeiRaised.plus(weiAmount);
}
// Check that we did not bust the cap
require(!isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold));
assignTokens(receiver, tokenAmount);
// Pocket the money, or fail the crowdsale if we for some reason cannot send the money to our multisig
if(!multisigWallet.send(weiAmount)) throw;
// Tell us invest was success
Invested(receiver, weiAmount, tokenAmount, customerId);
return tokenAmount;
}
/**
* Finalize a succcesful crowdsale.
*
* The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens.
*/
function finalize() public inState(State.Success) onlyOwner stopInEmergency {
// Already finalized
if(finalized) {
throw;
}
// Finalizing is optional. We only call it if we are given a finalizing agent.
if(address(finalizeAgent) != 0) {
finalizeAgent.finalizeCrowdsale();
}
finalized = true;
}
/**
* Allow to (re)set finalize agent.
*
* Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes.
*/
function setFinalizeAgent(FinalizeAgent addr) onlyOwner {
finalizeAgent = addr;
// Don't allow setting bad agent
if(!finalizeAgent.isFinalizeAgent()) {
throw;
}
}
/**
* Allow crowdsale owner to close early or extend the crowdsale.
*
* This is useful e.g. for a manual soft cap implementation:
* - after X amount is reached determine manual closing
*
* This may put the crowdsale to an invalid state,
* but we trust owners know what they are doing.
*
*/
function setEndsAt(uint time) onlyOwner {
if(now > time) {
throw; // Don't change past
}
if(startsAt > time) {
throw; // Prevent human mistakes
}
endsAt = time;
EndsAtChanged(endsAt);
}
/**
* Allow to (re)set pricing strategy.
*
* Design choice: no state restrictions on the set, so that we can fix fat finger mistakes.
*/
function setPricingStrategy(PricingStrategy _pricingStrategy) onlyOwner {
pricingStrategy = _pricingStrategy;
// Don't allow setting bad agent
if(!pricingStrategy.isPricingStrategy()) {
throw;
}
}
/**
* Allow to change the team multisig address in the case of emergency.
*
* This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun
* (we have done only few test transactions). After the crowdsale is going
* then multisig address stays locked for the safety reasons.
*/
function setMultisig(address addr) public onlyOwner {
// Change
if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) {
throw;
}
multisigWallet = addr;
}
/**
* Allow load refunds back on the contract for the refunding.
*
* The team can transfer the funds back on the smart contract in the case the minimum goal was not reached..
*/
function loadRefund() public payable inState(State.Failure) {
if(msg.value == 0) throw;
loadedRefund = loadedRefund.plus(msg.value);
}
/**
* Investors can claim refund.
*
* Note that any refunds from proxy buyers should be handled separately,
* and not through this contract.
*/
function refund() public inState(State.Refunding) {
uint256 weiValue = investedAmountOf[msg.sender];
if (weiValue == 0) throw;
investedAmountOf[msg.sender] = 0;
weiRefunded = weiRefunded.plus(weiValue);
Refund(msg.sender, weiValue);
if (!msg.sender.send(weiValue)) throw;
}
/**
* @return true if the crowdsale has raised enough money to be a successful.
*/
function isMinimumGoalReached() public constant returns (bool reached) {
return weiRaised >= minimumFundingGoal;
}
/**
* Check if the contract relationship looks good.
*/
function isFinalizerSane() public constant returns (bool sane) {
return finalizeAgent.isSane();
}
/**
* Check if the contract relationship looks good.
*/
function isPricingSane() public constant returns (bool sane) {
return pricingStrategy.isSane(address(this));
}
/**
* Crowdfund state machine management.
*
* We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale.
*/
function getState() public constant returns (State) {
if(finalized) return State.Finalized;
else if (address(finalizeAgent) == 0) return State.Preparing;
else if (!finalizeAgent.isSane()) return State.Preparing;
else if (!pricingStrategy.isSane(address(this))) return State.Preparing;
else if (block.timestamp < startsAt) return State.PreFunding;
else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding;
else if (isMinimumGoalReached()) return State.Success;
else if (!isMinimumGoalReached() && weiRaised > 0 && loadedRefund >= weiRaised) return State.Refunding;
else return State.Failure;
}
/** This is for manual testing of multisig wallet interaction */
function setOwnerTestValue(uint val) onlyOwner {
ownerTestValue = val;
}
/**
* Allow addresses to do early participation.
*
* TODO: Fix spelling error in the name
*/
function setEarlyParicipantWhitelist(address addr, bool status) onlyOwner {
earlyParticipantWhitelist[addr] = status;
Whitelisted(addr, status);
}
/** Interface marker. */
function isCrowdsale() public constant returns (bool) {
return true;
}
//
// Modifiers
//
/** Modified allowing execution only if the crowdsale is currently running. */
modifier inState(State state) {
if(getState() != state) throw;
_;
}
//
// Abstract functions
//
/**
* Check if the current invested breaks our cap rules.
*
*
* The child contract must define their own cap setting rules.
* We allow a lot of flexibility through different capping strategies (ETH, token count)
* Called from invest().
*
* @param weiAmount The amount of wei the investor tries to invest in the current transaction
* @param tokenAmount The amount of tokens we try to give to the investor in the current transaction
* @param weiRaisedTotal What would be our total raised balance after this transaction
* @param tokensSoldTotal What would be our total sold tokens count after this transaction
*
* @return true if taking this investment would break our cap rules
*/
function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken);
/**
* Check if the current crowdsale is full and we can no longer sell any tokens.
*/
function isCrowdsaleFull() public constant returns (bool);
/**
* Create new tokens or transfer issued tokens to the investor depending on the cap model.
*/
function assignTokens(address receiver, uint tokenAmount) internal;
}
contract Crowdsale is CrowdsaleBase {
/* Do we need to have unique contributor id for each customer */
bool public requireCustomerId;
/**
* Do we verify that contributor has been cleared on the server side (accredited investors only).
* This method was first used in FirstBlood crowdsale to ensure all contributors have accepted terms on sale (on the web).
*/
bool public requiredSignedAddress;
/* Server side address that signed allowed contributors (Ethereum addresses) that can participate the crowdsale */
address public signerAddress;
function Crowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) CrowdsaleBase(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) {
}
/**
* Preallocate tokens for the early investors.
*
* Preallocated tokens have been sold before the actual crowdsale opens.
* This function mints the tokens and moves the crowdsale needle.
*
* Investor count is not handled; it is assumed this goes for multiple investors
* and the token distribution happens outside the smart contract flow.
*
* No money is exchanged, as the crowdsale team already have received the payment.
*
* @param fullTokens tokens as full tokens - decimal places added internally
* @param weiPrice Price of a single full token in wei
*
*/
function preallocate(address receiver, uint fullTokens, uint weiPrice) public onlyOwner {
uint tokenAmount = fullTokens * 10**token.decimals();
uint weiAmount = weiPrice * fullTokens; // This can be also 0, we give out tokens for free
weiRaised = weiRaised.plus(weiAmount);
tokensSold = tokensSold.plus(tokenAmount);
investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount);
tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount);
assignTokens(receiver, tokenAmount);
// Tell us invest was success
Invested(receiver, weiAmount, tokenAmount, 0);
}
/**
* Allow anonymous contributions to this crowdsale.
*/
function investWithSignedAddress(address addr, uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable {
bytes32 hash = sha256(addr);
if (ecrecover(hash, v, r, s) != signerAddress) throw;
if(customerId == 0) throw; // UUIDv4 sanity check
investInternal(addr, customerId);
}
/**
* Track who is the customer making the payment so we can send thank you email.
*/
function investWithCustomerId(address addr, uint128 customerId) public payable {
if(requiredSignedAddress) throw; // Crowdsale allows only server-side signed participants
if(customerId == 0) throw; // UUIDv4 sanity check
investInternal(addr, customerId);
}
/**
* Allow anonymous contributions to this crowdsale.
*/
function invest(address addr) public payable {
if(requireCustomerId) throw; // Crowdsale needs to track participants for thank you email
if(requiredSignedAddress) throw; // Crowdsale allows only server-side signed participants
investInternal(addr, 0);
}
/**
* Invest to tokens, recognize the payer and clear his address.
*
*/
function buyWithSignedAddress(uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable {
investWithSignedAddress(msg.sender, customerId, v, r, s);
}
/**
* Invest to tokens, recognize the payer.
*
*/
function buyWithCustomerIdWithChecksum(uint128 customerId, bytes1 checksum) public payable {
// see customerid.py
if (bytes1(sha3(customerId)) != checksum) throw;
investWithCustomerId(msg.sender, customerId);
}
/**
* Legacy API signature.
*/
function buyWithCustomerId(uint128 customerId) public payable {
investWithCustomerId(msg.sender, customerId);
}
/**
* The basic entry point to participate the crowdsale process.
*
* Pay for funding, get invested tokens back in the sender address.
*/
function buy() public payable {
invest(msg.sender);
}
/**
* Set policy do we need to have server-side customer ids for the investments.
*
*/
function setRequireCustomerId(bool value) onlyOwner {
requireCustomerId = value;
InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress);
}
/**
* Set policy if all investors must be cleared on the server side first.
*
* This is e.g. for the accredited investor clearing.
*
*/
function setRequireSignedAddress(bool value, address _signerAddress) onlyOwner {
requiredSignedAddress = value;
signerAddress = _signerAddress;
InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress);
}
}
contract AllocatedCrowdsaleMixin is CrowdsaleBase {
/* The party who holds the full token pool and has approve()'ed tokens for this crowdsale */
address public beneficiary;
/**
* @param _beneficiary The account who has performed approve() to allocate tokens for the token sale.
*
*/
function AllocatedCrowdsaleMixin(address _beneficiary) {
beneficiary = _beneficiary;
}
/**
* Called from invest() to confirm if the curret investment does not break our cap rule.
*/
function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken) {
if(tokenAmount > getTokensLeft()) {
return true;
} else {
return false;
}
}
/**
* We are sold out when our approve pool becomes empty.
*/
function isCrowdsaleFull() public constant returns (bool) {
return getTokensLeft() == 0;
}
/**
* Get the amount of unsold tokens allocated to this contract;
*/
function getTokensLeft() public constant returns (uint) {
return token.allowance(owner, this);
}
/**
* Transfer tokens from approve() pool to the buyer.
*
* Use approve() given to this crowdsale to distribute the tokens.
*/
function assignTokens(address receiver, uint tokenAmount) internal {
if(!token.transferFrom(beneficiary, receiver, tokenAmount)) throw;
}
}
contract AllocatedCrowdsale is AllocatedCrowdsaleMixin, Crowdsale {
function AllocatedCrowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, address _beneficiary) Crowdsale(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) AllocatedCrowdsaleMixin(_beneficiary) {
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"ownerTestValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requireCustomerId","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"invest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"isPricingSane","outputs":[{"name":"sane","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endsAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumFundingGoal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setFinalizeAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"customerId","type":"uint128"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"investWithSignedAddress","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"investedAmountOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalizeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"fullTokens","type":"uint256"},{"name":"weiPrice","type":"uint256"}],"name":"preallocate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isCrowdsale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_pricingStrategy","type":"address"}],"name":"setPricingStrategy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"testState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRefunded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"customerId","type":"uint128"},{"name":"checksum","type":"bytes1"}],"name":"buyWithCustomerIdWithChecksum","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"time","type":"uint256"}],"name":"setEndsAt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricingStrategy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"loadedRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMinimumGoalReached","outputs":[{"name":"reached","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"bool"}],"name":"setRequireCustomerId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"loadRefund","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"setOwnerTestValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multisigWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenAmountOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"customerId","type":"uint128"}],"name":"buyWithCustomerId","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount","type":"uint256"},{"name":"tokenAmount","type":"uint256"},{"name":"weiRaisedTotal","type":"uint256"},{"name":"tokensSoldTotal","type":"uint256"}],"name":"isBreakingCap","outputs":[{"name":"limitBroken","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalizerSane","outputs":[{"name":"sane","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startsAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"earlyParticipantWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requiredSignedAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isCrowdsaleFull","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"investorCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"status","type":"bool"}],"name":"setEarlyParicipantWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"bool"},{"name":"_signerAddress","type":"address"}],"name":"setRequireSignedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"customerId","type":"uint128"}],"name":"investWithCustomerId","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setMultisig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"customerId","type":"uint128"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"buyWithSignedAddress","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"presaleWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_pricingStrategy","type":"address"},{"name":"_multisigWallet","type":"address"},{"name":"_start","type":"uint256"},{"name":"_end","type":"uint256"},{"name":"_minimumFundingGoal","type":"uint256"},{"name":"_beneficiary","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"customerId","type":"uint128"}],"name":"Invested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequireCustomerId","type":"bool"},{"indexed":false,"name":"newRequiredSignedAddress","type":"bool"},{"indexed":false,"name":"newSignerAddress","type":"address"}],"name":"InvestmentPolicyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"status","type":"bool"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newEndsAt","type":"uint256"}],"name":"EndsAtChanged","type":"event"}]Contract Creation Code
6060604052600560015560006009556000600a556000600b556000600c556000600d556000600e5534156200003357600080fd5b60405160e08062003ba18339810160405280805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190505086868686868686868686868686336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000173856200029c6401000000000262001c85176401000000009004565b83600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620001fb57600080fd5b60008314156200020a57600080fd5b8260078190555060008214156200022057600080fd5b816008819055506008546007541015156200023a57600080fd5b8060068190555050505050505080601460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050505050505050620003f3565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620002f857600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166304bbc2556000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620003c857600080fd5b6102c65a03f11515620003da57600080fd5b505050604051805190501515620003f057600080fd5b50565b61379e80620004036000396000f30060606040526004361061029e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630226401d146102a357806303ca0eed146102cc57806303f9c793146102f9578063062b01ce146103275780630a09284a1461035457806313f4e9771461037d5780631865c57d146103a657806319b667da146103dd5780631a49803b146104165780631aae34601461048557806321d5c0f6146104d257806332013ac31461052757806338af3eed146105725780634042b66f146105c75780634551dd59146105f05780634bb278f31461061d57806350c6773414610632578063518ab2a81461066b5780635795069714610694578063590e1ae3146106cb5780635b7633d0146106e05780635da89ac0146107355780635ed7ca5b1461075e5780636203f09f1461077357806363c6082f1461079c5780636e50eb3f146107f157806378b99c2414610814578063797d9437146108695780637c2e08a3146108925780637f7d711e146108bf57806387612102146108e45780638d51faec146108ee5780638da5cb5b146109115780639075becf1461096657806397b150ca146109bb57806399e9376c14610a085780639d3c663f14610a32578063a6f2ae3a14610a88578063a7ba44c314610a92578063af46868214610abf578063b3f05b9714610ae8578063b9b8af0b14610b15578063cb16e6d014610b42578063cb3e64fd14610b93578063d222dc0414610ba8578063d5d0902114610bd5578063d7e64c0014610c02578063de5f986614610c2b578063eac2493214610c54578063ed68ff2c14610c98578063ef86944314610cdc578063f2fde38b14610d25578063f3283fba14610d5e578063f486972614610d97578063f7c00e2f14610de7578063fc0c546a14610e10575b600080fd5b34156102ae57600080fd5b6102b6610e65565b6040518082815260200191505060405180910390f35b34156102d757600080fd5b6102df610e6b565b604051808215151515815260200191505060405180910390f35b610325600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e7e565b005b341561033257600080fd5b61033a610ec1565b604051808215151515815260200191505060405180910390f35b341561035f57600080fd5b610367610fa8565b6040518082815260200191505060405180910390f35b341561038857600080fd5b610390610fae565b6040518082815260200191505060405180910390f35b34156103b157600080fd5b6103b9610fb4565b604051808260078111156103c957fe5b60ff16815260200191505060405180910390f35b34156103e857600080fd5b610414600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611250565b005b610483600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff1690602001909190803560ff1690602001909190803560001916906020019091908035600019169060200190919050506113a3565b005b341561049057600080fd5b6104bc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611536565b6040518082815260200191505060405180910390f35b34156104dd57600080fd5b6104e561154e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561053257600080fd5b610570600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091905050611574565b005b341561057d57600080fd5b610585611a9a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105d257600080fd5b6105da611ac0565b6040518082815260200191505060405180910390f35b34156105fb57600080fd5b610603611ac6565b604051808215151515815260200191505060405180910390f35b341561062857600080fd5b610630611acf565b005b341561063d57600080fd5b610669600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c85565b005b341561067657600080fd5b61067e611dd8565b6040518082815260200191505060405180910390f35b341561069f57600080fd5b6106a7611dde565b604051808260078111156106b757fe5b60ff16815260200191505060405180910390f35b34156106d657600080fd5b6106de611df1565b005b34156106eb57600080fd5b6106f3612004565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561074057600080fd5b61074861202a565b6040518082815260200191505060405180910390f35b341561076957600080fd5b610771612030565b005b341561077e57600080fd5b6107866120a8565b6040518082815260200191505060405180910390f35b6107ef60048080356fffffffffffffffffffffffffffffffff169060200190919080357effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190919050506120ae565b005b34156107fc57600080fd5b610812600480803590602001909190505061215a565b005b341561081f57600080fd5b610827612214565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561087457600080fd5b61087c61223a565b6040518082815260200191505060405180910390f35b341561089d57600080fd5b6108a5612240565b604051808215151515815260200191505060405180910390f35b34156108ca57600080fd5b6108e26004808035151590602001909190505061224f565b005b6108ec612382565b005b34156108f957600080fd5b61090f6004808035906020019091905050612460565b005b341561091c57600080fd5b6109246124c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561097157600080fd5b6109796124ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109c657600080fd5b6109f2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612510565b6040518082815260200191505060405180910390f35b610a3060048080356fffffffffffffffffffffffffffffffff16906020019091905050612528565b005b3415610a3d57600080fd5b610a6e6004808035906020019091908035906020019091908035906020019091908035906020019091905050612535565b604051808215151515815260200191505060405180910390f35b610a9061255c565b005b3415610a9d57600080fd5b610aa5612567565b604051808215151515815260200191505060405180910390f35b3415610aca57600080fd5b610ad2612617565b6040518082815260200191505060405180910390f35b3415610af357600080fd5b610afb61261d565b604051808215151515815260200191505060405180910390f35b3415610b2057600080fd5b610b28612630565b604051808215151515815260200191505060405180910390f35b3415610b4d57600080fd5b610b79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612643565b604051808215151515815260200191505060405180910390f35b3415610b9e57600080fd5b610ba6612663565b005b3415610bb357600080fd5b610bbb6126f5565b604051808215151515815260200191505060405180910390f35b3415610be057600080fd5b610be8612708565b604051808215151515815260200191505060405180910390f35b3415610c0d57600080fd5b610c15612719565b6040518082815260200191505060405180910390f35b3415610c3657600080fd5b610c3e61271f565b6040518082815260200191505060405180910390f35b3415610c5f57600080fd5b610c96600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190505061285b565b005b3415610ca357600080fd5b610cda6004808035151590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612980565b005b610d23600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050612af5565b005b3415610d3057600080fd5b610d5c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b3e565b005b3415610d6957600080fd5b610d95600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c18565b005b610de560048080356fffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050612cc8565b005b3415610df257600080fd5b610dfa612cdb565b6040518082815260200191505060405180910390f35b3415610e1b57600080fd5b610e23612ce1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60135481565b601460159054906101000a900460ff1681565b601460159054906101000a900460ff1615610e9857600080fd5b601460169054906101000a900460ff1615610eb257600080fd5b610ebd816000612d07565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e768288306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610f8857600080fd5b6102c65a03f11515610f9957600080fd5b50505060405180519050905090565b60085481565b60065481565b6000600f60009054906101000a900460ff1615610fd4576006905061124d565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561101e576001905061124d565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382771c8e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156110ac57600080fd5b6102c65a03f115156110bd57600080fd5b5050506040518051905015156110d6576001905061124d565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e768288306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561119b57600080fd5b6102c65a03f115156111ac57600080fd5b5050506040518051905015156111c5576001905061124d565b6007544210156111d8576002905061124d565b60085442111580156111ef57506111ed612708565b155b156111fd576003905061124d565b611205612240565b15611213576004905061124d565b61121b612240565b15801561122a57506000600a54115b801561123a5750600a54600d5410155b15611248576007905061124d565b600590505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112ab57600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663614cb9046000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561137a57600080fd5b6102c65a03f1151561138b57600080fd5b5050506040518051905015156113a057600080fd5b50565b6000600286600060405160200152604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140191505060206040518083038160008661646e5a03f1151561141657600080fd5b5050604051805190509050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114d857600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561150357600080fd5b6000856fffffffffffffffffffffffffffffffff16141561152357600080fd5b61152d8686612d07565b50505050505050565b60106020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115d257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561166057600080fd5b6102c65a03f1151561167157600080fd5b50505060405180519050600a0a840291508383029050600a5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561170657600080fd5b6102c65a03f4151561171757600080fd5b50505060405180519050600a8190555060095473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156117a657600080fd5b6102c65a03f415156117b757600080fd5b50505060405180519050600981905550601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561188357600080fd5b6102c65a03f4151561189457600080fd5b50505060405180519050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561199d57600080fd5b6102c65a03f415156119ae57600080fd5b50505060405180519050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a058583613625565b7f0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc433508582846000604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001826fffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050505050565b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60006001905090565b6004806007811115611add57fe5b611ae5610fb4565b6007811115611af057fe5b141515611afc57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b5757600080fd5b600060149054906101000a900460ff1615611b7157600080fd5b600f60009054906101000a900460ff1615611b8b57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c6757600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630bf318a36040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515611c5257600080fd5b6102c65a03f11515611c6357600080fd5b5050505b6001600f60006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ce057600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166304bbc2556000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611daf57600080fd5b6102c65a03f11515611dc057600080fd5b505050604051805190501515611dd557600080fd5b50565b60095481565b601460009054906101000a900460ff1681565b60006007806007811115611e0157fe5b611e09610fb4565b6007811115611e1457fe5b141515611e2057600080fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821415611e7057600080fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1515611f3457600080fd5b6102c65a03f41515611f4557600080fd5b50505060405180519050600e819055507fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561200057600080fd5b5050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561208b57600080fd5b6001600060146101000a81548160ff021916908315150217905550565b60015481565b807effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168260405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000002815260100191505060405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151561214c57600080fd5b6121563383612af5565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121b557600080fd5b804211156121c257600080fd5b8060075411156121d157600080fd5b806008819055507fd34bb772c4ae9baa99db852f622773b31c7827e8ee818449fef20d30980bd3106008546040518082815260200191505060405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600654600a541015905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122aa57600080fd5b80601460156101000a81548160ff0219169083151502179055507f48d826081348f5f00e8a33c9ae8ce89ed4c6e88400b585a478bc203d9e8177d3601460159054906101000a900460ff16601460169054906101000a900460ff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518084151515158152602001831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b600580600781111561239057fe5b612398610fb4565b60078111156123a357fe5b1415156123af57600080fd5b60003414156123bd57600080fd5b600d5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091346000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561243c57600080fd5b6102c65a03f4151561244d57600080fd5b50505060405180519050600d8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124bb57600080fd5b8060138190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915090505481565b6125323382612af5565b50565b600061253f61271f565b84111561254f5760019050612554565b600090505b949350505050565b61256533610e7e565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382771c8e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156125f757600080fd5b6102c65a03f1151561260857600080fd5b50505060405180519050905090565b60075481565b600f60009054906101000a900460ff1681565b600060149054906101000a900460ff1681565b60126020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126be57600080fd5b600060149054906101000a900460ff1615156126d957600080fd5b60008060146101000a81548160ff021916908315150217905550565b601460169054906101000a900460ff1681565b60008061271361271f565b14905090565b600c5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561283b57600080fd5b6102c65a03f1151561284c57600080fd5b50505060405180519050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128b657600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa54714518c5d275fdcd3d2a461e4858e4e8cb04fb93cd0bca9d6d34115f264408282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129db57600080fd5b81601460166101000a81548160ff02191690831515021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f48d826081348f5f00e8a33c9ae8ce89ed4c6e88400b585a478bc203d9e8177d3601460159054906101000a900460ff16601460169054906101000a900460ff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518084151515158152602001831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050565b601460169054906101000a900460ff1615612b0f57600080fd5b6000816fffffffffffffffffffffffffffffffff161415612b2f57600080fd5b612b398282612d07565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b9957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612bd557600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c7357600080fd5b600154600c541115612c8457600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cd533858585856113a3565b50505050565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060149054906101000a900460ff1615612d2557600080fd5b60026007811115612d3257fe5b612d3a610fb4565b6007811115612d4557fe5b1415612da857601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612da357600080fd5b612dd9565b60036007811115612db557fe5b612dbd610fb4565b6007811115612dc857fe5b1415612dd357612dd8565b600080fd5b5b349150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a4155e83600b54600a540360095433600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612eb457600080fd5b6102c65a03f11515612ec557600080fd5b505050604051805190506000604051602001526040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200195505050505050602060405180830381600087803b1515612f7157600080fd5b6102c65a03f11515612f8257600080fd5b50505060405180519050905060008114151515612f9e57600080fd5b6000601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612ff957600c600081548092919060010191905055505b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156130b557600080fd5b6102c65a03f415156130c657600080fd5b50505060405180519050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156131cf57600080fd5b6102c65a03f415156131e057600080fd5b50505060405180519050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156132ac57600080fd5b6102c65a03f415156132bd57600080fd5b50505060405180519050600a8190555060095473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561334c57600080fd5b6102c65a03f4151561335d57600080fd5b50505060405180519050600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f14ae17d866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561343257600080fd5b6102c65a03f1151561344357600080fd5b50505060405180519050156134f357600b5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156134d157600080fd5b6102c65a03f415156134e257600080fd5b50505060405180519050600b819055505b6135038282600a54600954612535565b15151561350f57600080fd5b6135198582613625565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561357b57600080fd5b7f0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc4335085838387604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1809250505092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561374857600080fd5b6102c65a03f1151561375957600080fd5b50505060405180519050151561376e57600080fd5b50505600a165627a7a723058200eae8432da848173da19aff409cb633e41bd320f7aeea9228407768cd9dc53500029000000000000000000000000e0efd668c950e6d286bc1c5b9304f31632708656000000000000000000000000c05f6b6ec994653a9fc8dc8eb27ec7cfb2f96cae000000000000000000000000040d11c850fb167cddb1e4d308fe9062fddaebd1000000000000000000000000000000000000000000000000000000005a5cde10000000000000000000000000000000000000000000000000000000005a98319000000000000000000000000000000000000000000000000ad78ebc5ac6200000000000000000000000000000001349c512ec5798bc018b8757c4cedcefbfa1de
Deployed Bytecode
0x60606040526004361061029e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630226401d146102a357806303ca0eed146102cc57806303f9c793146102f9578063062b01ce146103275780630a09284a1461035457806313f4e9771461037d5780631865c57d146103a657806319b667da146103dd5780631a49803b146104165780631aae34601461048557806321d5c0f6146104d257806332013ac31461052757806338af3eed146105725780634042b66f146105c75780634551dd59146105f05780634bb278f31461061d57806350c6773414610632578063518ab2a81461066b5780635795069714610694578063590e1ae3146106cb5780635b7633d0146106e05780635da89ac0146107355780635ed7ca5b1461075e5780636203f09f1461077357806363c6082f1461079c5780636e50eb3f146107f157806378b99c2414610814578063797d9437146108695780637c2e08a3146108925780637f7d711e146108bf57806387612102146108e45780638d51faec146108ee5780638da5cb5b146109115780639075becf1461096657806397b150ca146109bb57806399e9376c14610a085780639d3c663f14610a32578063a6f2ae3a14610a88578063a7ba44c314610a92578063af46868214610abf578063b3f05b9714610ae8578063b9b8af0b14610b15578063cb16e6d014610b42578063cb3e64fd14610b93578063d222dc0414610ba8578063d5d0902114610bd5578063d7e64c0014610c02578063de5f986614610c2b578063eac2493214610c54578063ed68ff2c14610c98578063ef86944314610cdc578063f2fde38b14610d25578063f3283fba14610d5e578063f486972614610d97578063f7c00e2f14610de7578063fc0c546a14610e10575b600080fd5b34156102ae57600080fd5b6102b6610e65565b6040518082815260200191505060405180910390f35b34156102d757600080fd5b6102df610e6b565b604051808215151515815260200191505060405180910390f35b610325600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e7e565b005b341561033257600080fd5b61033a610ec1565b604051808215151515815260200191505060405180910390f35b341561035f57600080fd5b610367610fa8565b6040518082815260200191505060405180910390f35b341561038857600080fd5b610390610fae565b6040518082815260200191505060405180910390f35b34156103b157600080fd5b6103b9610fb4565b604051808260078111156103c957fe5b60ff16815260200191505060405180910390f35b34156103e857600080fd5b610414600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611250565b005b610483600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff1690602001909190803560ff1690602001909190803560001916906020019091908035600019169060200190919050506113a3565b005b341561049057600080fd5b6104bc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611536565b6040518082815260200191505060405180910390f35b34156104dd57600080fd5b6104e561154e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561053257600080fd5b610570600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091905050611574565b005b341561057d57600080fd5b610585611a9a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105d257600080fd5b6105da611ac0565b6040518082815260200191505060405180910390f35b34156105fb57600080fd5b610603611ac6565b604051808215151515815260200191505060405180910390f35b341561062857600080fd5b610630611acf565b005b341561063d57600080fd5b610669600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c85565b005b341561067657600080fd5b61067e611dd8565b6040518082815260200191505060405180910390f35b341561069f57600080fd5b6106a7611dde565b604051808260078111156106b757fe5b60ff16815260200191505060405180910390f35b34156106d657600080fd5b6106de611df1565b005b34156106eb57600080fd5b6106f3612004565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561074057600080fd5b61074861202a565b6040518082815260200191505060405180910390f35b341561076957600080fd5b610771612030565b005b341561077e57600080fd5b6107866120a8565b6040518082815260200191505060405180910390f35b6107ef60048080356fffffffffffffffffffffffffffffffff169060200190919080357effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190919050506120ae565b005b34156107fc57600080fd5b610812600480803590602001909190505061215a565b005b341561081f57600080fd5b610827612214565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561087457600080fd5b61087c61223a565b6040518082815260200191505060405180910390f35b341561089d57600080fd5b6108a5612240565b604051808215151515815260200191505060405180910390f35b34156108ca57600080fd5b6108e26004808035151590602001909190505061224f565b005b6108ec612382565b005b34156108f957600080fd5b61090f6004808035906020019091905050612460565b005b341561091c57600080fd5b6109246124c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561097157600080fd5b6109796124ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109c657600080fd5b6109f2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612510565b6040518082815260200191505060405180910390f35b610a3060048080356fffffffffffffffffffffffffffffffff16906020019091905050612528565b005b3415610a3d57600080fd5b610a6e6004808035906020019091908035906020019091908035906020019091908035906020019091905050612535565b604051808215151515815260200191505060405180910390f35b610a9061255c565b005b3415610a9d57600080fd5b610aa5612567565b604051808215151515815260200191505060405180910390f35b3415610aca57600080fd5b610ad2612617565b6040518082815260200191505060405180910390f35b3415610af357600080fd5b610afb61261d565b604051808215151515815260200191505060405180910390f35b3415610b2057600080fd5b610b28612630565b604051808215151515815260200191505060405180910390f35b3415610b4d57600080fd5b610b79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612643565b604051808215151515815260200191505060405180910390f35b3415610b9e57600080fd5b610ba6612663565b005b3415610bb357600080fd5b610bbb6126f5565b604051808215151515815260200191505060405180910390f35b3415610be057600080fd5b610be8612708565b604051808215151515815260200191505060405180910390f35b3415610c0d57600080fd5b610c15612719565b6040518082815260200191505060405180910390f35b3415610c3657600080fd5b610c3e61271f565b6040518082815260200191505060405180910390f35b3415610c5f57600080fd5b610c96600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190505061285b565b005b3415610ca357600080fd5b610cda6004808035151590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612980565b005b610d23600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356fffffffffffffffffffffffffffffffff16906020019091905050612af5565b005b3415610d3057600080fd5b610d5c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b3e565b005b3415610d6957600080fd5b610d95600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c18565b005b610de560048080356fffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050612cc8565b005b3415610df257600080fd5b610dfa612cdb565b6040518082815260200191505060405180910390f35b3415610e1b57600080fd5b610e23612ce1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60135481565b601460159054906101000a900460ff1681565b601460159054906101000a900460ff1615610e9857600080fd5b601460169054906101000a900460ff1615610eb257600080fd5b610ebd816000612d07565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e768288306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610f8857600080fd5b6102c65a03f11515610f9957600080fd5b50505060405180519050905090565b60085481565b60065481565b6000600f60009054906101000a900460ff1615610fd4576006905061124d565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561101e576001905061124d565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382771c8e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156110ac57600080fd5b6102c65a03f115156110bd57600080fd5b5050506040518051905015156110d6576001905061124d565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e768288306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561119b57600080fd5b6102c65a03f115156111ac57600080fd5b5050506040518051905015156111c5576001905061124d565b6007544210156111d8576002905061124d565b60085442111580156111ef57506111ed612708565b155b156111fd576003905061124d565b611205612240565b15611213576004905061124d565b61121b612240565b15801561122a57506000600a54115b801561123a5750600a54600d5410155b15611248576007905061124d565b600590505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112ab57600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663614cb9046000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561137a57600080fd5b6102c65a03f1151561138b57600080fd5b5050506040518051905015156113a057600080fd5b50565b6000600286600060405160200152604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140191505060206040518083038160008661646e5a03f1151561141657600080fd5b5050604051805190509050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600182868686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114d857600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561150357600080fd5b6000856fffffffffffffffffffffffffffffffff16141561152357600080fd5b61152d8686612d07565b50505050505050565b60106020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115d257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561166057600080fd5b6102c65a03f1151561167157600080fd5b50505060405180519050600a0a840291508383029050600a5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561170657600080fd5b6102c65a03f4151561171757600080fd5b50505060405180519050600a8190555060095473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156117a657600080fd5b6102c65a03f415156117b757600080fd5b50505060405180519050600981905550601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561188357600080fd5b6102c65a03f4151561189457600080fd5b50505060405180519050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561199d57600080fd5b6102c65a03f415156119ae57600080fd5b50505060405180519050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a058583613625565b7f0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc433508582846000604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001826fffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050505050565b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60006001905090565b6004806007811115611add57fe5b611ae5610fb4565b6007811115611af057fe5b141515611afc57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b5757600080fd5b600060149054906101000a900460ff1615611b7157600080fd5b600f60009054906101000a900460ff1615611b8b57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c6757600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630bf318a36040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515611c5257600080fd5b6102c65a03f11515611c6357600080fd5b5050505b6001600f60006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ce057600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166304bbc2556000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611daf57600080fd5b6102c65a03f11515611dc057600080fd5b505050604051805190501515611dd557600080fd5b50565b60095481565b601460009054906101000a900460ff1681565b60006007806007811115611e0157fe5b611e09610fb4565b6007811115611e1457fe5b141515611e2057600080fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821415611e7057600080fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b1515611f3457600080fd5b6102c65a03f41515611f4557600080fd5b50505060405180519050600e819055507fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561200057600080fd5b5050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561208b57600080fd5b6001600060146101000a81548160ff021916908315150217905550565b60015481565b807effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168260405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000002815260100191505060405180910390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151561214c57600080fd5b6121563383612af5565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121b557600080fd5b804211156121c257600080fd5b8060075411156121d157600080fd5b806008819055507fd34bb772c4ae9baa99db852f622773b31c7827e8ee818449fef20d30980bd3106008546040518082815260200191505060405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600654600a541015905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122aa57600080fd5b80601460156101000a81548160ff0219169083151502179055507f48d826081348f5f00e8a33c9ae8ce89ed4c6e88400b585a478bc203d9e8177d3601460159054906101000a900460ff16601460169054906101000a900460ff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518084151515158152602001831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b600580600781111561239057fe5b612398610fb4565b60078111156123a357fe5b1415156123af57600080fd5b60003414156123bd57600080fd5b600d5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091346000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561243c57600080fd5b6102c65a03f4151561244d57600080fd5b50505060405180519050600d8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124bb57600080fd5b8060138190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915090505481565b6125323382612af5565b50565b600061253f61271f565b84111561254f5760019050612554565b600090505b949350505050565b61256533610e7e565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382771c8e6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156125f757600080fd5b6102c65a03f1151561260857600080fd5b50505060405180519050905090565b60075481565b600f60009054906101000a900460ff1681565b600060149054906101000a900460ff1681565b60126020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126be57600080fd5b600060149054906101000a900460ff1615156126d957600080fd5b60008060146101000a81548160ff021916908315150217905550565b601460169054906101000a900460ff1681565b60008061271361271f565b14905090565b600c5481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561283b57600080fd5b6102c65a03f1151561284c57600080fd5b50505060405180519050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128b657600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa54714518c5d275fdcd3d2a461e4858e4e8cb04fb93cd0bca9d6d34115f264408282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129db57600080fd5b81601460166101000a81548160ff02191690831515021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f48d826081348f5f00e8a33c9ae8ce89ed4c6e88400b585a478bc203d9e8177d3601460159054906101000a900460ff16601460169054906101000a900460ff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518084151515158152602001831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050565b601460169054906101000a900460ff1615612b0f57600080fd5b6000816fffffffffffffffffffffffffffffffff161415612b2f57600080fd5b612b398282612d07565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b9957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612bd557600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c7357600080fd5b600154600c541115612c8457600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612cd533858585856113a3565b50505050565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060149054906101000a900460ff1615612d2557600080fd5b60026007811115612d3257fe5b612d3a610fb4565b6007811115612d4557fe5b1415612da857601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612da357600080fd5b612dd9565b60036007811115612db557fe5b612dbd610fb4565b6007811115612dc857fe5b1415612dd357612dd8565b600080fd5b5b349150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a4155e83600b54600a540360095433600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612eb457600080fd5b6102c65a03f11515612ec557600080fd5b505050604051805190506000604051602001526040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200195505050505050602060405180830381600087803b1515612f7157600080fd5b6102c65a03f11515612f8257600080fd5b50505060405180519050905060008114151515612f9e57600080fd5b6000601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612ff957600c600081548092919060010191905055505b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156130b557600080fd5b6102c65a03f415156130c657600080fd5b50505060405180519050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156131cf57600080fd5b6102c65a03f415156131e057600080fd5b50505060405180519050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156132ac57600080fd5b6102c65a03f415156132bd57600080fd5b50505060405180519050600a8190555060095473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b151561334c57600080fd5b6102c65a03f4151561335d57600080fd5b50505060405180519050600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f14ae17d866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561343257600080fd5b6102c65a03f1151561344357600080fd5b50505060405180519050156134f357600b5473c61c442168fc73c2da30c075476eeb516534e1f46366098d4f9091846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15156134d157600080fd5b6102c65a03f415156134e257600080fd5b50505060405180519050600b819055505b6135038282600a54600954612535565b15151561350f57600080fd5b6135198582613625565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561357b57600080fd5b7f0396f60aaad038749091d273dc13aaabc63db6e2271c7bad442d5cf25cc4335085838387604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1809250505092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561374857600080fd5b6102c65a03f1151561375957600080fd5b50505060405180519050151561376e57600080fd5b50505600a165627a7a723058200eae8432da848173da19aff409cb633e41bd320f7aeea9228407768cd9dc53500029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e0efd668c950e6d286bc1c5b9304f31632708656000000000000000000000000c05f6b6ec994653a9fc8dc8eb27ec7cfb2f96cae000000000000000000000000040d11c850fb167cddb1e4d308fe9062fddaebd1000000000000000000000000000000000000000000000000000000005a5cde10000000000000000000000000000000000000000000000000000000005a98319000000000000000000000000000000000000000000000000ad78ebc5ac6200000000000000000000000000000001349c512ec5798bc018b8757c4cedcefbfa1de
-----Decoded View---------------
Arg [0] : _token (address): 0xE0eFd668c950E6d286bC1c5B9304f31632708656
Arg [1] : _pricingStrategy (address): 0xc05f6b6Ec994653A9Fc8DC8EB27EC7cfB2f96CaE
Arg [2] : _multisigWallet (address): 0x040d11c850fb167CdDB1e4d308fE9062FDdAeBD1
Arg [3] : _start (uint256): 1516035600
Arg [4] : _end (uint256): 1519923600
Arg [5] : _minimumFundingGoal (uint256): 200000000000000000000
Arg [6] : _beneficiary (address): 0x001349C512eC5798bc018B8757c4CEdcefbfa1De
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000e0efd668c950e6d286bc1c5b9304f31632708656
Arg [1] : 000000000000000000000000c05f6b6ec994653a9fc8dc8eb27ec7cfb2f96cae
Arg [2] : 000000000000000000000000040d11c850fb167cddb1e4d308fe9062fddaebd1
Arg [3] : 000000000000000000000000000000000000000000000000000000005a5cde10
Arg [4] : 000000000000000000000000000000000000000000000000000000005a983190
Arg [5] : 00000000000000000000000000000000000000000000000ad78ebc5ac6200000
Arg [6] : 000000000000000000000000001349c512ec5798bc018b8757c4cedcefbfa1de
Swarm Source
bzzr://0eae8432da848173da19aff409cb633e41bd320f7aeea9228407768cd9dc5350
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.