ETH Price: $1,855.34 (-5.21%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Execute Signatur...245140622026-02-22 17:59:3529 hrs ago1771783175
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...244367692026-02-11 23:19:3512 days ago1770851975
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...243666242026-02-02 3:55:2321 days ago1770004523
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...243632462026-02-01 16:35:5922 days ago1769963759
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...243563322026-01-31 17:24:4723 days ago1769880287
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...239716782025-12-09 0:34:1176 days ago1765240451
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...239190482025-12-01 13:52:2384 days ago1764597143
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...239187292025-12-01 12:48:3584 days ago1764593315
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...239172262025-12-01 7:44:5984 days ago1764575099
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...238528172025-11-22 6:50:3593 days ago1763794235
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...238465272025-11-21 9:34:3594 days ago1763717675
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...238465092025-11-21 9:30:5994 days ago1763717459
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...237277602025-11-04 18:32:11111 days ago1762281131
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...237016892025-11-01 3:05:11114 days ago1761966311
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...236844232025-10-29 17:04:35117 days ago1761757475
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...236134622025-10-19 18:27:11127 days ago1760898431
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...235562692025-10-11 18:28:23135 days ago1760207303
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...235513612025-10-11 2:00:11135 days ago1760148011
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...235502642025-10-10 22:19:23136 days ago1760134763
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...235094602025-10-05 5:24:35141 days ago1759641875
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...234480732025-09-26 15:25:59150 days ago1758900359
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...232715052025-09-01 23:14:47175 days ago1756768487
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...232687372025-09-01 13:59:11175 days ago1756735151
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...232620022025-08-31 15:23:59176 days ago1756653839
0x88c8A82b...f20E86BC4
0 ETH
Execute Signatur...232504012025-08-30 0:35:23177 days ago1756514123
0x88c8A82b...f20E86BC4
0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ForeignBridgeErcToErc

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-02-04
*/

// File: contracts/libraries/SafeMath.sol

pragma solidity 0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: contracts/IBridgeValidators.sol

pragma solidity 0.4.24;


interface IBridgeValidators {
    function isValidator(address _validator) public view returns(bool);
    function requiredSignatures() public view returns(uint256);
    function owner() public view returns(address);
    function validatorsList() public view returns(address[]);
}

// File: contracts/libraries/Message.sol

pragma solidity 0.4.24;



library Message {

    function addressArrayContains(address[] array, address value) internal pure returns (bool) {
        for (uint256 i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return true;
            }
        }
        return false;
    }
    // layout of message :: bytes:
    // offset  0: 32 bytes :: uint256 - message length
    // offset 32: 20 bytes :: address - recipient address
    // offset 52: 32 bytes :: uint256 - value
    // offset 84: 32 bytes :: bytes32 - transaction hash
    // offset 104: 20 bytes :: address - contract address to prevent double spending

    // bytes 1 to 32 are 0 because message length is stored as little endian.
    // mload always reads 32 bytes.
    // so we can and have to start reading recipient at offset 20 instead of 32.
    // if we were to read at 32 the address would contain part of value and be corrupted.
    // when reading from offset 20 mload will read 12 zero bytes followed
    // by the 20 recipient address bytes and correctly convert it into an address.
    // this saves some storage/gas over the alternative solution
    // which is padding address to 32 bytes and reading recipient at offset 32.
    // for more details see discussion in:
    // https://github.com/paritytech/parity-bridge/issues/61
    function parseMessage(bytes message)
        internal
        pure
        returns(address recipient, uint256 amount, bytes32 txHash, address contractAddress)
    {
        require(isMessageValid(message));
        assembly {
            recipient := and(mload(add(message, 20)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
            amount := mload(add(message, 52))
            txHash := mload(add(message, 84))
            contractAddress := mload(add(message, 104))
        }
    }

    function isMessageValid(bytes _msg) internal pure returns(bool) {
        return _msg.length == requiredMessageLength();
    }

    function requiredMessageLength() internal pure returns(uint256) {
        return 104;
    }

    function recoverAddressFromSignedMessage(bytes signature, bytes message) internal pure returns (address) {
        require(signature.length == 65);
        bytes32 r;
        bytes32 s;
        bytes1 v;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := mload(add(signature, 0x60))
        }
        return ecrecover(hashMessage(message), uint8(v), r, s);
    }

    function hashMessage(bytes message) internal pure returns (bytes32) {
        bytes memory prefix = "\x19Ethereum Signed Message:\n";
        // message is always 84 length
        string memory msgLength = "104";
        return keccak256(abi.encodePacked(prefix, msgLength, message));
    }

    function hasEnoughValidSignatures(
        bytes _message,
        uint8[] _vs,
        bytes32[] _rs,
        bytes32[] _ss,
        IBridgeValidators _validatorContract) internal view {
        require(isMessageValid(_message));
        uint256 requiredSignatures = _validatorContract.requiredSignatures();
        require(_vs.length >= requiredSignatures);
        bytes32 hash = hashMessage(_message);
        address[] memory encounteredAddresses = new address[](requiredSignatures);

        for (uint256 i = 0; i < requiredSignatures; i++) {
            address recoveredAddress = ecrecover(hash, _vs[i], _rs[i], _ss[i]);
            require(_validatorContract.isValidator(recoveredAddress));
            if (addressArrayContains(encounteredAddresses, recoveredAddress)) {
                revert();
            }
            encounteredAddresses[i] = recoveredAddress;
        }
    }
}

// File: contracts/IOwnedUpgradeabilityProxy.sol

pragma solidity 0.4.24;


interface IOwnedUpgradeabilityProxy {
    function proxyOwner() public view returns (address);
}

// File: contracts/upgradeable_contracts/OwnedUpgradeability.sol

pragma solidity 0.4.24;



contract OwnedUpgradeability {

    function upgradeabilityAdmin() public view returns (address) {
        return IOwnedUpgradeabilityProxy(this).proxyOwner();
    }

    // Avoid using onlyProxyOwner name to prevent issues with implementation from proxy contract
    modifier onlyIfOwnerOfProxy() {
        require(msg.sender == upgradeabilityAdmin());
        _;
    }
}

// File: contracts/upgradeability/EternalStorage.sol

pragma solidity 0.4.24;


/**
 * @title EternalStorage
 * @dev This contract holds all the necessary state variables to carry out the storage of any contract.
 */
contract EternalStorage {

    mapping(bytes32 => uint256) internal uintStorage;
    mapping(bytes32 => string) internal stringStorage;
    mapping(bytes32 => address) internal addressStorage;
    mapping(bytes32 => bytes) internal bytesStorage;
    mapping(bytes32 => bool) internal boolStorage;
    mapping(bytes32 => int256) internal intStorage;

}

// File: contracts/upgradeable_contracts/Validatable.sol

pragma solidity 0.4.24;




contract Validatable is EternalStorage {
    function validatorContract() public view returns(IBridgeValidators) {
        return IBridgeValidators(addressStorage[keccak256(abi.encodePacked("validatorContract"))]);
    }

    modifier onlyValidator() {
        require(validatorContract().isValidator(msg.sender));
        _;
    }

    function requiredSignatures() public view returns(uint256) {
        return validatorContract().requiredSignatures();
    }

}

// File: contracts/upgradeable_contracts/Ownable.sol

pragma solidity 0.4.24;



/**
 * @title Ownable
 * @dev This contract has an owner address providing basic authorization control
 */
contract Ownable is EternalStorage {
    /**
    * @dev Event to show ownership has been transferred
    * @param previousOwner representing the address of the previous owner
    * @param newOwner representing the address of the new owner
    */
    event OwnershipTransferred(address previousOwner, address newOwner);

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(msg.sender == owner());
        _;
    }

    /**
    * @dev Tells the address of the owner
    * @return the address of the owner
    */
    function owner() public view returns (address) {
        return addressStorage[keccak256(abi.encodePacked("owner"))];
    }

    /**
    * @dev Allows the current owner to transfer control of the contract to a newOwner.
    * @param newOwner the address to transfer ownership to.
    */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        setOwner(newOwner);
    }

    /**
    * @dev Sets a new owner address
    */
    function setOwner(address newOwner) internal {
        emit OwnershipTransferred(owner(), newOwner);
        addressStorage[keccak256(abi.encodePacked("owner"))] = newOwner;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

pragma solidity ^0.4.23;


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: contracts/upgradeable_contracts/BasicBridge.sol

pragma solidity 0.4.24;









contract BasicBridge is EternalStorage, Validatable, Ownable, OwnedUpgradeability {
    using SafeMath for uint256;

    event GasPriceChanged(uint256 gasPrice);
    event RequiredBlockConfirmationChanged(uint256 requiredBlockConfirmations);
    event DailyLimitChanged(uint256 newLimit);
    event ExecutionDailyLimitChanged(uint256 newLimit);

    function getBridgeInterfacesVersion() public pure returns(uint64 major, uint64 minor, uint64 patch) {
        return (2, 2, 0);
    }

    function setGasPrice(uint256 _gasPrice) public onlyOwner {
        require(_gasPrice > 0);
        uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _gasPrice;
        emit GasPriceChanged(_gasPrice);
    }

    function gasPrice() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("gasPrice"))];
    }

    function setRequiredBlockConfirmations(uint256 _blockConfirmations) public onlyOwner {
        require(_blockConfirmations > 0);
        uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _blockConfirmations;
        emit RequiredBlockConfirmationChanged(_blockConfirmations);
    }

    function requiredBlockConfirmations() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))];
    }

    function deployedAtBlock() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))];
    }

    function setTotalSpentPerDay(uint256 _day, uint256 _value) internal {
        uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))] = _value;
    }

    function totalSpentPerDay(uint256 _day) public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))];
    }

    function setTotalExecutedPerDay(uint256 _day, uint256 _value) internal {
        uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))] = _value;
    }

    function totalExecutedPerDay(uint256 _day) public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))];
    }

    function minPerTx() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("minPerTx"))];
    }

    function maxPerTx() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("maxPerTx"))];
    }

    function executionMaxPerTx() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))];
    }

    function setInitialize(bool _status) internal {
        boolStorage[keccak256(abi.encodePacked("isInitialized"))] = _status;
    }

    function isInitialized() public view returns(bool) {
        return boolStorage[keccak256(abi.encodePacked("isInitialized"))];
    }

    function getCurrentDay() public view returns(uint256) {
        return now / 1 days;
    }

    function setDailyLimit(uint256 _dailyLimit) public onlyOwner {
        uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit;
        emit DailyLimitChanged(_dailyLimit);
    }

    function dailyLimit() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("dailyLimit"))];
    }

    function setExecutionDailyLimit(uint256 _dailyLimit) public onlyOwner {
        uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _dailyLimit;
        emit ExecutionDailyLimitChanged(_dailyLimit);
    }

    function executionDailyLimit() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))];
    }

    function setExecutionMaxPerTx(uint256 _maxPerTx) external onlyOwner {
        require(_maxPerTx < executionDailyLimit());
        uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _maxPerTx;
    }

    function setMaxPerTx(uint256 _maxPerTx) external onlyOwner {
        require(_maxPerTx < dailyLimit());
        uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx;
    }

    function setMinPerTx(uint256 _minPerTx) external onlyOwner {
        require(_minPerTx < dailyLimit() && _minPerTx < maxPerTx());
        uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx;
    }

    function withinLimit(uint256 _amount) public view returns(bool) {
        uint256 nextLimit = totalSpentPerDay(getCurrentDay()).add(_amount);
        return dailyLimit() >= nextLimit && _amount <= maxPerTx() && _amount >= minPerTx();
    }

    function withinExecutionLimit(uint256 _amount) public view returns(bool) {
        uint256 nextLimit = totalExecutedPerDay(getCurrentDay()).add(_amount);
        return executionDailyLimit() >= nextLimit && _amount <= executionMaxPerTx();
    }

    function claimTokens(address _token, address _to) public onlyIfOwnerOfProxy {
        require(_to != address(0));
        if (_token == address(0)) {
            _to.transfer(address(this).balance);
            return;
        }

        ERC20Basic token = ERC20Basic(_token);
        uint256 balance = token.balanceOf(this);
        require(token.transfer(_to, balance));
    }


    function isContract(address _addr) internal view returns (bool)
    {
        uint length;
        assembly { length := extcodesize(_addr) }
        return length > 0;
    }
}

