Latest 25 txns From a total of 449 Transactions

TxHash Age From To Value [TxFee]
0x13e95c92e75517d340db208ab8f38afda5c0ff4fbe441b37ca6909cd0cca9a9093 days 10 hrs ago0xea53e36abc81af4a3748e04709a6c976e7370dc5  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000960302
0x5e286f0c4618272697d55e4fe1535e8ca63ad955e44cb936d3c602fc5e4e2633122 days 17 hrs ago0x603bb3bbfcddfd69c31950cb345a326a5407e02f  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00046844
0x426dd802b9d6d127a328ac4d8d0868f514c7b689409dc72a3028067e1a9a6bcd134 days 12 hrs ago0x2aab7fad9a58c505b13bcd9c2ad80fdd176384d8  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001316835
0x7df2f318d7d8532fa4aaa654fe492488637a9e1fc37dd43f88f782963b7359bf134 days 21 hrs ago0x1a46e80becea85dc047755f9be8f9a533b7a8fd9  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x705e1428494c984454d3d0012509bda55161958c9be24887eb431f5f54e6644c135 days 9 hrs ago0x636e49b98161a3ab5b688e0a7f18f96b7aee1a7b  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x9b9cfe9c746bf8b95078d27383d7e5f0c2fbf063f908f602adff78ff6e4b856e136 days 2 hrs ago0x4019f1564c497da4492ab07c32de27bf5b3cefd6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.0011711
0x43f929e90aed68386a609587f22ebcb7967073e31bc1149b63f3b8828835c66d136 days 12 hrs ago0xcf22d4be388af345e8a212363b0554e0e01562fc  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00046844
0xa6ac9fc88230b2f5b8d4430f9b8065837681efb2a917393af66491d2e36bb3ff136 days 13 hrs ago0xc4132e64c049d1e6eb3730c695e8d80e16b23463  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000175578
0x242ecfac1f9da6d84e71317ee3e5837f52972b9992c8ae8e94312d58111b592e136 days 14 hrs ago0xc4132e64c049d1e6eb3730c695e8d80e16b23463  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000126276
0xd192b78fddf330055336578d5e769e1a5f43d5b29f8bfa644700a47fe444c629136 days 16 hrs ago0x8cfc47059446020a62d63ce887f26be51661559a  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001199783
0xb37da5e496b694f90a09724462d79159b57f8c3590db7dbfd6d91d2d41cd1cb9138 days 13 hrs ago0xf0cee8c9a171e0a407561e7ee20f9ec40748966a  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000304486
0xf3ce28f25a6f9aef74a92ed56de71987f72f6b090f721a643cd81e7bb6a0bcba140 days 23 hrs ago0xd5b802ffac70f03ab4e139cdd3544d2cd4cca923  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x56bd777f125a93792edefb96e9ce038a6bc7262f4272b237e2262f9dc7f1dce5141 days 12 hrs ago0xba810198ac79fc11b088567a3b7ab1f03f3f5eb5  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.0011711
0x4f50b64e55f001ad83090bd4678fbaceef0ca25ae16e8bda89edf7e7cf2d2ec3142 days 14 hrs ago0x59b2c57ef8475c917cfa248e85c7422f7ef5bafc  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00087789
0x7319efa5133b9875bcef3bc4b52ff2ac5f4ca5139108cfa57bd290f31cd0ddc5143 days 17 hrs ago0x70e9e55a3ec847bf27bb0211ad9d38c7114ef1b6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.002897037
0xf98bb2a5cf78cb04f71c46af96491e56043e2d81ed7fc26d71876f1832531e5b143 days 17 hrs ago0x04c42816c1a59fd542fd2a74c9bf5ec7bd7b0bab  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000321893
0x8ee26233b2451ecc752a6c0b71e75ab238498173f17e418fcfa761531053ad4a144 days 11 hrs ago0x2eea4aa8ebf89a70678cfc98f1315fda33f1b591  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00146315
0x7f0ff4169fa36e7de20eae59fdc23dd2fd91bb22bca64efb06c8460f518fa673145 days 16 hrs ago0x39f3afb033bb57ebfb4ff8ac528ace81c821b5eb  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00175578
0x182e92606c3cd89819745cb8aef5c154d63bbbe4e5dc4e918efde3be7ca82be5145 days 17 hrs ago0x5843612dcd955a40249eac62c62ad0dbeadfb777  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001492413
0x267187377d5a4d4d24db0f242d883785b0fd28e415ffd6e1cff39d0fdd04390a145 days 17 hrs ago0x57d770932b08b8c5daf52c73b192beaaf94b1b3c  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.00081977
0x8653653e914a74328b4a7f76337367ef732f8e320962a994a490c8bbb95fe0f5146 days 14 hrs ago0xbb3f20f4ac71555d6acbc7153525aa7b3b8fe1c9  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000380419
0x3317735dcf76bd7b3118a3c8c447e6ca3ce08eb16818d156050ea9e2b2390a7e147 days 2 hrs ago0x7bbaf38b8ee484aaea1ea393859157c9b38f3239  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000614523
0x2ee2e95284dc561f589af75e868242b4f48948eb7ab0390277ef1412b2f5fcdf147 days 16 hrs ago0x642056aa1a1fabc8339cb8cb5a6eee83e5da3bd6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001199783
0x1f36a5e0c57314d211019700c499bcb0acc28df69f40dd29b09c45dbbb81505a147 days 17 hrs ago0x642056aa1a1fabc8339cb8cb5a6eee83e5da3bd6  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.000984
0xeaf52ad95631ea47a3e611e7c87d513efdf592e30ead75b143fc47b037def70d147 days 18 hrs ago0xd60cd29acc1adda158d8c1ba6d70610bd89c5319  IN   0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0 Ether0.001030568
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click Here To View More View All
ParentTxHash Block Age From To Value
0x426dd802b9d6d127a328ac4d8d0868f514c7b689409dc72a3028067e1a9a6bcd5770758134 days 12 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x2aab7fad9a58c505b13bcd9c2ad80fdd176384d85.2 Ether
0x7df2f318d7d8532fa4aaa654fe492488637a9e1fc37dd43f88f782963b7359bf5768584134 days 21 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x1a46e80becea85dc047755f9be8f9a533b7a8fd90.305 Ether
0x705e1428494c984454d3d0012509bda55161958c9be24887eb431f5f54e6644c5765943135 days 9 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x636e49b98161a3ab5b688e0a7f18f96b7aee1a7b2 Ether
0xa6ac9fc88230b2f5b8d4430f9b8065837681efb2a917393af66491d2e36bb3ff5759226136 days 13 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xc4132e64c049d1e6eb3730c695e8d80e16b234634.02 Ether
0xd192b78fddf330055336578d5e769e1a5f43d5b29f8bfa644700a47fe444c6295758588136 days 16 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x8cfc47059446020a62d63ce887f26be51661559a1 Ether
0xf3ce28f25a6f9aef74a92ed56de71987f72f6b090f721a643cd81e7bb6a0bcba5734548140 days 23 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd5b802ffac70f03ab4e139cdd3544d2cd4cca9230.2352 Ether
0x4f50b64e55f001ad83090bd4678fbaceef0ca25ae16e8bda89edf7e7cf2d2ec35725223142 days 14 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x59b2c57ef8475c917cfa248e85c7422f7ef5bafc1 Ether
0x7319efa5133b9875bcef3bc4b52ff2ac5f4ca5139108cfa57bd290f31cd0ddc55718882143 days 17 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x70e9e55a3ec847bf27bb0211ad9d38c7114ef1b63.6 Ether
0xf98bb2a5cf78cb04f71c46af96491e56043e2d81ed7fc26d71876f1832531e5b5718801143 days 17 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x04c42816c1a59fd542fd2a74c9bf5ec7bd7b0bab0.7834 Ether
0x8ee26233b2451ecc752a6c0b71e75ab238498173f17e418fcfa761531053ad4a5714616144 days 11 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x2eea4aa8ebf89a70678cfc98f1315fda33f1b5910.24189632 Ether
0x7f0ff4169fa36e7de20eae59fdc23dd2fd91bb22bca64efb06c8460f518fa6735707752145 days 16 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x39f3afb033bb57ebfb4ff8ac528ace81c821b5eb10 Ether
0x182e92606c3cd89819745cb8aef5c154d63bbbe4e5dc4e918efde3be7ca82be55707572145 days 17 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x5843612dcd955a40249eac62c62ad0dbeadfb7770.2 Ether
0x8653653e914a74328b4a7f76337367ef732f8e320962a994a490c8bbb95fe0f55702657146 days 14 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xbb3f20f4ac71555d6acbc7153525aa7b3b8fe1c920 Ether
0x3317735dcf76bd7b3118a3c8c447e6ca3ce08eb16818d156050ea9e2b2390a7e5699824147 days 2 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x7bbaf38b8ee484aaea1ea393859157c9b38f32390.2 Ether
0x2ee2e95284dc561f589af75e868242b4f48948eb7ab0390277ef1412b2f5fcdf5696593147 days 16 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x642056aa1a1fabc8339cb8cb5a6eee83e5da3bd61.3218 Ether
0x38f494388a736def58b3e3fb6c9569e8c4d23497b1c6a7faf888a43a50905b3b5694546148 days 1 hr ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xa7cf44b52af5b945f2da502518767e3a49a1ff8e15 Ether
0xb28878bd3e55156b03a51151c60e9aa9a44e5f1466594e9e9b1d14461a4a3b0a5690985148 days 16 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x83fe96be9823e1180cbf17f6d17dd2ecf90707183.0702 Ether
0xa2bb8da36a7aeeb1c04582d454cad1a3de7ef4eb0ea12a3a8a94e003ea1aa5c75688670149 days 2 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd2f08c14d5f1a7c847f6e63c94a4222895c2598a0.97 Ether
0x7ca85feb39c8bf580f6b0cb16fef6c7fafa3322516efda99f0fdc4502ccff8755682548150 days 4 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x251e09fcfd12dd140190cfa5c26a6a816ba7d3061 Ether
0x8ade0fa7748578f09bf096db1cc70db4f7108f0a8ec9fc4ca984c60d14fd6e555677937150 days 23 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xb965e90ea4d9ca54ffd001e1a6d1b0b8dda92f1b1 Ether
0xfd20e9478951bb2e07dd191f5f9c588362ab5bcbfa05ec8b060017d9458b87fc5674809151 days 12 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x1df671de7045ffd53e2daf5cb9996252870cc1ea1 Ether
0x7d6d646d8dab1939fb0759338084d8533caf2ee719e78609bb5fb2593e54e8405672509151 days 22 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xecb21f4a32b2119df2ca5245d90f8dbc16b5ac3f2.2144 Ether
0xd8b316e19d7930fdd48a02a0e76618e7cf9d8cef7ce92599d9502357793975fb5665283153 days 5 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xd7f2a9ffb342d79048ede552be0e51117187af8f1.2 Ether
0xa95efdad4cb9b7adfcd423d22299a213b1ac9f732fc612aff36e2b52adb082ae5663185153 days 14 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0xbc8b7114485148ae0b88b27365c45e319dbd8a110.45 Ether
0xecb58a71af3192a5b4a665acf88a1f020e2bbb9e9c16176adaaf715e1849535d5662125153 days 18 hrs ago0xe4972421f88c1f47986f54cbfd2d1e2e671680ac0x9592e495100850529b8b3520fcf4eb890ed029430.6 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: PollManagedFund
Compiler Text: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.21;

