Contract 0x59D2A1370e57427b0Ad6342dCF45DeC9AdfB772d

 
 
Txn Hash
Method
Block
From
To
Value
0x35d4fbeabbc14ab111d3744ed288d331e287e65bfa2081f44975daec85d874cfTransfer Ownersh...67903282018-11-28 21:03:451356 days 23 hrs agoDragonereum Egg: Deployer IN  Dragonereum: Dragon Getter0 Ether0.‍001546750
0x9bfbe64aaf8eedeb4b28d0e72a582e74ded7cbcc5e41a837fc2ff9abf9ac2816Set External Dep...67903172018-11-28 21:00:411356 days 23 hrs agoDragonereum Egg: Deployer IN  Dragonereum: Dragon Getter0 Ether0.‍0063845550
0xfb9e659083983a1cb3f1d8b7cd15b648d766a9472e392ce62c50cb9f32bcc981Set Internal Dep...67903172018-11-28 21:00:411356 days 23 hrs agoDragonereum Egg: Deployer IN  Dragonereum: Dragon Getter0 Ether0.‍0085069550
0xb3148f0e481f9c04b62f78791d37c41ac6bfa62ae1fac5c72ce91929f91bdc050x6080604067902442018-11-28 20:43:111356 days 23 hrs agoDragonereum Egg: Deployer IN  Create: DragonGetter0 Ether0.‍2159246550
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DragonGetter

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-29
*/

pragma solidity 0.4.25;