// File: contracts/upgradeable_contracts/BasicForeignBridge.sol

pragma solidity 0.4.24;






contract BasicForeignBridge is EternalStorage, Validatable {
    using SafeMath for uint256;
    /// triggered when relay of deposit from HomeBridge is complete
    event RelayedMessage(address recipient, uint value, bytes32 transactionHash);
    function executeSignatures(uint8[] vs, bytes32[] rs, bytes32[] ss, bytes message) external {
        Message.hasEnoughValidSignatures(message, vs, rs, ss, validatorContract());
        address recipient;
        uint256 amount;
        bytes32 txHash;
        address contractAddress;
        (recipient, amount, txHash, contractAddress) = Message.parseMessage(message);
        if (messageWithinLimits(amount)) {
            require(contractAddress == address(this));
            require(!relayedMessages(txHash));
            setRelayedMessages(txHash, true);
            require(onExecuteMessage(recipient, amount));
            emit RelayedMessage(recipient, amount, txHash);
        } else {
            onFailedMessage(recipient, amount, txHash);
        }
    }

    function onExecuteMessage(address, uint256) internal returns(bool);

    function setRelayedMessages(bytes32 _txHash, bool _status) internal {
        boolStorage[keccak256(abi.encodePacked("relayedMessages", _txHash))] = _status;
    }

    function relayedMessages(bytes32 _txHash) public view returns(bool) {
        return boolStorage[keccak256(abi.encodePacked("relayedMessages", _txHash))];
    }

    function messageWithinLimits(uint256) internal view returns(bool);

    function onFailedMessage(address, uint256, bytes32) internal;
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.4.23;



/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view returns (uint256);

  function transferFrom(address from, address to, uint256 value)
    public returns (bool);

  function approve(address spender, uint256 value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: contracts/ERC677.sol

pragma solidity 0.4.24;



contract ERC677 is ERC20 {
    event Transfer(address indexed from, address indexed to, uint value, bytes data);

    function transferAndCall(address, uint, bytes) external returns (bool);

}

// File: contracts/IBurnableMintableERC677Token.sol

pragma solidity 0.4.24;



contract IBurnableMintableERC677Token is ERC677 {
    function mint(address, uint256) public returns (bool);
    function burn(uint256 _value) public;
    function claimTokens(address _token, address _to) public;
}

// File: contracts/ERC677Receiver.sol

pragma solidity 0.4.24;


contract ERC677Receiver {
  function onTokenTransfer(address _from, uint _value, bytes _data) external returns(bool);
}

// File: contracts/upgradeable_contracts/FeeManager.sol

pragma solidity 0.4.24;






contract FeeManager is EternalStorage, Ownable {
    using SafeMath for uint256;

    event FeePercentChanged(uint newFeePercent);

    /**
    * @dev Sets current fee percent. It has 2 decimal places.
    * e.g. value 1337 has to be interpreted as 13.37%
    * @param _feePercent Fee percent.
    */
    function setFeePercent(uint256 _feePercent) public onlyOwner {
        require(_feePercent < 10000, "Invalid fee percent");
        uintStorage[keccak256(abi.encodePacked("feePercent"))] = _feePercent;
        emit FeePercentChanged(_feePercent);
    }

    /**
    * @dev Returns current fee percent. It has 2 decimal places.
    * e.g. value 1337 has to be interpreted as 13.37%
    * @return fee percent.
    */
    function feePercent() public view returns(uint256) {
        return uintStorage[keccak256(abi.encodePacked("feePercent"))];
    }

    function subtractFee(uint _value) public view returns(uint256) {
        uint256 fullPercent = 10000;
        return _value.sub(_value.mul(feePercent()).div(fullPercent));
    }
}

// File: contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErcToErc.sol

pragma solidity 0.4.24;









contract ForeignBridgeErcToErc is BasicBridge, BasicForeignBridge, FeeManager {

    event RelayedMessage(address recipient, uint value, bytes32 transactionHash);

    function initialize(
        address _validatorContract,
        address _erc20token,
        uint256 _requiredBlockConfirmations,
        uint256 _gasPrice,
        uint256 _maxPerTx,
        uint256 _homeDailyLimit,
        uint256 _homeMaxPerTx,
        address _owner,
        uint256 _feePercent
    ) public returns(bool) {
        require(!isInitialized());
        require(_validatorContract != address(0) && isContract(_validatorContract));
        require(_requiredBlockConfirmations != 0);
        require(_gasPrice > 0);
        require(_homeMaxPerTx < _homeDailyLimit);
        require(_owner != address(0));
        require(_feePercent < 10000, "Invalid fee percent");
        addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract;
        setErc20token(_erc20token);
        uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number;
        uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations;
        uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _gasPrice;
        uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx;
        uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit;
        uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx;
        uintStorage[keccak256(abi.encodePacked("feePercent"))] = _feePercent;
        setOwner(_owner);
        setInitialize(true);
        return isInitialized();
    }

    function getBridgeMode() public pure returns(bytes4 _data) {
        return bytes4(keccak256(abi.encodePacked("erc-to-erc-core")));
    }

    function claimTokens(address _token, address _to) public onlyIfOwnerOfProxy {
        require(_token != address(erc20token()));
        super.claimTokens(_token, _to);
    }

    function erc20token() public view returns(ERC20Basic) {
        return ERC20Basic(addressStorage[keccak256(abi.encodePacked("erc20token"))]);
    }

    function tokenTransfer(address _recipient, uint256 _amount) internal returns(bool) {
        return erc20token().call(bytes4(keccak256("transfer(address,uint256)")), _recipient, _amount);
    }

    function onExecuteMessage(address _recipient, uint256 _amount) internal returns(bool){
        setTotalExecutedPerDay(getCurrentDay(), totalExecutedPerDay(getCurrentDay()).add(_amount));
        if (feePercent() == 0) {
            return tokenTransfer(_recipient, _amount);
        } else {
            bool result = true;
            uint256 userValue = subtractFee(_amount);
            address[] memory validators = validatorContract().validatorsList();
            uint256 entireValidatorValue = _amount.sub(userValue);
            uint256 particularValidatorValue = entireValidatorValue.div(validators.length);
            for(uint256 i = 0; i < validators.length - 1; i++) {
                result = result && tokenTransfer(validators[i], particularValidatorValue);
            }
            // to avoid round error we need to calculate the fee value in other way for the last validator
            uint256 lastValidatorValue = entireValidatorValue.sub(
                particularValidatorValue.mul(validators.length.sub(1))
            );
            result = result && tokenTransfer(validators[validators.length - 1], lastValidatorValue);
            result = result && tokenTransfer(_recipient, userValue);
            return result;
        }
    }

    function setErc20token(address _token) private {
        require(_token != address(0) && isContract(_token));
        addressStorage[keccak256(abi.encodePacked("erc20token"))] = _token;
    }

    function messageWithinLimits(uint256 _amount) internal view returns(bool) {
        return withinExecutionLimit(_amount);
    }

    function onFailedMessage(address, uint256, bytes32) internal {
        revert();
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"erc20token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_txHash","type":"bytes32"}],"name":"relayedMessages","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"vs","type":"uint8[]"},{"name":"rs","type":"bytes32[]"},{"name":"ss","type":"bytes32[]"},{"name":"message","type":"bytes"}],"name":"executeSignatures","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_day","type":"uint256"}],"name":"totalSpentPerDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dailyLimit","type":"uint256"}],"name":"setExecutionDailyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requiredBlockConfirmations","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBridgeMode","outputs":[{"name":"_data","type":"bytes4"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"executionDailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_day","type":"uint256"}],"name":"totalExecutedPerDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_validatorContract","type":"address"},{"name":"_erc20token","type":"address"},{"name":"_requiredBlockConfirmations","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_maxPerTx","type":"uint256"},{"name":"_homeDailyLimit","type":"uint256"},{"name":"_homeMaxPerTx","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_feePercent","type":"uint256"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_feePercent","type":"uint256"}],"name":"setFeePercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feePercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withinExecutionLimit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"executionMaxPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requiredSignatures","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"validatorContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedAtBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBridgeInterfacesVersion","outputs":[{"name":"major","type":"uint64"},{"name":"minor","type":"uint64"},{"name":"patch","type":"uint64"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_minPerTx","type":"uint256"}],"name":"setMinPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blockConfirmations","type":"uint256"}],"name":"setRequiredBlockConfirmations","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dailyLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gasPrice","type":"uint256"}],"name":"setGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"subtractFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeabilityAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withinLimit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxPerTx","type":"uint256"}],"name":"setExecutionMaxPerTx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"transactionHash","type":"bytes32"}],"name":"RelayedMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newFeePercent","type":"uint256"}],"name":"FeePercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gasPrice","type":"uint256"}],"name":"GasPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"requiredBlockConfirmations","type":"uint256"}],"name":"RequiredBlockConfirmationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newLimit","type":"uint256"}],"name":"DailyLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newLimit","type":"uint256"}],"name":"ExecutionDailyLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b50612fe1806100206000396000f3006080604052600436106101a85763ffffffff60e060020a6000350416631dcea42781146101ad57806321d800ec146101de578063232a2c1d1461020a5780632bd0bb0514610250578063392e53cd1461027a5780633dd95d1b1461028f5780633e6968b6146102a75780633f0a9f65146102bc578063437764df146102d157806343b37dd31461031b5780634fb3fef71461033057806351c764e01461034857806367eeba0c1461038d57806369ffa08a146103a25780637ce3489b146103c95780637fd6f15c146103e1578063879ce676146103f65780638aa1949a1461040e5780638d068043146104235780638da5cb5b14610438578063994390891461044d5780639a454b99146104625780639cb7595a14610477578063a2a6ca27146104b8578063acf5c689146104d0578063b20d30a9146104e8578063bf1fe42014610500578063c056765614610518578063c6f6f21614610530578063df0ad3de14610548578063df25f3f01461055d578063ea9f496814610572578063f20151e11461058a578063f2fde38b146105a2578063f968adbe146105c3578063fe173b97146105d8575b600080fd5b3480156101b957600080fd5b506101c26105ed565b60408051600160a060020a039092168252519081900360200190f35b3480156101ea57600080fd5b506101f66004356106ab565b604080519115158252519081900360200190f35b34801561021657600080fd5b5061024e6024600480358281019290820135918135808301929082013591604435808301929082013591606435918201910135610774565b005b34801561025c57600080fd5b5061026860043561094c565b60408051918252519081900360200190f35b34801561028657600080fd5b506101f6610a09565b34801561029b57600080fd5b5061024e600435610ac1565b3480156102b357600080fd5b50610268610bc3565b3480156102c857600080fd5b50610268610bcc565b3480156102dd57600080fd5b506102e6610c80565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561032757600080fd5b50610268610d23565b34801561033c57600080fd5b50610268600435610d96565b34801561035457600080fd5b506101f6600160a060020a0360043581169060243581169060443590606435906084359060a4359060c4359060e4351661010435610e11565b34801561039957600080fd5b506102686114b3565b3480156103ae57600080fd5b5061024e600160a060020a0360043581169060243516611526565b3480156103d557600080fd5b5061024e600435611570565b3480156103ed57600080fd5b506102686116e2565b34801561040257600080fd5b506101f6600435611755565b34801561041a57600080fd5b5061026861179f565b34801561042f57600080fd5b50610268611812565b34801561044457600080fd5b506101c261188a565b34801561045957600080fd5b506101c26118fe565b34801561046e57600080fd5b50610268611972565b34801561048357600080fd5b5061048c6119e5565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b3480156104c457600080fd5b5061024e6004356119ef565b3480156104dc57600080fd5b5061024e600435611ae6565b3480156104f457600080fd5b5061024e600435611bf5565b34801561050c57600080fd5b5061024e600435611cf7565b34801561052457600080fd5b50610268600435611e06565b34801561053c57600080fd5b5061024e600435611e43565b34801561055457600080fd5b506101c2611ee4565b34801561056957600080fd5b50610268611f24565b34801561057e57600080fd5b506101f6600435611f97565b34801561059657600080fd5b5061024e600435611fe7565b3480156105ae57600080fd5b5061024e600160a060020a0360043516612088565b3480156105cf57600080fd5b506102686120c5565b3480156105e457600080fd5b50610268612138565b60006002600060405160200180807f6572633230746f6b656e00000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b602083106106625780518252601f199092019160209182019101610643565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054600160a060020a0316949350505050565b6000600460008360405160200180807f72656c617965644d657373616765730000000000000000000000000000000000815250600f0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106107305780518252601f199092019160209182019101610711565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1695945050505050565b60008060008061084c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508d8d808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050508c8c808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284375061084794506118fe9350505050565b6121ab565b61088586868080601f01602080910402602001604051908101604052809392919081815260200183838082843750612418945050505050565b929650909450925090506108988361245e565b1561093357600160a060020a03811630146108b257600080fd5b6108bb826106ab565b156108c557600080fd5b6108d082600161246f565b6108da8484612541565b15156108e557600080fd5b60408051600160a060020a03861681526020810185905280820184905290517f4ab7d581336d92edbea22636a613e8e76c99ac7f91137c1523db38dbfb3bf3299181900360600190a161093e565b61093e8484846101a8565b505050505050505050505050565b60008060008360405160200180807f746f74616c5370656e74506572446179000000000000000000000000000000008152506010018281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106109c85780518252601f1990920191602091820191016109a9565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205495945050505050565b60006004600060405160200180807f6973496e697469616c697a656400000000000000000000000000000000000000815250600d0190506040516020818303038152906040526040518082805190602001908083835b60208310610a7e5780518252601f199092019160209182019101610a5f565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff16949350505050565b610ac961188a565b600160a060020a03163314610add57600080fd5b8060008060405160200180807f657865637574696f6e4461696c794c696d69740000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310610b505780518252601f199092019160209182019101610b31565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f9bebf928b90863f24cc31f726a3a7545efd409f1dcf552301b1ee3710da70d3b9350918290030190a150565b62015180420490565b600080600060405160200180807f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000815250601a0190506040516020818303038152906040526040518082805190602001908083835b60208310610c405780518252601f199092019160209182019101610c21565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054949350505050565b600060405160200180807f6572632d746f2d6572632d636f72650000000000000000000000000000000000815250600f0190506040516020818303038152906040526040518082805190602001908083835b60208310610cf15780518252601f199092019160209182019101610cd2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b600080600060405160200180807f657865637574696f6e4461696c794c696d697400000000000000000000000000815250601301905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b60008060008360405160200180807f746f74616c457865637574656450657244617900000000000000000000000000815250601301828152602001915050604051602081830303815290604052604051808280519060200190808383602083106109c85780518252601f1990920191602091820191016109a9565b6000610e1b610a09565b15610e2557600080fd5b600160a060020a038a1615801590610e415750610e418a61276a565b1515610e4c57600080fd5b871515610e5857600080fd5b60008711610e6557600080fd5b848410610e7157600080fd5b600160a060020a0383161515610e8657600080fd5b6127108210610ef657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206665652070657263656e7400000000000000000000000000604482015290519081900360640190fd5b896002600060405160200180807f76616c696461746f72436f6e747261637400000000000000000000000000000081525060110190506040516020818303038152906040526040518082805190602001908083835b60208310610f6a5780518252601f199092019160209182019101610f4b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03959095169490941790935550610fdb91508a9050612772565b4360008060405160200180807f6465706c6f7965644174426c6f636b0000000000000000000000000000000000815250600f0190506040516020818303038152906040526040518082805190602001908083835b6020831061104e5780518252601f19909201916020918201910161102f565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000818401528151601a818303018152603a9091019182905280518c949384939182918401908083835b602083106110f85780518252601f1990920191602091820191016110d9565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f6761735072696365000000000000000000000000000000000000000000000000818401528151600881830301815260289091019182905280518b949384939182918401908083835b602083106111a25780518252601f199092019160209182019101611183565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f6d61785065725478000000000000000000000000000000000000000000000000818401528151600881830301815260289091019182905280518a949384939182918401908083835b6020831061124c5780518252601f19909201916020918201910161122d565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f657865637574696f6e4461696c794c696d6974000000000000000000000000008184015281516013818303018152603390910191829052805189949384939182918401908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f657865637574696f6e4d617850657254780000000000000000000000000000008184015281516011818303018152603190910191829052805188949384939182918401908083835b602083106113a05780518252601f199092019160209182019101611381565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f66656550657263656e7400000000000000000000000000000000000000000000818401528151600a818303018152602a90910191829052805186949384939182918401908083835b6020831061144a5780518252601f19909201916020918201910161142b565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002093909355506114939150849050612876565b61149d6001612934565b6114a5610a09565b9a9950505050505050505050565b600080600060405160200180807f6461696c794c696d697400000000000000000000000000000000000000000000815250600a01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b61152e611ee4565b600160a060020a0316331461154257600080fd5b61154a6105ed565b600160a060020a038381169116141561156257600080fd5b61156c82826129f5565b5050565b61157861188a565b600160a060020a0316331461158c57600080fd5b61271081106115fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206665652070657263656e7400000000000000000000000000604482015290519081900360640190fd5b8060008060405160200180807f66656550657263656e7400000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b6020831061166f5780518252601f199092019160209182019101611650565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f91955c12515f4eb8f1ff79df82d1933ff11b6d3b9a3019c6568840616ec36a749350918290030190a150565b600080600060405160200180807f66656550657263656e7400000000000000000000000000000000000000000000815250600a01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b6000806117788361176c611767610bc3565b610d96565b9063ffffffff612bb116565b905080611783610d23565b10158015611798575061179461179f565b8311155b9392505050565b600080600060405160200180807f657865637574696f6e4d61785065725478000000000000000000000000000000815250601101905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600061181c6118fe565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505050506040513d602081101561188357600080fd5b5051905090565b60006002600060405160200180807f6f776e65720000000000000000000000000000000000000000000000000000008152506005019050604051602081830303815290604052604051808280519060200190808383602083106106625780518252601f199092019160209182019101610643565b60006002600060405160200180807f76616c696461746f72436f6e74726163740000000000000000000000000000008152506011019050604051602081830303815290604052604051808280519060200190808383602083106106625780518252601f199092019160209182019101610643565b600080600060405160200180807f6465706c6f7965644174426c6f636b0000000000000000000000000000000000815250600f01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b6002806000909192565b6119f761188a565b600160a060020a03163314611a0b57600080fd5b611a136114b3565b81108015611a275750611a246120c5565b81105b1515611a3257600080fd5b8060008060405160200180807f6d696e506572547800000000000000000000000000000000000000000000000081525060080190506040516020818303038152906040526040518082805190602001908083835b60208310611aa55780518252601f199092019160209182019101611a86565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000209390935550505050565b611aee61188a565b600160a060020a03163314611b0257600080fd5b60008111611b0f57600080fd5b8060008060405160200180807f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000815250601a0190506040516020818303038152906040526040518082805190602001908083835b60208310611b825780518252601f199092019160209182019101611b63565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f4fb76205cd57c896b21511d2114137d8e901b4ccd659e1a0f97d6306795264fb9350918290030190a150565b611bfd61188a565b600160a060020a03163314611c1157600080fd5b8060008060405160200180807f6461696c794c696d697400000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b60208310611c845780518252601f199092019160209182019101611c65565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517fad4123ae17c414d9c6d2fec478b402e6b01856cc250fd01fbfd252fda0089d3c9350918290030190a150565b611cff61188a565b600160a060020a03163314611d1357600080fd5b60008111611d2057600080fd5b8060008060405160200180807f676173507269636500000000000000000000000000000000000000000000000081525060080190506040516020818303038152906040526040518082805190602001908083835b60208310611d935780518252601f199092019160209182019101611d74565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f52264b89e0fceafb26e79fd49ef8a366eb6297483bf4035b027f0c99a7ad512e9350918290030190a150565b6000612710611798611e3682611e2a611e1d6116e2565b879063ffffffff612bcb16565b9063ffffffff612bf616565b849063ffffffff612c0d16565b611e4b61188a565b600160a060020a03163314611e5f57600080fd5b611e676114b3565b8110611e7257600080fd5b8060008060405160200180807f6d61785065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310611aa55780518252601f199092019160209182019101611a86565b600030600160a060020a031663025313a26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561185957600080fd5b600080600060405160200180807f6d696e5065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600080611fae8361176c611fa9610bc3565b61094c565b905080611fb96114b3565b10158015611fce5750611fca6120c5565b8311155b80156117985750611fdd611f24565b9092101592915050565b611fef61188a565b600160a060020a0316331461200357600080fd5b61200b610d23565b811061201657600080fd5b8060008060405160200180807f657865637574696f6e4d61785065725478000000000000000000000000000000815250601101905060405160208183030381529060405260405180828051906020019080838360208310611aa55780518252601f199092019160209182019101611a86565b61209061188a565b600160a060020a031633146120a457600080fd5b600160a060020a03811615156120b957600080fd5b6120c281612876565b50565b600080600060405160200180807f6d61785065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600080600060405160200180807f6761735072696365000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b60008060606000806121bc8a612c1f565b15156121c757600080fd5b85600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561220557600080fd5b505af1158015612219573d6000803e3d6000fd5b505050506040513d602081101561222f57600080fd5b5051895190955085111561224257600080fd5b61224b8a612c33565b935084604051908082528060200260200182016040528015612277578160200160208202803883390190505b509250600091505b8482101561240c576001848a8481518110151561229857fe5b906020019060200201518a858151811015156122b057fe5b906020019060200201518a868151811015156122c857fe5b60209081029091018101516040805160008082528185018084529790975260ff9095168582015260608501939093526080840152905160a0808401949293601f19830193908390039091019190865af1158015612329573d6000803e3d6000fd5b50505060206040510351905085600160a060020a031663facd743b826040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050506040513d60208110156123ba57600080fd5b505115156123c757600080fd5b6123d18382612df8565b156123db57600080fd5b8083838151811015156123ea57fe5b600160a060020a0390921660209283029091019091015260019091019061227f565b50505050505050505050565b60008060008061242785612c1f565b151561243257600080fd5b600160a060020a0360148601511693506034850151925060548501519150606885015190509193509193565b600061246982611755565b92915050565b80600460008460405160200180807f72656c617965644d657373616765730000000000000000000000000000000000815250600f0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106124f35780518252601f1990920191602091820191016124d4565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805460ff1916941515949094179093555050505050565b6000806000606060008060008061256d612559610bc3565b6125688b61176c611767610bc3565b612e51565b6125756116e2565b151561258c576125858a8a612f0e565b975061275d565b6001965061259989611e06565b95506125a36118fe565b600160a060020a031663bb8ac08f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261d57600080fd5b81019080805164010000000081111561263557600080fd5b8201602081018481111561264857600080fd5b815185602082028301116401000000008211171561266557600080fd5b5090985061268093508c92508991505063ffffffff612c0d16565b9350612696855185612bf690919063ffffffff16565b9250600091505b60018551038210156126df578680156126d257506126d285838151811015156126c257fe5b9060200190602002015184612f0e565b965060019091019061269d565b6127146127076126fa60018851612c0d90919063ffffffff16565b859063ffffffff612bcb16565b859063ffffffff612c0d16565b9050868015612743575061274385600187510381518110151561273357fe5b9060200190602002015182612f0e565b965086801561275757506127578a87612f0e565b96508697505b5050505050505092915050565b6000903b1190565b600160a060020a0381161580159061278e575061278e8161276a565b151561279957600080fd5b806002600060405160200180807f6572633230746f6b656e00000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b6020831061280d5780518252601f1990920191602091820191016127ee565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03959095169490941790935550505050565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e061289f61188a565b60408051600160a060020a03928316815291841660208301528051918290030190a1806002600060405160200180807f6f776e657200000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040526040518082805190602001908083836020831061280d5780518252601f1990920191602091820191016127ee565b806004600060405160200180807f6973496e697469616c697a656400000000000000000000000000000000000000815250600d0190506040516020818303038152906040526040518082805190602001908083835b602083106129a85780518252601f199092019160209182019101612989565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805460ff19169415159490941790935550505050565b600080612a00611ee4565b600160a060020a03163314612a1457600080fd5b600160a060020a0383161515612a2957600080fd5b600160a060020a0384161515612a7557604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b50612bab565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015612ad957600080fd5b505af1158015612aed573d6000803e3d6000fd5b505050506040513d6020811015612b0357600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b158015612b7457600080fd5b505af1158015612b88573d6000803e3d6000fd5b505050506040513d6020811015612b9e57600080fd5b50511515612bab57600080fd5b50505050565b600082820183811015612bc057fe5b8091505b5092915050565b600080831515612bde5760009150612bc4565b50828202828482811515612bee57fe5b0414612bc057fe5b6000808284811515612c0457fe5b04949350505050565b600082821115612c1957fe5b50900390565b6000612c29612fb0565b8251149050919050565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191825283518085018552600381527f313034000000000000000000000000000000000000000000000000000000000081830152935183516000959385938593899391019182918083835b60208310612ccf5780518252601f199092019160209182019101612cb0565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b60208310612d175780518252601f199092019160209182019101612cf8565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612d5f5780518252601f199092019160209182019101612d40565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310612dc45780518252601f199092019160209182019101612da5565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000805b8351811015612e475782600160a060020a03168482815181101515612e1d57fe5b90602001906020020151600160a060020a03161415612e3f5760019150612bc4565b600101612dfc565b5060009392505050565b806000808460405160200180807f746f74616c4578656375746564506572446179000000000000000000000000008152506013018281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ecc5780518252601f199092019160209182019101612ead565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020939093555050505050565b6000612f186105ed565b600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19695505050505050565b6068905600a165627a7a7230582075d2b32b4b7bf50203ed6ebca25284c3a216d9412e9688de1d16e6e5f5a685210029