// File: contracts/DateTime.sol

contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                                timestamp += LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                        monthDayCounts[1] = 29;
                }
                else {
                        monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}

// File: contracts/ISimpleCrowdsale.sol

interface ISimpleCrowdsale {
    function getSoftCap() external view returns(uint256);
    function isContributorInLists(address contributorAddress) external view returns(bool);
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable;
}

// File: contracts/fund/ICrowdsaleFund.sol

/**
 * @title ICrowdsaleFund
 * @dev Fund methods used by crowdsale contract
 */
interface ICrowdsaleFund {
    /**
    * @dev Function accepts user`s contributed ether and logs contribution
    * @param contributor Contributor wallet address.
    */
    function processContribution(address contributor) external payable;
    /**
    * @dev Function is called on the end of successful crowdsale
    */
    function onCrowdsaleEnd() external;
    /**
    * @dev Function is called if crowdsale failed to reach soft cap
    */
    function enableCrowdsaleRefund() external;
}

// File: contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
contract SafeMath {
    /**
    * @dev constructor
    */
    function SafeMath() public {
    }

    function safeMul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function safeSub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(a >= b);
        return a - b;
    }

    function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

// File: contracts/ownership/MultiOwnable.sol

/**
 * @title MultiOwnable
 * @dev The MultiOwnable contract has owners addresses and provides basic authorization control
 * functions, this simplifies the implementation of "users permissions".
 */