library SafeMath32 {

    function mul(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }
        uint32 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint32 a, uint32 b) internal pure returns (uint32) {
        return a / b;
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32) {
        assert(b <= a);
        return a - b;
    }

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

    function pow(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint32 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

library SafeMath256 {

    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;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

    function pow(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint256 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function _validateAddress(address _addr) internal pure {
        require(_addr != address(0), "invalid address");
    }

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "not a contract owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _validateAddress(newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}

contract Controllable is Ownable {
    mapping(address => bool) controllers;

    modifier onlyController {
        require(_isController(msg.sender), "no controller rights");
        _;
    }

    function _isController(address _controller) internal view returns (bool) {
        return controllers[_controller];
    }

    function _setControllers(address[] _controllers) internal {
        for (uint256 i = 0; i < _controllers.length; i++) {
            _validateAddress(_controllers[i]);
            controllers[_controllers[i]] = true;
        }
    }
}

contract Upgradable is Controllable {
    address[] internalDependencies;
    address[] externalDependencies;

    function getInternalDependencies() public view returns(address[]) {
        return internalDependencies;
    }

    function getExternalDependencies() public view returns(address[]) {
        return externalDependencies;
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        for (uint256 i = 0; i < _newDependencies.length; i++) {
            _validateAddress(_newDependencies[i]);
        }
        internalDependencies = _newDependencies;
    }

    function setExternalDependencies(address[] _newDependencies) public onlyOwner {
        externalDependencies = _newDependencies;
        _setControllers(_newDependencies);
    }
}

contract ERC721Token {
    function ownerOf(uint256) public view returns (address);
    function exists(uint256) public view returns (bool);
}

contract DragonModel {

    struct HealthAndMana {
        uint256 timestamp; 
        uint32 remainingHealth;
        uint32 remainingMana; 
        uint32 maxHealth;
        uint32 maxMana;
    }

    struct Level {
        uint8 level;
        uint8 experience;
        uint16 dnaPoints;
    }
    
    struct Tactics {
        uint8 melee;
        uint8 attack;
    }

    struct Battles {
        uint16 wins;
        uint16 defeats;
    }

    struct Skills {
        uint32 attack;
        uint32 defense;
        uint32 stamina;
        uint32 speed;
        uint32 intelligence;
    }
    
    struct Dragon {
        uint16 generation;
        uint256[4] genome;
        uint256[2] parents;
        uint8[11] types;
        uint256 birth;
    }

}

contract DragonStorage is DragonModel, ERC721Token {
    Dragon[] public dragons;
    mapping (uint256 => bytes32) public names;
    mapping (uint256 => HealthAndMana) public healthAndMana;
    mapping (uint256 => Tactics) public tactics;
    mapping (uint256 => Battles) public battles;
    mapping (uint256 => Skills) public skills;
    mapping (uint256 => Level) public levels;
    mapping (uint256 => uint32) public coolness;
    mapping (uint256 => uint8) public specialAttacks;
    mapping (uint256 => uint8) public specialDefenses;
    mapping (uint256 => mapping (uint8 => uint32)) public buffs;

    function length() external view returns (uint256) {}
    function getGenome(uint256 _id) external view returns (uint256[4]) {}
    function getParents(uint256 _id) external view returns (uint256[2]) {}
    function getDragonTypes(uint256 _id) external view returns (uint8[11]) {}
}

contract DragonCoreHelper {
    function calculateFullRegenerationTime(uint32) external pure returns (uint32) {}
    function calculateSpecialBattleSkill(uint8, uint32[5]) external pure returns (uint32, uint8, uint8) {}
    function getActiveGenes(uint256[4]) external pure returns (uint8[30]) {}
}

contract DragonCore {
    function isBreedingAllowed(uint8, uint16) public view returns (bool) {}
    function calculateMaxHealthAndManaWithBuffs(uint256) public view returns (uint32, uint32) {}
    function getCurrentHealthAndMana(uint256) public view returns (uint32, uint32, uint8, uint8) {}
    function calculateSpecialPeacefulSkill(uint256) public view returns (uint8, uint32, uint32) {}
}




//////////////CONTRACT//////////////




contract DragonGetter is Upgradable {
    using SafeMath32 for uint32;
    using SafeMath256 for uint256;

    DragonStorage _storage_;
    DragonCore dragonCore;
    DragonCoreHelper helper;

    uint256 constant GOLD_DECIMALS = 10 ** 18;

    uint256 constant DRAGON_NAME_2_LETTERS_PRICE = 100000 * GOLD_DECIMALS;
    uint256 constant DRAGON_NAME_3_LETTERS_PRICE = 10000 * GOLD_DECIMALS;
    uint256 constant DRAGON_NAME_4_LETTERS_PRICE = 1000 * GOLD_DECIMALS;

    function _checkExistence(uint256 _id) internal view {
        require(_storage_.exists(_id), "dragon doesn't exist");
    }

    function _min(uint32 lth, uint32 rth) internal pure returns (uint32) {
        return lth > rth ? rth : lth;
    }

    // GETTERS

    function getAmount() external view returns (uint256) {
        return _storage_.length().sub(1);
    }

    function isOwner(address _user, uint256 _tokenId) external view returns (bool) {
        return _user == _storage_.ownerOf(_tokenId);
    }

    function ownerOf(uint256 _tokenId) external view returns (address) {
        return _storage_.ownerOf(_tokenId);
    }

    function getGenome(uint256 _id) public view returns (uint8[30]) {
        _checkExistence(_id);
        return helper.getActiveGenes(_storage_.getGenome(_id));
    }

    function getComposedGenome(uint256 _id) external view returns (uint256[4]) {
        _checkExistence(_id);
        return _storage_.getGenome(_id);
    }

    function getSkills(uint256 _id) external view returns (uint32, uint32, uint32, uint32, uint32) {
        _checkExistence(_id);
        return _storage_.skills(_id);
    }

    // should be divided by 100
    function getCoolness(uint256 _id) public view returns (uint32) {
        _checkExistence(_id);
        return _storage_.coolness(_id);
    }

    function getLevel(uint256 _id) public view returns (uint8 level) {
        _checkExistence(_id);
        (level, , ) = _storage_.levels(_id);
    }

    function getHealthAndMana(uint256 _id) external view returns (
        uint256 timestamp,
        uint32 remainingHealth,
        uint32 remainingMana,
        uint32 maxHealth,
        uint32 maxMana
    ) {
        _checkExistence(_id);
        (
            timestamp,
            remainingHealth,
            remainingMana,
            maxHealth,
            maxMana
        ) = _storage_.healthAndMana(_id);
        (maxHealth, maxMana) = dragonCore.calculateMaxHealthAndManaWithBuffs(_id);

        remainingHealth = _min(remainingHealth, maxHealth);
        remainingMana = _min(remainingMana, maxMana);
    }

    function getCurrentHealthAndMana(uint256 _id) external view returns (
        uint32, uint32, uint8, uint8
    ) {
        _checkExistence(_id);
        return dragonCore.getCurrentHealthAndMana(_id);
    }

    function getFullRegenerationTime(uint256 _id) external view returns (uint32) {
        _checkExistence(_id);
        ( , , , uint32 _maxHealth, ) = _storage_.healthAndMana(_id);
        return helper.calculateFullRegenerationTime(_maxHealth);
    }

    function getDragonTypes(uint256 _id) external view returns (uint8[11]) {
        _checkExistence(_id);
        return _storage_.getDragonTypes(_id);
    }

    function getProfile(uint256 _id) external view returns (
        bytes32 name,
        uint16 generation,
        uint256 birth,
        uint8 level,
        uint8 experience,
        uint16 dnaPoints,
        bool isBreedingAllowed,
        uint32 coolness
    ) {
        _checkExistence(_id);
        name = _storage_.names(_id);
        (level, experience, dnaPoints) = _storage_.levels(_id);
        isBreedingAllowed = dragonCore.isBreedingAllowed(level, dnaPoints);
        (generation, birth) = _storage_.dragons(_id);
        coolness = _storage_.coolness(_id);

    }

    function getGeneration(uint256 _id) external view returns (uint16 generation) {
        _checkExistence(_id);
        (generation, ) = _storage_.dragons(_id);
    }

    function isBreedingAllowed(uint256 _id) external view returns (bool) {
        _checkExistence(_id);
        uint8 _level;
        uint16 _dnaPoints;
        (_level, , _dnaPoints) = _storage_.levels(_id);
        return dragonCore.isBreedingAllowed(_level, _dnaPoints);
    }

    function getTactics(uint256 _id) external view returns (uint8, uint8) {
        _checkExistence(_id);
        return _storage_.tactics(_id);
    }

    function getBattles(uint256 _id) external view returns (uint16, uint16) {
        _checkExistence(_id);
        return _storage_.battles(_id);
    }

    function getParents(uint256 _id) external view returns (uint256[2]) {
        _checkExistence(_id);
        return _storage_.getParents(_id);
    }

    function _getSpecialBattleSkill(uint256 _id, uint8 _dragonType) internal view returns (
        uint32 cost,
        uint8 factor,
        uint8 chance
    ) {
        _checkExistence(_id);
        uint32 _attack;
        uint32 _defense;
        uint32 _stamina;
        uint32 _speed;
        uint32 _intelligence;
        (_attack, _defense, _stamina, _speed, _intelligence) = _storage_.skills(_id);
        return helper.calculateSpecialBattleSkill(_dragonType, [_attack, _defense, _stamina, _speed, _intelligence]);
    }

    function getSpecialAttack(uint256 _id) external view returns (
        uint8 dragonType,
        uint32 cost,
        uint8 factor,
        uint8 chance
    ) {
        _checkExistence(_id);
        dragonType = _storage_.specialAttacks(_id);
        (cost, factor, chance) = _getSpecialBattleSkill(_id, dragonType);
    }

    function getSpecialDefense(uint256 _id) external view returns (
        uint8 dragonType,
        uint32 cost,
        uint8 factor,
        uint8 chance
    ) {
        _checkExistence(_id);
        dragonType = _storage_.specialDefenses(_id);
        (cost, factor, chance) = _getSpecialBattleSkill(_id, dragonType);
    }

    function getSpecialPeacefulSkill(uint256 _id) external view returns (uint8, uint32, uint32) {
        _checkExistence(_id);
        return dragonCore.calculateSpecialPeacefulSkill(_id);
    }

    function getBuffs(uint256 _id) external view returns (uint32[5]) {
        _checkExistence(_id);
        return [
            _storage_.buffs(_id, 1), // attack
            _storage_.buffs(_id, 2), // defense
            _storage_.buffs(_id, 3), // stamina
            _storage_.buffs(_id, 4), // speed
            _storage_.buffs(_id, 5)  // intelligence
        ];
    }

    function getDragonStrength(uint256 _id) external view returns (uint32 sum) {
        _checkExistence(_id);
        uint32 _attack;
        uint32 _defense;
        uint32 _stamina;
        uint32 _speed;
        uint32 _intelligence;
        (_attack, _defense, _stamina, _speed, _intelligence) = _storage_.skills(_id);
        sum = sum.add(_attack.mul(69));
        sum = sum.add(_defense.mul(217));
        sum = sum.add(_stamina.mul(232));
        sum = sum.add(_speed.mul(114));
        sum = sum.add(_intelligence.mul(151));
        sum = sum.div(100);
    }

    function getDragonNamePriceByLength(uint256 _length) external pure returns (uint256) {
        if (_length == 2) {
            return DRAGON_NAME_2_LETTERS_PRICE;
        } else if (_length == 3) {
            return DRAGON_NAME_3_LETTERS_PRICE;
        } else {
            return DRAGON_NAME_4_LETTERS_PRICE;
        }
    }

    function getDragonNamePrices() external pure returns (uint8[3] lengths, uint256[3] prices) {
        lengths = [2, 3, 4];
        prices = [
            DRAGON_NAME_2_LETTERS_PRICE,
            DRAGON_NAME_3_LETTERS_PRICE,
            DRAGON_NAME_4_LETTERS_PRICE
        ];
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        super.setInternalDependencies(_newDependencies);

        _storage_ = DragonStorage(_newDependencies[0]);
        dragonCore = DragonCore(_newDependencies[1]);
        helper = DragonCoreHelper(_newDependencies[2]);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getSkills","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getParents","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getSpecialDefense","outputs":[{"name":"dragonType","type":"uint8"},{"name":"cost","type":"uint32"},{"name":"factor","type":"uint8"},{"name":"chance","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getCoolness","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getSpecialPeacefulSkill","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getGeneration","outputs":[{"name":"generation","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getTactics","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getGenome","outputs":[{"name":"","type":"uint8[30]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setExternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getComposedGenome","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getLevel","outputs":[{"name":"level","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getBattles","outputs":[{"name":"","type":"uint16"},{"name":"","type":"uint16"}],"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":"_id","type":"uint256"}],"name":"getCurrentHealthAndMana","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_length","type":"uint256"}],"name":"getDragonNamePriceByLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getHealthAndMana","outputs":[{"name":"timestamp","type":"uint256"},{"name":"remainingHealth","type":"uint32"},{"name":"remainingMana","type":"uint32"},{"name":"maxHealth","type":"uint32"},{"name":"maxMana","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"isBreedingAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getDragonStrength","outputs":[{"name":"sum","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getFullRegenerationTime","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDragonNamePrices","outputs":[{"name":"lengths","type":"uint8[3]"},{"name":"prices","type":"uint256[3]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getDragonTypes","outputs":[{"name":"","type":"uint8[11]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getSpecialAttack","outputs":[{"name":"dragonType","type":"uint8"},{"name":"cost","type":"uint32"},{"name":"factor","type":"uint8"},{"name":"chance","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getBuffs","outputs":[{"name":"","type":"uint32[5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getProfile","outputs":[{"name":"name","type":"bytes32"},{"name":"generation","type":"uint16"},{"name":"birth","type":"uint256"},{"name":"level","type":"uint8"},{"name":"experience","type":"uint8"},{"name":"dnaPoints","type":"uint16"},{"name":"isBreedingAllowed","type":"bool"},{"name":"coolness","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613f63806100536000396000f30060806040526004361061018a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806292bf781461018f578063242a008714610228578063434f7c101461029157806347327ae3146103055780634e509b761461035257806356e3df97146103bf5780635c106b7e146104085780636352211e1461045c57806365d6759a146104c957806365fc12531461053257806369c0ad93146105985780636c2210bb146105fe57806386481d4014610667578063867e5ef5146106ae5780638da5cb5b146107065780638f7c00b11461075d5780639462c0ed146107d7578063a21110f714610818578063ae287b9b146108a5578063b5de1718146108ea578063b75c4f8014610937578063c22335b3146109a3578063c822a7eb146109f0578063d321fe2914610a72578063deb27fc514610a9d578063e30b57b614610b06578063e327a6af14610b7a578063e6458f6e14610bdf578063e9cbb3c914610c4b578063f08f4f6414610cb4578063f2fde38b14610d5a575b600080fd5b34801561019b57600080fd5b506101ba60048036038101908080359060200190929190505050610d9d565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b34801561023457600080fd5b5061025360048036038101908080359060200190929190505050610eb5565b6040518082600260200280838360005b8381101561027e578082015181840152602081019050610263565b5050505090500191505060405180910390f35b34801561029d57600080fd5b506102bc60048036038101908080359060200190929190505050610f9e565b604051808560ff1660ff1681526020018463ffffffff1663ffffffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200194505050505060405180910390f35b34801561031157600080fd5b5061033060048036038101908080359060200190929190505050611098565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561035e57600080fd5b5061037d60048036038101908080359060200190929190505050611176565b604051808460ff1660ff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001935050505060405180910390f35b3480156103cb57600080fd5b506103ea60048036038101908080359060200190929190505050611271565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561041457600080fd5b506104336004803603810190808035906020019092919050505061135b565b604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390f35b34801561046857600080fd5b5061048760048036038101908080359060200190929190505050611445565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104d557600080fd5b506104f46004803603810190808035906020019092919050505061151a565b6040518082601e60200280838360005b8381101561051f578082015181840152602081019050610504565b5050505090500191505060405180910390f35b34801561053e57600080fd5b50610596600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506116ff565b005b3480156105a457600080fd5b506105fc600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506117e6565b005b34801561060a57600080fd5b50610629600480360381019080803590602001909291905050506119c1565b6040518082600460200280838360005b83811015610654578082015181840152602081019050610639565b5050505090500191505060405180910390f35b34801561067357600080fd5b5061069260048036038101908080359060200190929190505050611aab565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106ba57600080fd5b506106d960048036038101908080359060200190929190505050611ba2565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b34801561071257600080fd5b5061071b611c8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b5061078860048036038101908080359060200190929190505050611cb1565b604051808563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200194505050505060405180910390f35b3480156107e357600080fd5b5061080260048036038101908080359060200190929190505050611db9565b6040518082815260200191505060405180910390f35b34801561082457600080fd5b5061084360048036038101908080359060200190929190505050611e0b565b604051808681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b3480156108b157600080fd5b506108d060048036038101908080359060200190929190505050612022565b604051808215151515815260200191505060405180910390f35b3480156108f657600080fd5b5061091560048036038101908080359060200190929190505050612205565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561094357600080fd5b5061094c612449565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561098f578082015181840152602081019050610974565b505050509050019250505060405180910390f35b3480156109af57600080fd5b506109ce600480360381019080803590602001909291905050506124d7565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156109fc57600080fd5b50610a056126bd565b6040518083600360200280838360005b83811015610a30578082015181840152602081019050610a15565b5050505090500182600360200280838360005b83811015610a5e578082015181840152602081019050610a43565b505050509050019250505060405180910390f35b348015610a7e57600080fd5b50610a8761273e565b6040518082815260200191505060405180910390f35b348015610aa957600080fd5b50610ac860048036038101908080359060200190929190505050612819565b6040518082600b60200280838360005b83811015610af3578082015181840152602081019050610ad8565b5050505090500191505060405180910390f35b348015610b1257600080fd5b50610b3160048036038101908080359060200190929190505050612905565b604051808560ff1660ff1681526020018463ffffffff1663ffffffff1681526020018360ff1660ff1681526020018260ff1660ff16815260200194505050505060405180910390f35b348015610b8657600080fd5b50610bc5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129ff565b604051808215151515815260200191505060405180910390f35b348015610beb57600080fd5b50610bf4612b03565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610c37578082015181840152602081019050610c1c565b505050509050019250505060405180910390f35b348015610c5757600080fd5b50610c7660048036038101908080359060200190929190505050612b91565b6040518082600560200280838360005b83811015610ca1578082015181840152602081019050610c86565b5050505090500191505060405180910390f35b348015610cc057600080fd5b50610cdf60048036038101908080359060200190929190505050613040565b6040518089600019166000191681526020018861ffff1661ffff1681526020018781526020018660ff1660ff1681526020018560ff1660ff1681526020018461ffff1661ffff168152602001831515151581526020018263ffffffff1663ffffffff1681526020019850505050505050505060405180910390f35b348015610d6657600080fd5b50610d9b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134a9565b005b6000806000806000610dae86613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350d15fbe876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b158015610e3f57600080fd5b505af1158015610e53573d6000803e3d6000fd5b505050506040513d60a0811015610e6957600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509450945094509450945091939590929450565b610ebd613d74565b610ec682613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663242a0087836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506040811015610f8f57600080fd5b81019080919050509050919050565b600080600080610fad85613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368d3d433866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b505050506040513d602081101561106857600080fd5b810190808051906020019092919050505093506110858585613777565b8093508194508295505050509193509193565b60006110a382613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ecaa195836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561113457600080fd5b505af1158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b81019080805190602001909291905050509050919050565b600080600061118484613634565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e335302856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b15801561121557600080fd5b505af1158015611229573d6000803e3d6000fd5b505050506040513d606081101561123f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925092509193909250565b600061127c82613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2a59d69836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b15801561130c57600080fd5b505af1158015611320573d6000803e3d6000fd5b505050506040513d604081101561133657600080fd5b8101908080519060200190929190805190602001909291905050505080915050919050565b60008061136783613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639462f02f846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b505050506040513d604081101561142157600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b81019080805190602001909291905050509050919050565b611522613d96565b61152b82613634565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3e0bade600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365d6759a856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b1580156115fa57600080fd5b505af115801561160e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561163357600080fd5b81019080919050506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082600460200280838360005b83811015611691578082015181840152602081019050611676565b505050509050019150506103c060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103c08110156116f057600080fd5b81019080919050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600390805190602001906117d9929190613dba565b506117e381613a1f565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6118b381613acd565b8060008151811015156118c257fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181518110151561191b57fe5b90602001906020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110151561197457fe5b90602001906020020151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119c9613e44565b6119d282613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365d6759a836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b158015611a6357600080fd5b505af1158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506080811015611a9c57600080fd5b81019080919050509050919050565b6000611ab682613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b505050506040513d6060811015611b7157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505090505080915050919050565b600080611bae83613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663606d2e96846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b505050506040513d6040811015611c6857600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080611cc085613634565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f7c00b1866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b158015611d5157600080fd5b505af1158015611d65573d6000803e3d6000fd5b505050506040513d6080811015611d7b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505093509350935093509193509193565b60006002821415611dd957670de0b6b3a7640000620186a0029050611e06565b6003821415611df657670de0b6b3a7640000612710029050611e06565b670de0b6b3a76400006103e80290505b919050565b6000806000806000611e1c86613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e44ddaf5876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b158015611ead57600080fd5b505af1158015611ec1573d6000803e3d6000fd5b505050506040513d60a0811015611ed757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508095508196508297508398508499505050505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5d3c4f6876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b158015611fb457600080fd5b505af1158015611fc8573d6000803e3d6000fd5b505050506040513d6040811015611fde57600080fd5b810190808051906020019092919080519060200190929190505050809250819350505061200b8483613be9565b93506120178382613be9565b925091939590929450565b600080600061203084613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1580156120c157600080fd5b505af11580156120d5573d6000803e3d6000fd5b505050506040513d60608110156120eb57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505090508092508193505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663866a095e83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360ff1660ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b1580156121c157600080fd5b505af11580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b810190808051906020019092919050505092505050919050565b60008060008060008061221787613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350d15fbe886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b1580156122a857600080fd5b505af11580156122bc573d6000803e3d6000fd5b505050506040513d60a08110156122d257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809550819650829750839850849950505050505061235161233c60458763ffffffff16613c0e90919063ffffffff16565b8763ffffffff16613c6790919063ffffffff16565b955061238561237060d98663ffffffff16613c0e90919063ffffffff16565b8763ffffffff16613c6790919063ffffffff16565b95506123b96123a460e88563ffffffff16613c0e90919063ffffffff16565b8763ffffffff16613c6790919063ffffffff16565b95506123ed6123d860728463ffffffff16613c0e90919063ffffffff16565b8763ffffffff16613c6790919063ffffffff16565b955061242161240c60978363ffffffff16613c0e90919063ffffffff16565b8763ffffffff16613c6790919063ffffffff16565b955061243d60648763ffffffff16613c9190919063ffffffff16565b95505050505050919050565b606060028054806020026020016040519081016040528092919081815260200182805480156124cd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612483575b5050505050905090565b6000806124e383613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e44ddaf5846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b15801561257457600080fd5b505af1158015612588573d6000803e3d6000fd5b505050506040513d60a081101561259e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050509350505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397fbbc95826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808263ffffffff1663ffffffff168152602001915050602060405180830381600087803b15801561267a57600080fd5b505af115801561268e573d6000803e3d6000fd5b505050506040513d60208110156126a457600080fd5b8101908080519060200190929190505050915050919050565b6126c5613e67565b6126cd613e8a565b606060405190810160405280600260ff168152602001600360ff168152602001600460ff168152509150606060405190810160405280670de0b6b3a7640000620186a0028152602001670de0b6b3a7640000612710028152602001670de0b6b3a76400006103e80281525090509091565b60006128146001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d60208110156127f557600080fd5b8101908080519060200190929190505050613cb390919063ffffffff16565b905090565b612821613ead565b61282a82613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663deb27fc5836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061016060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101608110156128f657600080fd5b81019080919050509050919050565b60008060008061291485613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f802448866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156129a557600080fd5b505af11580156129b9573d6000803e3d6000fd5b505050506040513d60208110156129cf57600080fd5b810190808051906020019092919050505093506129ec8585613777565b8093508194508295505050509193509193565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b505050506040513d6020811015612abc57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60606003805480602002602001604051908101604052809291908181526020018280548015612b8757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612b3d575b5050505050905090565b612b99613ed1565b612ba282613634565b60a060405190810160405280600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aea7d58560016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff16815260200192505050602060405180830381600087803b158015612c4b57600080fd5b505af1158015612c5f573d6000803e3d6000fd5b505050506040513d6020811015612c7557600080fd5b810190808051906020019092919050505063ffffffff1663ffffffff168152602001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aea7d58560026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff16815260200192505050602060405180830381600087803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b505050506040513d6020811015612d5e57600080fd5b810190808051906020019092919050505063ffffffff1663ffffffff168152602001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aea7d58560036040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff16815260200192505050602060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b505050506040513d6020811015612e4757600080fd5b810190808051906020019092919050505063ffffffff1663ffffffff168152602001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aea7d58560046040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff16815260200192505050602060405180830381600087803b158015612f0657600080fd5b505af1158015612f1a573d6000803e3d6000fd5b505050506040513d6020811015612f3057600080fd5b810190808051906020019092919050505063ffffffff1663ffffffff168152602001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aea7d58560056040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff16815260200192505050602060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050506040513d602081101561301957600080fd5b810190808051906020019092919050505063ffffffff1663ffffffff168152509050919050565b60008060008060008060008061305589613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634622ab038a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505050506040513d602081101561311057600080fd5b81019080805190602001909291905050509750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a678a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b505050506040513d60608110156131de57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050809550819650829750505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663866a095e86856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360ff1660ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b1580156132b657600080fd5b505af11580156132ca573d6000803e3d6000fd5b505050506040513d60208110156132e057600080fd5b81019080805190602001909291905050509150600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2a59d698a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b15801561338357600080fd5b505af1158015613397573d6000803e3d6000fd5b505050506040513d60408110156133ad57600080fd5b8101908080519060200190929190805190602001909291905050508097508198505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ecaa1958a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561346157600080fd5b505af1158015613475573d6000803e3d6000fd5b505050506040513d602081101561348b57600080fd5b81019080805190602001909291905050509050919395975091939597565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561356d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61357681613ccc565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f558e79826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156136c557600080fd5b505af11580156136d9573d6000803e3d6000fd5b505050506040513d60208110156136ef57600080fd5b81019080805190602001909291905050501515613774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f647261676f6e20646f65736e277420657869737400000000000000000000000081525060200191505060405180910390fd5b50565b60008060008060008060008061378c8a613634565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350d15fbe8b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505050506040513d60a081101561384757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508095508196508297508398508499505050505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633121409f8a60a0604051908101604052808963ffffffff1663ffffffff1681526020018863ffffffff1663ffffffff1681526020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360ff1660ff16815260200182600560200280838360005b8381101561399957808201518184015260208101905061397e565b5050505090500192505050606060405180830381600087803b1580156139be57600080fd5b505af11580156139d2573d6000803e3d6000fd5b505050506040513d60608110156139e857600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505097509750975050505050509250925092565b60008090505b8151811015613ac957613a4e8282815181101515613a3f57fe5b90602001906020020151613ccc565b60018060008484815181101515613a6157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050613a25565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613b93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015613bce57613bc18282815181101515613bb257fe5b90602001906020020151613ccc565b8080600101915050613b98565b8160029080519060200190613be4929190613dba565b505050565b60008163ffffffff168363ffffffff1611613c045782613c06565b815b905092915050565b60008060008463ffffffff161415613c295760009150613c60565b82840290508263ffffffff168463ffffffff168263ffffffff16811515613c4c57fe5b0463ffffffff16141515613c5c57fe5b8091505b5092915050565b60008082840190508363ffffffff168163ffffffff1610151515613c8757fe5b8091505092915050565b60008163ffffffff168363ffffffff16811515613caa57fe5b04905092915050565b6000828211151515613cc157fe5b818303905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b6040805190810160405280600290602082028038833980820191505090505090565b6103c060405190810160405280601e90602082028038833980820191505090505090565b828054828255906000526020600020908101928215613e33579160200282015b82811115613e325782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613dda565b5b509050613e409190613ef4565b5090565b608060405190810160405280600490602082028038833980820191505090505090565b606060405190810160405280600390602082028038833980820191505090505090565b606060405190810160405280600390602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b60a060405190810160405280600590602082028038833980820191505090505090565b613f3491905b80821115613f3057600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613efa565b5090565b905600a165627a7a72305820e02d9090c0c668c382a11a55bee38df9266144906abfa4882b710727a6400c640029

Swarm Source

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

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.