Deployed Bytecode

0x6080604052600436106101a85763ffffffff60e060020a6000350416631dcea42781146101ad57806321d800ec146101de578063232a2c1d1461020a5780632bd0bb0514610250578063392e53cd1461027a5780633dd95d1b1461028f5780633e6968b6146102a75780633f0a9f65146102bc578063437764df146102d157806343b37dd31461031b5780634fb3fef71461033057806351c764e01461034857806367eeba0c1461038d57806369ffa08a146103a25780637ce3489b146103c95780637fd6f15c146103e1578063879ce676146103f65780638aa1949a1461040e5780638d068043146104235780638da5cb5b14610438578063994390891461044d5780639a454b99146104625780639cb7595a14610477578063a2a6ca27146104b8578063acf5c689146104d0578063b20d30a9146104e8578063bf1fe42014610500578063c056765614610518578063c6f6f21614610530578063df0ad3de14610548578063df25f3f01461055d578063ea9f496814610572578063f20151e11461058a578063f2fde38b146105a2578063f968adbe146105c3578063fe173b97146105d8575b600080fd5b3480156101b957600080fd5b506101c26105ed565b60408051600160a060020a039092168252519081900360200190f35b3480156101ea57600080fd5b506101f66004356106ab565b604080519115158252519081900360200190f35b34801561021657600080fd5b5061024e6024600480358281019290820135918135808301929082013591604435808301929082013591606435918201910135610774565b005b34801561025c57600080fd5b5061026860043561094c565b60408051918252519081900360200190f35b34801561028657600080fd5b506101f6610a09565b34801561029b57600080fd5b5061024e600435610ac1565b3480156102b357600080fd5b50610268610bc3565b3480156102c857600080fd5b50610268610bcc565b3480156102dd57600080fd5b506102e6610c80565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561032757600080fd5b50610268610d23565b34801561033c57600080fd5b50610268600435610d96565b34801561035457600080fd5b506101f6600160a060020a0360043581169060243581169060443590606435906084359060a4359060c4359060e4351661010435610e11565b34801561039957600080fd5b506102686114b3565b3480156103ae57600080fd5b5061024e600160a060020a0360043581169060243516611526565b3480156103d557600080fd5b5061024e600435611570565b3480156103ed57600080fd5b506102686116e2565b34801561040257600080fd5b506101f6600435611755565b34801561041a57600080fd5b5061026861179f565b34801561042f57600080fd5b50610268611812565b34801561044457600080fd5b506101c261188a565b34801561045957600080fd5b506101c26118fe565b34801561046e57600080fd5b50610268611972565b34801561048357600080fd5b5061048c6119e5565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b3480156104c457600080fd5b5061024e6004356119ef565b3480156104dc57600080fd5b5061024e600435611ae6565b3480156104f457600080fd5b5061024e600435611bf5565b34801561050c57600080fd5b5061024e600435611cf7565b34801561052457600080fd5b50610268600435611e06565b34801561053c57600080fd5b5061024e600435611e43565b34801561055457600080fd5b506101c2611ee4565b34801561056957600080fd5b50610268611f24565b34801561057e57600080fd5b506101f6600435611f97565b34801561059657600080fd5b5061024e600435611fe7565b3480156105ae57600080fd5b5061024e600160a060020a0360043516612088565b3480156105cf57600080fd5b506102686120c5565b3480156105e457600080fd5b50610268612138565b60006002600060405160200180807f6572633230746f6b656e00000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b602083106106625780518252601f199092019160209182019101610643565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054600160a060020a0316949350505050565b6000600460008360405160200180807f72656c617965644d657373616765730000000000000000000000000000000000815250600f0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106107305780518252601f199092019160209182019101610711565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1695945050505050565b60008060008061084c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508d8d808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050508c8c808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050508b8b808060200260200160405190810160405280939291908181526020018383602002808284375061084794506118fe9350505050565b6121ab565b61088586868080601f01602080910402602001604051908101604052809392919081815260200183838082843750612418945050505050565b929650909450925090506108988361245e565b1561093357600160a060020a03811630146108b257600080fd5b6108bb826106ab565b156108c557600080fd5b6108d082600161246f565b6108da8484612541565b15156108e557600080fd5b60408051600160a060020a03861681526020810185905280820184905290517f4ab7d581336d92edbea22636a613e8e76c99ac7f91137c1523db38dbfb3bf3299181900360600190a161093e565b61093e8484846101a8565b505050505050505050505050565b60008060008360405160200180807f746f74616c5370656e74506572446179000000000000000000000000000000008152506010018281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106109c85780518252601f1990920191602091820191016109a9565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205495945050505050565b60006004600060405160200180807f6973496e697469616c697a656400000000000000000000000000000000000000815250600d0190506040516020818303038152906040526040518082805190602001908083835b60208310610a7e5780518252601f199092019160209182019101610a5f565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff16949350505050565b610ac961188a565b600160a060020a03163314610add57600080fd5b8060008060405160200180807f657865637574696f6e4461696c794c696d69740000000000000000000000000081525060130190506040516020818303038152906040526040518082805190602001908083835b60208310610b505780518252601f199092019160209182019101610b31565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f9bebf928b90863f24cc31f726a3a7545efd409f1dcf552301b1ee3710da70d3b9350918290030190a150565b62015180420490565b600080600060405160200180807f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000815250601a0190506040516020818303038152906040526040518082805190602001908083835b60208310610c405780518252601f199092019160209182019101610c21565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002054949350505050565b600060405160200180807f6572632d746f2d6572632d636f72650000000000000000000000000000000000815250600f0190506040516020818303038152906040526040518082805190602001908083835b60208310610cf15780518252601f199092019160209182019101610cd2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b600080600060405160200180807f657865637574696f6e4461696c794c696d697400000000000000000000000000815250601301905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b60008060008360405160200180807f746f74616c457865637574656450657244617900000000000000000000000000815250601301828152602001915050604051602081830303815290604052604051808280519060200190808383602083106109c85780518252601f1990920191602091820191016109a9565b6000610e1b610a09565b15610e2557600080fd5b600160a060020a038a1615801590610e415750610e418a61276a565b1515610e4c57600080fd5b871515610e5857600080fd5b60008711610e6557600080fd5b848410610e7157600080fd5b600160a060020a0383161515610e8657600080fd5b6127108210610ef657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206665652070657263656e7400000000000000000000000000604482015290519081900360640190fd5b896002600060405160200180807f76616c696461746f72436f6e747261637400000000000000000000000000000081525060110190506040516020818303038152906040526040518082805190602001908083835b60208310610f6a5780518252601f199092019160209182019101610f4b565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03959095169490941790935550610fdb91508a9050612772565b4360008060405160200180807f6465706c6f7965644174426c6f636b0000000000000000000000000000000000815250600f0190506040516020818303038152906040526040518082805190602001908083835b6020831061104e5780518252601f19909201916020918201910161102f565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000818401528151601a818303018152603a9091019182905280518c949384939182918401908083835b602083106110f85780518252601f1990920191602091820191016110d9565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f6761735072696365000000000000000000000000000000000000000000000000818401528151600881830301815260289091019182905280518b949384939182918401908083835b602083106111a25780518252601f199092019160209182019101611183565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f6d61785065725478000000000000000000000000000000000000000000000000818401528151600881830301815260289091019182905280518a949384939182918401908083835b6020831061124c5780518252601f19909201916020918201910161122d565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f657865637574696f6e4461696c794c696d6974000000000000000000000000008184015281516013818303018152603390910191829052805189949384939182918401908083835b602083106112f65780518252601f1990920191602091820191016112d7565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f657865637574696f6e4d617850657254780000000000000000000000000000008184015281516011818303018152603190910191829052805188949384939182918401908083835b602083106113a05780518252601f199092019160209182019101611381565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528581019690965250928301600090812095909555505080517f66656550657263656e7400000000000000000000000000000000000000000000818401528151600a818303018152602a90910191829052805186949384939182918401908083835b6020831061144a5780518252601f19909201916020918201910161142b565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912086528501959095529290920160002093909355506114939150849050612876565b61149d6001612934565b6114a5610a09565b9a9950505050505050505050565b600080600060405160200180807f6461696c794c696d697400000000000000000000000000000000000000000000815250600a01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b61152e611ee4565b600160a060020a0316331461154257600080fd5b61154a6105ed565b600160a060020a038381169116141561156257600080fd5b61156c82826129f5565b5050565b61157861188a565b600160a060020a0316331461158c57600080fd5b61271081106115fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206665652070657263656e7400000000000000000000000000604482015290519081900360640190fd5b8060008060405160200180807f66656550657263656e7400000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b6020831061166f5780518252601f199092019160209182019101611650565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f91955c12515f4eb8f1ff79df82d1933ff11b6d3b9a3019c6568840616ec36a749350918290030190a150565b600080600060405160200180807f66656550657263656e7400000000000000000000000000000000000000000000815250600a01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b6000806117788361176c611767610bc3565b610d96565b9063ffffffff612bb116565b905080611783610d23565b10158015611798575061179461179f565b8311155b9392505050565b600080600060405160200180807f657865637574696f6e4d61785065725478000000000000000000000000000000815250601101905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600061181c6118fe565b600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505050506040513d602081101561188357600080fd5b5051905090565b60006002600060405160200180807f6f776e65720000000000000000000000000000000000000000000000000000008152506005019050604051602081830303815290604052604051808280519060200190808383602083106106625780518252601f199092019160209182019101610643565b60006002600060405160200180807f76616c696461746f72436f6e74726163740000000000000000000000000000008152506011019050604051602081830303815290604052604051808280519060200190808383602083106106625780518252601f199092019160209182019101610643565b600080600060405160200180807f6465706c6f7965644174426c6f636b0000000000000000000000000000000000815250600f01905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b6002806000909192565b6119f761188a565b600160a060020a03163314611a0b57600080fd5b611a136114b3565b81108015611a275750611a246120c5565b81105b1515611a3257600080fd5b8060008060405160200180807f6d696e506572547800000000000000000000000000000000000000000000000081525060080190506040516020818303038152906040526040518082805190602001908083835b60208310611aa55780518252601f199092019160209182019101611a86565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000209390935550505050565b611aee61188a565b600160a060020a03163314611b0257600080fd5b60008111611b0f57600080fd5b8060008060405160200180807f7265717569726564426c6f636b436f6e6669726d6174696f6e73000000000000815250601a0190506040516020818303038152906040526040518082805190602001908083835b60208310611b825780518252601f199092019160209182019101611b63565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f4fb76205cd57c896b21511d2114137d8e901b4ccd659e1a0f97d6306795264fb9350918290030190a150565b611bfd61188a565b600160a060020a03163314611c1157600080fd5b8060008060405160200180807f6461696c794c696d697400000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b60208310611c845780518252601f199092019160209182019101611c65565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517fad4123ae17c414d9c6d2fec478b402e6b01856cc250fd01fbfd252fda0089d3c9350918290030190a150565b611cff61188a565b600160a060020a03163314611d1357600080fd5b60008111611d2057600080fd5b8060008060405160200180807f676173507269636500000000000000000000000000000000000000000000000081525060080190506040516020818303038152906040526040518082805190602001908083835b60208310611d935780518252601f199092019160209182019101611d74565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320865285830196909652509284016000209490945550815184815291517f52264b89e0fceafb26e79fd49ef8a366eb6297483bf4035b027f0c99a7ad512e9350918290030190a150565b6000612710611798611e3682611e2a611e1d6116e2565b879063ffffffff612bcb16565b9063ffffffff612bf616565b849063ffffffff612c0d16565b611e4b61188a565b600160a060020a03163314611e5f57600080fd5b611e676114b3565b8110611e7257600080fd5b8060008060405160200180807f6d61785065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310611aa55780518252601f199092019160209182019101611a86565b600030600160a060020a031663025313a26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561185957600080fd5b600080600060405160200180807f6d696e5065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600080611fae8361176c611fa9610bc3565b61094c565b905080611fb96114b3565b10158015611fce5750611fca6120c5565b8311155b80156117985750611fdd611f24565b9092101592915050565b611fef61188a565b600160a060020a0316331461200357600080fd5b61200b610d23565b811061201657600080fd5b8060008060405160200180807f657865637574696f6e4d61785065725478000000000000000000000000000000815250601101905060405160208183030381529060405260405180828051906020019080838360208310611aa55780518252601f199092019160209182019101611a86565b61209061188a565b600160a060020a031633146120a457600080fd5b600160a060020a03811615156120b957600080fd5b6120c281612876565b50565b600080600060405160200180807f6d61785065725478000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b600080600060405160200180807f6761735072696365000000000000000000000000000000000000000000000000815250600801905060405160208183030381529060405260405180828051906020019080838360208310610c405780518252601f199092019160209182019101610c21565b60008060606000806121bc8a612c1f565b15156121c757600080fd5b85600160a060020a0316638d0680436040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561220557600080fd5b505af1158015612219573d6000803e3d6000fd5b505050506040513d602081101561222f57600080fd5b5051895190955085111561224257600080fd5b61224b8a612c33565b935084604051908082528060200260200182016040528015612277578160200160208202803883390190505b509250600091505b8482101561240c576001848a8481518110151561229857fe5b906020019060200201518a858151811015156122b057fe5b906020019060200201518a868151811015156122c857fe5b60209081029091018101516040805160008082528185018084529790975260ff9095168582015260608501939093526080840152905160a0808401949293601f19830193908390039091019190865af1158015612329573d6000803e3d6000fd5b50505060206040510351905085600160a060020a031663facd743b826040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050506040513d60208110156123ba57600080fd5b505115156123c757600080fd5b6123d18382612df8565b156123db57600080fd5b8083838151811015156123ea57fe5b600160a060020a0390921660209283029091019091015260019091019061227f565b50505050505050505050565b60008060008061242785612c1f565b151561243257600080fd5b600160a060020a0360148601511693506034850151925060548501519150606885015190509193509193565b600061246982611755565b92915050565b80600460008460405160200180807f72656c617965644d657373616765730000000000000000000000000000000000815250600f0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106124f35780518252601f1990920191602091820191016124d4565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805460ff1916941515949094179093555050505050565b6000806000606060008060008061256d612559610bc3565b6125688b61176c611767610bc3565b612e51565b6125756116e2565b151561258c576125858a8a612f0e565b975061275d565b6001965061259989611e06565b95506125a36118fe565b600160a060020a031663bb8ac08f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261d57600080fd5b81019080805164010000000081111561263557600080fd5b8201602081018481111561264857600080fd5b815185602082028301116401000000008211171561266557600080fd5b5090985061268093508c92508991505063ffffffff612c0d16565b9350612696855185612bf690919063ffffffff16565b9250600091505b60018551038210156126df578680156126d257506126d285838151811015156126c257fe5b9060200190602002015184612f0e565b965060019091019061269d565b6127146127076126fa60018851612c0d90919063ffffffff16565b859063ffffffff612bcb16565b859063ffffffff612c0d16565b9050868015612743575061274385600187510381518110151561273357fe5b9060200190602002015182612f0e565b965086801561275757506127578a87612f0e565b96508697505b5050505050505092915050565b6000903b1190565b600160a060020a0381161580159061278e575061278e8161276a565b151561279957600080fd5b806002600060405160200180807f6572633230746f6b656e00000000000000000000000000000000000000000000815250600a0190506040516020818303038152906040526040518082805190602001908083835b6020831061280d5780518252601f1990920191602091820191016127ee565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03959095169490941790935550505050565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e061289f61188a565b60408051600160a060020a03928316815291841660208301528051918290030190a1806002600060405160200180807f6f776e657200000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040526040518082805190602001908083836020831061280d5780518252601f1990920191602091820191016127ee565b806004600060405160200180807f6973496e697469616c697a656400000000000000000000000000000000000000815250600d0190506040516020818303038152906040526040518082805190602001908083835b602083106129a85780518252601f199092019160209182019101612989565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020805460ff19169415159490941790935550505050565b600080612a00611ee4565b600160a060020a03163314612a1457600080fd5b600160a060020a0383161515612a2957600080fd5b600160a060020a0384161515612a7557604051600160a060020a03841690303180156108fc02916000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b50612bab565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015612ad957600080fd5b505af1158015612aed573d6000803e3d6000fd5b505050506040513d6020811015612b0357600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b158015612b7457600080fd5b505af1158015612b88573d6000803e3d6000fd5b505050506040513d6020811015612b9e57600080fd5b50511515612bab57600080fd5b50505050565b600082820183811015612bc057fe5b8091505b5092915050565b600080831515612bde5760009150612bc4565b50828202828482811515612bee57fe5b0414612bc057fe5b6000808284811515612c0457fe5b04949350505050565b600082821115612c1957fe5b50900390565b6000612c29612fb0565b8251149050919050565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191825283518085018552600381527f313034000000000000000000000000000000000000000000000000000000000081830152935183516000959385938593899391019182918083835b60208310612ccf5780518252601f199092019160209182019101612cb0565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b60208310612d175780518252601f199092019160209182019101612cf8565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612d5f5780518252601f199092019160209182019101612d40565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310612dc45780518252601f199092019160209182019101612da5565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b6000805b8351811015612e475782600160a060020a03168482815181101515612e1d57fe5b90602001906020020151600160a060020a03161415612e3f5760019150612bc4565b600101612dfc565b5060009392505050565b806000808460405160200180807f746f74616c4578656375746564506572446179000000000000000000000000008152506013018281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ecc5780518252601f199092019160209182019101612ead565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020939093555050505050565b6000612f186105ed565b600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19695505050505050565b6068905600a165627a7a7230582075d2b32b4b7bf50203ed6ebca25284c3a216d9412e9688de1d16e6e5f5a685210029

