Contract 0x2af47a65da8cd66729b4209c22017d6a5c2d2400

 

Contract Overview

BountiesNetwork
Balance:
225.226404000000000605 Ether

EtherValue:
$30,984.40 (@ $137.57/ETH)

Token:
TxHash Block Age From To Value [TxFee]
0xa8bca304d0d84b94cfad0e038d4fa058405d47e18a20d1f8e5f92e76931451ef(pending)1 day 1 hr ago0x534c50b762ed90033c8fe5b2b432bb5c24838eab IN 0x2af47a65da8cd66729b4209c22017d6a5c2d24000.005 Ether(Pending)
0x1bee9e679a999b51243147814e9407ee407c0d3707b08a86eb6c2271673ddd48(pending)22 days 2 hrs ago0xd553437f232887fe960605e9c81aa29ea5c25c62 IN 0x2af47a65da8cd66729b4209c22017d6a5c2d24000 Ether(Pending)
0x2fa319c85e3356316f6f182110c7e2b2ae5884b62d5190dd82d7f176b354d86474225511 hr 6 mins ago0xd22fe4aefed0a984b1165dc24095728ee7005a36 IN  BountiesNetwork0 Ether0.00025656
0x20f3f2e15cc61428ef852ee6ae882a3cf94b8023fc161fcc2de55de386294d4274221472 hrs 32 mins ago0x6e7a055419d2667d5037c53d582ce6b3fcf5c526 IN  BountiesNetwork0 Ether0.000058292
0xe8dd59f10149d7cbf50c88a22e2e29ad567c1e7c16344fd6bb46dcf651e64e0e74221402 hrs 33 mins ago0x6e7a055419d2667d5037c53d582ce6b3fcf5c526 IN  BountiesNetwork0 Ether0.000070996
0x4530da56db0002189e3652475e793c9b275a6092bcb99504aca749d9b292627e74220173 hrs ago0x699d42b2874d651df35a48ef79e6d10ab0ea78ac IN  BountiesNetwork0 Ether0.000276266
0xd85a65b4f672e02b212e2371b03b27f15f76cc0f256377b1b5e48dae082a5c6674217004 hrs 5 mins ago0xe4b420f15d6d878dcd0df7120ac0fc1509ee9cab IN  BountiesNetwork0 Ether0.000766629
0x9c24abdc5aa67a86148fe90249669566365ddc735e0aecc76fe3421536c8dfac74215384 hrs 38 mins ago0x85f97b2ddc9f5a3c0843753f652401786cdaefaa IN  BountiesNetwork0 Ether0.000246266
0x0ff01710c30a1849029f9759646f8491ef272b814925a02640f0c6d8ca67f49174208007 hrs 22 mins ago0x1092361f4eafdc6e4555ee761e87ef9c67b9e42f IN  BountiesNetwork0 Ether0.000123133
0x24335e718725c4c5e2f915c64968c0a1c953b9c72a1829d7e8b25ee97e7a16b674206867 hrs 50 mins ago0xc35447bf6cb51f2be5168b28a50dd65f401c3836 IN  BountiesNetwork0 Ether0.000246266
0x9f24637cd548db4171b3809e0fe04fe8fcbf12752a3c765b14c874a3c5fde013741979411 hrs 19 mins ago0xd8d74e3f4707784dd9de7e631026d3be9ac49ef2 IN  BountiesNetwork0.66 Ether0.000424974
0x6b73a82543c5c22a37597e802b2e30764a8920b5bc95001aab212770d2cd6360741974011 hrs 32 mins ago0x0320df4f34233a43e1b704edae20e9c2b35a6984 IN  BountiesNetwork0 Ether0.000053993
0x5632df5473901a42a6761a7c58388cd80de7a9f80c97444196583e7b0d13d745741941812 hrs 41 mins ago0xf339084e9838281c953f3e812f32a6e145f64bff IN  BountiesNetwork0 Ether0.000453376
0xe91564d3e6c045942da2c37c4f6e4e35fb7b129c1602f714d27779cf35708416741934812 hrs 56 mins ago0x930a7cd60a633128b7c5181307781e6d033ba51a IN  BountiesNetwork0 Ether0.000059421
0x64a3f8c16fd4a0989399daac18c799dcb66fb293fc10ade3ca90a9748788c3a0741933612 hrs 58 mins ago0x930a7cd60a633128b7c5181307781e6d033ba51a IN  BountiesNetwork0 Ether0.000077512
0x8e4ea744c9572c77258848f12dd512a212aad5035dc8d724950774ac1025fa4d741928113 hrs 8 mins ago0x834cd15ff1001a63ef7d397c8ccd23520a654c0f IN  BountiesNetwork0 Ether0.000527253654
0xc3770626485cfe39af542c1afb954c7995b47a80f2dcc141d62a9bc1ed1a6a4d741920813 hrs 22 mins ago0x4fdded118642d6d52885cf896dfcd8a62d5a3a82 IN  BountiesNetwork0 Ether0.00615665
0xbccdb1a9b5bf9ad9960a84889ed0583febe78e6b0472b7a89a360f0b3f28edad741902614 hrs 5 mins ago0x85f97b2ddc9f5a3c0843753f652401786cdaefaa IN  BountiesNetwork0 Ether0.000985064
0x77d083eb46bda2f3bc1592c02608f3bf894455bcd39ce84c486f882b3afb5f18741874515 hrs 6 mins ago0x0282a6739b16e6d27c522db7680fd0bf6e965408 IN  BountiesNetwork0 Ether0.000150591659
0x92a27982b8a818940022d6f3e5230f654e6cd1a07191f8db4583386364796cbf741856115 hrs 48 mins ago0x5873449abfd4f2fb6f605bb12a68403637cf20b1 IN  BountiesNetwork0 Ether0.000276266
0xd95044ea2f1adba319d8d16533fd5d1845d267a3f22aa58f5ab0288383ea069a741842416 hrs 16 mins ago0x0583858adfe7d1d3dc7f8447301cf7b7b056d638 IN  BountiesNetwork0.15 Ether0.001700408
0xc57cf873d13ea0715547c2005a5a95a3c9f30ea7c8e05c5d6d91c88d1f2573f1741808417 hrs 36 mins ago0xbcafdd642118e5536024675e776d32413728dd08 IN  BountiesNetwork0 Ether0.000246266
0xf59e7fa935d1022c4f6b896734dfbf8e9175db0e8435ada5453bd06c766c6ebe741787418 hrs 30 mins ago0xf6fdee29e3a14610fdbe187e2d3442543cfa45b8 IN  BountiesNetwork0 Ether0.000276266
0xbe01c1c43fe6d8bcccbe120eb7c3b8e6a29b643ac1cfc6ed3484346ad2f695d0741685822 hrs 13 mins ago0x37b8ef2da4964886f16c6b14fc87a5c8c9ac4038 IN  BountiesNetwork0 Ether0.000369399
0x85bae6eb8537ce051ac38c8facd876ade4a4265565acb0d18126531b98bcd876741644723 hrs 48 mins ago0xf38075b37855d686d1e927d2f43f8cc24dbb12d8 IN  BountiesNetwork0.036 Ether0.000424718
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x20f3f2e15cc61428ef852ee6ae882a3cf94b8023fc161fcc2de55de386294d4274221472 hrs 32 mins ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x6e7a055419d2667d5037c53d582ce6b3fcf5c5260.25 Ether
0x6b73a82543c5c22a37597e802b2e30764a8920b5bc95001aab212770d2cd6360741974011 hrs 32 mins ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x85f97b2ddc9f5a3c0843753f652401786cdaefaa0.038 Ether
0x6fd2eb86fa89f43dedd96682443d3626090be704259a8ab4a33dc6fb86a2181474137501 day 9 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x00de4b13153673bcae2616b67bf822500d325fc34 Ether
0x90619d9916db3a27ded4ab478e1ab0781c891f32bc74d16ba14a22b81c6a63bd74134901 day 10 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x37b8ef2da4964886f16c6b14fc87a5c8c9ac40380.038 Ether
0x275c0e132cff050f31d41f788fd026fb2560160f27ddf19596946644cae730ea74124921 day 14 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x20da165deb81dbb042fe4a9d4808399ef2477c5d0.04 Ether
0xb315679d9e67618d706725378473bb358ac9d8140ad5941ef3fb99aded50f9ac74122331 day 15 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x427f13c4995755183e47b264143754f8e8491c970.04 Ether
0x48881c443d1557d849de47a37044959a6793ecc63faf04300f277174ddd6800b74121411 day 15 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x427f13c4995755183e47b264143754f8e8491c970.04 Ether
0xb2c979cf4eb1554c47df5e6b7a26fd3014425311df01c18bdf807430683149ce74111251 day 19 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x9b66e2c73ee59c11ac25ef2730ab589c5416e81a3.7 Ether
0x0eba46c4b36b9e4f99de4b7ddae9af9478bcd4058292677f900c78619b3306b774088392 days 4 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x742c8c86efed4f8e46bb2e03bb8b2fc2555264280.038 Ether
0xb0d47958fd8bcdf3c57027463f678a0072764180fe7dca4f0247201abf43304774071042 days 10 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xfaf95953a36ed1e8f8426ab5b7eb53da246e34760.038 Ether
0xce237bb93ea7c9e67a481a4f25079d7c2b241291a76571b25ddc63f4bb36ab5774070802 days 10 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x683d76f2e282c694fe9c7ea4598ffd25b426e1850.038 Ether
0x4f7ee5a0d03cc070438028fe44dddb80588bc75d5e6c4ccadef7ba39fba5278474053732 days 17 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xe317c793ebc9d4a3732ca66e5a8fc4ffc213b9890.001 Ether
0x10cf383eb608d409af9c05dad15ec7e69b92e59cc281f4ab6dfe3cab0c42b4ba74053482 days 17 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x48376251b60217e60c3cd4d73c58f5f2edda11610.04 Ether
0x4cfc13f406cfdc4fc3cb38f99d21c1230832f119cb36549aafc8e555218e0b8374044662 days 20 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x0583858adfe7d1d3dc7f8447301cf7b7b056d6380.25 Ether
0x24d93644d90f0745fdf4eb12d1d433ff0c45823fbce64be6b0a491a9757838d274037002 days 23 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x56872e2127c491d554c4ec45c4239cf03c0fa08d0.1 Ether
0x3e019d01ad13cb7a242662f3c0613b2b4c312cb3f5c674b3ae20fe9004c8f27074022033 days 5 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xa68366651a3042b30c4ef3d5da42c544671c94f50.038 Ether
0x09591aa3ad6bef6f34b42205d42ab2682f32331cc374584dcd441906fe90799374002853 days 12 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x0ba43bae4613e03492e4c17af3b014b6c3202b9d0.2 Ether
0x0579918f7f14298672a1dd0d84df0927130174b790167090f24241778889325c73989463 days 17 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xc57b0c6df19ccb163d4f271dfc093d352dcc61202.33 Ether
0xcbf721ad9b24f89b3e7328b89e436e6689dc58e1d243ffa14c069f15dd6268f373935414 days 13 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xa142ab9eab9264807a41f0e5cbdab877d204e2330.03 Ether
0x1754876059c53cf905cbadcda2c111568291fb0c96f56496f1f28b1fcf51da9573933734 days 14 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x4a4e83704b790eb7a3824d9a63113dd279b554540.03 Ether
0x973f599d8fa4e16ae965e28e2f58c76c6ddd72e4bf82de8ac44fbe867f1ab68173933724 days 14 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xaaa760e33c9c7397af1af1aaf4ca52d9ff7759be0.03 Ether
0x07ea1e7744c557fdb042a52d89cb7d8651ea407b9a302362dbc628bcf528ad8873932634 days 14 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xaf1916225b3709d8a8176631a20fc964f3c91a0c0.03 Ether
0x99f5a46077eba0dd9a6ff3aac7d3aaa4609937898a14a32d0316f8e94a89817a73932144 days 14 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000xf7a7bd2c1f3c25b0420e71b7fa85fe03728392b60.03 Ether
0x59d9f0b13f7df75c8e69ac57e937d8f855997dcee35cc422525e455ba1e2b6bc73927474 days 16 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x5c49575f85e3dc5171e83a05375770648ade3a2d0.04 Ether
0x3ed8f3e6d21de85cead6bcc7c5f23eefb9369b96bf4c2adbb9e74c870bd65c7573927174 days 16 hrs ago0x2af47a65da8cd66729b4209c22017d6a5c2d24000x54becc7560a7be76d72ed76a1f5fee6c5a2a7ab60.03 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
StandardBounties

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.18;
contract Token {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint256 supply);
    is replaced with:
    uint256 public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) constant returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract StandardToken is Token {

    function transfer(address _to, uint256 _value) returns (bool success) {
        //Default assumes totalSupply can't be over max (2^256 - 1).
        //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
        //Replace the if with this one instead.
        //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[msg.sender] >= _value && _value > 0) {
            balances[msg.sender] -= _value;
            balances[_to] += _value;
            Transfer(msg.sender, _to, _value);
            return true;
        } else { return false; }
    }

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        //same as above. Replace this line with the following if you want to protect against wrapping uints.
        //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
            balances[_to] += _value;
            balances[_from] -= _value;
            allowed[_from][msg.sender] -= _value;
            Transfer(_from, _to, _value);
            return true;
        } else { return false; }
    }

    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}
