ETH Price: $3,395.24 (+3.54%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...67903282018-11-28 21:03:452255 days ago1543439025IN
Dragonereum: Core
0 ETH0.001543450
Set External Dep...67903172018-11-28 21:00:412255 days ago1543438841IN
Dragonereum: Core
0 ETH0.0106212550
Set Internal Dep...67903172018-11-28 21:00:412255 days ago1543438841IN
Dragonereum: Core
0 ETH0.0148490550

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Core

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-30
*/

pragma solidity 0.4.25;

library SafeMath8 {

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

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

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

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

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

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

library SafeMath16 {

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

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

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

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

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

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

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 DragonCore {
    function setRemainingHealthAndMana(uint256, uint32, uint32) external;
    function increaseExperience(uint256, uint256) external;
    function payDNAPointsForBreeding(uint256) external;
    function upgradeGenes(uint256, uint16[10]) external;
    function increaseWins(uint256) external;
    function increaseDefeats(uint256) external;
    function setTactics(uint256, uint8, uint8) external;
    function setSpecialPeacefulSkill(uint256, uint8) external;
    function useSpecialPeacefulSkill(address, uint256, uint256) external;
    function setBuff(uint256, uint8, uint32) external;
    function createDragon(address, uint16, uint256[2], uint256[4], uint8[11]) external returns (uint256);
    function setName(uint256, string) external returns (bytes32);
}

contract DragonGetter {
    function getAmount() external view returns (uint256);
    function getComposedGenome(uint256) external view returns (uint256[4]);
    function getCoolness(uint256) public view returns (uint32);
    function getFullRegenerationTime(uint256) external view returns (uint32);
    function getDragonTypes(uint256) external view returns (uint8[11]);
    function getGeneration(uint256) external view returns (uint16);
    function getParents(uint256) external view returns (uint256[2]);
}

contract DragonGenetics {
    function createGenome(uint256[2], uint256[4], uint256[4], uint256) external view returns (uint256[4], uint8[11]);
    function createGenomeForGenesis(uint8, uint256) external view returns (uint256[4]);
}

contract EggCore {
    function ownerOf(uint256) external view returns (address);
    function get(uint256) external view returns (uint256[2], uint8);
    function isOwner(address, uint256) external view returns (bool);
    function getAllEggs() external view returns (uint256[]);
    function create(address, uint256[2], uint8) external returns (uint256);
    function remove(address, uint256) external;
}

contract DragonLeaderboard {
    function update(uint256, uint32) external;
    function getDragonsFromLeaderboard() external view returns (uint256[10]);
    function updateRewardTime() external;
    function getRewards(uint256) external view returns (uint256[10]);
    function getDate() external view returns (uint256, uint256);
}

contract Nest {
    mapping (uint256 => bool) public inNest;
    function getEggs() external view returns (uint256[2]);
    function add(uint256) external returns (bool, uint256, uint256);
}




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




contract Core is Upgradable {
    using SafeMath8 for uint8;
    using SafeMath16 for uint16;
    using SafeMath32 for uint32;
    using SafeMath256 for uint256;

    DragonCore dragonCore;
    DragonGetter dragonGetter;
    DragonGenetics dragonGenetics;
    EggCore eggCore;
    DragonLeaderboard leaderboard;
    Nest nest;

    function _max(uint16 lth, uint16 rth) internal pure returns (uint16) {
        if (lth > rth) {
            return lth;
        } else {
            return rth;
        }
    }

    function createEgg(
        address _sender,
        uint8 _dragonType
    ) external onlyController returns (uint256) {
        return eggCore.create(_sender, [uint256(0), uint256(0)], _dragonType);
    }

    function sendToNest(
        uint256 _id
    ) external onlyController returns (
        bool isHatched,
        uint256 newDragonId,
        uint256 hatchedId,
        address owner
    ) {
        uint256 _randomForEggOpening;
        (isHatched, hatchedId, _randomForEggOpening) = nest.add(_id);
        // if any egg was hatched
        if (isHatched) {
            owner = eggCore.ownerOf(hatchedId);
            newDragonId = openEgg(owner, hatchedId, _randomForEggOpening);
        }
    }

    function openEgg(
        address _owner,
        uint256 _eggId,
        uint256 _random
    ) internal returns (uint256 newDragonId) {
        uint256[2] memory _parents;
        uint8 _dragonType;
        (_parents, _dragonType) = eggCore.get(_eggId);

        uint256[4] memory _genome;
        uint8[11] memory _dragonTypesArray;
        uint16 _generation;
        // if genesis
        if (_parents[0] == 0 && _parents[1] == 0) {
            _generation = 0;
            _genome = dragonGenetics.createGenomeForGenesis(_dragonType, _random);
            _dragonTypesArray[_dragonType] = 40; // 40 genes of 1 type
        } else {
            uint256[4] memory _momGenome = dragonGetter.getComposedGenome(_parents[0]);
            uint256[4] memory _dadGenome = dragonGetter.getComposedGenome(_parents[1]);
            (_genome, _dragonTypesArray) = dragonGenetics.createGenome(_parents, _momGenome, _dadGenome, _random);
            _generation = _max(
                dragonGetter.getGeneration(_parents[0]),
                dragonGetter.getGeneration(_parents[1])
            ).add(1);
        }

        newDragonId = dragonCore.createDragon(_owner, _generation, _parents, _genome, _dragonTypesArray);
        eggCore.remove(_owner, _eggId);

        uint32 _coolness = dragonGetter.getCoolness(newDragonId);
        leaderboard.update(newDragonId, _coolness);
    }

    function breed(
        address _sender,
        uint256 _momId,
        uint256 _dadId
    ) external onlyController returns (uint256) {
        dragonCore.payDNAPointsForBreeding(_momId);
        dragonCore.payDNAPointsForBreeding(_dadId);
        return eggCore.create(_sender, [_momId, _dadId], 0);
    }

    function setDragonRemainingHealthAndMana(uint256 _id, uint32 _health, uint32 _mana) external onlyController {
        return dragonCore.setRemainingHealthAndMana(_id, _health, _mana);
    }

    function increaseDragonExperience(uint256 _id, uint256 _factor) external onlyController {
        dragonCore.increaseExperience(_id, _factor);
    }

    function upgradeDragonGenes(uint256 _id, uint16[10] _dnaPoints) external onlyController {
        dragonCore.upgradeGenes(_id, _dnaPoints);

        uint32 _coolness = dragonGetter.getCoolness(_id);
        leaderboard.update(_id, _coolness);
    }

    function increaseDragonWins(uint256 _id) external onlyController {
        dragonCore.increaseWins(_id);
    }

    function increaseDragonDefeats(uint256 _id) external onlyController {
        dragonCore.increaseDefeats(_id);
    }

    function setDragonTactics(uint256 _id, uint8 _melee, uint8 _attack) external onlyController {
        dragonCore.setTactics(_id, _melee, _attack);
    }

    function setDragonName(uint256 _id, string _name) external onlyController returns (bytes32) {
        return dragonCore.setName(_id, _name);
    }

    function setDragonSpecialPeacefulSkill(uint256 _id, uint8 _class) external onlyController {
        dragonCore.setSpecialPeacefulSkill(_id, _class);
    }

    function useDragonSpecialPeacefulSkill(
        address _sender,
        uint256 _id,
        uint256 _target
    ) external onlyController {
        dragonCore.useSpecialPeacefulSkill(_sender, _id, _target);
    }

    function resetDragonBuffs(uint256 _id) external onlyController {
        dragonCore.setBuff(_id, 1, 0); // attack
        dragonCore.setBuff(_id, 2, 0); // defense
        dragonCore.setBuff(_id, 3, 0); // stamina
        dragonCore.setBuff(_id, 4, 0); // speed
        dragonCore.setBuff(_id, 5, 0); // intelligence
    }

    function updateLeaderboardRewardTime() external onlyController {
        return leaderboard.updateRewardTime();
    }

    // GETTERS

    function getDragonFullRegenerationTime(uint256 _id) external view returns (uint32 time) {
        return dragonGetter.getFullRegenerationTime(_id);
    }

    function isEggOwner(address _user, uint256 _tokenId) external view returns (bool) {
        return eggCore.isOwner(_user, _tokenId);
    }

    function isEggInNest(uint256 _id) external view returns (bool) {
        return nest.inNest(_id);
    }

    function getEggsInNest() external view returns (uint256[2]) {
        return nest.getEggs();
    }

    function getEgg(uint256 _id) external view returns (uint16, uint32, uint256[2], uint8[11], uint8[11]) {
        uint256[2] memory parents;
        uint8 _dragonType;
        (parents, _dragonType) = eggCore.get(_id);

        uint8[11] memory momDragonTypes;
        uint8[11] memory dadDragonTypes;
        uint32 coolness;
        uint16 gen;
        // if genesis
        if (parents[0] == 0 && parents[1] == 0) {
            momDragonTypes[_dragonType] = 100;
            dadDragonTypes[_dragonType] = 100;
            coolness = 3600;
        } else {
            momDragonTypes = dragonGetter.getDragonTypes(parents[0]);
            dadDragonTypes = dragonGetter.getDragonTypes(parents[1]);
            coolness = dragonGetter.getCoolness(parents[0]).add(dragonGetter.getCoolness(parents[1])).div(2);
            uint16 _momGeneration = dragonGetter.getGeneration(parents[0]);
            uint16 _dadGeneration = dragonGetter.getGeneration(parents[1]);
            gen = _max(_momGeneration, _dadGeneration).add(1);
        }
        return (gen, coolness, parents, momDragonTypes, dadDragonTypes);
    }

    function getDragonChildren(uint256 _id) external view returns (
        uint256[10] dragonsChildren,
        uint256[10] eggsChildren
    ) {
        uint8 _counter;
        uint256[2] memory _parents;
        uint256 i;
        for (i = _id.add(1); i <= dragonGetter.getAmount() && _counter < 10; i++) {
            _parents = dragonGetter.getParents(i);
            if (_parents[0] == _id || _parents[1] == _id) {
                dragonsChildren[_counter] = i;
                _counter = _counter.add(1);
            }
        }
        _counter = 0;
        uint256[] memory eggs = eggCore.getAllEggs();
        for (i = 0; i < eggs.length && _counter < 10; i++) {
            (_parents, ) = eggCore.get(eggs[i]);
            if (_parents[0] == _id || _parents[1] == _id) {
                eggsChildren[_counter] = eggs[i];
                _counter = _counter.add(1);
            }
        }
    }

    function getDragonsFromLeaderboard() external view returns (uint256[10]) {
        return leaderboard.getDragonsFromLeaderboard();
    }

    function getLeaderboardRewards(
        uint256 _hatchingPrice
    ) external view returns (
        uint256[10]
    ) {
        return leaderboard.getRewards(_hatchingPrice);
    }

    function getLeaderboardRewardDate() external view returns (uint256, uint256) {
        return leaderboard.getDate();
    }

    // UPDATE CONTRACT

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

        dragonCore = DragonCore(_newDependencies[0]);
        dragonGetter = DragonGetter(_newDependencies[1]);
        dragonGenetics = DragonGenetics(_newDependencies[2]);
        eggCore = EggCore(_newDependencies[3]);
        leaderboard = DragonLeaderboard(_newDependencies[4]);
        nest = Nest(_newDependencies[5]);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"updateLeaderboardRewardTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_momId","type":"uint256"},{"name":"_dadId","type":"uint256"}],"name":"breed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_factor","type":"uint256"}],"name":"increaseDragonExperience","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"increaseDragonWins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_dnaPoints","type":"uint16[10]"}],"name":"upgradeDragonGenes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getDragonFullRegenerationTime","outputs":[{"name":"time","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isEggOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_melee","type":"uint8"},{"name":"_attack","type":"uint8"}],"name":"setDragonTactics","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLeaderboardRewardDate","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"isEggInNest","outputs":[{"name":"","type":"bool"}],"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":"_id","type":"uint256"}],"name":"resetDragonBuffs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"increaseDragonDefeats","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDragonsFromLeaderboard","outputs":[{"name":"","type":"uint256[10]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_id","type":"uint256"},{"name":"_target","type":"uint256"}],"name":"useDragonSpecialPeacefulSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_name","type":"string"}],"name":"setDragonName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEggsInNest","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_dragonType","type":"uint8"}],"name":"createEgg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_health","type":"uint32"},{"name":"_mana","type":"uint32"}],"name":"setDragonRemainingHealthAndMana","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_class","type":"uint8"}],"name":"setDragonSpecialPeacefulSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"sendToNest","outputs":[{"name":"isHatched","type":"bool"},{"name":"newDragonId","type":"uint256"},{"name":"hatchedId","type":"uint256"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hatchingPrice","type":"uint256"}],"name":"getLeaderboardRewards","outputs":[{"name":"","type":"uint256[10]"}],"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":"getDragonChildren","outputs":[{"name":"dragonsChildren","type":"uint256[10]"},{"name":"eggsChildren","type":"uint256[10]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getEgg","outputs":[{"name":"","type":"uint16"},{"name":"","type":"uint32"},{"name":"","type":"uint256[2]"},{"name":"","type":"uint8[11]"},{"name":"","type":"uint8[11]"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614f22806100536000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063068d1fb81461017a57806312e3fe101461019157806314521d3c146101fc5780631cc1147f1461023357806335c0cbaf146102605780633c6f730e1461029857806345ada01f146102e5578063466d3d381461034a57806348939e4014610391578063591aab0f146103c357806365fc125314610408578063686623011461046e57806369c0ad931461049b5780637c3289801461050157806380deece51461052e5780638da5cb5b14610581578063978ee4e0146105d857806399d76e491461062f578063a2f36cfd14610690578063b0866bc7146106e3578063b75c4f8014610747578063bf7de620146107b3578063c718640a14610800578063d2d21e851461083a578063dc24838a146108c0578063e6458f6e14610929578063ee55f77b14610995578063f2fde38b14610a2d578063feb40f7e14610a70575b600080fd5b34801561018657600080fd5b5061018f610b59565b005b34801561019d57600080fd5b506101e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610c76565b6040518082815260200191505060405180910390f35b34801561020857600080fd5b506102316004803603810190808035906020019092919080359060200190929190505050610f98565b005b34801561023f57600080fd5b5061025e600480360381019080803590602001909291905050506110ca565b005b34801561026c57600080fd5b506102966004803603810190808035906020019092919080610140019091929192905050506111f3565b005b3480156102a457600080fd5b506102c3600480360381019080803590602001909291905050506114bc565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156102f157600080fd5b50610330600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611591565b604051808215151515815260200191505060405180910390f35b34801561035657600080fd5b5061038f60048036038101908080359060200190929190803560ff169060200190929190803560ff16906020019092919050505061169b565b005b34801561039d57600080fd5b506103a66117e2565b604051808381526020018281526020019250505060405180910390f35b3480156103cf57600080fd5b506103ee600480360381019080803590602001909291905050506118b7565b604051808215151515815260200191505060405180910390f35b34801561041457600080fd5b5061046c6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061198c565b005b34801561047a57600080fd5b5061049960048036038101908080359060200190929190505050611a73565b005b3480156104a757600080fd5b506104ff60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611ec7565b005b34801561050d57600080fd5b5061052c600480360381019080803590602001909291905050506121ad565b005b34801561053a57600080fd5b506105436122d6565b6040518082600a60200280838360005b8381101561056e578082015181840152602081019050610553565b5050505090500191505060405180910390f35b34801561058d57600080fd5b506105966123ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e457600080fd5b5061062d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506123d1565b005b34801561063b57600080fd5b5061067260048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612538565b60405180826000191660001916815260200191505060405180910390f35b34801561069c57600080fd5b506106a56126ae565b6040518082600260200280838360005b838110156106d05780820151818401526020810190506106b5565b5050505090500191505060405180910390f35b3480156106ef57600080fd5b50610731600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050612781565b6040518082815260200191505060405180910390f35b34801561075357600080fd5b5061075c612954565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561079f578082015181840152602081019050610784565b505050509050019250505060405180910390f35b3480156107bf57600080fd5b506107fe60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff1690602001909291905050506129e2565b005b34801561080c57600080fd5b5061083860048036038101908080359060200190929190803560ff169060200190929190505050612b35565b005b34801561084657600080fd5b5061086560048036038101908080359060200190929190505050612c6d565b60405180851515151581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b3480156108cc57600080fd5b506108eb60048036038101908080359060200190929190505050612ec8565b6040518082600a60200280838360005b838110156109165780820151818401526020810190506108fb565b5050505090500191505060405180910390f35b34801561093557600080fd5b5061093e612fab565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610981578082015181840152602081019050610966565b505050509050019250505060405180910390f35b3480156109a157600080fd5b506109c060048036038101908080359060200190929190505050613039565b6040518083600a60200280838360005b838110156109eb5780820151818401526020810190506109d0565b5050505090500182600a60200280838360005b83811015610a195780820151818401526020810190506109fe565b505050509050019250505060405180910390f35b348015610a3957600080fd5b50610a6e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613564565b005b348015610a7c57600080fd5b50610a9b600480360381019080803590602001909291905050506136ef565b604051808661ffff1661ffff1681526020018563ffffffff1663ffffffff16815260200184600260200280838360005b83811015610ae6578082015181840152602081019050610acb565b5050505090500183600b60200280838360005b83811015610b14578082015181840152602081019050610af9565b5050505090500182600b60200280838360005b83811015610b42578082015181840152602081019050610b27565b505050509050019550505050505060405180910390f35b610b6233613e68565b1515610bd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f146da5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b50505050565b6000610c8133613e68565b1515610cf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df388c65846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df388c65836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015610e2f57600080fd5b505af1158015610e43573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e92ac38560408051908101604052808781526020018681525060006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600260200280838360005b83811015610f25578082015181840152602081019050610f0a565b505050509050018260ff1681526020019350505050602060405180830381600087803b158015610f5457600080fd5b505af1158015610f68573d6000803e3d6000fd5b505050506040513d6020811015610f7e57600080fd5b810190808051906020019092919050505090509392505050565b610fa133613e68565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663243a7c7b83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050505050565b6110d333613e68565b1515611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcfa5464826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156111d857600080fd5b505af11580156111ec573d6000803e3d6000fd5b5050505050565b60006111fe33613e68565b1515611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8fcb50c84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600a60200280828437820191505092505050600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae3846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b81019080805190602001909291905050509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cebab53d84836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018263ffffffff1663ffffffff16815260200192505050600060405180830381600087803b15801561149f57600080fd5b505af11580156114b3573d6000803e3d6000fd5b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c22335b3836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b505050506040513d602081101561157957600080fd5b81019080805190602001909291905050509050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e327a6af84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561165857600080fd5b505af115801561166c573d6000803e3d6000fd5b505050506040513d602081101561168257600080fd5b8101908080519060200190929190505050905092915050565b6116a433613e68565b1515611718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ecef65f8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1660ff1681526020018260ff1660ff1681526020019350505050600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430fe9c16040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b505050506040513d604081101561189457600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e871097836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b8060039080519060200190611a66929190614d9c565b50611a7081613ebe565b50565b611a7c33613e68565b1515611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600160006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600260006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600360006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611d2457600080fd5b505af1158015611d38573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600460006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611de857600080fd5b505af1158015611dfc573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600560006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b611f9481613f6c565b806000815181101515611fa357fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001815181101515611ffc57fe5b90602001906020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110151561205557fe5b90602001906020020151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811015156120ae57fe5b90602001906020020151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600481518110151561210757fe5b90602001906020020151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600581518110151561216057fe5b90602001906020020151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121b633613e68565b151561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631831107d826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b5050505050565b6122de614e26565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380deece56040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161014060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061014081101561239f57600080fd5b8101908091905050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123da33613e68565b151561244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b0e13f58484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561251b57600080fd5b505af115801561252f573d6000803e3d6000fd5b50505050505050565b600061254333613e68565b15156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe55932a8585856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018060200182810382528484828181526020019250808284378201915050945050505050602060405180830381600087803b15801561266a57600080fd5b505af115801561267e573d6000803e3d6000fd5b505050506040513d602081101561269457600080fd5b810190808051906020019092919050505090509392505050565b6126b6614e4a565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632542364d6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561273b57600080fd5b505af115801561274f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561277457600080fd5b8101908091905050905090565b600061278c33613e68565b1515612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e92ac3846040805190810160405280600081526020016000815250856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600260200280838360005b838110156128df5780820151818401526020810190506128c4565b505050509050018260ff1660ff1681526020019350505050602060405180830381600087803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b505050506040513d602081101561293b57600080fd5b8101908080519060200190929190505050905092915050565b606060028054806020026020016040519081016040528092919081815260200182805480156129d857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161298e575b5050505050905090565b6129eb33613e68565b1515612a5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387115a9d8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019350505050600060405180830381600087803b158015612b1857600080fd5b505af1158015612b2c573d6000803e3d6000fd5b50505050505050565b612b3e33613e68565b1515612bb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355c0820083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff1660ff16815260200192505050600060405180830381600087803b158015612c5157600080fd5b505af1158015612c65573d6000803e3d6000fd5b505050505050565b6000806000806000612c7e33613e68565b1515612cf2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631003e2d2876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b158015612d8357600080fd5b505af1158015612d97573d6000803e3d6000fd5b505050506040513d6060811015612dad57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050508093508195508297505050508415612ec057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612e7557600080fd5b505af1158015612e89573d6000803e3d6000fd5b505050506040513d6020811015612e9f57600080fd5b81019080805190602001909291905050509150612ebd828483614088565b93505b509193509193565b612ed0614e26565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0d8012c836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061014060405180830381600087803b158015612f6257600080fd5b505af1158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610140811015612f9c57600080fd5b81019080919050509050919050565b6060600380548060200260200160405190810160405280929190818152602001828054801561302f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612fe5575b5050505050905090565b613041614e26565b613049614e26565b6000613053614e4a565b6000606061306b600188614c1c90919063ffffffff16565b91505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d321fe296040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d602081101561311e57600080fd5b810190808051906020019092919050505082111580156131415750600a8460ff16105b1561329357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663242a0087836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561320f57600080fd5b810190809190505092508683600060028110151561322957fe5b6020020151148061324c57508683600160028110151561324557fe5b6020020151145b156132865781868560ff16600a8110151561326357fe5b60200201818152505061328360018560ff16614c3a90919063ffffffff16565b93505b818060010192505061306e565b60009350600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366234b576040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561331d57600080fd5b505af1158015613331573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561335b57600080fd5b81019080805164010000000081111561337357600080fd5b8281019050602081018481111561338957600080fd5b81518560208202830111640100000000821117156133a657600080fd5b50509291905050509050600091505b8051821080156133c85750600a8460ff16105b1561355b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a828481518110151561341957fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b15801561347557600080fd5b505af1158015613489573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060608110156134ae57600080fd5b81019080919082604001805190602001909291905050505080935050868360006002811015156134da57fe5b602002015114806134fd5750868360016002811015156134f657fe5b6020020151145b1561354e57808281518110151561351057fe5b90602001906020020151858560ff16600a8110151561352b57fe5b60200201818152505061354b60018560ff16614c3a90919063ffffffff16565b93505b81806001019250506133b5565b50505050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613628576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61363181614c5e565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806136fa614e4a565b613702614e6c565b61370a614e6c565b613712614e4a565b600061371c614e6c565b613724614e6c565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a8f6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060608110156137f457600080fd5b81019080919082604001805190602001909291905050508098508199505050600088600060028110151561382457fe5b60200201511480156138495750600088600160028110151561384257fe5b6020020151145b156138a0576064868860ff16600b8110151561386157fe5b602002019060ff16908160ff16815250506064858860ff16600b8110151561388557fe5b602002019060ff16908160ff1681525050610e109350613e48565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663deb27fc58960006002811015156138ed57fe5b60200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061016060405180830381600087803b15801561394557600080fd5b505af1158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061016081101561397f57600080fd5b81019080919050509550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663deb27fc58960016002811015156139d657fe5b60200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061016060405180830381600087803b158015613a2e57600080fd5b505af1158015613a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610160811015613a6857600080fd5b81019080919050509450613c606002613c4c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38c6001600281101515613ac757fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613b1e57600080fd5b505af1158015613b32573d6000803e3d6000fd5b505050506040513d6020811015613b4857600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38d6000600281101515613ba657fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505050506040513d6020811015613c2757600080fd5b810190808051906020019092919050505063ffffffff16614d0690919063ffffffff16565b63ffffffff16614d3090919063ffffffff16565b9350600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df97896000600281101515613caf57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613d0657600080fd5b505af1158015613d1a573d6000803e3d6000fd5b505050506040513d6020811015613d3057600080fd5b81019080805190602001909291905050509150600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df97896001600281101515613d9057fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613de757600080fd5b505af1158015613dfb573d6000803e3d6000fd5b505050506040513d6020811015613e1157600080fd5b81019080805190602001909291905050509050613e456001613e338484614d52565b61ffff16614d7690919063ffffffff16565b92505b82848988889c509c509c509c509c50505050505050505091939590929450565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008090505b8151811015613f6857613eed8282815181101515613ede57fe5b90602001906020020151614c5e565b60018060008484815181101515613f0057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050613ec4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561406d57614060828281518110151561405157fe5b90602001906020020151614c5e565b8080600101915050614037565b8160029080519060200190614083929190614d9c565b505050565b6000614092614e4a565b600061409c614e90565b6140a4614e6c565b60006140ae614e90565b6140b6614e90565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a8c6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b15801561414957600080fd5b505af115801561415d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250606081101561418257600080fd5b8101908091908260400180519060200190929190505050809850819950505060008860006002811015156141b257fe5b60200201511480156141d7575060008860016002811015156141d057fe5b6020020151145b156142eb5760009350600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663574f0005888c6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360ff1660ff16815260200182815260200192505050608060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156142b857600080fd5b810190809190505095506028858860ff16600b811015156142d557fe5b602002019060ff16908160ff168152505061480b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c2210bb89600060028110151561433857fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b15801561438f57600080fd5b505af11580156143a3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156143c857600080fd5b81019080919050509250600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c2210bb89600160028110151561441f57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b15801561447657600080fd5b505af115801561448a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156144af57600080fd5b81019080919050509150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329e3ebe48985858e6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600260200280838360005b83811015614551578082015181840152602081019050614536565b5050505090500184600460200280838360005b8381101561457f578082015181840152602081019050614564565b5050505090500183600460200280838360005b838110156145ad578082015181840152602081019050614592565b505050509050018281526020019450505050506101e060405180830381600087803b1580156145db57600080fd5b505af11580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101e081101561461557600080fd5b8101908091908260800191905050809650819750505061480860016147f6600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df978c600060028110151561468057fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156146d757600080fd5b505af11580156146eb573d6000803e3d6000fd5b505050506040513d602081101561470157600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df978d600160028110151561475f57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156147b657600080fd5b505af11580156147ca573d6000803e3d6000fd5b505050506040513d60208110156147e057600080fd5b8101908080519060200190929190505050614d52565b61ffff16614d7690919063ffffffff16565b93505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a7703d48d868b8a8a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff1661ffff16815260200184600260200280838360005b838110156148e45780820151818401526020810190506148c9565b5050505090500183600460200280838360005b838110156149125780820151818401526020810190506148f7565b5050505090500182600b60200280838360005b83811015614940578082015181840152602081019050614925565b5050505090500195505050505050602060405180830381600087803b15801561496857600080fd5b505af115801561497c573d6000803e3d6000fd5b505050506040513d602081101561499257600080fd5b81019080805190602001909291905050509850600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663abe7f1ab8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015614a6a57600080fd5b505af1158015614a7e573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015614b1357600080fd5b505af1158015614b27573d6000803e3d6000fd5b505050506040513d6020811015614b3d57600080fd5b81019080805190602001909291905050509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cebab53d8a836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018263ffffffff1663ffffffff16815260200192505050600060405180830381600087803b158015614bf557600080fd5b505af1158015614c09573d6000803e3d6000fd5b5050505050505050505050509392505050565b6000808284019050838110151515614c3057fe5b8091505092915050565b60008082840190508360ff168160ff1610151515614c5457fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515614d03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b60008082840190508363ffffffff168163ffffffff1610151515614d2657fe5b8091505092915050565b60008163ffffffff168363ffffffff16811515614d4957fe5b04905092915050565b60008161ffff168361ffff161115614d6c57829050614d70565b8190505b92915050565b60008082840190508361ffff168161ffff1610151515614d9257fe5b8091505092915050565b828054828255906000526020600020908101928215614e15579160200282015b82811115614e145782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190614dbc565b5b509050614e229190614eb3565b5090565b61014060405190810160405280600a90602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b608060405190810160405280600490602082028038833980820191505090505090565b614ef391905b80821115614eef57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101614eb9565b5090565b905600a165627a7a7230582085ff92c12c4a63ac2102a16fea73d94a9b06f9f9fc1b13fa2e1583db8062b7220029

Deployed Bytecode

0x608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063068d1fb81461017a57806312e3fe101461019157806314521d3c146101fc5780631cc1147f1461023357806335c0cbaf146102605780633c6f730e1461029857806345ada01f146102e5578063466d3d381461034a57806348939e4014610391578063591aab0f146103c357806365fc125314610408578063686623011461046e57806369c0ad931461049b5780637c3289801461050157806380deece51461052e5780638da5cb5b14610581578063978ee4e0146105d857806399d76e491461062f578063a2f36cfd14610690578063b0866bc7146106e3578063b75c4f8014610747578063bf7de620146107b3578063c718640a14610800578063d2d21e851461083a578063dc24838a146108c0578063e6458f6e14610929578063ee55f77b14610995578063f2fde38b14610a2d578063feb40f7e14610a70575b600080fd5b34801561018657600080fd5b5061018f610b59565b005b34801561019d57600080fd5b506101e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610c76565b6040518082815260200191505060405180910390f35b34801561020857600080fd5b506102316004803603810190808035906020019092919080359060200190929190505050610f98565b005b34801561023f57600080fd5b5061025e600480360381019080803590602001909291905050506110ca565b005b34801561026c57600080fd5b506102966004803603810190808035906020019092919080610140019091929192905050506111f3565b005b3480156102a457600080fd5b506102c3600480360381019080803590602001909291905050506114bc565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156102f157600080fd5b50610330600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611591565b604051808215151515815260200191505060405180910390f35b34801561035657600080fd5b5061038f60048036038101908080359060200190929190803560ff169060200190929190803560ff16906020019092919050505061169b565b005b34801561039d57600080fd5b506103a66117e2565b604051808381526020018281526020019250505060405180910390f35b3480156103cf57600080fd5b506103ee600480360381019080803590602001909291905050506118b7565b604051808215151515815260200191505060405180910390f35b34801561041457600080fd5b5061046c6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061198c565b005b34801561047a57600080fd5b5061049960048036038101908080359060200190929190505050611a73565b005b3480156104a757600080fd5b506104ff60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611ec7565b005b34801561050d57600080fd5b5061052c600480360381019080803590602001909291905050506121ad565b005b34801561053a57600080fd5b506105436122d6565b6040518082600a60200280838360005b8381101561056e578082015181840152602081019050610553565b5050505090500191505060405180910390f35b34801561058d57600080fd5b506105966123ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e457600080fd5b5061062d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506123d1565b005b34801561063b57600080fd5b5061067260048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612538565b60405180826000191660001916815260200191505060405180910390f35b34801561069c57600080fd5b506106a56126ae565b6040518082600260200280838360005b838110156106d05780820151818401526020810190506106b5565b5050505090500191505060405180910390f35b3480156106ef57600080fd5b50610731600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050612781565b6040518082815260200191505060405180910390f35b34801561075357600080fd5b5061075c612954565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561079f578082015181840152602081019050610784565b505050509050019250505060405180910390f35b3480156107bf57600080fd5b506107fe60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff1690602001909291905050506129e2565b005b34801561080c57600080fd5b5061083860048036038101908080359060200190929190803560ff169060200190929190505050612b35565b005b34801561084657600080fd5b5061086560048036038101908080359060200190929190505050612c6d565b60405180851515151581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b3480156108cc57600080fd5b506108eb60048036038101908080359060200190929190505050612ec8565b6040518082600a60200280838360005b838110156109165780820151818401526020810190506108fb565b5050505090500191505060405180910390f35b34801561093557600080fd5b5061093e612fab565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610981578082015181840152602081019050610966565b505050509050019250505060405180910390f35b3480156109a157600080fd5b506109c060048036038101908080359060200190929190505050613039565b6040518083600a60200280838360005b838110156109eb5780820151818401526020810190506109d0565b5050505090500182600a60200280838360005b83811015610a195780820151818401526020810190506109fe565b505050509050019250505060405180910390f35b348015610a3957600080fd5b50610a6e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613564565b005b348015610a7c57600080fd5b50610a9b600480360381019080803590602001909291905050506136ef565b604051808661ffff1661ffff1681526020018563ffffffff1663ffffffff16815260200184600260200280838360005b83811015610ae6578082015181840152602081019050610acb565b5050505090500183600b60200280838360005b83811015610b14578082015181840152602081019050610af9565b5050505090500182600b60200280838360005b83811015610b42578082015181840152602081019050610b27565b505050509050019550505050505060405180910390f35b610b6233613e68565b1515610bd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f146da5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b50505050565b6000610c8133613e68565b1515610cf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df388c65846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df388c65836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015610e2f57600080fd5b505af1158015610e43573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e92ac38560408051908101604052808781526020018681525060006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600260200280838360005b83811015610f25578082015181840152602081019050610f0a565b505050509050018260ff1681526020019350505050602060405180830381600087803b158015610f5457600080fd5b505af1158015610f68573d6000803e3d6000fd5b505050506040513d6020811015610f7e57600080fd5b810190808051906020019092919050505090509392505050565b610fa133613e68565b1515611015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663243a7c7b83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050505050565b6110d333613e68565b1515611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcfa5464826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156111d857600080fd5b505af11580156111ec573d6000803e3d6000fd5b5050505050565b60006111fe33613e68565b1515611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8fcb50c84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600a60200280828437820191505092505050600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae3846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b81019080805190602001909291905050509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cebab53d84836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018263ffffffff1663ffffffff16815260200192505050600060405180830381600087803b15801561149f57600080fd5b505af11580156114b3573d6000803e3d6000fd5b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c22335b3836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b505050506040513d602081101561157957600080fd5b81019080805190602001909291905050509050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e327a6af84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561165857600080fd5b505af115801561166c573d6000803e3d6000fd5b505050506040513d602081101561168257600080fd5b8101908080519060200190929190505050905092915050565b6116a433613e68565b1515611718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ecef65f8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1660ff1681526020018260ff1660ff1681526020019350505050600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430fe9c16040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b505050506040513d604081101561189457600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e871097836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b505050506040513d602081101561197457600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b8060039080519060200190611a66929190614d9c565b50611a7081613ebe565b50565b611a7c33613e68565b1515611af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600160006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600260006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600360006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611d2457600080fd5b505af1158015611d38573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600460006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611de857600080fd5b505af1158015611dfc573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8ed0dfb82600560006040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018360ff1681526020018263ffffffff1681526020019350505050600060405180830381600087803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b611f9481613f6c565b806000815181101515611fa357fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001815181101515611ffc57fe5b90602001906020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110151561205557fe5b90602001906020020151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038151811015156120ae57fe5b90602001906020020151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600481518110151561210757fe5b90602001906020020151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600581518110151561216057fe5b90602001906020020151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121b633613e68565b151561222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631831107d826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b5050505050565b6122de614e26565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380deece56040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161014060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061014081101561239f57600080fd5b8101908091905050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123da33613e68565b151561244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b0e13f58484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561251b57600080fd5b505af115801561252f573d6000803e3d6000fd5b50505050505050565b600061254333613e68565b15156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe55932a8585856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018060200182810382528484828181526020019250808284378201915050945050505050602060405180830381600087803b15801561266a57600080fd5b505af115801561267e573d6000803e3d6000fd5b505050506040513d602081101561269457600080fd5b810190808051906020019092919050505090509392505050565b6126b6614e4a565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632542364d6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b15801561273b57600080fd5b505af115801561274f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561277457600080fd5b8101908091905050905090565b600061278c33613e68565b1515612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e92ac3846040805190810160405280600081526020016000815250856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600260200280838360005b838110156128df5780820151818401526020810190506128c4565b505050509050018260ff1660ff1681526020019350505050602060405180830381600087803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b505050506040513d602081101561293b57600080fd5b8101908080519060200190929190505050905092915050565b606060028054806020026020016040519081016040528092919081815260200182805480156129d857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161298e575b5050505050905090565b6129eb33613e68565b1515612a5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387115a9d8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019350505050600060405180830381600087803b158015612b1857600080fd5b505af1158015612b2c573d6000803e3d6000fd5b50505050505050565b612b3e33613e68565b1515612bb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355c0820083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018260ff1660ff16815260200192505050600060405180830381600087803b158015612c5157600080fd5b505af1158015612c65573d6000803e3d6000fd5b505050505050565b6000806000806000612c7e33613e68565b1515612cf2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631003e2d2876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b158015612d8357600080fd5b505af1158015612d97573d6000803e3d6000fd5b505050506040513d6060811015612dad57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050508093508195508297505050508415612ec057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612e7557600080fd5b505af1158015612e89573d6000803e3d6000fd5b505050506040513d6020811015612e9f57600080fd5b81019080805190602001909291905050509150612ebd828483614088565b93505b509193509193565b612ed0614e26565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c0d8012c836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061014060405180830381600087803b158015612f6257600080fd5b505af1158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610140811015612f9c57600080fd5b81019080919050509050919050565b6060600380548060200260200160405190810160405280929190818152602001828054801561302f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612fe5575b5050505050905090565b613041614e26565b613049614e26565b6000613053614e4a565b6000606061306b600188614c1c90919063ffffffff16565b91505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d321fe296040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d602081101561311e57600080fd5b810190808051906020019092919050505082111580156131415750600a8460ff16105b1561329357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663242a0087836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561320f57600080fd5b810190809190505092508683600060028110151561322957fe5b6020020151148061324c57508683600160028110151561324557fe5b6020020151145b156132865781868560ff16600a8110151561326357fe5b60200201818152505061328360018560ff16614c3a90919063ffffffff16565b93505b818060010192505061306e565b60009350600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366234b576040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561331d57600080fd5b505af1158015613331573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561335b57600080fd5b81019080805164010000000081111561337357600080fd5b8281019050602081018481111561338957600080fd5b81518560208202830111640100000000821117156133a657600080fd5b50509291905050509050600091505b8051821080156133c85750600a8460ff16105b1561355b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a828481518110151561341957fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b15801561347557600080fd5b505af1158015613489573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060608110156134ae57600080fd5b81019080919082604001805190602001909291905050505080935050868360006002811015156134da57fe5b602002015114806134fd5750868360016002811015156134f657fe5b6020020151145b1561354e57808281518110151561351057fe5b90602001906020020151858560ff16600a8110151561352b57fe5b60200201818152505061354b60018560ff16614c3a90919063ffffffff16565b93505b81806001019250506133b5565b50505050915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613628576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61363181614c5e565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806136fa614e4a565b613702614e6c565b61370a614e6c565b613712614e4a565b600061371c614e6c565b613724614e6c565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a8f6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060608110156137f457600080fd5b81019080919082604001805190602001909291905050508098508199505050600088600060028110151561382457fe5b60200201511480156138495750600088600160028110151561384257fe5b6020020151145b156138a0576064868860ff16600b8110151561386157fe5b602002019060ff16908160ff16815250506064858860ff16600b8110151561388557fe5b602002019060ff16908160ff1681525050610e109350613e48565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663deb27fc58960006002811015156138ed57fe5b60200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061016060405180830381600087803b15801561394557600080fd5b505af1158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061016081101561397f57600080fd5b81019080919050509550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663deb27fc58960016002811015156139d657fe5b60200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061016060405180830381600087803b158015613a2e57600080fd5b505af1158015613a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610160811015613a6857600080fd5b81019080919050509450613c606002613c4c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38c6001600281101515613ac757fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613b1e57600080fd5b505af1158015613b32573d6000803e3d6000fd5b505050506040513d6020811015613b4857600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38d6000600281101515613ba657fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505050506040513d6020811015613c2757600080fd5b810190808051906020019092919050505063ffffffff16614d0690919063ffffffff16565b63ffffffff16614d3090919063ffffffff16565b9350600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df97896000600281101515613caf57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613d0657600080fd5b505af1158015613d1a573d6000803e3d6000fd5b505050506040513d6020811015613d3057600080fd5b81019080805190602001909291905050509150600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df97896001600281101515613d9057fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613de757600080fd5b505af1158015613dfb573d6000803e3d6000fd5b505050506040513d6020811015613e1157600080fd5b81019080805190602001909291905050509050613e456001613e338484614d52565b61ffff16614d7690919063ffffffff16565b92505b82848988889c509c509c509c509c50505050505050505091939590929450565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008090505b8151811015613f6857613eed8282815181101515613ede57fe5b90602001906020020151614c5e565b60018060008484815181101515613f0057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050613ec4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561406d57614060828281518110151561405157fe5b90602001906020020151614c5e565b8080600101915050614037565b8160029080519060200190614083929190614d9c565b505050565b6000614092614e4a565b600061409c614e90565b6140a4614e6c565b60006140ae614e90565b6140b6614e90565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639507d39a8c6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b15801561414957600080fd5b505af115801561415d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250606081101561418257600080fd5b8101908091908260400180519060200190929190505050809850819950505060008860006002811015156141b257fe5b60200201511480156141d7575060008860016002811015156141d057fe5b6020020151145b156142eb5760009350600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663574f0005888c6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360ff1660ff16815260200182815260200192505050608060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156142b857600080fd5b810190809190505095506028858860ff16600b811015156142d557fe5b602002019060ff16908160ff168152505061480b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c2210bb89600060028110151561433857fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b15801561438f57600080fd5b505af11580156143a3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156143c857600080fd5b81019080919050509250600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c2210bb89600160028110151561441f57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050608060405180830381600087803b15801561447657600080fd5b505af115801561448a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060808110156144af57600080fd5b81019080919050509150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329e3ebe48985858e6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600260200280838360005b83811015614551578082015181840152602081019050614536565b5050505090500184600460200280838360005b8381101561457f578082015181840152602081019050614564565b5050505090500183600460200280838360005b838110156145ad578082015181840152602081019050614592565b505050509050018281526020019450505050506101e060405180830381600087803b1580156145db57600080fd5b505af11580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101e081101561461557600080fd5b8101908091908260800191905050809650819750505061480860016147f6600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df978c600060028110151561468057fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156146d757600080fd5b505af11580156146eb573d6000803e3d6000fd5b505050506040513d602081101561470157600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356e3df978d600160028110151561475f57fe5b60200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156147b657600080fd5b505af11580156147ca573d6000803e3d6000fd5b505050506040513d60208110156147e057600080fd5b8101908080519060200190929190505050614d52565b61ffff16614d7690919063ffffffff16565b93505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a7703d48d868b8a8a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff1661ffff16815260200184600260200280838360005b838110156148e45780820151818401526020810190506148c9565b5050505090500183600460200280838360005b838110156149125780820151818401526020810190506148f7565b5050505090500182600b60200280838360005b83811015614940578082015181840152602081019050614925565b5050505090500195505050505050602060405180830381600087803b15801561496857600080fd5b505af115801561497c573d6000803e3d6000fd5b505050506040513d602081101561499257600080fd5b81019080805190602001909291905050509850600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663abe7f1ab8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015614a6a57600080fd5b505af1158015614a7e573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347327ae38a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015614b1357600080fd5b505af1158015614b27573d6000803e3d6000fd5b505050506040513d6020811015614b3d57600080fd5b81019080805190602001909291905050509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cebab53d8a836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018263ffffffff1663ffffffff16815260200192505050600060405180830381600087803b158015614bf557600080fd5b505af1158015614c09573d6000803e3d6000fd5b5050505050505050505050509392505050565b6000808284019050838110151515614c3057fe5b8091505092915050565b60008082840190508360ff168160ff1610151515614c5457fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515614d03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b60008082840190508363ffffffff168163ffffffff1610151515614d2657fe5b8091505092915050565b60008163ffffffff168363ffffffff16811515614d4957fe5b04905092915050565b60008161ffff168361ffff161115614d6c57829050614d70565b8190505b92915050565b60008082840190508361ffff168161ffff1610151515614d9257fe5b8091505092915050565b828054828255906000526020600020908101928215614e15579160200282015b82811115614e145782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190614dbc565b5b509050614e229190614eb3565b5090565b61014060405190810160405280600a90602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b608060405190810160405280600490602082028038833980820191505090505090565b614ef391905b80821115614eef57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101614eb9565b5090565b905600a165627a7a7230582085ff92c12c4a63ac2102a16fea73d94a9b06f9f9fc1b13fa2e1583db8062b7220029

Swarm Source

bzzr://85ff92c12c4a63ac2102a16fea73d94a9b06f9f9fc1b13fa2e1583db8062b722

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.