Deployed Bytecode Sourcemap

19269:4123:0:-;;;;;;;;;-1:-1:-1;;;19269:4123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21314:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21314:149:0;;;;;;;;-1:-1:-1;;;;;21314:149:0;;;;;;;;;;;;;;16301:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16301:162:0;;;;;;;;;;;;;;;;;;;;;;;15261:784;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15261:784:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11131:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11131:161:0;;;;;;;;;;;;;;;;;;;;;12214:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12214:134:0;;;;12797:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12797:221:0;;;;;12356:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12356:92:0;;;;10641:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10641:163:0;;;;20983:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20983:139:0;;;;;;;;;;;;;;;;;;;;;;;13026:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13026:149:0;;;;11476:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11476:167:0;;;;;19441:1534;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19441:1534:0;-1:-1:-1;;;;;19441:1534:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12658:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12658:131:0;;;;21130:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21130:176:0;-1:-1:-1;;;;;21130:176:0;;;;;;;;;;18385:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18385:256:0;;;;;18815:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18815:131:0;;;;14068:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14068:247:0;;;;;11921:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11921:145:0;;;;7203:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7203:125:0;;;;8140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8140:125:0;;;;6902:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6902:177:0;;;;10812:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10812:141:0;;;;9824:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9824:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13598:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13598:212:0;;;;;10325:308;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10325:308:0;;;;;12456:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12456:194:0;;;;;9967:215;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9967:215:0;;;;;18954:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18954:180:0;;;;;13404:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13404:186:0;;;;;5824:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5824:131:0;;;;11651:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11651:127:0;;;;13818:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13818:242:0;;;;;13183:213;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13183:213:0;;;;;8439:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8439:141:0;-1:-1:-1;;;;;8439:141:0;;;;;11786:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11786:127:0;;;;10190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10190:127:0;;;;21314:149;21356:10;21397:14;:57;21422:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21422:30:0;;;21412:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;21412:41:0;;;;;;;;;;;;;21397:57;;;;;;;;;;;;-1:-1:-1;21397:57:0;;-1:-1:-1;;;;;21397:57:0;;21314:149;-1:-1:-1;;;;21314:149:0:o;16301:162::-;16363:4;16387:11;:68;16445:7;16409:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16409:44:0;;;16399:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16399:55:0;;;;;;;;;;;;;16387:68;;;;;;;;;;;;-1:-1:-1;16387:68:0;;;;;16301:162;-1:-1:-1;;;;;16301:162:0:o;15261:784::-;15448:17;15476:14;15501;15526:23;15363:74;15396:7;;15363:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:2;;15363:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15409:2;;15363:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15413:2;;15363:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15417:19:0;;-1:-1:-1;15417:17:0;;-1:-1:-1;;;;15417:19:0:i;:::-;15363:32;:74::i;:::-;15607:29;15628:7;;15607:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15607:20:0;;-1:-1:-1;;;;;15607:29:0:i;:::-;15560:76;;-1:-1:-1;15560:76:0;;-1:-1:-1;15560:76:0;-1:-1:-1;15560:76:0;-1:-1:-1;15651:27:0;15560:76;15651:19;:27::i;:::-;15647:391;;;-1:-1:-1;;;;;15703:32:0;;15730:4;15703:32;15695:41;;;;;;15760:23;15776:6;15760:15;:23::i;:::-;15759:24;15751:33;;;;;;15799:32;15818:6;15826:4;15799:18;:32::i;:::-;15854:35;15871:9;15882:6;15854:16;:35::i;:::-;15846:44;;;;;;;;15910:41;;;-1:-1:-1;;;;;15910:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15647:391;;;15984:42;16000:9;16011:6;16019;15984:15;:42::i;:::-;15261:784;;;;;;;;;;;;:::o;11131:161::-;11191:7;11218:11;:66;11277:4;11240:42;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11240:42:0;;;11230:53;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11230:53:0;;;;;;;;;;;;;11218:66;;;;;;;;;;;;-1:-1:-1;11218:66:0;;;11131:161;-1:-1:-1;;;;;11131:161:0:o;12214:134::-;12259:4;12283:11;:57;12305:33;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12305:33:0;;;12295:44;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;12295:44:0;;;;;;;;;;;;;12283:57;;;;;;;;;;;;-1:-1:-1;12283:57:0;;;;;12214:134;-1:-1:-1;;;;12214:134:0:o;12797:221::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;12944:11;12878;:63;12900:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12900:39:0;;;12890:50;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;12890:50:0;;;;;;;;;;;;;12878:63;;;;;;;;;-1:-1:-1;12878:63:0;;;-1:-1:-1;12878:63:0;:77;;;;-1:-1:-1;12971:39:0;;;;;;;;;-1:-1:-1;12971:39:0;;;;;;;12797:221;:::o;12356:92::-;12434:6;12428:3;:12;;12356:92::o;10641:163::-;10699:7;10726:11;:70;10748:46;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10748:46:0;;;10738:57;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;10738:57:0;;;;;;;;;;;;;10726:70;;;;;;;;;;;;-1:-1:-1;10726:70:0;;;10641:163;-1:-1:-1;;;;10641:163:0:o;20983:139::-;21028:12;21077:35;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21077:35:0;;;21067:46;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21067:46:0;;;;;;;;;;;;;;;;21053:61;;20983:139;:::o;13026:149::-;13077:7;13104:11;:63;13126:39;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13126:39:0;;;13116:50;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;11476:167:0;11539:7;11566:11;:69;11628:4;11588:45;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11588:45:0;;;11578:56;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;19441:1534:0;19773:4;19799:15;:13;:15::i;:::-;19798:16;19790:25;;;;;;-1:-1:-1;;;;;19834:32:0;;;;;;:66;;;19870:30;19881:18;19870:10;:30::i;:::-;19826:75;;;;;;;;19920:32;;;19912:41;;;;;;19984:1;19972:13;;19964:22;;;;;;20005:31;;;19997:40;;;;;;-1:-1:-1;;;;;20056:20:0;;;;20048:29;;;;;;20110:5;20096:19;;20088:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20217:18;20150:14;:64;20175:37;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20175:37:0;;;20165:48;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20165:48:0;;;;;;;;;;;;;20150:64;;;;;;;;;;;;-1:-1:-1;20150:64:0;:85;;-1:-1:-1;;20150:85:0;-1:-1:-1;;;;;20150:85:0;;;;;;;;;;;-1:-1:-1;20246:26:0;;-1:-1:-1;20260:11:0;;-1:-1:-1;20246:13:0;:26::i;:::-;20345:12;20283:11;:59;20305:35;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20305:35:0;;;20295:46;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20295:46:0;;;;;;;;;;;;;20283:59;;;;;;;;;-1:-1:-1;20283:59:0;;;-1:-1:-1;20283:59:0;;;:74;;;;-1:-1:-1;;20390:46:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20390:46:0;;;;;;;;20380:57;;20441:27;;-1:-1:-1;;;20390:46:0;;;20380:57;;;;20390:46;20380:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20380:57:0;;;;;;;;;;;;;20368:70;;;;;;;;;-1:-1:-1;20368:70:0;;;-1:-1:-1;20368:70:0;;;:100;;;;-1:-1:-1;;20501:28:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20501:28:0;;;;;;;;20491:39;;20534:9;;-1:-1:-1;;;20501:28:0;;;20491:39;;;;20501:28;20491:39;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20491:39:0;;;;;;;;;;;;;20479:52;;;;;;;;;-1:-1:-1;20479:52:0;;;-1:-1:-1;20479:52:0;;;:64;;;;-1:-1:-1;;20576:28:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20576:28:0;;;;;;;;20566:39;;20609:9;;-1:-1:-1;;;20576:28:0;;;20566:39;;;;20576:28;20566:39;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20566:39:0;;;;;;;;;;;;;20554:52;;;;;;;;;-1:-1:-1;20554:52:0;;;-1:-1:-1;20554:52:0;;;:64;;;;-1:-1:-1;;20651:39:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20651:39:0;;;;;;;;20641:50;;20695:15;;-1:-1:-1;;;20651:39:0;;;20641:50;;;;20651:39;20641:50;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20641:50:0;;;;;;;;;;;;;20629:63;;;;;;;;;-1:-1:-1;20629:63:0;;;-1:-1:-1;20629:63:0;;;:81;;;;-1:-1:-1;;20743:37:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20743:37:0;;;;;;;;20733:48;;20785:13;;-1:-1:-1;;;20743:37:0;;;20733:48;;;;20743:37;20733:48;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20733:48:0;;;;;;;;;;;;;20721:61;;;;;;;;;-1:-1:-1;20721:61:0;;;-1:-1:-1;20721:61:0;;;:77;;;;-1:-1:-1;;20831:30:0;;;;;;;;;;26:21:-1;;;22:32;6:49;;20831:30:0;;;;;;;;20821:41;;20866:11;;-1:-1:-1;;;20831:30:0;;;20821:41;;;;20831:30;20821:41;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;20821:41:0;;;;;;;;;;;;;20809:54;;;;;;;;;;;;-1:-1:-1;20809:54:0;:68;;;;-1:-1:-1;20888:16:0;;-1:-1:-1;20897:6:0;;-1:-1:-1;20888:8:0;:16::i;:::-;20915:19;20929:4;20915:13;:19::i;:::-;20952:15;:13;:15::i;:::-;20945:22;19441:1534;-1:-1:-1;;;;;;;;;;19441:1534:0:o;12658:131::-;12700:7;12727:11;:54;12749:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12749:30:0;;;12739:41;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;21130:176:0;6124:21;:19;:21::i;:::-;-1:-1:-1;;;;;6110:35:0;:10;:35;6102:44;;;;;;21243:12;:10;:12::i;:::-;-1:-1:-1;;;;;21225:31:0;;;;;;;21217:40;;;;;;21268:30;21286:6;21294:3;21268:17;:30::i;:::-;21130:176;;:::o;18385:256::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;18479:5;18465:19;;18457:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18576:11;18519;:54;18541:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18541:30:0;;;18531:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;18531:41:0;;;;;;;;;;;;;18519:54;;;;;;;;;-1:-1:-1;18519:54:0;;;-1:-1:-1;18519:54:0;:68;;;;-1:-1:-1;18603:30:0;;;;;;;;;-1:-1:-1;18603:30:0;;;;;;;18385:256;:::o;18815:131::-;18857:7;18884:11;:54;18906:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18906:30:0;;;18896:41;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;14068:247:0;14135:4;14152:17;14172:49;14213:7;14172:36;14192:15;:13;:15::i;:::-;14172:19;:36::i;:::-;:40;:49;:40;:49;:::i;:::-;14152:69;;14264:9;14239:21;:19;:21::i;:::-;:34;;:68;;;;;14288:19;:17;:19::i;:::-;14277:7;:30;;14239:68;14232:75;14068:247;-1:-1:-1;;;14068:247:0:o;11921:145::-;11970:7;11997:11;:61;12019:37;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12019:37:0;;;12009:48;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;7203:125:0;7253:7;7280:19;:17;:19::i;:::-;-1:-1:-1;;;;;7280:38:0;;:40;;;;;-1:-1:-1;;;7280:40:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7280:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7280:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7280:40:0;;-1:-1:-1;7203:125:0;:::o;8140:::-;8178:7;8205:14;:52;8230:25;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8230:25:0;;;8220:36;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;6902:177:0;6951:17;7006:14;:64;7031:37;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;7031:37:0;;;7021:48;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;10812:141:0;10859:7;10886:11;:59;10908:35;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10908:35:0;;;10898:46;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;9824:135:0;9943:1;;9882:12;9824:135;;;:::o;13598:212::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;13688:12;:10;:12::i;:::-;13676:9;:24;:50;;;;;13716:10;:8;:10::i;:::-;13704:9;:22;13676:50;13668:59;;;;;;;;13793:9;13738:11;:52;13760:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13760:28:0;;;13750:39;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;13750:39:0;;;;;;;;;;;;;13738:52;;;;;;;;;;;;-1:-1:-1;13738:52:0;:64;;;;-1:-1:-1;;;;13598:212:0:o;10325:308::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;10451:1;10429:23;;10421:32;;;;;;10537:19;10464:11;:70;10486:46;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10486:46:0;;;10476:57;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;10476:57:0;;;;;;;;;;;;;10464:70;;;;;;;;;-1:-1:-1;10464:70:0;;;-1:-1:-1;10464:70:0;:92;;;;-1:-1:-1;10572:53:0;;;;;;;;;-1:-1:-1;10572:53:0;;;;;;;10325:308;:::o;12456:194::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;12585:11;12528;:54;12550:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12550:30:0;;;12540:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;12540:41:0;;;;;;;;;;;;;12528:54;;;;;;;;;-1:-1:-1;12528:54:0;;;-1:-1:-1;12528:54:0;:68;;;;-1:-1:-1;12612:30:0;;;;;;;;;-1:-1:-1;12612:30:0;;;;;;;12456:194;:::o;9967:215::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;10055:1;10043:13;;10035:22;;;;;;10123:9;10068:11;:52;10090:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10090:28:0;;;10080:39;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;246:30;340:21;;;311:9;;295:26;;;;377:20;365:33;;10080:39:0;;;;;;;;;;;;;10068:52;;;;;;;;;-1:-1:-1;10068:52:0;;;-1:-1:-1;10068:52:0;:64;;;;-1:-1:-1;10148:26:0;;;;;;;;;-1:-1:-1;10148:26:0;;;;;;;9967:215;:::o;18954:180::-;19008:7;19050:5;19073:53;19084:41;19050:5;19084:24;19095:12;:10;:12::i;:::-;19084:6;;:24;:10;:24;:::i;:::-;:28;:41;:28;:41;:::i;:::-;19073:6;;:53;:10;:53;:::i;13404:186::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;13494:12;:10;:12::i;:::-;13482:24;;13474:33;;;;;;13573:9;13518:11;:52;13540:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13540:28:0;;;13530:39;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;5824:131:0;5876:7;5929:4;-1:-1:-1;;;;;5903:42:0;;:44;;;;;-1:-1:-1;;;5903:44:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;11651:127:0;11691:7;11718:11;:52;11740:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11740:28:0;;;11730:39;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;13818:242:0;13876:4;13893:17;13913:46;13951:7;13913:33;13930:15;:13;:15::i;:::-;13913:16;:33::i;:46::-;13893:66;;13993:9;13977:12;:10;:12::i;:::-;:25;;:50;;;;;14017:10;:8;:10::i;:::-;14006:7;:21;;13977:50;:75;;;;;14042:10;:8;:10::i;:::-;14031:21;;;;;13818:242;-1:-1:-1;;13818:242:0:o;13183:213::-;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;13282:21;:19;:21::i;:::-;13270:33;;13262:42;;;;;;13379:9;13315:11;:61;13337:37;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13337:37:0;;;13327:48;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;8439:141:0;8004:7;:5;:7::i;:::-;-1:-1:-1;;;;;7990:21:0;:10;:21;7982:30;;;;;;-1:-1:-1;;;;;8520:22:0;;;;8512:31;;;;;;8554:18;8563:8;8554;:18::i;:::-;8439:141;:::o;11786:127::-;11826:7;11853:11;:52;11875:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11875:28:0;;;11865:39;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;10190:127:0;10230:7;10257:11;:52;10279:28;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10279:28:0;;;10269:39;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;4586:911:0;4832:26;4963:12;5010:37;5101:9;5160:24;4796;4811:8;4796:14;:24::i;:::-;4788:33;;;;;;;;4861:18;-1:-1:-1;;;;;4861:37:0;;:39;;;;;-1:-1:-1;;;4861:39:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4861:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4861:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4861:39:0;4919:10;;4861:39;;-1:-1:-1;4919:32:0;-1:-1:-1;4919:32:0;4911:41;;;;;;4978:21;4990:8;4978:11;:21::i;:::-;4963:36;;5064:18;5050:33;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;5050:33:0;;5010:73;;5113:1;5101:13;;5096:394;5120:18;5116:1;:22;5096:394;;;5187:39;5197:4;5203:3;5207:1;5203:6;;;;;;;;;;;;;;;;;;5211:3;5215:1;5211:6;;;;;;;;;;;;;;;;;;5219:3;5223:1;5219:6;;;;;;;;;;;;;;;;;;;;5187:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5219:6;;-1:-1:-1;;5187:39:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5187:39:0;;;;;;;;5160:66;;5249:18;-1:-1:-1;;;;;5249:30:0;;5280:16;5249:48;;;;;-1:-1:-1;;;5249:48:0;;;;;;;-1:-1:-1;;;;;5249:48:0;-1:-1:-1;;;;;5249:48:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5249:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5249:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5249:48:0;5241:57;;;;;;;;5317:60;5338:20;5360:16;5317:20;:60::i;:::-;5313:109;;;5398:8;;;5313:109;5462:16;5436:20;5457:1;5436:23;;;;;;;;;;-1:-1:-1;;;;;5436:42:0;;;:23;;;;;;;;;;:42;5140:3;;;;;5096:394;;;4586:911;;;;;;;;;;:::o;3017:499::-;3103:17;3122:14;3138;3154:23;3203;3218:7;3203:14;:23::i;:::-;3195:32;;;;;;;;-1:-1:-1;;;;;3298:2:0;3289:7;3285:16;3279:23;3275:72;3262:85;;3390:2;3381:7;3377:16;3371:23;3361:33;;3437:2;3428:7;3424:16;3418:23;3408:33;;3493:3;3484:7;3480:17;3474:24;3455:43;;3247:262;;;;;:::o;23164:129::-;23232:4;23256:29;23277:7;23256:20;:29::i;:::-;23249:36;23164:129;-1:-1:-1;;23164:129:0:o;16128:165::-;16278:7;16207:11;:68;16265:7;16229:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16229:44:0;;;16219:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;16219:55:0;;;;;;;;;;;;;16207:68;;;;;;;;;;;;-1:-1:-1;16207:68:0;:78;;-1:-1:-1;;16207:78:0;;;;;;;;;;;-1:-1:-1;;;;;16128:165:0:o;21674:1280::-;21754:4;21983:11;22016:17;22071:27;22152:28;22220:32;22317:9;22594:26;21770:90;21793:15;:13;:15::i;:::-;21810:49;21851:7;21810:36;21830:15;:13;:15::i;21810:49::-;21770:22;:90::i;:::-;21875:12;:10;:12::i;:::-;:17;21871:1076;;;21916:34;21930:10;21942:7;21916:13;:34::i;:::-;21909:41;;;;21871:1076;21997:4;21983:18;;22036:20;22048:7;22036:11;:20::i;:::-;22016:40;;22101:19;:17;:19::i;:::-;-1:-1:-1;;;;;22101:34:0;;:36;;;;;-1:-1:-1;;;22101:36:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22101:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22101:36:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22101:36:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;22101:36:0;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;224:3;218:10;339:9;333:2;319:12;315:21;297:16;293:44;290:59;268:11;254:12;251:29;239:119;236:2;;;371:1;368;361:12;236:2;-1:-1;22101:36:0;;-1:-1:-1;22183:22:0;;-1:-1:-1;22183:7:0;;-1:-1:-1;22195:9:0;;-1:-1:-1;;22183:22:0;:11;:22;:::i;:::-;22152:53;;22255:43;22280:10;:17;22255:20;:24;;:43;;;;:::i;:::-;22220:78;;22329:1;22317:13;;22313:159;22356:1;22336:10;:17;:21;22332:1;:25;22313:159;;;22392:6;:64;;;;;22402:54;22416:10;22427:1;22416:13;;;;;;;;;;;;;;;;;;22431:24;22402:13;:54::i;:::-;22383:73;-1:-1:-1;22359:3:0;;;;;22313:159;;;22623:112;22666:54;22695:24;22717:1;22695:10;:17;:21;;:24;;;;:::i;:::-;22666;;:54;:28;:54;:::i;:::-;22623:20;;:112;:24;:112;:::i;:::-;22594:141;;22759:6;:78;;;;;22769:68;22783:10;22814:1;22794:10;:17;:21;22783:33;;;;;;;;;;;;;;;;;;22818:18;22769:13;:68::i;:::-;22750:87;;22861:6;:46;;;;;22871:36;22885:10;22897:9;22871:13;:36::i;:::-;22852:55;;22929:6;22922:13;;21871:1076;21674:1280;;;;;;;;;;;:::o;14721:178::-;14779:4;14844:18;;14881:10;;14721:178::o;22962:194::-;-1:-1:-1;;;;;23028:20:0;;;;;;:42;;;23052:18;23063:6;23052:10;:18::i;:::-;23020:51;;;;;;;;23142:6;23082:14;:57;23107:30;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23107:30:0;;;23097:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23097:41:0;;;;;;;;;;;;;23082:57;;;;;;;;;;;;-1:-1:-1;23082:57:0;:66;;-1:-1:-1;;23082:66:0;-1:-1:-1;;;;;23082:66:0;;;;;;;;;;;-1:-1:-1;;;;22962:194:0:o;8642:182::-;8703:39;8724:7;:5;:7::i;:::-;8703:39;;;-1:-1:-1;;;;;8703:39:0;;;;;;;;;;;;;;;;;;;;;8808:8;8753:14;:52;8778:25;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8778:25:0;;;8768:36;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;12074:132:0;12191:7;12131:11;:57;12153:33;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12153:33:0;;;12143:44;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;12143:44:0;;;;;;;;;;;;;12131:57;;;;;;;;;;;;-1:-1:-1;12131:57:0;:67;;-1:-1:-1;;12131:67:0;;;;;;;;;;;-1:-1:-1;;;;12074:132:0:o;14323:388::-;14568:16;14616:15;6124:21;:19;:21::i;:::-;-1:-1:-1;;;;;6110:35:0;:10;:35;6102:44;;;;;;-1:-1:-1;;;;;14418:17:0;;;;14410:26;;;;;;-1:-1:-1;;;;;14451:20:0;;;14447:109;;;14488:35;;-1:-1:-1;;;;;14488:12:0;;;14509:4;14501:21;14488:35;;;;;;;;;14501:21;14488:12;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14488:35:0;14538:7;;14447:109;14634:21;;;;;;14650:4;14634:21;;;;;;14598:6;;-1:-1:-1;;;;;;14634:15:0;;;;;:21;;;;;;;;;;;;;;-1:-1:-1;14634:15:0;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;14634:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14634:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14634:21:0;14674:28;;;;;;-1:-1:-1;;;;;14674:28:0;;;;;;;;;;;;;;;14634:21;;-1:-1:-1;14674:14:0;;;;;;:28;;;;;14634:21;;14674:28;;;;;;;;-1:-1:-1;14674:14:0;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;14674:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14674:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14674:28:0;14666:37;;;;;;;;14323:388;;;;:::o;1094:133::-;1152:7;1180:5;;;1199:6;;;;1192:14;;;;1220:1;1213:8;;1094:133;;;;;;:::o;259:180::-;317:7;;337:6;;333:37;;;361:1;354:8;;;;333:37;-1:-1:-1;388:5:0;;;392:1;388;:5;407;;;;;;;;:10;400:18;;;526:270;584:7;675:9;691:1;687;:5;;;;;;;;;526:270;-1:-1:-1;;;;526:270:0:o;914:113::-;972:7;995:6;;;;988:14;;;;-1:-1:-1;1016:5:0;;;914:113::o;3524:128::-;3582:4;3621:23;:21;:23::i;:::-;3606:4;:11;:38;3599:45;;3524:128;;;:::o;4282:296::-;4361:54;;;;;;;;;;;;;;;;;;;4466:31;;;;;;;;;;;;;;;4525:44;;;;4341:7;;4466:31;4361:54;;4466:31;;4561:7;;4525:44;;;;;;;4361:54;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;4525:44:0;;;;;;;;;;-1:-1:-1;4525:44:0;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;4525:44:0;;;;;;;;;;-1:-1:-1;4525:44:0;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4525:44:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4525:44:0;;;4515:55;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;4515:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;4282:296:0:o;1696:270::-;1781:4;;1798:138;1822:5;:12;1818:1;:16;1798:138;;;1872:5;-1:-1:-1;;;;;1860:17:0;:5;1866:1;1860:8;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1860:17:0;;1856:69;;;1905:4;1898:11;;;;1856:69;1836:3;;1798:138;;;-1:-1:-1;1953:5:0;;1696:270;-1:-1:-1;;;1696:270:0:o;11300:168::-;11454:6;11382:11;:69;11444:4;11404:45;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11404:45:0;;;11394:56;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;11394:56:0;;;;;;;;;;;;;11382:69;;;;;;;;;;;;-1:-1:-1;11382:69:0;:78;;;;-1:-1:-1;;;;;11300:168:0:o;21471:195::-;21548:4;21572:12;:10;:12::i;:::-;-1:-1:-1;;;;;21572:17:0;21597:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21572:86:0;;21638:10;21650:7;21572:86;;;;;-1:-1:-1;;;21572:86:0;;;;;;;-1:-1:-1;;;;;21572:86:0;-1:-1:-1;;;;;21572:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;21471:195;-1:-1:-1;;;;;;21471:195:0:o;3660:93::-;3742:3;3660:93;:::o

Swarm Source

bzzr://75d2b32b4b7bf50203ed6ebca25284c3a216d9412e9688de1d16e6e5f5a68521

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.