contract MultiOwnable {
    address public manager; // address used to set owners
    address[] public owners;
    mapping(address => bool) public ownerByAddress;

    event SetOwners(address[] owners);

    modifier onlyOwner() {
        require(ownerByAddress[msg.sender] == true);
        _;
    }

    /**
     * @dev MultiOwnable constructor sets the manager
     */
    function MultiOwnable() public {
        manager = msg.sender;
    }

    /**
     * @dev Function to set owners addresses
     */
    function setOwners(address[] _owners) public {
        require(msg.sender == manager);
        _setOwners(_owners);

    }

    function _setOwners(address[] _owners) internal {
        for(uint256 i = 0; i < owners.length; i++) {
            ownerByAddress[owners[i]] = false;
        }


        for(uint256 j = 0; j < _owners.length; j++) {
            ownerByAddress[_owners[j]] = true;
        }
        owners = _owners;
        SetOwners(_owners);
    }

    function getOwners() public constant returns (address[]) {
        return owners;
    }
}

// File: contracts/token/IERC20Token.sol

/**
 * @title IERC20Token - ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value)  public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success);
    function approve(address _spender, uint256 _value)  public returns (bool success);
    function allowance(address _owner, address _spender)  public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - ERC20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Token is IERC20Token, SafeMath {
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);

        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);

        balances[_to] = safeAdd(balances[_to], _value);
        balances[_from] = safeSub(balances[_from], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);
        return true;
    }

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

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

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

// File: contracts/token/ITokenEventListener.sol

/**
 * @title ITokenEventListener
 * @dev Interface which should be implemented by token listener
 */
interface ITokenEventListener {
    /**
     * @dev Function is called after token transfer/transferFrom
     * @param _from Sender address
     * @param _to Receiver address
     * @param _value Amount of tokens
     */
    function onTokenTransfer(address _from, address _to, uint256 _value) external;
}

// File: contracts/token/ManagedToken.sol

/**
 * @title ManagedToken
 * @dev ERC20 compatible token with issue and destroy facilities
 * @dev All transfers can be monitored by token event listener
 */
contract ManagedToken is ERC20Token, MultiOwnable {
    bool public allowTransfers = false;
    bool public issuanceFinished = false;

    ITokenEventListener public eventListener;

    event AllowTransfersChanged(bool _newState);
    event Issue(address indexed _to, uint256 _value);
    event Destroy(address indexed _from, uint256 _value);
    event IssuanceFinished();

    modifier transfersAllowed() {
        require(allowTransfers);
        _;
    }

    modifier canIssue() {
        require(!issuanceFinished);
        _;
    }

    /**
     * @dev ManagedToken constructor
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     */
    function ManagedToken(address _listener, address[] _owners) public {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        }
        _setOwners(_owners);
    }

    /**
     * @dev Enable/disable token transfers. Can be called only by owners
     * @param _allowTransfers True - allow False - disable
     */
    function setAllowTransfers(bool _allowTransfers) external onlyOwner {
        allowTransfers = _allowTransfers;
        AllowTransfersChanged(_allowTransfers);
    }

    /**
     * @dev Set/remove token event listener
     * @param _listener Listener address (Contract must implement ITokenEventListener interface)
     */
    function setListener(address _listener) public onlyOwner {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        } else {
            delete eventListener;
        }
    }

    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transfer(_to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(msg.sender, _to, _value);
        }
        return success;
    }

    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transferFrom(_from, _to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(_from, _to, _value);
        }
        return success;
    }

    function hasListener() internal view returns(bool) {
        if(eventListener == address(0)) {
            return false;
        }
        return true;
    }

    /**
     * @dev Issue tokens to specified wallet
     * @param _to Wallet address
     * @param _value Amount of tokens
     */
    function issue(address _to, uint256 _value) external onlyOwner canIssue {
        totalSupply = safeAdd(totalSupply, _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Issue(_to, _value);
        Transfer(address(0), _to, _value);
    }

    /**
     * @dev Destroy tokens on specified address (Called by owner or token holder)
     * @dev Fund contract address must be in the list of owners to burn token during refund
     * @param _from Wallet address
     * @param _value Amount of tokens to destroy
     */
    function destroy(address _from, uint256 _value) external {
        require(ownerByAddress[msg.sender] || msg.sender == _from);
        require(balances[_from] >= _value);
        totalSupply = safeSub(totalSupply, _value);
        balances[_from] = safeSub(balances[_from], _value);
        Transfer(_from, address(0), _value);
        Destroy(_from, _value);
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Finish token issuance
     * @return True if success
     */
    function finishIssuance() public onlyOwner returns (bool) {
        issuanceFinished = true;
        IssuanceFinished();
        return true;
    }
}

// File: contracts/Fund.sol

contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
    enum FundState {
        Crowdsale,
        CrowdsaleRefund,
        TeamWithdraw,
        Refund
    }

    FundState public state = FundState.Crowdsale;
    ManagedToken public token;

    uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month

    address public teamWallet;
    uint256 public crowdsaleEndDate;

    address public referralTokenWallet;
    address public foundationTokenWallet;
    address public reserveTokenWallet;
    address public bountyTokenWallet;
    address public companyTokenWallet;
    address public advisorTokenWallet;

    uint256 public tap;
    uint256 public lastWithdrawTime = 0;
    uint256 public firstWithdrawAmount = 0;

    address public crowdsaleAddress;
    mapping(address => uint256) public contributions;

    event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp);
    event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp);
    event Withdraw(uint256 amountWei, uint256 timestamp);
    event RefundEnabled(address initiatorAddress);

    /**
     * @dev Fund constructor
     * @param _teamWallet Withdraw functions transfers ether to this address
     * @param _referralTokenWallet Referral wallet address
     * @param _companyTokenWallet Company wallet address
     * @param _reserveTokenWallet Reserve wallet address
     * @param _bountyTokenWallet Bounty wallet address
     * @param _advisorTokenWallet Advisor wallet address
     * @param _owners Contract owners
     */
    function Fund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address[] _owners
    ) public
    {
        teamWallet = _teamWallet;
        referralTokenWallet = _referralTokenWallet;
        foundationTokenWallet = _foundationTokenWallet;
        companyTokenWallet = _companyTokenWallet;
        reserveTokenWallet = _reserveTokenWallet;
        bountyTokenWallet = _bountyTokenWallet;
        advisorTokenWallet = _advisorTokenWallet;
        _setOwners(_owners);
    }

    modifier withdrawEnabled() {
        require(canWithdraw());
        _;
    }

    modifier onlyCrowdsale() {
        require(msg.sender == crowdsaleAddress);
        _;
    }

    function canWithdraw() public returns(bool);

    function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner {
        require(crowdsaleAddress == address(0));
        crowdsaleAddress = _crowdsaleAddress;
    }

    function setTokenAddress(address _tokenAddress) public onlyOwner {
        require(address(token) == address(0));
        token = ManagedToken(_tokenAddress);
    }

    /**
     * @dev Process crowdsale contribution
     */
    function processContribution(address contributor) external payable onlyCrowdsale {
        require(state == FundState.Crowdsale);
        uint256 totalContribution = safeAdd(contributions[contributor], msg.value);
        contributions[contributor] = totalContribution;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is reached
     */
    function onCrowdsaleEnd() external onlyCrowdsale {
        state = FundState.TeamWithdraw;
        ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress);
        firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2);
        lastWithdrawTime = now;
        tap = INITIAL_TAP;
        crowdsaleEndDate = now;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is not reached
     */
    function enableCrowdsaleRefund() external onlyCrowdsale {
        require(state == FundState.Crowdsale);
        state = FundState.CrowdsaleRefund;
    }

    /**
    * @dev Function is called by contributor to refund payments if crowdsale failed to reach soft cap
    */
    function refundCrowdsaleContributor() external {
        require(state == FundState.CrowdsaleRefund);
        require(contributions[msg.sender] > 0);

        uint256 refundAmount = contributions[msg.sender];
        contributions[msg.sender] = 0;
        token.destroy(msg.sender, token.balanceOf(msg.sender));
        msg.sender.transfer(refundAmount);
        RefundContributor(msg.sender, refundAmount, now);
    }

    /**
     * @dev Decrease tap amount
     * @param _tap New tap value
     */
    function decTap(uint256 _tap) external onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(_tap < tap);
        tap = _tap;
    }

    function getCurrentTapAmount() public constant returns(uint256) {
        if(state != FundState.TeamWithdraw) {
            return 0;
        }
        return calcTapAmount();
    }

    function calcTapAmount() internal view returns(uint256) {
        uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap);
        if(address(this).balance < amount) {
            amount = address(this).balance;
        }
        return amount;
    }

    function firstWithdraw() public onlyOwner withdrawEnabled {
        require(firstWithdrawAmount > 0);
        uint256 amount = firstWithdrawAmount;
        firstWithdrawAmount = 0;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    /**
     * @dev Withdraw tap amount
     */
    function withdraw() public onlyOwner withdrawEnabled {
        require(state == FundState.TeamWithdraw);
        uint256 amount = calcTapAmount();
        lastWithdrawTime = now;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    // Refund
    /**
     * @dev Called to start refunding
     */
    function enableRefund() internal {
        require(state == FundState.TeamWithdraw);
        state = FundState.Refund;
        token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet));
        token.destroy(reserveTokenWallet, token.balanceOf(reserveTokenWallet));
        token.destroy(foundationTokenWallet, token.balanceOf(foundationTokenWallet));
        token.destroy(bountyTokenWallet, token.balanceOf(bountyTokenWallet));
        token.destroy(referralTokenWallet, token.balanceOf(referralTokenWallet));
        token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet));
        RefundEnabled(msg.sender);
    }

    /**
    * @dev Function is called by contributor to refund
    * Buy user tokens for refundTokenPrice and destroy them
    */
    function refundTokenHolder() public {
        require(state == FundState.Refund);

        uint256 tokenBalance = token.balanceOf(msg.sender);
        require(tokenBalance > 0);
        uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply());
        require(refundAmount > 0);

        token.destroy(msg.sender, tokenBalance);
        msg.sender.transfer(refundAmount);

        RefundHolder(msg.sender, refundAmount, tokenBalance, now);
    }
}

