Sponsored Link:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 53 txns
 Latest 25 txns from a total Of 53 transactions

TxHash Age From To Value [TxFee]
0x168864ea0fd6209a937a810782789b8d3ecc5c9e51908ea1ae622bcc460046c8347 days 18 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0010159
0x93c2fddc0541ad53133a160f4ca029788d3e88832d4803e7da5a62956d16249e347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.001218608
0xf14261a9ae526c8d37d509f66b61dd56dcdcbee4ca309980425a10f1258ea308347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.000370882
0x5ccef5183907e5a293e68c28494959980f94125c4d9877cba5585b001cd3bf37347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0001318
0x2bd3fddd806aa5a240c29cf98ad54b46f999dd10ab58257ee94b21003dd5a818347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00029002
0xed62d2a9709a81a092c219d1e808ae583c430e340ebc5d8c067d8c3190dcd42c347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0002636
0x949e7706e785f8db1312a14121848835277c29cea17d25ceec74d9b04c728d26347 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00177081
0xb6d8ea0a425b336e018db7dd8d4a3ed6602a2eedb0dff27baaa457659379d598347 days 20 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.002016014
0x9fa6cd47807f7c0950bf4ecef208575fe0603c4ea47aab022ff43297dcc919e9374 days 20 hrs ago0x3018002451d9ceef55e53783f76363b4a4f00fb1  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00407213268
0xeb01c08121be69e6e572613237ea72c4ee984061a7eeb49e5d400eeff9dd45fc419 days 18 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0001524
0x57d2a49122aa009fd480c94e301ceb132c8310c9d542ae6e882f75f029a835e7419 days 18 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0001324
0xb309da9b4b9d2574a48f1cf11554c454d763c52120f2e6add7fddceb5da06845422 days 5 mins ago0x26104cd17cc77e510ef20adf11ecb682ca7760f0  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00138080693
0x3f80a0bf4f08a2bec3ead2ab541fc1cfae35ea04a3438e45d42b838e41cad4b1428 days 9 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.001116216
0x1e79bb6f8638f3e958aaa6be81fbb9745075935641b2602140e3085f39091e05436 days 19 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0009095
0x8328d76d5dfc82b0dc00a7d8f1122b95e3396d1330977d55c3a1ad8b07b1c9fd450 days 20 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00370882
0xc5cea25ed31d736deb70be10b303c8633a0520ec2ac7554ae73033133bcc0604452 days 15 hrs ago0x26104cd17cc77e510ef20adf11ecb682ca7760f0  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.001318
0xdcb01407f33e85b0612f7031a957f2cfdd6e84a25cfb19d0b9724ce9e453b31d452 days 18 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.001318
0x65a5e6091e847f994a9e9f53c03dc7540841903090e6c3aba593e34f27dafcbd452 days 18 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0354103
0x7a9467ac2066e772d88d4beea8c3b0c5d43327d0dc30702b7d55f4ce526411bc452 days 20 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.039005431406
0x57ae48126b54dec22fe031438ac81ad7631133e7f3b0e8509c8e79af5478e805452 days 20 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00352402
0x6907071a8cad0728c6193f2d073d1e3586cb38e926a6bccb9bf8fbf3705a2e34452 days 20 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00370882
0x9fa9871e18e829e261c9dad7ecd8c1ca736e1a1f339a51a4b44587d05fd4ea12452 days 20 hrs ago0x26104cd17cc77e510ef20adf11ecb682ca7760f0  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.001318
0xc3d1c01add518b9d02dec7f3ebc39c04c02e8863d0342cfeaa63a09b740abb9f458 days 15 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.007918135015
0xe0d619a6d88a099731670f3fdcb08d3eb94fe6c5b6fb4a674f4bf26a5daff591459 days 8 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.00773054
0xc65620c4bc43a1a1d000624947742ebd91e991d7ec437091880bb655cba1e85b509 days 4 hrs ago0x839395e20bbb182fa440d08f850e6c7a8f6f0780  IN   0x0f593dcce096c5c39bd509123150707644ad48de0 Ether0.0029002
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity), DelegateCallReturnValue (low-severity), ECRecoverMalformedInput (medium-severity), SkipEmptyStringLiteral (low-severity), ConstantOptimizerSubtraction (low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: MilestoneTracker
Compiler Version: v0.4.7+commit.822622cf
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.6;

/**
* @title RLPReader
*
* RLPReader is used to read and parse RLP encoded data in memory.
*
* @author Andreas Olofsson (androlo1980@gmail.com)
*/
library RLP {

 uint constant DATA_SHORT_START = 0x80;
 uint constant DATA_LONG_START = 0xB8;
 uint constant LIST_SHORT_START = 0xC0;
 uint constant LIST_LONG_START = 0xF8;

 uint constant DATA_LONG_OFFSET = 0xB7;
 uint constant LIST_LONG_OFFSET = 0xF7;


 struct RLPItem {
     uint _unsafe_memPtr;    // Pointer to the RLP-encoded bytes.
     uint _unsafe_length;    // Number of bytes. This is the full length of the string.
 }

 struct Iterator {
     RLPItem _unsafe_item;   // Item that's being iterated over.
     uint _unsafe_nextPtr;   // Position of the next item in the list.
 }

 /* Iterator */

 function next(Iterator memory self) internal constant returns (RLPItem memory subItem) {
     if(hasNext(self)) {
         var ptr = self._unsafe_nextPtr;
         var itemLength = _itemLength(ptr);
         subItem._unsafe_memPtr = ptr;
         subItem._unsafe_length = itemLength;
         self._unsafe_nextPtr = ptr + itemLength;
     }
     else
         throw;
 }

 function next(Iterator memory self, bool strict) internal constant returns (RLPItem memory subItem) {
     subItem = next(self);
     if(strict && !_validate(subItem))
         throw;
     return;
 }

 function hasNext(Iterator memory self) internal constant returns (bool) {
     var item = self._unsafe_item;
     return self._unsafe_nextPtr < item._unsafe_memPtr + item._unsafe_length;
 }

 /* RLPItem */

 /// @dev Creates an RLPItem from an array of RLP encoded bytes.
 /// @param self The RLP encoded bytes.
 /// @return An RLPItem
 function toRLPItem(bytes memory self) internal constant returns (RLPItem memory) {
     uint len = self.length;
     if (len == 0) {
         return RLPItem(0, 0);
     }
     uint memPtr;
     assembly {
         memPtr := add(self, 0x20)
     }
     return RLPItem(memPtr, len);
 }

 /// @dev Creates an RLPItem from an array of RLP encoded bytes.
 /// @param self The RLP encoded bytes.
 /// @param strict Will throw if the data is not RLP encoded.
 /// @return An RLPItem
 function toRLPItem(bytes memory self, bool strict) internal constant returns (RLPItem memory) {
     var item = toRLPItem(self);
     if(strict) {
         uint len = self.length;
         if(_payloadOffset(item) > len)
             throw;
         if(_itemLength(item._unsafe_memPtr) != len)
             throw;
         if(!_validate(item))
             throw;
     }
     return item;
 }

 /// @dev Check if the RLP item is null.
 /// @param self The RLP item.
 /// @return 'true' if the item is null.
 function isNull(RLPItem memory self) internal constant returns (bool ret) {
     return self._unsafe_length == 0;
 }

 /// @dev Check if the RLP item is a list.
 /// @param self The RLP item.
 /// @return 'true' if the item is a list.
 function isList(RLPItem memory self) internal constant returns (bool ret) {
     if (self._unsafe_length == 0)
         return false;
     uint memPtr = self._unsafe_memPtr;
     assembly {
         ret := iszero(lt(byte(0, mload(memPtr)), 0xC0))
     }
 }

 /// @dev Check if the RLP item is data.
 /// @param self The RLP item.
 /// @return 'true' if the item is data.
 function isData(RLPItem memory self) internal constant returns (bool ret) {
     if (self._unsafe_length == 0)
         return false;
     uint memPtr = self._unsafe_memPtr;
     assembly {
         ret := lt(byte(0, mload(memPtr)), 0xC0)
     }
 }

 /// @dev Check if the RLP item is empty (string or list).
 /// @param self The RLP item.
 /// @return 'true' if the item is null.
 function isEmpty(RLPItem memory self) internal constant returns (bool ret) {
     if(isNull(self))
         return false;
     uint b0;
     uint memPtr = self._unsafe_memPtr;
     assembly {
         b0 := byte(0, mload(memPtr))
     }
     return (b0 == DATA_SHORT_START || b0 == LIST_SHORT_START);
 }

 /// @dev Get the number of items in an RLP encoded list.
 /// @param self The RLP item.
 /// @return The number of items.
 function items(RLPItem memory self) internal constant returns (uint) {
     if (!isList(self))
         return 0;
     uint b0;
     uint memPtr = self._unsafe_memPtr;
     assembly {
         b0 := byte(0, mload(memPtr))
     }
     uint pos = memPtr + _payloadOffset(self);
     uint last = memPtr + self._unsafe_length - 1;
     uint itms;
     while(pos <= last) {
         pos += _itemLength(pos);
         itms++;
     }
     return itms;
 }

 /// @dev Create an iterator.
 /// @param self The RLP item.
 /// @return An 'Iterator' over the item.
 function iterator(RLPItem memory self) internal constant returns (Iterator memory it) {
     if (!isList(self))
         throw;
     uint ptr = self._unsafe_memPtr + _payloadOffset(self);
     it._unsafe_item = self;
     it._unsafe_nextPtr = ptr;
 }

 /// @dev Return the RLP encoded bytes.
 /// @param self The RLPItem.
 /// @return The bytes.
 function toBytes(RLPItem memory self) internal constant returns (bytes memory bts) {
     var len = self._unsafe_length;
     if (len == 0)
         return;
     bts = new bytes(len);
     _copyToBytes(self._unsafe_memPtr, bts, len);
 }

 /// @dev Decode an RLPItem into bytes. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toData(RLPItem memory self) internal constant returns (bytes memory bts) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     bts = new bytes(len);
     _copyToBytes(rStartPos, bts, len);
 }

 /// @dev Get the list of sub-items from an RLP encoded list.
 /// Warning: This is inefficient, as it requires that the list is read twice.
 /// @param self The RLP item.
 /// @return Array of RLPItems.
 function toList(RLPItem memory self) internal constant returns (RLPItem[] memory list) {
     if(!isList(self))
         throw;
     var numItems = items(self);
     list = new RLPItem[](numItems);
     var it = iterator(self);
     uint idx;
     while(hasNext(it)) {
         list[idx] = next(it);
         idx++;
     }
 }

 /// @dev Decode an RLPItem into an ascii string. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toAscii(RLPItem memory self) internal constant returns (string memory str) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     bytes memory bts = new bytes(len);
     _copyToBytes(rStartPos, bts, len);
     str = string(bts);
 }

 /// @dev Decode an RLPItem into a uint. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toUint(RLPItem memory self) internal constant returns (uint data) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     if (len > 32 || len == 0)
         throw;
     assembly {
         data := div(mload(rStartPos), exp(256, sub(32, len)))
     }
 }

 /// @dev Decode an RLPItem into a boolean. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toBool(RLPItem memory self) internal constant returns (bool data) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     if (len != 1)
         throw;
     uint temp;
     assembly {
         temp := byte(0, mload(rStartPos))
     }
     if (temp > 1)
         throw;
     return temp == 1 ? true : false;
 }

 /// @dev Decode an RLPItem into a byte. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toByte(RLPItem memory self) internal constant returns (byte data) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     if (len != 1)
         throw;
     uint temp;
     assembly {
         temp := byte(0, mload(rStartPos))
     }
     return byte(temp);
 }

 /// @dev Decode an RLPItem into an int. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toInt(RLPItem memory self) internal constant returns (int data) {
     return int(toUint(self));
 }

 /// @dev Decode an RLPItem into a bytes32. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toBytes32(RLPItem memory self) internal constant returns (bytes32 data) {
     return bytes32(toUint(self));
 }

 /// @dev Decode an RLPItem into an address. This will not work if the
 /// RLPItem is a list.
 /// @param self The RLPItem.
 /// @return The decoded string.
 function toAddress(RLPItem memory self) internal constant returns (address data) {
     if(!isData(self))
         throw;
     var (rStartPos, len) = _decode(self);
     if (len != 20)
         throw;
     assembly {
         data := div(mload(rStartPos), exp(256, 12))
     }
 }

 // Get the payload offset.
 function _payloadOffset(RLPItem memory self) private constant returns (uint) {
     if(self._unsafe_length == 0)
         return 0;
     uint b0;
     uint memPtr = self._unsafe_memPtr;
     assembly {
         b0 := byte(0, mload(memPtr))
     }
     if(b0 < DATA_SHORT_START)
         return 0;
     if(b0 < DATA_LONG_START || (b0 >= LIST_SHORT_START && b0 < LIST_LONG_START))
         return 1;
     if(b0 < LIST_SHORT_START)
         return b0 - DATA_LONG_OFFSET + 1;
     return b0 - LIST_LONG_OFFSET + 1;
 }

 // Get the full length of an RLP item.
 function _itemLength(uint memPtr) private constant returns (uint len) {
     uint b0;
     assembly {
         b0 := byte(0, mload(memPtr))
     }
     if (b0 < DATA_SHORT_START)
         len = 1;
     else if (b0 < DATA_LONG_START)
         len = b0 - DATA_SHORT_START + 1;
     else if (b0 < LIST_SHORT_START) {
         assembly {
             let bLen := sub(b0, 0xB7) // bytes length (DATA_LONG_OFFSET)
             let dLen := div(mload(add(memPtr, 1)), exp(256, sub(32, bLen))) // data length
             len := add(1, add(bLen, dLen)) // total length
         }
     }
     else if (b0 < LIST_LONG_START)
         len = b0 - LIST_SHORT_START + 1;
     else {
         assembly {
             let bLen := sub(b0, 0xF7) // bytes length (LIST_LONG_OFFSET)
             let dLen := div(mload(add(memPtr, 1)), exp(256, sub(32, bLen))) // data length
             len := add(1, add(bLen, dLen)) // total length
         }
     }
 }

 // Get start position and length of the data.
 function _decode(RLPItem memory self) private constant returns (uint memPtr, uint len) {
     if(!isData(self))
         throw;
     uint b0;
     uint start = self._unsafe_memPtr;
     assembly {
         b0 := byte(0, mload(start))
     }
     if (b0 < DATA_SHORT_START) {
         memPtr = start;
         len = 1;
         return;
     }
     if (b0 < DATA_LONG_START) {
         len = self._unsafe_length - 1;
         memPtr = start + 1;
     } else {
         uint bLen;
         assembly {
             bLen := sub(b0, 0xB7) // DATA_LONG_OFFSET
         }
         len = self._unsafe_length - 1 - bLen;
         memPtr = start + bLen + 1;
     }
     return;
 }

 // Assumes that enough memory has been allocated to store in target.
 function _copyToBytes(uint btsPtr, bytes memory tgt, uint btsLen) private constant {
     // Exploiting the fact that 'tgt' was the last thing to be allocated,
     // we can write entire words, and just overwrite any excess.
     assembly {
         {
                 let i := 0 // Start at arr + 0x20
                 let words := div(add(btsLen, 31), 32)
                 let rOffset := btsPtr
                 let wOffset := add(tgt, 0x20)
             tag_loop:
                 jumpi(end, eq(i, words))
                 {
                     let offset := mul(i, 0x20)
                     mstore(add(wOffset, offset), mload(add(rOffset, offset)))
                     i := add(i, 1)
                 }
                 jump(tag_loop)
             end:
                 mstore(add(tgt, add(0x20, mload(tgt))), 0)
         }
     }
 }

 // Check that an RLP item is valid.
     function _validate(RLPItem memory self) private constant returns (bool ret) {
         // Check that RLP is well-formed.
         uint b0;
         uint b1;
         uint memPtr = self._unsafe_memPtr;
         assembly {
             b0 := byte(0, mload(memPtr))
             b1 := byte(1, mload(memPtr))
         }
         if(b0 == DATA_SHORT_START + 1 && b1 < DATA_SHORT_START)
             return false;
         return true;
     }
}