contract HumanStandardToken is StandardToken {

    /* Public variables of the token */

    /*
    NOTE:
    The following variables are OPTIONAL vanities. One does not have to include them.
    They allow one to customise the token contract & in no way influences the core functionality.
    Some wallets/interfaces might not even bother to look at this information.
    */
    string public name;                   //fancy name: eg Simon Bucks
    uint8 public decimals;                //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
    string public symbol;                 //An identifier: eg SBX
    string public version = 'H0.1';       //human 0.1 standard. Just an arbitrary versioning scheme.

    function HumanStandardToken(
        uint256 _initialAmount,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol
        ) {
        balances[msg.sender] = _initialAmount;               // Give the creator all initial tokens
        totalSupply = _initialAmount;                        // Update total supply
        name = _tokenName;                                   // Set the name for display purposes
        decimals = _decimalUnits;                            // Amount of decimals for display purposes
        symbol = _tokenSymbol;                               // Set the symbol for display purposes
    }

    /* Approves and then calls the receiving contract */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this.
        //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)
        //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead.
        require(_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData));
        return true;
    }
}

contract StandardBounties {

  /*
   * Events
   */
  event BountyIssued(uint bountyId);
  event BountyActivated(uint bountyId, address issuer);
  event BountyFulfilled(uint bountyId, address indexed fulfiller, uint256 indexed _fulfillmentId);
  event FulfillmentUpdated(uint _bountyId, uint _fulfillmentId);
  event FulfillmentAccepted(uint bountyId, address indexed fulfiller, uint256 indexed _fulfillmentId);
  event BountyKilled(uint bountyId, address indexed issuer);
  event ContributionAdded(uint bountyId, address indexed contributor, uint256 value);
  event DeadlineExtended(uint bountyId, uint newDeadline);
  event BountyChanged(uint bountyId);
  event IssuerTransferred(uint _bountyId, address indexed _newIssuer);
  event PayoutIncreased(uint _bountyId, uint _newFulfillmentAmount);


  /*
   * Storage
   */

  address public owner;

  Bounty[] public bounties;

  mapping(uint=>Fulfillment[]) fulfillments;
  mapping(uint=>uint) numAccepted;
  mapping(uint=>HumanStandardToken) tokenContracts;

  /*
   * Enums
   */

  enum BountyStages {
      Draft,
      Active,
      Dead
  }

  /*
   * Structs
   */

  struct Bounty {
      address issuer;
      uint deadline;
      string data;
      uint fulfillmentAmount;
      address arbiter;
      bool paysTokens;
      BountyStages bountyStage;
      uint balance;
  }

  struct Fulfillment {
      bool accepted;
      address fulfiller;
      string data;
  }

  /*
   * Modifiers
   */

  modifier validateNotTooManyBounties(){
    require((bounties.length + 1) > bounties.length);
    _;
  }

  modifier validateNotTooManyFulfillments(uint _bountyId){
    require((fulfillments[_bountyId].length + 1) > fulfillments[_bountyId].length);
    _;
  }

  modifier validateBountyArrayIndex(uint _bountyId){
    require(_bountyId < bounties.length);
    _;
  }

  modifier onlyIssuer(uint _bountyId) {
      require(msg.sender == bounties[_bountyId].issuer);
      _;
  }

  modifier onlyFulfiller(uint _bountyId, uint _fulfillmentId) {
      require(msg.sender == fulfillments[_bountyId][_fulfillmentId].fulfiller);
      _;
  }

  modifier amountIsNotZero(uint _amount) {
      require(_amount != 0);
      _;
  }

  modifier transferredAmountEqualsValue(uint _bountyId, uint _amount) {
      if (bounties[_bountyId].paysTokens){
        require(msg.value == 0);
        uint oldBalance = tokenContracts[_bountyId].balanceOf(this);
        if (_amount != 0){
          require(tokenContracts[_bountyId].transferFrom(msg.sender, this, _amount));
        }
        require((tokenContracts[_bountyId].balanceOf(this) - oldBalance) == _amount);

      } else {
        require((_amount * 1 wei) == msg.value);
      }
      _;
  }

  modifier isBeforeDeadline(uint _bountyId) {
      require(now < bounties[_bountyId].deadline);
      _;
  }

  modifier validateDeadline(uint _newDeadline) {
      require(_newDeadline > now);
      _;
  }

  modifier isAtStage(uint _bountyId, BountyStages _desiredStage) {
      require(bounties[_bountyId].bountyStage == _desiredStage);
      _;
  }

  modifier validateFulfillmentArrayIndex(uint _bountyId, uint _index) {
      require(_index < fulfillments[_bountyId].length);
      _;
  }

  modifier notYetAccepted(uint _bountyId, uint _fulfillmentId){
      require(fulfillments[_bountyId][_fulfillmentId].accepted == false);
      _;
  }

  /*
   * Public functions
   */


  /// @dev StandardBounties(): instantiates
  /// @param _owner the issuer of the standardbounties contract, who has the
  /// ability to remove bounties
  function StandardBounties(address _owner)
      public
  {
      owner = _owner;
  }

  /// @dev issueBounty(): instantiates a new draft bounty
  /// @param _issuer the address of the intended issuer of the bounty
  /// @param _deadline the unix timestamp after which fulfillments will no longer be accepted
  /// @param _data the requirements of the bounty
  /// @param _fulfillmentAmount the amount of wei to be paid out for each successful fulfillment
  /// @param _arbiter the address of the arbiter who can mediate claims
  /// @param _paysTokens whether the bounty pays in tokens or in ETH
  /// @param _tokenContract the address of the contract if _paysTokens is true
  function issueBounty(
      address _issuer,
      uint _deadline,
      string _data,
      uint256 _fulfillmentAmount,
      address _arbiter,
      bool _paysTokens,
      address _tokenContract
  )
      public
      validateDeadline(_deadline)
      amountIsNotZero(_fulfillmentAmount)
      validateNotTooManyBounties
      returns (uint)
  {
      bounties.push(Bounty(_issuer, _deadline, _data, _fulfillmentAmount, _arbiter, _paysTokens, BountyStages.Draft, 0));
      if (_paysTokens){
        tokenContracts[bounties.length - 1] = HumanStandardToken(_tokenContract);
      }
      BountyIssued(bounties.length - 1);
      return (bounties.length - 1);
  }

  /// @dev issueAndActivateBounty(): instantiates a new draft bounty
  /// @param _issuer the address of the intended issuer of the bounty
  /// @param _deadline the unix timestamp after which fulfillments will no longer be accepted
  /// @param _data the requirements of the bounty
  /// @param _fulfillmentAmount the amount of wei to be paid out for each successful fulfillment
  /// @param _arbiter the address of the arbiter who can mediate claims
  /// @param _paysTokens whether the bounty pays in tokens or in ETH
  /// @param _tokenContract the address of the contract if _paysTokens is true
  /// @param _value the total number of tokens being deposited upon activation
  function issueAndActivateBounty(
      address _issuer,
      uint _deadline,
      string _data,
      uint256 _fulfillmentAmount,
      address _arbiter,
      bool _paysTokens,
      address _tokenContract,
      uint256 _value
  )
      public
      payable
      validateDeadline(_deadline)
      amountIsNotZero(_fulfillmentAmount)
      validateNotTooManyBounties
      returns (uint)
  {
      require (_value >= _fulfillmentAmount);
      if (_paysTokens){
        require(msg.value == 0);
        tokenContracts[bounties.length] = HumanStandardToken(_tokenContract);
        require(tokenContracts[bounties.length].transferFrom(msg.sender, this, _value));
      } else {
        require((_value * 1 wei) == msg.value);
      }
      bounties.push(Bounty(_issuer,
                            _deadline,
                            _data,
                            _fulfillmentAmount,
                            _arbiter,
                            _paysTokens,
                            BountyStages.Active,
                            _value));
      BountyIssued(bounties.length - 1);
      ContributionAdded(bounties.length - 1, msg.sender, _value);
      BountyActivated(bounties.length - 1, msg.sender);
      return (bounties.length - 1);
  }

  modifier isNotDead(uint _bountyId) {
      require(bounties[_bountyId].bountyStage != BountyStages.Dead);
      _;
  }

  /// @dev contribute(): a function allowing anyone to contribute tokens to a
  /// bounty, as long as it is still before its deadline. Shouldn't keep
  /// them by accident (hence 'value').
  /// @param _bountyId the index of the bounty
  /// @param _value the amount being contributed in ether to prevent accidental deposits
  /// @notice Please note you funds will be at the mercy of the issuer
  ///  and can be drained at any moment. Be careful!
  function contribute (uint _bountyId, uint _value)
      payable
      public
      validateBountyArrayIndex(_bountyId)
      isBeforeDeadline(_bountyId)
      isNotDead(_bountyId)
      amountIsNotZero(_value)
      transferredAmountEqualsValue(_bountyId, _value)
  {
      bounties[_bountyId].balance += _value;

      ContributionAdded(_bountyId, msg.sender, _value);
  }

  /// @notice Send funds to activate the bug bounty
  /// @dev activateBounty(): activate a bounty so it may pay out
  /// @param _bountyId the index of the bounty
  /// @param _value the amount being contributed in ether to prevent
  /// accidental deposits
  function activateBounty(uint _bountyId, uint _value)
      payable
      public
      validateBountyArrayIndex(_bountyId)
      isBeforeDeadline(_bountyId)
      onlyIssuer(_bountyId)
      transferredAmountEqualsValue(_bountyId, _value)
  {
      bounties[_bountyId].balance += _value;
      require (bounties[_bountyId].balance >= bounties[_bountyId].fulfillmentAmount);
      transitionToState(_bountyId, BountyStages.Active);

      ContributionAdded(_bountyId, msg.sender, _value);
      BountyActivated(_bountyId, msg.sender);
  }

  modifier notIssuerOrArbiter(uint _bountyId) {
      require(msg.sender != bounties[_bountyId].issuer && msg.sender != bounties[_bountyId].arbiter);
      _;
  }

  /// @dev fulfillBounty(): submit a fulfillment for the given bounty
  /// @param _bountyId the index of the bounty
  /// @param _data the data artifacts representing the fulfillment of the bounty
  function fulfillBounty(uint _bountyId, string _data)
      public
      validateBountyArrayIndex(_bountyId)
      validateNotTooManyFulfillments(_bountyId)
      isAtStage(_bountyId, BountyStages.Active)
      isBeforeDeadline(_bountyId)
      notIssuerOrArbiter(_bountyId)
  {
      fulfillments[_bountyId].push(Fulfillment(false, msg.sender, _data));

      BountyFulfilled(_bountyId, msg.sender, (fulfillments[_bountyId].length - 1));
  }

  /// @dev updateFulfillment(): Submit updated data for a given fulfillment
  /// @param _bountyId the index of the bounty
  /// @param _fulfillmentId the index of the fulfillment
  /// @param _data the new data being submitted
  function updateFulfillment(uint _bountyId, uint _fulfillmentId, string _data)
      public
      validateBountyArrayIndex(_bountyId)
      validateFulfillmentArrayIndex(_bountyId, _fulfillmentId)
      onlyFulfiller(_bountyId, _fulfillmentId)
      notYetAccepted(_bountyId, _fulfillmentId)
  {
      fulfillments[_bountyId][_fulfillmentId].data = _data;
      FulfillmentUpdated(_bountyId, _fulfillmentId);
  }

  modifier onlyIssuerOrArbiter(uint _bountyId) {
      require(msg.sender == bounties[_bountyId].issuer ||
         (msg.sender == bounties[_bountyId].arbiter && bounties[_bountyId].arbiter != address(0)));
      _;
  }

  modifier fulfillmentNotYetAccepted(uint _bountyId, uint _fulfillmentId) {
      require(fulfillments[_bountyId][_fulfillmentId].accepted == false);
      _;
  }

  modifier enoughFundsToPay(uint _bountyId) {
      require(bounties[_bountyId].balance >= bounties[_bountyId].fulfillmentAmount);
      _;
  }

  /// @dev acceptFulfillment(): accept a given fulfillment
  /// @param _bountyId the index of the bounty
  /// @param _fulfillmentId the index of the fulfillment being accepted
  function acceptFulfillment(uint _bountyId, uint _fulfillmentId)
      public
      validateBountyArrayIndex(_bountyId)
      validateFulfillmentArrayIndex(_bountyId, _fulfillmentId)
      onlyIssuerOrArbiter(_bountyId)
      isAtStage(_bountyId, BountyStages.Active)
      fulfillmentNotYetAccepted(_bountyId, _fulfillmentId)
      enoughFundsToPay(_bountyId)
  {
      fulfillments[_bountyId][_fulfillmentId].accepted = true;
      numAccepted[_bountyId]++;
      bounties[_bountyId].balance -= bounties[_bountyId].fulfillmentAmount;
      if (bounties[_bountyId].paysTokens){
        require(tokenContracts[_bountyId].transfer(fulfillments[_bountyId][_fulfillmentId].fulfiller, bounties[_bountyId].fulfillmentAmount));
      } else {
        fulfillments[_bountyId][_fulfillmentId].fulfiller.transfer(bounties[_bountyId].fulfillmentAmount);
      }
      FulfillmentAccepted(_bountyId, msg.sender, _fulfillmentId);
  }

  /// @dev killBounty(): drains the contract of it's remaining
  /// funds, and moves the bounty into stage 3 (dead) since it was
  /// either killed in draft stage, or never accepted any fulfillments
  /// @param _bountyId the index of the bounty
  function killBounty(uint _bountyId)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
  {
      transitionToState(_bountyId, BountyStages.Dead);
      uint oldBalance = bounties[_bountyId].balance;
      bounties[_bountyId].balance = 0;
      if (oldBalance > 0){
        if (bounties[_bountyId].paysTokens){
          require(tokenContracts[_bountyId].transfer(bounties[_bountyId].issuer, oldBalance));
        } else {
          bounties[_bountyId].issuer.transfer(oldBalance);
        }
      }
      BountyKilled(_bountyId, msg.sender);
  }

  modifier newDeadlineIsValid(uint _bountyId, uint _newDeadline) {
      require(_newDeadline > bounties[_bountyId].deadline);
      _;
  }

  /// @dev extendDeadline(): allows the issuer to add more time to the
  /// bounty, allowing it to continue accepting fulfillments
  /// @param _bountyId the index of the bounty
  /// @param _newDeadline the new deadline in timestamp format
  function extendDeadline(uint _bountyId, uint _newDeadline)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      newDeadlineIsValid(_bountyId, _newDeadline)
  {
      bounties[_bountyId].deadline = _newDeadline;

      DeadlineExtended(_bountyId, _newDeadline);
  }

  /// @dev transferIssuer(): allows the issuer to transfer ownership of the
  /// bounty to some new address
  /// @param _bountyId the index of the bounty
  /// @param _newIssuer the address of the new issuer
  function transferIssuer(uint _bountyId, address _newIssuer)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
  {
      bounties[_bountyId].issuer = _newIssuer;
      IssuerTransferred(_bountyId, _newIssuer);
  }


  /// @dev changeBountyDeadline(): allows the issuer to change a bounty's deadline
  /// @param _bountyId the index of the bounty
  /// @param _newDeadline the new deadline for the bounty
  function changeBountyDeadline(uint _bountyId, uint _newDeadline)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      validateDeadline(_newDeadline)
      isAtStage(_bountyId, BountyStages.Draft)
  {
      bounties[_bountyId].deadline = _newDeadline;
      BountyChanged(_bountyId);
  }

  /// @dev changeData(): allows the issuer to change a bounty's data
  /// @param _bountyId the index of the bounty
  /// @param _newData the new requirements of the bounty
  function changeBountyData(uint _bountyId, string _newData)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      isAtStage(_bountyId, BountyStages.Draft)
  {
      bounties[_bountyId].data = _newData;
      BountyChanged(_bountyId);
  }

  /// @dev changeBountyfulfillmentAmount(): allows the issuer to change a bounty's fulfillment amount
  /// @param _bountyId the index of the bounty
  /// @param _newFulfillmentAmount the new fulfillment amount
  function changeBountyFulfillmentAmount(uint _bountyId, uint _newFulfillmentAmount)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      isAtStage(_bountyId, BountyStages.Draft)
  {
      bounties[_bountyId].fulfillmentAmount = _newFulfillmentAmount;
      BountyChanged(_bountyId);
  }

  /// @dev changeBountyArbiter(): allows the issuer to change a bounty's arbiter
  /// @param _bountyId the index of the bounty
  /// @param _newArbiter the new address of the arbiter
  function changeBountyArbiter(uint _bountyId, address _newArbiter)
      public
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      isAtStage(_bountyId, BountyStages.Draft)
  {
      bounties[_bountyId].arbiter = _newArbiter;
      BountyChanged(_bountyId);
  }

  modifier newFulfillmentAmountIsIncrease(uint _bountyId, uint _newFulfillmentAmount) {
      require(bounties[_bountyId].fulfillmentAmount < _newFulfillmentAmount);
      _;
  }

  /// @dev increasePayout(): allows the issuer to increase a given fulfillment
  /// amount in the active stage
  /// @param _bountyId the index of the bounty
  /// @param _newFulfillmentAmount the new fulfillment amount
  /// @param _value the value of the additional deposit being added
  function increasePayout(uint _bountyId, uint _newFulfillmentAmount, uint _value)
      public
      payable
      validateBountyArrayIndex(_bountyId)
      onlyIssuer(_bountyId)
      newFulfillmentAmountIsIncrease(_bountyId, _newFulfillmentAmount)
      transferredAmountEqualsValue(_bountyId, _value)
  {
      bounties[_bountyId].balance += _value;
      require(bounties[_bountyId].balance >= _newFulfillmentAmount);
      bounties[_bountyId].fulfillmentAmount = _newFulfillmentAmount;
      PayoutIncreased(_bountyId, _newFulfillmentAmount);
  }

  /// @dev getFulfillment(): Returns the fulfillment at a given index
  /// @param _bountyId the index of the bounty
  /// @param _fulfillmentId the index of the fulfillment to return
  /// @return Returns a tuple for the fulfillment
  function getFulfillment(uint _bountyId, uint _fulfillmentId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      validateFulfillmentArrayIndex(_bountyId, _fulfillmentId)
      returns (bool, address, string)
  {
      return (fulfillments[_bountyId][_fulfillmentId].accepted,
              fulfillments[_bountyId][_fulfillmentId].fulfiller,
              fulfillments[_bountyId][_fulfillmentId].data);
  }

  /// @dev getBounty(): Returns the details of the bounty
  /// @param _bountyId the index of the bounty
  /// @return Returns a tuple for the bounty
  function getBounty(uint _bountyId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      returns (address, uint, uint, bool, uint, uint)
  {
      return (bounties[_bountyId].issuer,
              bounties[_bountyId].deadline,
              bounties[_bountyId].fulfillmentAmount,
              bounties[_bountyId].paysTokens,
              uint(bounties[_bountyId].bountyStage),
              bounties[_bountyId].balance);
  }

  /// @dev getBountyArbiter(): Returns the arbiter of the bounty
  /// @param _bountyId the index of the bounty
  /// @return Returns an address for the arbiter of the bounty
  function getBountyArbiter(uint _bountyId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      returns (address)
  {
      return (bounties[_bountyId].arbiter);
  }

  /// @dev getBountyData(): Returns the data of the bounty
  /// @param _bountyId the index of the bounty
  /// @return Returns a string for the bounty data
  function getBountyData(uint _bountyId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      returns (string)
  {
      return (bounties[_bountyId].data);
  }

  /// @dev getBountyToken(): Returns the token contract of the bounty
  /// @param _bountyId the index of the bounty
  /// @return Returns an address for the token that the bounty uses
  function getBountyToken(uint _bountyId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      returns (address)
  {
      return (tokenContracts[_bountyId]);
  }

  /// @dev getNumBounties() returns the number of bounties in the registry
  /// @return Returns the number of bounties
  function getNumBounties()
      public
      constant
      returns (uint)
  {
      return bounties.length;
  }

  /// @dev getNumFulfillments() returns the number of fulfillments for a given milestone
  /// @param _bountyId the index of the bounty
  /// @return Returns the number of fulfillments
  function getNumFulfillments(uint _bountyId)
      public
      constant
      validateBountyArrayIndex(_bountyId)
      returns (uint)
  {
      return fulfillments[_bountyId].length;
  }

  /*
   * Internal functions
   */

  /// @dev transitionToState(): transitions the contract to the
  /// state passed in the parameter `_newStage` given the
  /// conditions stated in the body of the function
  /// @param _bountyId the index of the bounty
  /// @param _newStage the new stage to transition to
  function transitionToState(uint _bountyId, BountyStages _newStage)
      internal
  {
      bounties[_bountyId].bountyStage = _newStage;
  }
}

Contract ABI

[{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"killBounty","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"getBountyToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_data","type":"string"}],"name":"fulfillBounty","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newDeadline","type":"uint256"}],"name":"extendDeadline","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNumBounties","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_fulfillmentId","type":"uint256"},{"name":"_data","type":"string"}],"name":"updateFulfillment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newFulfillmentAmount","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"increasePayout","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newFulfillmentAmount","type":"uint256"}],"name":"changeBountyFulfillmentAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newIssuer","type":"address"}],"name":"transferIssuer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"activateBounty","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_issuer","type":"address"},{"name":"_deadline","type":"uint256"},{"name":"_data","type":"string"},{"name":"_fulfillmentAmount","type":"uint256"},{"name":"_arbiter","type":"address"},{"name":"_paysTokens","type":"bool"},{"name":"_tokenContract","type":"address"}],"name":"issueBounty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_issuer","type":"address"},{"name":"_deadline","type":"uint256"},{"name":"_data","type":"string"},{"name":"_fulfillmentAmount","type":"uint256"},{"name":"_arbiter","type":"address"},{"name":"_paysTokens","type":"bool"},{"name":"_tokenContract","type":"address"},{"name":"_value","type":"uint256"}],"name":"issueAndActivateBounty","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"getBountyArbiter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"contribute","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"getBountyData","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_fulfillmentId","type":"uint256"}],"name":"getFulfillment","outputs":[{"name":"","type":"bool"},{"name":"","type":"address"},{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newArbiter","type":"address"}],"name":"changeBountyArbiter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newDeadline","type":"uint256"}],"name":"changeBountyDeadline","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_fulfillmentId","type":"uint256"}],"name":"acceptFulfillment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bounties","outputs":[{"name":"issuer","type":"address"},{"name":"deadline","type":"uint256"},{"name":"data","type":"string"},{"name":"fulfillmentAmount","type":"uint256"},{"name":"arbiter","type":"address"},{"name":"paysTokens","type":"bool"},{"name":"bountyStage","type":"uint8"},{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"getBounty","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bountyId","type":"uint256"},{"name":"_newData","type":"string"}],"name":"changeBountyData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_bountyId","type":"uint256"}],"name":"getNumFulfillments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"}],"name":"BountyIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":false,"name":"issuer","type":"address"}],"name":"BountyActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":true,"name":"fulfiller","type":"address"},{"indexed":true,"name":"_fulfillmentId","type":"uint256"}],"name":"BountyFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_bountyId","type":"uint256"},{"indexed":false,"name":"_fulfillmentId","type":"uint256"}],"name":"FulfillmentUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":true,"name":"fulfiller","type":"address"},{"indexed":true,"name":"_fulfillmentId","type":"uint256"}],"name":"FulfillmentAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":true,"name":"issuer","type":"address"}],"name":"BountyKilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":true,"name":"contributor","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ContributionAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"},{"indexed":false,"name":"newDeadline","type":"uint256"}],"name":"DeadlineExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bountyId","type":"uint256"}],"name":"BountyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_bountyId","type":"uint256"},{"indexed":true,"name":"_newIssuer","type":"address"}],"name":"IssuerTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_bountyId","type":"uint256"},{"indexed":false,"name":"_newFulfillmentAmount","type":"uint256"}],"name":"PayoutIncreased","type":"event"}]

Contract Creation Code

6060604052341561000f57600080fd5b60405160208061419e83398101604052808051906020019091905050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506141238061007b6000396000f30060606040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806316b575091461014357806319dba3d2146101665780631e688c14146101c95780632d1fdef61461022f5780633278ba2f1461025b57806341ac5dd014610284578063422d4cd6146102f3578063452ccadb1461031d5780635d19606e14610349578063626a413a1461038b578063788acd7e146103ac5780637e9e511d1461049757806386647bac146105805780638c590917146105e35780638da5cb5b14610604578063a60745aa14610659578063b94b0a3a146106f5578063cdad6576146107d8578063d6c0ceab1461081a578063d958349714610846578063dc2f874414610872578063ee8c4bbf146109c6578063f3d3402a14610a50578063fbe334f814610ab6575b600080fd5b341561014e57600080fd5b6101646004808035906020019091905050610aed565b005b341561017157600080fd5b6101876004808035906020019091905050610e2d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101d457600080fd5b61022d600480803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610e7f565b005b341561023a57600080fd5b61025960048080359060200190919080359060200190919050506111b0565b005b341561026657600080fd5b61026e6112db565b6040518082815260200191505060405180910390f35b341561028f57600080fd5b6102f1600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506112e8565b005b61031b6004808035906020019091908035906020019091908035906020019091905050611493565b005b341561032857600080fd5b61034760048080359060200190919080359060200190919050506119b1565b005b341561035457600080fd5b610389600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611af8565b005b6103aa6004808035906020019091908035906020019091905050611c3a565b005b34156103b757600080fd5b610481600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121de565b6040518082815260200191505060405180910390f35b61056a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612483565b6040518082815260200191505060405180910390f35b341561058b57600080fd5b6105a16004808035906020019091905050612966565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61060260048080359060200190919080359060200190919050506129c5565b005b341561060f57600080fd5b610617612e8e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066457600080fd5b61067a6004808035906020019091905050612eb3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ba57808201518184015260208101905061069f565b50505050905090810190601f1680156106e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561070057600080fd5b61071f6004808035906020019091908035906020019091905050612f90565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561079b578082015181840152602081019050610780565b50505050905090810190601f1680156107c85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156107e357600080fd5b610818600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613143565b005b341561082557600080fd5b61084460048080359060200190919080359060200190919050506132c4565b005b341561085157600080fd5b610870600480803590602001909190803590602001909190505061341b565b005b341561087d57600080fd5b6108936004808035906020019091905050613a2c565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001888152602001806020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018515151515815260200184600281111561092157fe5b60ff1681526020018381526020018281038252888181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050995050505050505050505060405180910390f35b34156109d157600080fd5b6109e76004808035906020019091905050613adc565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184151515158152602001838152602001828152602001965050505050505060405180910390f35b3415610a5b57600080fd5b610ab4600480803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050613c1a565b005b3415610ac157600080fd5b610ad76004808035906020019091905050613d71565b6040518082815260200191505060405180910390f35b60008160018054905081101515610b0357600080fd5b82600181815481101515610b1357fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7e57600080fd5b610b89846002613da6565b600184815481101515610b9857fe5b90600052602060002090600602016005015492506000600185815481101515610bbd57fe5b9060005260206000209060060201600501819055506000831115610dd957600184815481101515610bea57fe5b906000526020600020906006020160040160149054906101000a900460ff1615610d57576004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600186815481101515610c6c57fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610d2c57600080fd5b6102c65a03f11515610d3d57600080fd5b505050604051805190501515610d5257600080fd5b610dd8565b600184815481101515610d6657fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515610dd757600080fd5b5b5b3373ffffffffffffffffffffffffffffffffffffffff167f1b5171f0f6cd238c5b76b002b28e5c29dc3864174e7ed7f168b5e6373196d901856040518082815260200191505060405180910390a250505050565b60008160018054905081101515610e4357600080fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8160018054905081101515610e9357600080fd5b8260026000828152602001908152602001600020805490506001600260008481526020019081526020016000208054905001111515610ed157600080fd5b836001806002811115610ee057fe5b600183815481101515610eef57fe5b906000526020600020906006020160040160159054906101000a900460ff166002811115610f1957fe5b141515610f2557600080fd5b85600181815481101515610f3557fe5b90600052602060002090600602016001015442101515610f5457600080fd5b86600181815481101515610f6457fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561103d5750600181815481101515610fdb57fe5b906000526020600020906006020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b151561104857600080fd5b60026000898152602001908152602001600020805480600101828161106d9190613deb565b916000526020600020906002020160006060604051908101604052806000151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018b815250909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600101908051906020019061113a929190613e1d565b505050506001600260008a815260200190815260200160002080549050033373ffffffffffffffffffffffffffffffffffffffff167feb70bc86dda3bbb4f37b25318d4737f2641d3e315df2f59a123c5a06197103578a6040518082815260200191505060405180910390a35050505050505050565b81600180549050811015156111c457600080fd5b826001818154811015156111d457fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561123f57600080fd5b838360018281548110151561125057fe5b9060005260206000209060060201600101548111151561126f57600080fd5b8460018781548110151561127f57fe5b9060005260206000209060060201600101819055507f073d5fd87a7e0c2a384727f9aab2e84826370623aba582638b425a417e799a2c8686604051808381526020018281526020019250505060405180910390a1505050505050565b6000600180549050905090565b82600180549050811015156112fc57600080fd5b838360026000838152602001908152602001600020805490508110151561132257600080fd5b8585600260008381526020019081526020016000208181548110151561134457fe5b906000526020600020906002020160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113af57600080fd5b87876000151560026000848152602001908152602001600020828154811015156113d557fe5b906000526020600020906002020160000160009054906101000a900460ff16151514151561140257600080fd5b87600260008c81526020019081526020016000208a81548110151561142357fe5b90600052602060002090600202016001019080519060200190611447929190613e9d565b507f6e609af2c76c6673122c9a6ee1677adc2e9f20ec9979d056bf6c4f40799b95588a8a604051808381526020018281526020019250505060405180910390a150505050505050505050565b82600180549050811015156114a757600080fd5b836001818154811015156114b757fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561152257600080fd5b84848060018381548110151561153457fe5b90600052602060002090600602016003015410151561155257600080fd5b8685600060018381548110151561156557fe5b906000526020600020906006020160040160149054906101000a900460ff16156118d35760003414151561159857600080fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561166e57600080fd5b6102c65a03f1151561167f57600080fd5b5050506040518051905090506000821415156117ce576004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156117a757600080fd5b6102c65a03f115156117b857600080fd5b5050506040518051905015156117cd57600080fd5b5b81816004600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156118a657600080fd5b6102c65a03f115156118b757600080fd5b50505060405180519050031415156118ce57600080fd5b6118e5565b34600183021415156118e457600080fd5b5b8760018b8154811015156118f557fe5b9060005260206000209060060201600501600082825401925050819055508860018b81548110151561192357fe5b9060005260206000209060060201600501541015151561194257600080fd5b8860018b81548110151561195257fe5b9060005260206000209060060201600301819055507e61c78e3c7ddc2b1bfc8ba5996c63dd51b289e6ee3bd6f0e55089cf698aa6928a8a604051808381526020018281526020019250505060405180910390a150505050505050505050565b81600180549050811015156119c557600080fd5b826001818154811015156119d557fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a4057600080fd5b836000806002811115611a4f57fe5b600183815481101515611a5e57fe5b906000526020600020906006020160040160159054906101000a900460ff166002811115611a8857fe5b141515611a9457600080fd5b84600187815481101515611aa457fe5b9060005260206000209060060201600301819055507ffb8e4f1ace1b37ebd0423cd75b120660780cc08a9414e04fe6b50f96a9482dde866040518082815260200191505060405180910390a1505050505050565b8160018054905081101515611b0c57600080fd5b82600181815481101515611b1c57fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b8757600080fd5b82600185815481101515611b9757fe5b906000526020600020906006020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f76a6676aed9f1a70fb8043b568311724b5e4cec1d68ff8fc9d5ab0a6fa619c17856040518082815260200191505060405180910390a250505050565b8160018054905081101515611c4e57600080fd5b82600181815481101515611c5e57fe5b90600052602060002090600602016001015442101515611c7d57600080fd5b83600181815481101515611c8d57fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cf857600080fd5b84846000600183815481101515611d0b57fe5b906000526020600020906006020160040160149054906101000a900460ff161561207957600034141515611d3e57600080fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611e1457600080fd5b6102c65a03f11515611e2557600080fd5b505050604051805190509050600082141515611f74576004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611f4d57600080fd5b6102c65a03f11515611f5e57600080fd5b505050604051805190501515611f7357600080fd5b5b81816004600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561204c57600080fd5b6102c65a03f1151561205d57600080fd5b505050604051805190500314151561207457600080fd5b61208b565b346001830214151561208a57600080fd5b5b8660018981548110151561209b57fe5b9060005260206000209060060201600501600082825401925050819055506001888154811015156120c857fe5b9060005260206000209060060201600301546001898154811015156120e957fe5b9060005260206000209060060201600501541015151561210857600080fd5b612113886001613da6565b3373ffffffffffffffffffffffffffffffffffffffff167f75aecd8d57cb4b1b263271bddb4961b993924dd466e6003c254832572d8a57e18989604051808381526020018281526020019250505060405180910390a27fe42c1b76efa2e9aa5b354a151174590827beb1ef94bde26787491bf4e7d68a198833604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050505050505050565b60008642811115156121ef57600080fd5b856000811415151561220057600080fd5b600180549050600180805490500111151561221a57600080fd5b6001805480600101828161222e9190613f1d565b91600052602060002090600602016000610100604051908101604052808e73ffffffffffffffffffffffffffffffffffffffff1681526020018d81526020018c81526020018b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018915158152602001600060028111156122aa57fe5b81526020016000815250909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190612326929190613e1d565b506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff021916908360028111156123bc57fe5b021790555060e08201518160050155505050841561242e5783600460006001808054905003815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b7fe04ac09e4a49338f40cf62a51ba721823ed22f57bc4d53c6f8684bdb1be8fd1060018080549050036040518082815260200191505060405180910390a1600180805490500392505050979650505050505050565b600087428111151561249457600080fd5b86600081141515156124a557600080fd5b60018054905060018080549050011115156124bf57600080fd5b8784101515156124ce57600080fd5b851561267c576000341415156124e357600080fd5b8460046000600180549050815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060046000600180549050815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561265157600080fd5b6102c65a03f1151561266257600080fd5b50505060405180519050151561267757600080fd5b61268e565b346001850214151561268d57600080fd5b5b600180548060010182816126a29190613f1d565b91600052602060002090600602016000610100604051908101604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a151581526020016001600281111561271e57fe5b815260200188815250909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190612799929190613e1d565b506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff0219169083600281111561282f57fe5b021790555060e082015181600501555050507fe04ac09e4a49338f40cf62a51ba721823ed22f57bc4d53c6f8684bdb1be8fd1060018080549050036040518082815260200191505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff167f75aecd8d57cb4b1b263271bddb4961b993924dd466e6003c254832572d8a57e1600180805490500386604051808381526020018281526020019250505060405180910390a27fe42c1b76efa2e9aa5b354a151174590827beb1ef94bde26787491bf4e7d68a19600180805490500333604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a160018080549050039250505098975050505050505050565b6000816001805490508110151561297c57600080fd5b60018381548110151561298b57fe5b906000526020600020906006020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b81600180549050811015156129d957600080fd5b826001818154811015156129e957fe5b90600052602060002090600602016001015442101515612a0857600080fd5b83600280811115612a1557fe5b600182815481101515612a2457fe5b906000526020600020906006020160040160159054906101000a900460ff166002811115612a4e57fe5b14151515612a5b57600080fd5b8360008114151515612a6c57600080fd5b85856000600183815481101515612a7f57fe5b906000526020600020906006020160040160149054906101000a900460ff1615612ded57600034141515612ab257600080fd5b6004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612b8857600080fd5b6102c65a03f11515612b9957600080fd5b505050604051805190509050600082141515612ce8576004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515612cc157600080fd5b6102c65a03f11515612cd257600080fd5b505050604051805190501515612ce757600080fd5b5b81816004600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612dc057600080fd5b6102c65a03f11515612dd157600080fd5b5050506040518051905003141515612de857600080fd5b612dff565b3460018302141515612dfe57600080fd5b5b8760018a815481101515612e0f57fe5b9060005260206000209060060201600501600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f75aecd8d57cb4b1b263271bddb4961b993924dd466e6003c254832572d8a57e18a8a604051808381526020018281526020019250505060405180910390a2505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ebb613f4f565b8160018054905081101515612ecf57600080fd5b600183815481101515612ede57fe5b90600052602060002090600602016002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f835780601f10612f5857610100808354040283529160200191612f83565b820191906000526020600020905b815481529060010190602001808311612f6657829003601f168201915b5050505050915050919050565b600080612f9b613f4f565b8460018054905081101515612faf57600080fd5b8585600260008381526020019081526020016000208054905081101515612fd557600080fd5b6002600089815260200190815260200160002087815481101515612ff557fe5b906000526020600020906002020160000160009054906101000a900460ff16600260008a81526020019081526020016000208881548110151561303457fe5b906000526020600020906002020160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008b81526020019081526020016000208981548110151561308657fe5b9060005260206000209060020201600101808054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561312c5780601f106131015761010080835404028352916020019161312c565b820191906000526020600020905b81548152906001019060200180831161310f57829003601f168201915b505050505090509550955095505050509250925092565b816001805490508110151561315757600080fd5b8260018181548110151561316757fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131d257600080fd5b8360008060028111156131e157fe5b6001838154811015156131f057fe5b906000526020600020906006020160040160159054906101000a900460ff16600281111561321a57fe5b14151561322657600080fd5b8460018781548110151561323657fe5b906000526020600020906006020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb8e4f1ace1b37ebd0423cd75b120660780cc08a9414e04fe6b50f96a9482dde866040518082815260200191505060405180910390a1505050505050565b81600180549050811015156132d857600080fd5b826001818154811015156132e857fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561335357600080fd5b82428111151561336257600080fd5b84600080600281111561337157fe5b60018381548110151561338057fe5b906000526020600020906006020160040160159054906101000a900460ff1660028111156133aa57fe5b1415156133b657600080fd5b856001888154811015156133c657fe5b9060005260206000209060060201600101819055507ffb8e4f1ace1b37ebd0423cd75b120660780cc08a9414e04fe6b50f96a9482dde876040518082815260200191505060405180910390a150505050505050565b816001805490508110151561342f57600080fd5b828260026000838152602001908152602001600020805490508110151561345557600080fd5b8460018181548110151561346557fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806135b457506001818154811015156134da57fe5b906000526020600020906006020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156135b35750600073ffffffffffffffffffffffffffffffffffffffff1660018281548110151561356857fe5b906000526020600020906006020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b5b15156135bf57600080fd5b8560018060028111156135ce57fe5b6001838154811015156135dd57fe5b906000526020600020906006020160040160159054906101000a900460ff16600281111561360757fe5b14151561361357600080fd5b878760001515600260008481526020019081526020016000208281548110151561363957fe5b906000526020600020906002020160000160009054906101000a900460ff16151514151561366657600080fd5b8960018181548110151561367657fe5b90600052602060002090600602016003015460018281548110151561369757fe5b906000526020600020906006020160050154101515156136b657600080fd5b6001600260008d81526020019081526020016000208b8154811015156136d857fe5b906000526020600020906002020160000160006101000a81548160ff021916908315150217905550600360008c81526020019081526020016000206000815480929190600101919050555060018b81548110151561373257fe5b90600052602060002090600602016003015460018c81548110151561375357fe5b90600052602060002090600602016005016000828254039250508190555060018b81548110151561378057fe5b906000526020600020906006020160040160149054906101000a900460ff161561391e57600460008c815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260008e81526020019081526020016000208c81548110151561381357fe5b906000526020600020906002020160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660018e81548110151561385457fe5b9060005260206000209060060201600301546000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156138f357600080fd5b6102c65a03f1151561390457600080fd5b50505060405180519050151561391957600080fd5b6139d0565b600260008c81526020019081526020016000208a81548110151561393e57fe5b906000526020600020906002020160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60018d81548110151561399857fe5b9060005260206000209060060201600301549081150290604051600060405180830381858888f1935050505015156139cf57600080fd5b5b893373ffffffffffffffffffffffffffffffffffffffff167f7b9dbf959e54bb2ff6e9d505ef00d6b7fb3ce97880816181aecca973c1da31e68d6040518082815260200191505060405180910390a35050505050505050505050565b600181815481101515613a3b57fe5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060050154905088565b6000806000806000808660018054905081101515613af957600080fd5b600188815481101515613b0857fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600189815481101515613b4957fe5b90600052602060002090600602016001015460018a815481101515613b6a57fe5b90600052602060002090600602016003015460018b815481101515613b8b57fe5b906000526020600020906006020160040160149054906101000a900460ff1660018c815481101515613bb957fe5b906000526020600020906006020160040160159054906101000a900460ff166002811115613be357fe5b60018d815481101515613bf257fe5b9060005260206000209060060201600501549650965096509650965096505091939550919395565b8160018054905081101515613c2e57600080fd5b82600181815481101515613c3e57fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613ca957600080fd5b836000806002811115613cb857fe5b600183815481101515613cc757fe5b906000526020600020906006020160040160159054906101000a900460ff166002811115613cf157fe5b141515613cfd57600080fd5b84600187815481101515613d0d57fe5b90600052602060002090600602016002019080519060200190613d31929190613e9d565b507ffb8e4f1ace1b37ebd0423cd75b120660780cc08a9414e04fe6b50f96a9482dde866040518082815260200191505060405180910390a1505050505050565b60008160018054905081101515613d8757600080fd5b6002600084815260200190815260200160002080549050915050919050565b80600183815481101515613db657fe5b906000526020600020906006020160040160156101000a81548160ff02191690836002811115613de257fe5b02179055505050565b815481835581811511613e1857600202816002028360005260206000209182019101613e179190613f63565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e5e57805160ff1916838001178555613e8c565b82800160010185558215613e8c579182015b82811115613e8b578251825591602001919060010190613e70565b5b509050613e999190613fcd565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613ede57805160ff1916838001178555613f0c565b82800160010185558215613f0c579182015b82811115613f0b578251825591602001919060010190613ef0565b5b509050613f199190613fcd565b5090565b815481835581811511613f4a57600602816006028360005260206000209182019101613f499190613ff2565b5b505050565b602060405190810160405280600081525090565b613fca91905b80821115613fc657600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000613fbd91906140af565b50600201613f69565b5090565b90565b613fef91905b80821115613feb576000816000905550600101613fd3565b5090565b90565b6140ac91905b808211156140a857600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600061404091906140af565b60038201600090556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160146101000a81549060ff02191690556004820160156101000a81549060ff0219169055600582016000905550600601613ff8565b5090565b90565b50805460018160011615610100020316600290046000825580601f106140d557506140f4565b601f0160209004906000526020600020908101906140f39190613fcd565b5b505600a165627a7a72305820643b981454e899b5c3190025943c5ebce4a2e6f0bbb93906ab472f7a5bd416920029000000000000000000000000bfdb50dc66c8df9fd9688d8fe5a0c34126427645

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000bfdb50dc66c8df9fd9688d8fe5a0c34126427645

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bfdb50dc66c8df9fd9688d8fe5a0c34126427645

Swarm Source

bzzr://643b981454e899b5c3190025943c5ebce4a2e6f0bbb93906ab472f7a5bd41692
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.