// File: contracts/fund/IPollManagedFund.sol

/**
 * @title IPollManagedFund
 * @dev Fund callbacks used by polling contracts
 */
interface IPollManagedFund {
    /**
     * @dev TapPoll callback
     * @param agree True if new tap value is accepted by majority of contributors
     * @param _tap New tap value
     */
    function onTapPollFinish(bool agree, uint256 _tap) external;

    /**
     * @dev RefundPoll callback
     * @param agree True if contributors decided to allow refunding
     */
    function onRefundPollFinish(bool agree) external;
}

// File: contracts/poll/BasePoll.sol

/**
 * @title BasePoll
 * @dev Abstract base class for polling contracts
 */
contract BasePoll is SafeMath {
    struct Vote {
        uint256 time;
        uint256 weight;
        bool agree;
    }

    uint256 public constant MAX_TOKENS_WEIGHT_DENOM = 1000;

    IERC20Token public token;
    address public fundAddress;

    uint256 public startTime;
    uint256 public endTime;
    bool checkTransfersAfterEnd;

    uint256 public yesCounter = 0;
    uint256 public noCounter = 0;
    uint256 public totalVoted = 0;

    bool public finalized;
    mapping(address => Vote) public votesByAddress;

    modifier checkTime() {
        require(now >= startTime && now <= endTime);
        _;
    }

    modifier notFinalized() {
        require(!finalized);
        _;
    }

    /**
     * @dev BasePoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function BasePoll(address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransfersAfterEnd) public {
        require(_tokenAddress != address(0));
        require(_startTime >= now && _endTime > _startTime);

        token = IERC20Token(_tokenAddress);
        fundAddress = _fundAddress;
        startTime = _startTime;
        endTime = _endTime;
        finalized = false;
        checkTransfersAfterEnd = _checkTransfersAfterEnd;
    }

    /**
     * @dev Process user`s vote
     * @param agree True if user endorses the proposal else False
     */
    function vote(bool agree) public checkTime {
        require(votesByAddress[msg.sender].time == 0);

        uint256 voiceWeight = token.balanceOf(msg.sender);
        uint256 maxVoiceWeight = safeDiv(token.totalSupply(), MAX_TOKENS_WEIGHT_DENOM);
        voiceWeight =  voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight;

        if(agree) {
            yesCounter = safeAdd(yesCounter, voiceWeight);
        } else {
            noCounter = safeAdd(noCounter, voiceWeight);

        }

        votesByAddress[msg.sender].time = now;
        votesByAddress[msg.sender].weight = voiceWeight;
        votesByAddress[msg.sender].agree = agree;

        totalVoted = safeAdd(totalVoted, 1);
    }

    /**
     * @dev Revoke user`s vote
     */
    function revokeVote() public checkTime {
        require(votesByAddress[msg.sender].time > 0);

        uint256 voiceWeight = votesByAddress[msg.sender].weight;
        bool agree = votesByAddress[msg.sender].agree;

        votesByAddress[msg.sender].time = 0;
        votesByAddress[msg.sender].weight = 0;
        votesByAddress[msg.sender].agree = false;

        totalVoted = safeSub(totalVoted, 1);
        if(agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
    }

    /**
     * @dev Function is called after token transfer from user`s wallet to check and correct user`s vote
     *
     */
    function onTokenTransfer(address tokenHolder, uint256 amount) public {
        require(msg.sender == fundAddress);
        if(votesByAddress[tokenHolder].time == 0) {
            return;
        }
        if(!checkTransfersAfterEnd) {
             if(finalized || (now < startTime || now > endTime)) {
                 return;
             }
        }

        if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) {
            return;
        }
        uint256 voiceWeight = amount;
        if(amount > votesByAddress[tokenHolder].weight) {
            voiceWeight = votesByAddress[tokenHolder].weight;
        }

        if(votesByAddress[tokenHolder].agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
        votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight);
    }

    /**
     * Finalize poll and call onPollFinish callback with result
     */
    function tryToFinalize() public notFinalized returns(bool) {
        if(now < endTime) {
            return false;
        }
        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isNowApproved() public view returns(bool) {
        return isSubjectApproved();
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter;
    }

    /**
     * @dev callback called after poll finalization
     */
    function onPollFinish(bool agree) internal;
}

// File: contracts/RefundPoll.sol

/**
 * @title RefundPoll
 * @dev Enables fund refund mode
 */
contract RefundPoll is BasePoll {
    uint256 public holdEndTime = 0;

    /**
     * RefundPoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function RefundPoll(
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _holdEndTime,
        bool _checkTransfersAfterEnd
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransfersAfterEnd)
    {
        holdEndTime = _holdEndTime;
    }

    function tryToFinalize() public returns(bool) {
        if(holdEndTime > 0 && holdEndTime > endTime) {
            require(now >= holdEndTime);
        } else {
            require(now >= endTime);
        }

        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3);
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onRefundPollFinish(agree);
    }

}

// File: contracts/TapPoll.sol

/**
 * @title TapPoll
 * @dev Poll to increase tap amount
 */
contract TapPoll is BasePoll {
    uint256 public tap;
    uint256 public minTokensPerc = 0;

    /**
     * TapPoll constructor
     * @param _tap New tap value
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     * @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled
     */
    function TapPoll(
        uint256 _tap,
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _minTokensPerc
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
    {
        tap = _tap;
        minTokensPerc = _minTokensPerc;
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onTapPollFinish(agree, tap);
    }

    function getVotedTokensPerc() public view returns(uint256) {
        return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
    }
}

// File: contracts/PollManagedFund.sol

/**
 * @title PollManagedFund
 * @dev Fund controlled by users
 */
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
    uint256 public constant TAP_POLL_DURATION = 3 days;
    uint256 public constant REFUND_POLL_DURATION = 7 days;
    uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

    TapPoll public tapPoll;
    RefundPoll public refundPoll;

    uint256 public minVotedTokensPerc = 0;
    uint256 public secondRefundPollDate = 0;
    bool public isWithdrawEnabled = true;

    uint256[] public refundPollDates = [
        1530403200, // 01.07.2018
        1538352000, // 01.10.2018
        1546300800, // 01.01.2019
        1554076800, // 01.04.2019
        1561939200, // 01.07.2019
        1569888000, // 01.10.2019
        1577836800, // 01.01.2020
        1585699200  // 01.04.2020
    ];

    modifier onlyTokenHolder() {
        require(token.balanceOf(msg.sender) > 0);
        _;
    }

    event TapPollCreated();
    event TapPollFinished(bool approved, uint256 _tap);
    event RefundPollCreated();
    event RefundPollFinished(bool approved);

    /**
     * @dev PollManagedFund constructor
     * params - see Fund constructor
     */
    function PollManagedFund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address[] _owners
        ) public
    Fund(_teamWallet, _referralTokenWallet, _foundationTokenWallet, _companyTokenWallet, _reserveTokenWallet, _bountyTokenWallet, _advisorTokenWallet, _owners)
    {
    }

    function canWithdraw() public returns(bool) {
        if(
            address(refundPoll) != address(0) &&
            !refundPoll.finalized() &&
            refundPoll.holdEndTime() > 0 &&
            now >= refundPoll.holdEndTime() &&
            refundPoll.isNowApproved()
        ) {
            return false;
        }
        return isWithdrawEnabled;
    }

    /**
     * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers
     */
    function onTokenTransfer(address _from, address /*_to*/, uint256 _value) external {
        require(msg.sender == address(token));
        if(address(tapPoll) != address(0) && !tapPoll.finalized()) {
            tapPoll.onTokenTransfer(_from, _value);
        }
         if(address(refundPoll) != address(0) && !refundPoll.finalized()) {
            refundPoll.onTokenTransfer(_from, _value);
        }
    }

    /**
     * @dev Update minVotedTokensPerc value after tap poll.
     * Set new value == 50% from current voted tokens amount
     */
    function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal {
        uint256 newPerc = safeDiv(_minVotedTokensPerc, 2);
        if(newPerc > MAX_VOTED_TOKEN_PERC) {
            minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
            return;
        }
        minVotedTokensPerc = newPerc;
    }

    // Tap poll
    function createTapPoll(uint8 tapIncPerc) public onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(tapPoll == address(0));
        require(getDay(now) == 10);
        require(tapIncPerc <= 50);
        uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100));
        uint256 startTime = now;
        uint256 endTime = startTime + TAP_POLL_DURATION;
        tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
        TapPollCreated();
    }

    function onTapPollFinish(bool agree, uint256 _tap) external {
        require(msg.sender == address(tapPoll) && tapPoll.finalized());
        if(agree) {
            tap = _tap;
        }
        updateMinVotedTokens(tapPoll.getVotedTokensPerc());
        TapPollFinished(agree, _tap);
        delete tapPoll;
    }

    // Refund poll
    function checkRefundPollDate() internal view returns(bool) {
        if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) {
            return true;
        }

        for(uint i; i < refundPollDates.length; i++) {
            if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)) {
                return true;
            }
        }
        return false;
    }

    function createRefundPoll() public onlyTokenHolder {
        require(state == FundState.TeamWithdraw);
        require(address(refundPoll) == address(0));
        require(checkRefundPollDate());

        if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)) {
            secondRefundPollDate = 0;
        }

        uint256 startTime = now;
        uint256 endTime = startTime + REFUND_POLL_DURATION;
        bool isFirstRefund = secondRefundPollDate == 0;
        uint256 holdEndTime = 0;

        if(isFirstRefund) {
            holdEndTime = toTimestamp(
                getYear(startTime),
                getMonth(startTime) + 1,
                1
            );
        }
        refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
        RefundPollCreated();
    }

    function onRefundPollFinish(bool agree) external {
        require(msg.sender == address(refundPoll) && refundPoll.finalized());
        if(agree) {
            if(secondRefundPollDate > 0) {
                enableRefund();
            } else {
                uint256 startTime = refundPoll.startTime();
                secondRefundPollDate = toTimestamp(
                    getYear(startTime),
                    getMonth(startTime) + 2,
                    1
                );
                isWithdrawEnabled = false;
            }
        } else {
            secondRefundPollDate = 0;
            isWithdrawEnabled = true;
        }
        RefundPollFinished(agree);

        delete refundPoll;
    }

    function forceRefund() public onlyOwner {
        enableRefund();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapIncPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"createRefundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060409081526003805460ff199081169091556000600d819055600e819055601381905560145560158054909116600117905561010090519081016040908152635b3819808252635bb163806020830152635c2aad8090820152635ca154806060820152635d194d006080820152635d92970060a0820152635e0be10060c0820152635e83d98060e08201526200009c906016906008620002fd565b503415620000a957600080fd5b6040516200467238038062004672833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a031990811633600160a060020a03908116919091179092556004805482168d84161790556006805482168c84161790556007805482168b8416179055600a805482168a8416179055600880548216898416179055600980548216888416179055600b805490911691861691909117905591909101905087878787878787876200019481640100000000620001aa810262002b6a1704565b5050505050505050505050505050505062000404565b6000805b6001548210156200021057600060026000600185815481101515620001cf57fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff191691151591909117905560019190910190620001ae565b5060005b82518110156200026c576001600260008584815181106200023157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000214565b60018380516200028192916020019062000355565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620002e5578082015183820152602001620002cb565b505050509050019250505060405180910390a1505050565b82805482825590600052602060002090810192821562000343579160200282015b8281111562000343578251829063ffffffff169055916020019190600101906200031e565b5062000351929150620003bd565b5090565b828054828255906000526020600020908101928215620003af579160200282015b82811115620003af5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000376565b5062000351929150620003dd565b620003da91905b80821115620003515760008155600101620003c4565b90565b620003da91905b8082111562000351578054600160a060020a0319168155600101620003e4565b61425e80620004146000396000f300606060405260043610620003055763ffffffff60e060020a600035041663025e7c2781146200030a578063026eca12146200033f57806302fc28c4146200035d57806308867fc21462000385578063192f1076146200039b5780631f35bc4014620003b157806326a4e8d214620003d357806326b52faf14620003f557806329c90b63146200040b57806331d2f891146200042957806336e61cf7146200043f5780633b64e77e14620004585780633ccfd60b146200046e5780633e239e1a146200048457806340e6b00a14620004b357806342e94c9014620004c9578063481c6a7514620004eb5780634ac1ad78146200050157806359927044146200051a5780635f58384614620005305780636252c127146200054957806362ba9687146200055f57806365c728401462000594578063677ba3d314620005ad578063774a97cf14620005d85780637f79183314620005ee57806384219204146200061d578063880dc4e6146200063357806389ea2cb7146200065d5780638aa001fc14620006785780638c8d98a01462000691578063903171ae14620006ba5780639054bbb614620006d05780639054bdec14620006e657806392a0fd64146200072157806392d663131462000737578063962c9c8d1462000767578063a0e67e2b146200077d578063a324ad2414620007e8578063a6f0e5771462000801578063a78a651a146200081e578063ab2315111462000834578063b1999937146200084a578063b238ad0e1462000863578063b465e52f1462000886578063b51459fe146200089c578063bd7427f814620008b2578063c19d93fb14620008c8578063c5f5ce211462000903578063cae6b9c51462000919578063cc96019f146200092f578063d0e6cfec1462000945578063d66f146d146200095b578063e9b5a2f71462000971578063eb6b192f1462000987578063f190a79314620009a9578063fa4d369814620009bf578063fa93f8831462000a11578063fbbfe8301462000a2a578063fc0c546a1462000a40578063fd2210311462000a56578063ff01ffa81462000a6c575b600080fd5b34156200031657600080fd5b6200032360043562000a82565b604051600160a060020a03909116815260200160405180910390f35b34156200034b57600080fd5b6200035b60ff6004351662000aab565b005b34156200036957600080fd5b6200037362000c3f565b60405190815260200160405180910390f35b34156200039157600080fd5b6200037362000c46565b3415620003a757600080fd5b6200037362000c4d565b3415620003bd57600080fd5b6200035b600160a060020a036004351662000c53565b3415620003df57600080fd5b6200035b600160a060020a036004351662000cb7565b34156200040157600080fd5b6200037362000d33565b34156200041757600080fd5b6200035b600435151560243562000d39565b34156200043557600080fd5b6200032362000e78565b34156200044b57600080fd5b6200035b60043562000e87565b34156200046457600080fd5b6200035b62000ee5565b34156200047a57600080fd5b6200035b62000f2f565b34156200049057600080fd5b6200049d60043562001011565b60405160ff909116815260200160405180910390f35b3415620004bf57600080fd5b6200035b6200102f565b3415620004d557600080fd5b62000373600160a060020a03600435166200123b565b3415620004f757600080fd5b620003236200124d565b34156200050d57600080fd5b6200049d6004356200125c565b34156200052657600080fd5b620003236200126f565b34156200053c57600080fd5b620003736004356200127e565b34156200055557600080fd5b6200035b6200129e565b34156200056b57600080fd5b6200037361ffff6004351660ff6024358116906044358116906064358116906084351662001349565b3415620005a057600080fd5b6200049d60043562001366565b3415620005b957600080fd5b6200035b600160a060020a03600435811690602435166044356200137d565b3415620005e457600080fd5b6200037362001561565b3415620005fa57600080fd5b6200037361ffff6004351660ff6024358116906044358116906064351662001596565b34156200062957600080fd5b62000373620015b2565b34156200063f57600080fd5b62000649620015b8565b604051901515815260200160405180910390f35b34156200066957600080fd5b6200035b6004351515620015c1565b34156200068457600080fd5b6200049d60043562001755565b34156200069d57600080fd5b6200037361ffff6004351660ff6024358116906044351662001760565b3415620006c657600080fd5b620003236200177c565b3415620006dc57600080fd5b620003736200178b565b3415620006f257600080fd5b6200037361ffff6004351660ff60243581169060443581169060643581169060843581169060a4351662001795565b34156200072d57600080fd5b62000323620018ea565b34156200074357600080fd5b62000750600435620018f9565b60405161ffff909116815260200160405180910390f35b34156200077357600080fd5b6200037362001993565b34156200078957600080fd5b6200079362001998565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620007d4578082015183820152602001620007ba565b505050509050019250505060405180910390f35b3415620007f457600080fd5b6200049d60043562001a04565b34156200080d57600080fd5b6200064961ffff6004351662001a1b565b6200035b600160a060020a036004351662001a6f565b34156200084057600080fd5b6200037362001af2565b34156200085657600080fd5b6200037360043562001af8565b34156200086f57600080fd5b6200049d60ff6004351661ffff6024351662001b13565b34156200089257600080fd5b6200037362001bec565b3415620008a857600080fd5b6200064962001bf2565b3415620008be57600080fd5b6200035b62001da8565b3415620008d457600080fd5b620008de62001ddf565b60405180826003811115620008ef57fe5b60ff16815260200191505060405180910390f35b34156200090f57600080fd5b6200032362001de8565b34156200092557600080fd5b6200032362001df7565b34156200093b57600080fd5b6200032362001e06565b34156200095157600080fd5b6200032362001e15565b34156200096757600080fd5b6200032362001e24565b34156200097d57600080fd5b6200035b62001e33565b34156200099357600080fd5b62000649600160a060020a036004351662001ec3565b3415620009b557600080fd5b6200032362001ed8565b3415620009cb57600080fd5b6200035b600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062001ee795505050505050565b341562000a1d57600080fd5b6200049d60043562001f11565b341562000a3657600080fd5b6200035b62001f1d565b341562000a4c57600080fd5b620003236200214d565b341562000a6257600080fd5b6200037362002161565b341562000a7857600080fd5b6200035b62002167565b600180548290811062000a9157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000ada57600080fd5b60026003805460ff169081111562000aee57fe5b1462000af957600080fd5b601154600160a060020a03161562000b1057600080fd5b62000b1b4262001366565b60ff16600a14151562000b2d57600080fd5b603260ff8516111562000b3f57600080fd5b62000b69600c5462000b6362000b5b600c548860ff1662002325565b606462002353565b6200236b565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460135462000b9d62002cd0565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000bed57600080fd5b60118054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000c7e57600080fd5b600f54600160a060020a03161562000c9557600080fd5b600f8054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000ce257600080fd5b6003546101009004600160a060020a03161562000cfe57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600e5481565b60115433600160a060020a03908116911614801562000dac5750601154600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000d9357600080fd5b5af1151562000da157600080fd5b505050604051805190505b151562000db857600080fd5b811562000dc557600c8190555b60115462000e2890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e0a57600080fd5b5af1151562000e1857600080fd5b505050604051805190506200237b565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060118054600160a060020a0319169055565b600f54600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000eb257600080fd5b60026003805460ff169081111562000ec657fe5b1462000ed157600080fd5b600c54811062000ee057600080fd5b600c55565b600f5433600160a060020a0390811691161462000f0157600080fd5b60006003805460ff169081111562000f1557fe5b1462000f2057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000f5a57600080fd5b62000f6462001bf2565b151562000f7057600080fd5b60026003805460ff169081111562000f8457fe5b1462000f8f57600080fd5b62000f99620023ab565b42600d55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151562000fd457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b048115156200102657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200109b57600080fd5b5af11515620010a957600080fd5b50505060405180519050111515620010c057600080fd5b60026003805460ff1690811115620010d457fe5b14620010df57600080fd5b601254600160a060020a031615620010f657600080fd5b62001100620023f3565b15156200110c57600080fd5b60006014541180156200112e57506200112b601454620151806200236b565b42115b156200113a5760006014555b505060145442925062093a808301915015600081156200117c57620011796200116385620018f9565b6200116e8662001a04565b600101600162001760565b90505b6003546101009004600160a060020a031630858584866200119c62002ce1565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f0801515620011e957600080fd5b60128054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60106020526000908152604090205481565b600054600160a060020a031681565b6000600760046201518084040162001026565b600454600160a060020a031681565b60168054829081106200128d57fe5b600091825260209091200154905081565b600f5460009033600160a060020a03908116911614620012bd57600080fd5b506003805460ff19166002179055600f54600160a060020a03166200133081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200131057600080fd5b5af115156200131e57600080fd5b50505060405180519050600262002353565b600e555042600d81905565af7151902add600c55600555565b60006200135c8686868686600062001795565b9695505050505050565b60006200137382620024b8565b6040015192915050565b60035433600160a060020a0390811661010090920416146200139e57600080fd5b601154600160a060020a0316158015906200140e5750601154600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013f457600080fd5b5af115156200140257600080fd5b50505060405180519050155b156200147d57601154600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200146b57600080fd5b5af115156200147957600080fd5b5050505b601254600160a060020a031615801590620014ed5750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620014d357600080fd5b5af11515620014e157600080fd5b50505060405180519050155b156200155c57601254600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200154a57600080fd5b5af115156200155857600080fd5b5050505b505050565b600060026003805460ff16908111156200157757fe5b14620015865750600062001593565b62001590620023ab565b90505b90565b6000620015a98585858560008062001795565b95945050505050565b60135481565b60155460ff1681565b60125460009033600160a060020a039081169116148015620016375750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200161e57600080fd5b5af115156200162c57600080fd5b505050604051805190505b15156200164357600080fd5b8115620016f957600060145411156200166657620016606200261b565b620016f3565b601254600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016a657600080fd5b5af11515620016b457600080fd5b505050604051805190509050620016e5620016cf82620018f9565b620016da8362001a04565b600201600162001760565b6014556015805460ff191690555b6200170c565b60006014556015805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060128054600160a060020a0319169055565b6000603c8262001026565b600062001774848484600080600062001795565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620017a262002cf2565b6107b291505b8861ffff168261ffff161015620017ef57620017c48262001a1b565b15620017d9576301e2850083019250620017e3565b6301e13380830192505b600190910190620017a8565b601f8152620017fe8962001a1b565b156200181157601d602082015262001819565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620018ac578061ffff600019840116600c81106200188d57fe5b602002015160ff16620151800283019250818060010192505062001868565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e1338084048101908290620019169062001af8565b620019258361ffff1662001af8565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b848311156200198b57620019606001830362001a1b565b1562001975576301e28500830392506200197f565b6301e13380830392505b60018203915062001949565b509392505050565b600a81565b620019a262002d1c565b6001805480602002602001604051908101604052809291908181526020018280548015620019fa57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311620019db575b5050505050905090565b600062001a1182620024b8565b6020015192915050565b6000600382161562001a30575060006200102a565b606461ffff83160661ffff161562001a4b575060016200102a565b61019061ffff83160661ffff161562001a67575060006200102a565b506001919050565b600f5460009033600160a060020a0390811691161462001a8e57600080fd5b60006003805460ff169081111562001aa257fe5b1462001aad57600080fd5b600160a060020a03821660009081526010602052604090205462001ad290346200236b565b600160a060020a0390921660009081526010602052604090209190915550565b600d5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001b2b57508260ff166003145b8062001b3a57508260ff166005145b8062001b4957508260ff166007145b8062001b5857508260ff166008145b8062001b6757508260ff16600a145b8062001b7657508260ff16600c145b1562001b855750601f62001be6565b8260ff166004148062001b9b57508260ff166006145b8062001baa57508260ff166009145b8062001bb957508260ff16600b145b1562001bc85750601e62001be6565b62001bd38262001a1b565b1562001be25750601d62001be6565b50601c5b92915050565b60145481565b601254600090600160a060020a03161580159062001c655750601254600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001c4b57600080fd5b5af1151562001c5957600080fd5b50505060405180519050155b801562001cca5750601254600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001cb057600080fd5b5af1151562001cbe57600080fd5b50505060405180519050115b801562001d2e5750601254600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d1257600080fd5b5af1151562001d2057600080fd5b505050604051805190504210155b801562001d8f5750601254600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d7657600080fd5b5af1151562001d8457600080fd5b505050604051805190505b1562001d9e5750600062001593565b5060155460ff1690565b600160a060020a03331660009081526002602052604090205460ff16151560011462001dd357600080fd5b62001ddd6200261b565b565b60035460ff1681565b600b54600160a060020a031681565b601154600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601254600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff16151560011462001e5e57600080fd5b62001e6862001bf2565b151562001e7457600080fd5b600e546000901162001e8557600080fd5b50600e80546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151562000fd457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a0390811691161462001f0357600080fd5b62001f0e8162002b6a565b50565b6000603c80836200101b565b600080600380805460ff169081111562001f3357fe5b1462001f3e57600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001f9457600080fd5b5af1151562001fa257600080fd5b50505060405180519250506000821162001fbb57600080fd5b6200203862001fd58330600160a060020a03163162002325565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200201a57600080fd5b5af115156200202857600080fd5b5050506040518051905062002353565b9050600081116200204857600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020a457600080fd5b5af11515620020b257600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620020e857600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600c5481565b600060016003805460ff16908111156200217d57fe5b146200218857600080fd5b600160a060020a03331660009081526010602052604081205411620021ac57600080fd5b50600160a060020a0333818116600090815260106020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200222957600080fd5b5af115156200223757600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200228557600080fd5b5af115156200229357600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620022c957600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200234357508284828115156200234057fe5b04145b15156200234c57fe5b9392505050565b60008082848115156200236257fe5b04949350505050565b6000828201838110156200234c57fe5b60006200238a82600262002353565b9050600a811115620023a157600a601355620023a7565b60138190555b5050565b600080620023c9620023c042600d5462002cbd565b600c5462002325565b90508030600160a060020a0316311015620023eb5750600160a060020a033016315b8091505b5090565b60008060006014541180156200240b57506014544210155b801562002428575062002424601454620151806200236b565b4211155b15620024385760019150620023ef565b601654811015620024b05760168054829081106200245257fe5b9060005260206000209001544210158015620024975750620024936016828154811015156200247d57fe5b906000526020600020900154620151806200236b565b4211155b15620024a75760019150620023ef565b60010162002438565b600091505090565b620024c262002d2e565b6000808080620024d286620018f9565b61ffff168552620024e56107b262001af8565b620024f5865161ffff1662001af8565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff8316116200256e576200253a82865162001b13565b60ff16620151800290508584820111156200255e5760ff821660208601526200256e565b9283019260019091019062002521565b600191505b620025848560200151865162001b13565b60ff168260ff16111515620025c557858462015180011115620025b05760ff82166040860152620025c5565b62015180939093019260019091019062002573565b620025d08662001011565b60ff166060860152620025e38662001f11565b60ff166080860152620025f68662001755565b60ff1660a086015262002609866200125c565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200262f57fe5b146200263a57600080fd5b6003805460ff1916811790819055600a54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620026a957600080fd5b5af11515620026b757600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200270557600080fd5b5af115156200271357600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200277a57600080fd5b5af115156200278857600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620027d657600080fd5b5af11515620027e457600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200284b57600080fd5b5af115156200285957600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620028a757600080fd5b5af11515620028b557600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200291c57600080fd5b5af115156200292a57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200297857600080fd5b5af115156200298657600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029ed57600080fd5b5af11515620029fb57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a4957600080fd5b5af1151562002a5757600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002abe57600080fd5b5af1151562002acc57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002b1a57600080fd5b5af1151562002b2857600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002bd05760006002600060018581548110151562002b8f57fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002b6e565b5060005b825181101562002c2c5760016002600085848151811062002bf157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002bd4565b600183805162002c4192916020019062002d6a565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b8381101562002ca557808201518382015260200162002c8b565b505050509050019250505060405180910390a1505050565b60008183101562002cca57fe5b50900390565b604051610a628062002df383390190565b6040516109de806200385583390190565b610180604051908101604052600c815b60008152600019909101906020018162002d025790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b82805482825590600052602060002090810192821562002dc4579160200282015b8281111562002dc45782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062002d8b565b50620023ef92620015939250905b80821115620023ef578054600160a060020a031916815560010162002dd2560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820bbb2367488535f5e33e5dc9150c16e7010c4758f5e9013a239581dc0d78a85ca0029000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bbe89a5fe1f1eea2224bc5f7428e88c238a191a70000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d

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

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f
Arg [1] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [2] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [3] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [4] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [5] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [6] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 000000000000000000000000bbe89a5fe1f1eea2224bc5f7428e88c238a191a7
Arg [10] : 0000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d


   Swarm Source:
bzzr://bbb2367488535f5e33e5dc9150c16e7010c4758f5e9013a239581dc0d78a85ca

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.