pragma solidity ^0.4.6;

/*
    Copyright 2016, Jordi Baylina

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/// @title MilestoneTracker Contract
/// @author Jordi Baylina
/// @dev This contract tracks the


/// is rules the relation betwen a donor and a recipient
///  in order to guaranty to the donor that the job will be done and to guaranty
///  to the recipient that he will be paid


/// @dev We use the RLP library to decode RLP so that the donor can approve one
///  set of milestone changes at a time.
///  https://github.com/androlo/standard-contracts/blob/master/contracts/src/codec/RLP.sol




/// @dev This contract allows for `recipient` to set and modify milestones
contract MilestoneTracker {
    using RLP for RLP.RLPItem;
    using RLP for RLP.Iterator;
    using RLP for bytes;

    struct Milestone {
        string description;     // Description of this milestone
        string url;             // A link to more information (swarm gateway)
        uint minCompletionDate; // Earliest UNIX time the milestone can be paid
        uint maxCompletionDate; // Latest UNIX time the milestone can be paid
        address milestoneLeadLink;
                                // Similar to `recipient`but for this milestone
        address reviewer;       // Can reject the completion of this milestone
        uint reviewTime;        // How many seconds the reviewer has to review
        address paymentSource;  // Where the milestone payment is sent from
        bytes payData;          // Data defining how much ether is sent where

        MilestoneStatus status; // Current status of the milestone
                                // (Completed, AuthorizedForPayment...)
        uint doneTime;          // UNIX time when the milestone was marked DONE
    }

    // The list of all the milestones.
    Milestone[] public milestones;

    address public recipient;   // Calls functions in the name of the recipient
    address public donor;       // Calls functions in the name of the donor
    address public arbitrator;  // Calls functions in the name of the arbitrator

    enum MilestoneStatus {
        AcceptedAndInProgress,
        Completed,
        AuthorizedForPayment,
        Canceled
    }

    // True if the campaign has been canceled
    bool public campaignCanceled;

    // True if an approval on a change to `milestones` is a pending
    bool public changingMilestones;

    // The pending change to `milestones` encoded in RLP
    bytes public proposedMilestones;


    /// @dev The following modifiers only allow specific roles to call functions
    /// with these modifiers
    modifier onlyRecipient { if (msg.sender !=  recipient) throw; _; }
    modifier onlyArbitrator { if (msg.sender != arbitrator) throw; _; }
    modifier onlyDonor { if (msg.sender != donor) throw; _; }

    /// @dev The following modifiers prevent functions from being called if the
    /// campaign has been canceled or if new milestones are being proposed
    modifier campaignNotCanceled { if (campaignCanceled) throw; _; }
    modifier notChanging { if (changingMilestones) throw; _; }

 // @dev Events to make the payment movements easy to find on the blockchain
    event NewMilestoneListProposed();
    event NewMilestoneListUnproposed();
    event NewMilestoneListAccepted();
    event ProposalStatusChanged(uint idProposal, MilestoneStatus newProposal);
    event CampaignCanceled();


///////////
// Constructor
///////////

    /// @notice The Constructor creates the Milestone contract on the blockchain
    /// @param _arbitrator Address assigned to be the arbitrator
    /// @param _donor Address assigned to be the donor
    /// @param _recipient Address assigned to be the recipient
    function MilestoneTracker (
        address _arbitrator,
        address _donor,
        address _recipient
    ) {
        arbitrator = _arbitrator;
        donor = _donor;
        recipient = _recipient;
    }


/////////
// Helper functions
/////////

    /// @return The number of milestones ever created even if they were canceled
    function numberOfMilestones() constant returns (uint) {
        return milestones.length;
    }


////////
// Change players
////////

    /// @notice `onlyArbitrator` Reassigns the arbitrator to a new address
    /// @param _newArbitrator The new arbitrator
    function changeArbitrator(address _newArbitrator) onlyArbitrator {
        arbitrator = _newArbitrator;
    }

    /// @notice `onlyDonor` Reassigns the `donor` to a new address
    /// @param _newDonor The new donor
    function changeDonor(address _newDonor) onlyDonor {
        donor = _newDonor;
    }

    /// @notice `onlyRecipient` Reassigns the `recipient` to a new address
    /// @param _newRecipient The new recipient
    function changeRecipient(address _newRecipient) onlyRecipient {
        recipient = _newRecipient;
    }


////////////
// Creation and modification of Milestones
////////////

    /// @notice `onlyRecipient` Proposes new milestones or changes old
    ///  milestones, this will require a user interface to be built up to
    ///  support this functionality as asks for RLP encoded bytecode to be
    ///  generated, until this interface is built you can use this script:
    ///  https://github.com/Giveth/milestonetracker/blob/master/js/milestonetracker_helper.js
    ///  the functions milestones2bytes and bytes2milestones will enable the
    ///  recipient to encode and decode a list of milestones, also see
    ///  https://github.com/Giveth/milestonetracker/blob/master/README.md
    /// @param _newMilestones The RLP encoded list of milestones; each milestone
    ///  has these fields:
    ///       string description,
    ///       string url,
    ///       uint minCompletionDate,  // seconds since 1/1/1970 (UNIX time)
    ///       uint maxCompletionDate,  // seconds since 1/1/1970 (UNIX time)
    ///       address milestoneLeadLink,
    ///       address reviewer,
    ///       uint reviewTime
    ///       address paymentSource,
    ///       bytes payData,
    function proposeMilestones(bytes _newMilestones
    ) onlyRecipient campaignNotCanceled {
        proposedMilestones = _newMilestones;
        changingMilestones = true;
        NewMilestoneListProposed();
    }


////////////
// Normal actions that will change the state of the milestones
////////////

    /// @notice `onlyRecipient` Cancels the proposed milestones and reactivates
    ///  the previous set of milestones
    function unproposeMilestones() onlyRecipient campaignNotCanceled {
        delete proposedMilestones;
        changingMilestones = false;
        NewMilestoneListUnproposed();
    }

    /// @notice `onlyDonor` Approves the proposed milestone list
    /// @param _hashProposals The sha3() of the proposed milestone list's
    ///  bytecode; this confirms that the `donor` knows the set of milestones
    ///  they are approving
    function acceptProposedMilestones(bytes32 _hashProposals
    ) onlyDonor campaignNotCanceled {

        uint i;

        if (!changingMilestones) throw;
        if (sha3(proposedMilestones) != _hashProposals) throw;

        // Cancel all the unfinished milestones
        for (i=0; i<milestones.length; i++) {
            if (milestones[i].status != MilestoneStatus.AuthorizedForPayment) {
                milestones[i].status = MilestoneStatus.Canceled;
            }
        }
        // Decode the RLP encoded milestones and add them to the milestones list
        bytes memory mProposedMilestones = proposedMilestones;

        var itmProposals = mProposedMilestones.toRLPItem(true);

        if (!itmProposals.isList()) throw;

        var itrProposals = itmProposals.iterator();

        while(itrProposals.hasNext()) {


            var itmProposal = itrProposals.next();

            Milestone milestone = milestones[milestones.length ++];

            if (!itmProposal.isList()) throw;

            var itrProposal = itmProposal.iterator();

            milestone.description = itrProposal.next().toAscii();
            milestone.url = itrProposal.next().toAscii();
            milestone.minCompletionDate = itrProposal.next().toUint();
            milestone.maxCompletionDate = itrProposal.next().toUint();
            milestone.milestoneLeadLink = itrProposal.next().toAddress();
            milestone.reviewer = itrProposal.next().toAddress();
            milestone.reviewTime = itrProposal.next().toUint();
            milestone.paymentSource = itrProposal.next().toAddress();
            milestone.payData = itrProposal.next().toData();

            milestone.status = MilestoneStatus.AcceptedAndInProgress;

        }

        delete proposedMilestones;
        changingMilestones = false;
        NewMilestoneListAccepted();
    }

    /// @notice `onlyRecipientOrLeadLink`Marks a milestone as DONE and
    ///  ready for review
    /// @param _idMilestone ID of the milestone that has been completed
    function markMilestoneComplete(uint _idMilestone)
        campaignNotCanceled notChanging
    {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if (  (msg.sender != milestone.milestoneLeadLink)
            &&(msg.sender != recipient))
            throw;
        if (milestone.status != MilestoneStatus.AcceptedAndInProgress) throw;
        if (now < milestone.minCompletionDate) throw;
        if (now > milestone.maxCompletionDate) throw;
        milestone.status = MilestoneStatus.Completed;
        milestone.doneTime = now;
        ProposalStatusChanged(_idMilestone, milestone.status);
    }

    /// @notice `onlyReviewer` Approves a specific milestone
    /// @param _idMilestone ID of the milestone that is approved
    function approveCompletedMilestone(uint _idMilestone)
        campaignNotCanceled notChanging
    {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if ((msg.sender != milestone.reviewer) ||
            (milestone.status != MilestoneStatus.Completed)) throw;

        authorizePayment(_idMilestone);
    }

    /// @notice `onlyReviewer` Rejects a specific milestone's completion and
    ///  reverts the `milestone.status` back to the `AcceptedAndInProgress`
    ///  state
    /// @param _idMilestone ID of the milestone that is being rejected
    function rejectMilestone(uint _idMilestone)
        campaignNotCanceled notChanging
    {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if ((msg.sender != milestone.reviewer) ||
            (milestone.status != MilestoneStatus.Completed)) throw;

        milestone.status = MilestoneStatus.AcceptedAndInProgress;
        ProposalStatusChanged(_idMilestone, milestone.status);
    }

    /// @notice `onlyRecipientOrLeadLink` Sends the milestone payment as
    ///  specified in `payData`; the recipient can only call this after the
    ///  `reviewTime` has elapsed
    /// @param _idMilestone ID of the milestone to be paid out
    function requestMilestonePayment(uint _idMilestone
        ) campaignNotCanceled notChanging {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if (  (msg.sender != milestone.milestoneLeadLink)
            &&(msg.sender != recipient))
            throw;
        if  ((milestone.status != MilestoneStatus.Completed) ||
             (now < milestone.doneTime + milestone.reviewTime))
            throw;

        authorizePayment(_idMilestone);
    }

    /// @notice `onlyRecipient` Cancels a previously accepted milestone
    /// @param _idMilestone ID of the milestone to be canceled
    function cancelMilestone(uint _idMilestone)
        onlyRecipient campaignNotCanceled notChanging
    {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if  ((milestone.status != MilestoneStatus.AcceptedAndInProgress) &&
             (milestone.status != MilestoneStatus.Completed))
            throw;

        milestone.status = MilestoneStatus.Canceled;
        ProposalStatusChanged(_idMilestone, milestone.status);
    }

    /// @notice `onlyArbitrator` Forces a milestone to be paid out as long as it
    /// has not been paid or canceled
    /// @param _idMilestone ID of the milestone to be paid out
    function arbitrateApproveMilestone(uint _idMilestone
    ) onlyArbitrator campaignNotCanceled notChanging {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        if  ((milestone.status != MilestoneStatus.AcceptedAndInProgress) &&
             (milestone.status != MilestoneStatus.Completed))
           throw;
        authorizePayment(_idMilestone);
    }

    /// @notice `onlyArbitrator` Cancels the entire campaign voiding all
    ///  milestones vo
    function arbitrateCancelCampaign() onlyArbitrator campaignNotCanceled {
        campaignCanceled = true;
        CampaignCanceled();
    }

    // @dev This internal function is executed when the milestone is paid out
    function authorizePayment(uint _idMilestone) internal {
        if (_idMilestone >= milestones.length) throw;
        Milestone milestone = milestones[_idMilestone];
        // Recheck again to not pay twice
        if (milestone.status == MilestoneStatus.AuthorizedForPayment) throw;
        milestone.status = MilestoneStatus.AuthorizedForPayment;
        if (!milestone.paymentSource.call.value(0)(milestone.payData))
            throw;
        ProposalStatusChanged(_idMilestone, milestone.status);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"proposedMilestones","outputs":[{"name":"","type":"bytes"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"changingMilestones","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"campaignCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unproposeMilestones","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"donor","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hashProposals","type":"bytes32"}],"name":"acceptProposedMilestones","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"approveCompletedMilestone","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"recipient","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newMilestones","type":"bytes"}],"name":"proposeMilestones","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"arbitrator","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"arbitrateCancelCampaign","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRecipient","type":"address"}],"name":"changeRecipient","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"requestMilestonePayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfMilestones","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"rejectMilestone","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newDonor","type":"address"}],"name":"changeDonor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"milestones","outputs":[{"name":"description","type":"string"},{"name":"url","type":"string"},{"name":"minCompletionDate","type":"uint256"},{"name":"maxCompletionDate","type":"uint256"},{"name":"milestoneLeadLink","type":"address"},{"name":"reviewer","type":"address"},{"name":"reviewTime","type":"uint256"},{"name":"paymentSource","type":"address"},{"name":"payData","type":"bytes"},{"name":"status","type":"uint8"},{"name":"doneTime","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"markMilestoneComplete","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"arbitrateApproveMilestone","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idMilestone","type":"uint256"}],"name":"cancelMilestone","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newArbitrator","type":"address"}],"name":"changeArbitrator","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_arbitrator","type":"address"},{"name":"_donor","type":"address"},{"name":"_recipient","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[],"name":"NewMilestoneListProposed","type":"event"},{"anonymous":false,"inputs":[],"name":"NewMilestoneListUnproposed","type":"event"},{"anonymous":false,"inputs":[],"name":"NewMilestoneListAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"idProposal","type":"uint256"},{"indexed":false,"name":"newProposal","type":"uint8"}],"name":"ProposalStatusChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"CampaignCanceled","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040523461000057604051606080611f8a8339810160409081528151602083015191909201515b60038054600160a060020a03808616600160a060020a0319928316179092556002805485841690831617905560018054928416929091169190911790555b5050505b611f11806100796000396000f300606060405236156101015763ffffffff60e060020a60003504166303096e92811461010657806303c327f01461019357806312f05418146101b457806321c17ab8146101d557806325223bd4146101e45780634c2fc8b21461020d578063658df3f71461021f57806366d003ac1461023157806367b327fa1461025a5780636cc6cde1146102af5780638b99b742146102d857806392c2bcb4146102e7578063bdf6fb5614610302578063c81196da14610314578063caaed30214610333578063de2b2cd214610345578063e89e4ed614610360578063ee9a543214610551578063f4387d8614610563578063f75fdcaa14610575578063fc548f0814610587575b610000565b34610000576101136105a2565b604080516020808252835181830152835191928392908301918501908083838215610159575b80518252602083111561015957601f199092019160209182019101610139565b505050905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576101a0610630565b604080519115158252519081900360200190f35b34610000576101a0610640565b604080519115158252519081900360200190f35b34610000576101e2610650565b005b34610000576101f161071b565b60408051600160a060020a039092168252519081900360200190f35b34610000576101e260043561072a565b005b34610000576101e2600435610f5c565b005b34610000576101f1611006565b60408051600160a060020a039092168252519081900360200190f35b34610000576101e2600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061101595505050505050565b005b34610000576101f1611128565b60408051600160a060020a039092168252519081900360200190f35b34610000576101e2611137565b005b34610000576101e2600160a060020a03600435166111bb565b005b34610000576101e26004356111f6565b005b34610000576103216112d2565b60408051918252519081900360200190f35b34610000576101e26004356112d9565b005b34610000576101e2600160a060020a03600435166113af565b005b34610000576103706004356113ea565b604080519081018a905260608101899052600160a060020a03808916608083015287811660a083015260c08201879052851660e082015280602081016101008201610120830186600381116100005760ff16815260200185815260200184810384528f81815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561044e5780601f106104235761010080835404028352916020019161044e565b820191906000526020600020905b81548152906001019060200180831161043157829003601f168201915b505084810383528e54600260001961010060018416150201909116048082526020909101908f9080156104c25780601f10610497576101008083540402835291602001916104c2565b820191906000526020600020905b8154815290600101906020018083116104a557829003601f168201915b50508481038252875460026000196101006001841615020190911604808252602090910190889080156105365780601f1061050b57610100808354040283529160200191610536565b820191906000526020600020905b81548152906001019060200180831161051957829003601f168201915b50509e50505050505050505050505050505060405180910390f35b34610000576101e2600435611458565b005b34610000576101e260043561158d565b005b34610000576101e2600435611652565b005b34610000576101e2600160a060020a0360043516611761565b005b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106285780601f106105fd57610100808354040283529160200191610628565b820191906000526020600020905b81548152906001019060200180831161060b57829003601f168201915b505050505081565b60035460a860020a900460ff1681565b60035460a060020a900460ff1681565b60015433600160a060020a0390811691161461066b57610000565b60035460a060020a900460ff161561068257610000565b6004805460018160011615610100020316600290046000825580601f106106a957506106db565b601f0160209004906000526020600020908101906106db91905b808211156106d757600081556001016106c3565b5090565b5b506003805460a860020a60ff02191690556040517fc516b468ac0b47d819796bd497b371dfbb0789c12b82b33f0b5c8f54cbd1c00690600090a15b5b5b565b600254600160a060020a031681565b6040805160208181018352600080835283518085018552818152808301829052845160a08082018752606082810185815260808085018790529084528387018690528851808a018a528681528088018790528951938401909952908201858152908201859052815293840183905260025492959193909286919033600160a060020a039081169116146107bc57610000565b60035460a060020a900460ff16156107d357610000565b60035460a860020a900460ff1615156107eb57610000565b87600019166004604051808280546001816001161561010002031660029004801561084d5780601f1061082b57610100808354040283529182019161084d565b820191906000526020600020905b815481529060010190602001808311610839575b505091505060405180910390206000191614151561086a57610000565b600096505b6000548710156108f357600260008881548110156100005790600052602060002090600b020160005b506009015460ff166003811161000057146108e757600360008881548110156100005790600052602060002090600b020160005b50600901805460ff1916600183600381116100005702179055505b5b60019096019561086f565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050955061099460018761179c90919063ffffffff16565b945061099f85611830565b15156109aa57610000565b6109b385611863565b93505b6109bf846118ba565b15610ebb576109cd846118e8565b9250600060008054809190600101815481835581811511610b8557600b0281600b028360005260206000209182019101610b8591905b808211156106d757600060008201805460018160011615610100020316600290046000825580601f10610a365750610a68565b601f016020900490600052602060002090810190610a6891905b808211156106d757600081556001016106c3565b5090565b5b5060018201805460018160011615610100020316600290046000825580601f10610a935750610ac5565b601f016020900490600052602060002090810190610ac591905b808211156106d757600081556001016106c3565b5090565b5b506000600283810182905560038401829055600484018054600160a060020a03199081169091556005850180548216905560068501839055600785018054909116905560088401805492815591600181161561010002600019011604601f819010610b315750610b63565b601f016020900490600052602060002090810190610b6391905b808211156106d757600081556001016106c3565b5090565b5b505060098101805460ff191690556000600a820155600b01610a03565b5090565b5b50505081548110156100005790600052602060002090600b020160005b509150610baf83611830565b1515610bba57610000565b610bc383611863565b9050610bd6610bd1826118e8565b611948565b826000019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c2357805160ff1916838001178555610c50565b82800160010185558215610c50579182015b82811115610c50578251825591602001919060010190610c35565b5b50610c719291505b808211156106d757600081556001016106c3565b5090565b5050610c84610bd1826118e8565b611948565b826001019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610cd157805160ff1916838001178555610cfe565b82800160010185558215610cfe579182015b82811115610cfe578251825591602001919060010190610ce3565b5b50610d1f9291505b808211156106d757600081556001016106c3565b5090565b5050610d32610d2d826118e8565b6119c8565b6002830155610d48610d2d826118e8565b6119c8565b6003830155610d5e610d59826118e8565b611a1b565b600483018054600160a060020a031916600160a060020a0392909216919091179055610d91610d59826118e8565b611a1b565b600583018054600160a060020a031916600160a060020a0392909216919091179055610dc4610d2d826118e8565b6119c8565b6006830155610dda610d59826118e8565b611a1b565b600783018054600160a060020a031916600160a060020a0392909216919091179055610e0d610e08826118e8565b611a6c565b826008019080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e5a57805160ff1916838001178555610e87565b82800160010185558215610e87579182015b82811115610e87578251825591602001919060010190610e6c565b5b50610ea89291505b808211156106d757600081556001016106c3565b5090565b505060098201805460ff191690556109b6565b6004805460018160011615610100020316600290046000825580601f10610ee25750610f14565b601f016020900490600052602060002090810190610f1491905b808211156106d757600081556001016106c3565b5090565b5b506003805460a860020a60ff02191690556040517fb53f61d857c853f3dc1a4f444d826c6b765f2f18e2dcc2f263d70c21067d712590600090a15b5b5b5050505050505050565b60035460009060a060020a900460ff1615610f7657610000565b60035460a860020a900460ff1615610f8d57610000565b6000548210610f9b57610000565b60008281548110156100005790600052602060002090600b020160005b50600581015490915033600160a060020a039081169116141580610fec57506001600982015460ff16600381116100005714155b15610ff657610000565b610fff82611ad3565b5b5b5b5050565b600154600160a060020a031681565b60015433600160a060020a0390811691161461103057610000565b60035460a060020a900460ff161561104757610000565b8060049080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061109357805160ff19168380011785556110c0565b828001600101855582156110c0579182015b828111156110c05782518255916020019190600101906110a5565b5b506110e19291505b808211156106d757600081556001016106c3565b5090565b50506003805460a860020a60ff02191660a860020a1790556040517fc9865c5759f076e15025fe1ed0663317b805464c6372928344d324b4ea77f9d490600090a15b5b5b50565b600354600160a060020a031681565b60035433600160a060020a0390811691161461115257610000565b60035460a060020a900460ff161561116957610000565b6003805474ff0000000000000000000000000000000000000000191660a060020a1790556040517fb83ebe09f40e9293bdea1d6567fae3175119d3d0ff13c4b4df15994837dd7f5190600090a15b5b5b565b60015433600160a060020a039081169116146111d657610000565b60018054600160a060020a031916600160a060020a0383161790555b5b50565b60035460009060a060020a900460ff161561121057610000565b60035460a860020a900460ff161561122757610000565b600054821061123557610000565b60008281548110156100005790600052602060002090600b020160005b50600481015490915033600160a060020a03908116911614801590611286575060015433600160a060020a03908116911614155b1561129057610000565b6001600982015460ff166003811161000057141580610fec5750806006015481600a01540142105b15610ff657610000565b610fff82611ad3565b5b5b5b5050565b6000545b90565b60035460009060a060020a900460ff16156112f357610000565b60035460a860020a900460ff161561130a57610000565b600054821061131857610000565b60008281548110156100005790600052602060002090600b020160005b50600581015490915033600160a060020a03908116911614158061136957506001600982015460ff16600381116100005714155b1561137357610000565b60098101805460ff1916905560408051838152600060208201528151600080516020611ec6833981519152929181900390910190a15b5b5b5050565b60025433600160a060020a039081169116146113ca57610000565b60028054600160a060020a031916600160a060020a0383161790555b5b50565b60008181548110156100005790600052602060002090600b020160005b506002810154600382015460048301546005840154600685015460078601546009870154600a8801549798506001890197600160a060020a0395861695948516949092169160088a019160ff16908b565b60035460009060a060020a900460ff161561147257610000565b60035460a860020a900460ff161561148957610000565b600054821061149757610000565b60008281548110156100005790600052602060002090600b020160005b50600481015490915033600160a060020a039081169116148015906114e8575060015433600160a060020a03908116911614155b156114f257610000565b6000600982015460ff1660038111610000571461150e57610000565b806002015442101561151f57610000565b806003015442111561153057610000565b60098101805460ff19166001179081905542600a830155604051838152600080516020611ec683398151915291849160ff909116906020810182600381116100005760ff1681526020019250505060405180910390a15b5b5b5050565b60035460009033600160a060020a039081169116146115ab57610000565b60035460a060020a900460ff16156115c257610000565b60035460a860020a900460ff16156115d957610000565b60005482106115e757610000565b60008281548110156100005790600052602060002090600b020160005b5090506000600982015460ff16600381116100005714158015610fec57506001600982015460ff16600381116100005714155b15610ff657610000565b610fff82611ad3565b5b5b5b5b5050565b60015460009033600160a060020a0390811691161461167057610000565b60035460a060020a900460ff161561168757610000565b60035460a860020a900460ff161561169e57610000565b60005482106116ac57610000565b60008281548110156100005790600052602060002090600b020160005b5090506000600982015460ff166003811161000057141580156116fc57506001600982015460ff16600381116100005714155b1561170657610000565b60098101805460ff1916600390811791829055604051848152600080516020611ec683398151915292859260ff90911691906020820190839081116100005760ff1681526020019250505060405180910390a15b5b5b5b5050565b60035433600160a060020a0390811691161461177c57610000565b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60406040519081016040528060008152602001600081525060406040519081016040528060008152602001600081525060006117d785611c1f565b9150831561182357508351806117ec83611c80565b11156117f757610000565b806118058360000151611d06565b1461180f57610000565b61181882611d98565b151561182357610000565b5b8192505b505092915050565b6000600082602001516000141561184a576000915061185d565b8260000151905060c0815160001a101591505b50919050565b6040805160a081019091526000606082018181526080830182905282526020820181905261189083611830565b151561189b57610000565b6118a483611c80565b8351848452016020830181905290505b50919050565b6040805180820190915260008082526020918201528151808201518151928401519201909110905b50919050565b6040604051908101604052806000815260200160008152506000600061190d846118ba565b15610101578360200151915061192282611d06565b8284526020808501829052838201908601529050611940565b610000565b5b5050919050565b602060405190810160405280600081525060006000602060405190810160405280600081525061197785611dd2565b151561198257610000565b61198b85611e04565b925092508160405180591061199d5750595b908082528060200260200182016040525b5090506119bc838284611e84565b8093505b505050919050565b6000600060006119d784611dd2565b15156119e257610000565b6119eb84611e04565b9150915060208111806119fc575080155b15611a0657610000565b806020036101000a82510492505b5050919050565b600060006000611a2a84611dd2565b1515611a3557610000565b611a3e84611e04565b909250905060148114611a5057610000565b81516c01000000000000000000000000900492505b5050919050565b6040805160208101909152600080825280611a8684611dd2565b1515611a9157610000565b611a9a84611e04565b9150915080604051805910611aac5750595b908082528060200260200182016040525b509250611940828483611e84565b5b5050919050565b600080548210611ae257610000565b60008281548110156100005790600052602060002090600b020160005b5090506002600982015460ff1660038111610000571415611b1f57610000565b60098101805460ff191660029081179091556007820154604051600884018054600160a060020a0390931693600093919291829184916101006001821615026000190116048015611bb15780601f10611b8657610100808354040283529160200191611bb1565b820191906000526020600020905b815481529060010190602001808311611b9457829003601f168201915b505091505060006040518083038185876185025a03f1925050501515611bd657610000565b6009810154604051838152600080516020611ec683398151915291849160ff909116906020810182600381116100005760ff1681526020019250505060405180910390a15b5050565b60408051808201909152600080825260208201819052825190811515611c5a5760408051808201909152600080825260208201529250611940565b6020840190506040604051908101604052808281526020018381525092505b5050919050565b600060006000836020015160001415611c9c5760009250611940565b50508151805160001a906080821015611cb85760009250611940565b60b8821080611cd3575060c08210158015611cd3575060f882105b5b15611ce25760019250611940565b60c0821015611cf75760b51982019250611940565b60f519820192505b5050919050565b8051600090811a6080811015611d1f576001915061185d565b60b8811015611d3457607e198101915061185d565b60c0811015611d5d57600183015160b76020839003016101000a9004810160b51901915061185d565b60f8811015611d725760be198101915061185d565b600183015160f76020839003016101000a9004810160f5190191505b5b5b5b5b50919050565b8051805160009181831a9160011a90608183148015611db75750608082105b15611dc557600093506119c0565b600193505b505050919050565b60006000826020015160001415611dec576000915061185d565b8260000151905060c0815160001a1091505b50919050565b60006000600060006000611e1786611dd2565b1515611e2257610000565b8551805160001a935091506080831015611e425781945060019350611e7b565b60b8831015611e605760018660200151039350816001019450611e7b565b60b78303905080600187602001510303935080820160010194505b5b505050915091565b60006020601f83010484602085015b828414611eb157602084028281015190820152600190930192611e93565b60008651602001870152505050505b50505056003346abf262ac5179e9052765fb72484e0baab1f356f08442bb7a3054147631dea165627a7a723058209527cc09a573e1fbc111cf0b75765d6fc7dc0953a79a7da967bd21b047dffd350029

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

-----Decoded View---------------
Found 3 constructor arguments :
Arg [0] : 00000000000000000000000032bacc8b241fb172fee18bda32527126c6f3c5f7
Arg [1] : 00000000000000000000000032bacc8b241fb172fee18bda32527126c6f3c5f7
Arg [2] : 0000000000000000000000001dba1131000664b884a1ba238464159892252d3a


 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.