Latest 25 transactions from a total of 30291 transactions

TxHash Age From To Value [TxFee]
0xf87c9892ae93eeae6b403ce741d0c02d328c4e96fb8e99610d03d72e4ccd41682 hrs 11 mins ago0xabf53f5d50139925f4daf2d92da46847ac565095  IN   Etheremon_Gym0.001 Ether0.002030886
0xfb3366af1cc2b7b165ab37ad3a192ca8a2231a238cbeac984b4afdaa864031703 hrs 55 mins ago0x5f4b44e3b147553a681af2e2ce2d105a0a16dba6  IN   Etheremon_Gym0.001 Ether0.00066152352
0x775344c48e83846e0e3d16ab29c0b679d90eeb6d7523a50e9e03b2904839e26c5 hrs 37 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.00102851
0xd6da66a2efa567fdf97d8da949011719e8b2118d9d38cdb9cd8f496a7702a0505 hrs 39 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.001028485
0xd4c85652729c9371636578791b0b0d8b4b2360b0e2d74b0e81b0f91f5c756b1e5 hrs 42 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.001013755
0xbb31f00b2a9206b0800706c7fb4550b01ceb7993b5e40887a40550471831acec5 hrs 46 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.001049275
0xfb0b93c6ec986f0a77ac32a3c836948e3e3aa98cd80c47afcb94987f5a97d0186 hrs 9 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.00141484
0xf2ebd51fef0ef5f6856831d377a0c965f9c02ab5f0a4a91aef6224bca80b25496 hrs 14 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.001387771
0xa392d05cba24492bd5efa2d545c5eef482b21f14c38c1fed459b8fc5fb714d0a6 hrs 21 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.00119625
0x4ace0f1657c1cfdac769ac08a8ef71d0cb9e148d245419a61ff8035fdc0f29db6 hrs 30 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.001783737
0x765e0fa0e3f90199a15d15caf2ff24b8702ce1ecdc7b67989c43c3098b9e46967 hrs 9 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.000963455
0x4a83a2c0ac3caac229af32a1c2afdf174e36a98373d2d84bd3aab79ec2f5d29e7 hrs 10 mins ago0x6d140563ddbb79fc89a822390fc15b43e8f1fff1  IN   Etheremon_Gym0.001 Ether0.001485816
0x68d7662bb256b37d488bb0cb5712499133a5bb139920b2966521943ad0770b247 hrs 17 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.0005881971
0x171396869b30fbeb64a199184d94c3563ac0868f0a84c72d794486afc70a4f737 hrs 21 mins ago0xa2786b70cddcb0e5548f6c93e01c25d7d5d273b5  IN   Etheremon_Gym0.001 Ether0.00110417
0x0ced6c32bf51a20ea9d0acbbd250afd654afec076c029ad669e27d417452e2179 hrs 25 mins ago0xbcfbf77473b5bff3ce5c7eb8db6d5fba7f9f5724  IN   Etheremon_Gym0.001 Ether0.000602817
0x362dbea1b64ed00029aba83f89b9340ec7949c0af14d18e558af737d152f10429 hrs 30 mins ago0xa7ac7ac12ef05c7a98da08c2ca3d35b04719a819  IN   Etheremon_Gym0.001 Ether0.001150615
0xe1c5362ffe27d44dab2e189f4de7639bd6ea9402ef0b376dcc03365a40aa3ea021 hrs 14 mins ago0x0625cf5900faaee9c68872aa32214309563fc01e  IN   Etheremon_Gym0.001 Ether0.000563883
0xe414dc0ea360d587eee5d9017c242fc9bddca1d5af9f65852dd1c51bcef2911621 hrs 14 mins ago0x0625cf5900faaee9c68872aa32214309563fc01e  IN   Etheremon_Gym0.001 Ether0.000568257
0x0bc6d883d5f65712ea41e34971bec1d78246fefe8fc88571eafdca0e345482e721 hrs 15 mins ago0x0625cf5900faaee9c68872aa32214309563fc01e  IN   Etheremon_Gym0.001 Ether0.000592926
0x82ea5fb5e050dcedd0488a75d0655ef885d324413b47d13f870b64939872b8551 day 49 mins ago0x0ef06d2fc8510640210a95e663292057639228d5  IN   Etheremon_Gym0.001 Ether0.000941985
0xc6bab5db017beb05f47a2555739e565552a42f9b60ceffe0eb3ad071f05e921e1 day 59 mins ago0x0ef06d2fc8510640210a95e663292057639228d5  IN   Etheremon_Gym0.001 Ether0.000700521
0x8ebbf461df1dfcf4f33a4259107c2226127d890123ff486f8671c40d846f68b91 day 5 hrs ago0xb134fa44bba9a63f92373d9d9472fffaa9584b75  IN   Etheremon_Gym0.001 Ether0.00123319
0x999861e41bcf58a1da5ee92814a1b35d5cf8044de2e526b9728c7dd5872624281 day 5 hrs ago0xb134fa44bba9a63f92373d9d9472fffaa9584b75  IN   Etheremon_Gym0.001 Ether0.001279397
0x8171545fa9643bc2cac1d5e75604ab0b763f3daffd24b2ca52c0fd35ebc30e541 day 5 hrs ago0xb134fa44bba9a63f92373d9d9472fffaa9584b75  IN   Etheremon_Gym0.001 Ether0.001276653
0xf6c25bee7fc75ab5c0abb601e96a9c83791891f4caea9248670bcd3241d5a2101 day 5 hrs ago0xb134fa44bba9a63f92373d9d9472fffaa9584b75  IN   Etheremon_Gym0.001 Ether0.001258831
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 3 Internal Transactions

ParentTxHash Block Age From To Value
0x0dfa860cab5f89967552e0587cb859f21db216c931a0f1d5a2e6e86fb37ef8b76468229108 days 16 hrs ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xf35728a27318156ae04ba8a6dff8074fe98b19b83.824 Ether
0xc1855e38c91a9083b8836c0df28e0d4b1ddc918de3f5c40a211b49ff3b7916076072711174 days 17 hrs ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xf35728a27318156ae04ba8a6dff8074fe98b19b87.047 Ether
0xfed4746bac5e4253d46065263443b02e4fecccc46dd2176539761e39f60ac79c5354302298 days 10 hrs ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xd3b6d520906bb14c0eab0faf7a8b13fe31f8cbda14.505 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: EtheremonGym
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.16;

// copyright [email protected]

contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

    function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) {
      assert(x >= y);
      uint256 z = x - y;
      return z;
    }

    function safeMult(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x * y;
      assert((x == 0)||(z/x == y));
      return z;
    }

}

contract BasicAccessControl {
    address public owner;
    // address[] public moderators;
    uint16 public totalModerators = 0;
    mapping (address => bool) public moderators;
    bool public isMaintaining = true;

    function BasicAccessControl() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    modifier onlyModerators() {
        require(msg.sender == owner || moderators[msg.sender] == true);
        _;
    }

    modifier isActive {
        require(!isMaintaining);
        _;
    }

    function ChangeOwner(address _newOwner) onlyOwner public {
        if (_newOwner != address(0)) {
            owner = _newOwner;
        }
    }


    function AddModerator(address _newModerator) onlyOwner public {
        if (moderators[_newModerator] == false) {
            moderators[_newModerator] = true;
            totalModerators += 1;
        }
    }
    
    function RemoveModerator(address _oldModerator) onlyOwner public {
        if (moderators[_oldModerator] == true) {
            moderators[_oldModerator] = false;
            totalModerators -= 1;
        }
    }

    function UpdateMaintaining(bool _isMaintaining) onlyOwner public {
        isMaintaining = _isMaintaining;
    }
}

contract EtheremonEnum {

    enum ResultCode {
        SUCCESS,
        ERROR_CLASS_NOT_FOUND,
        ERROR_LOW_BALANCE,
        ERROR_SEND_FAIL,
        ERROR_NOT_TRAINER,
        ERROR_NOT_ENOUGH_MONEY,
        ERROR_INVALID_AMOUNT,
        ERROR_OBJ_NOT_FOUND,
        ERROR_OBJ_INVALID_OWNERSHIP
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }

    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
    
    enum BattleResult {
        CASTLE_WIN,
        CASTLE_LOSE,
        CASTLE_DESTROYED
    }
    
    enum CacheClassInfoType {
        CLASS_TYPE,
        CLASS_STEP,
        CLASS_ANCESTOR
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // read
    function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint);
    function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8);
    function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant public returns(string name);
    function getExtraBalance(address _trainer) constant public returns(uint256);
    function getMonsterDexSize(address _trainer) constant public returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant public returns(uint64);
    function getExpectedBalance(address _trainer) constant public returns(uint256);
    function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total);
}

contract EtheremonGateway is EtheremonEnum, BasicAccessControl {
    // using for battle contract later
    function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    
    // read 
    function isGason(uint64 _objId) constant external returns(bool);
    function getObjBattleInfo(uint64 _objId) constant external returns(uint32 classId, uint32 exp, bool isGason, 
        uint ancestorLength, uint xfactorsLength);
    function getClassPropertySize(uint32 _classId, PropertyType _type) constant external returns(uint);
    function getClassPropertyValue(uint32 _classId, PropertyType _type, uint index) constant external returns(uint32);
}

contract EtheremonGym is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public STAT_COUNT = 6;
    
    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct AttackData {
        uint32 objClassId;
        address trainee;
        uint8 objLevel;
        uint8 winCount;
        uint32 winExp;
        uint32 loseExp;
    }
    
    struct HpData {
        uint16 aHpAttack;
        uint16 aHpAttackCritical;
        uint16 bHpAttack;
        uint16 bHpAttackCritical;        
    }
    
    struct GymTrainer {
        uint32 classId;
        uint8[6] statBases;
    }
    
    struct TrainingLog {
        uint8[3] trainers;
        uint8 trainerLevel;
        uint64 objId;
        uint8 objLevel;
        uint8 ran;
    }
    
    struct CacheClassInfo {
        uint8[] types;
        uint8[] steps;
        uint32[] ancestors;
    }
    
    mapping(uint8 => GymTrainer) public gymTrainers;
    mapping(address => TrainingLog) public trainees;
    mapping(uint8 => uint8) typeAdvantages;
    mapping(uint32 => CacheClassInfo) cacheClasses;
    mapping(uint8 => uint32) levelExps;
    mapping(uint8 => uint32) levelExpGains;
    uint256 public gymFee = 0.001 ether;
    uint8 public maxTrainerLevel = 5;
    uint8 public totalTrainer = 0;
    uint8 public maxRandomRound = 4;
    uint8 public typeBuffPercentage = 20;
    uint8 public minHpDeducted = 10;
    uint8 public expPercentage = 70;
    
    // contract
    address public worldContract;
    address public dataContract;

   // modifier
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireWorldContract {
        require(worldContract != address(0));
        _;
    }
    
    // constructor
    function EtheremonGym(address _dataContract, address _worldContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
    }
    
    
     // admin & moderators
    function setTypeAdvantages() onlyModerators external {
        typeAdvantages[1] = 14;
        typeAdvantages[2] = 16;
        typeAdvantages[3] = 8;
        typeAdvantages[4] = 9;
        typeAdvantages[5] = 2;
        typeAdvantages[6] = 11;
        typeAdvantages[7] = 3;
        typeAdvantages[8] = 5;
        typeAdvantages[9] = 15;
        typeAdvantages[11] = 18;
        // skipp 10
        typeAdvantages[12] = 7;
        typeAdvantages[13] = 6;
        typeAdvantages[14] = 17;
        typeAdvantages[15] = 13;
        typeAdvantages[16] = 12;
        typeAdvantages[17] = 1;
        typeAdvantages[18] = 4;
    }
    
    function setTypeAdvantage(uint8 _type1, uint8 _type2) onlyModerators external {
        typeAdvantages[_type1] = _type2;
    }
    
    function setCacheClassInfo(uint32 _classId) onlyModerators requireDataContract requireWorldContract public {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
         EtheremonGateway gateway = EtheremonGateway(worldContract);
        uint i = 0;
        CacheClassInfo storage classInfo = cacheClasses[_classId];

        // add type
        i = data.getSizeArrayType(ArrayType.CLASS_TYPE, uint64(_classId));
        uint8[] memory aTypes = new uint8[](i);
        for(; i > 0 ; i--) {
            aTypes[i-1] = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(_classId), i-1);
        }
        classInfo.types = aTypes;

        // add steps
        i = data.getSizeArrayType(ArrayType.STAT_STEP, uint64(_classId));
        uint8[] memory steps = new uint8[](i);
        for(; i > 0 ; i--) {
            steps[i-1] = data.getElementInArrayType(ArrayType.STAT_STEP, uint64(_classId), i-1);
        }
        classInfo.steps = steps;
        
        // add ancestor
        i = gateway.getClassPropertySize(_classId, PropertyType.ANCESTOR);
        uint32[] memory ancestors = new uint32[](i);
        for(; i > 0 ; i--) {
            ancestors[i-1] = gateway.getClassPropertyValue(_classId, PropertyType.ANCESTOR, i-1);
        }
        classInfo.ancestors = ancestors;
    }
    
    function fastSetCacheClassInfo(uint32 _classId1, uint32 _classId2, uint32 _classId3, uint32 _classId4) onlyModerators requireDataContract requireWorldContract external {
        setCacheClassInfo(_classId1);
        setCacheClassInfo(_classId2);
        setCacheClassInfo(_classId3);
        setCacheClassInfo(_classId4);
    }
    
    function presetGymTrainer() onlyModerators external {
        GymTrainer storage trainer1 = gymTrainers[1];
        trainer1.classId = 12;
        trainer1.statBases[0] = 85;
        trainer1.statBases[1] = 95;
        trainer1.statBases[2] = 65;
        trainer1.statBases[3] = 50;
        trainer1.statBases[4] = 50;
        trainer1.statBases[5] = 50;
        GymTrainer storage trainer2 = gymTrainers[2];
        trainer2.classId = 15;
        trainer2.statBases[0] = 50;
        trainer2.statBases[1] = 55;
        trainer2.statBases[2] = 85;
        trainer2.statBases[3] = 85;
        trainer2.statBases[4] = 40;
        trainer2.statBases[5] = 75;
        GymTrainer storage trainer3 = gymTrainers[3];
        trainer3.classId = 8;
        trainer3.statBases[0] = 110;
        trainer3.statBases[1] = 60;
        trainer3.statBases[2] = 40;
        trainer3.statBases[3] = 60;
        trainer3.statBases[4] = 40;
        trainer3.statBases[5] = 40;
        GymTrainer storage trainer4 = gymTrainers[4];
        trainer4.classId = 4;
        trainer4.statBases[0] = 54;
        trainer4.statBases[1] = 69;
        trainer4.statBases[2] = 58;
        trainer4.statBases[3] = 75;
        trainer4.statBases[4] = 75;
        trainer4.statBases[5] = 70;
        GymTrainer storage trainer5 = gymTrainers[5];
        trainer5.classId = 6;
        trainer5.statBases[0] = 50;
        trainer5.statBases[1] = 50;
        trainer5.statBases[2] = 50;
        trainer5.statBases[3] = 105;
        trainer5.statBases[4] = 55;
        trainer5.statBases[5] = 95;
        GymTrainer storage trainer6 = gymTrainers[6];
        trainer6.classId = 13;
        trainer6.statBases[0] = 55;
        trainer6.statBases[1] = 90;
        trainer6.statBases[2] = 95;
        trainer6.statBases[3] = 45;
        trainer6.statBases[4] = 35;
        trainer6.statBases[5] = 35;
        GymTrainer storage trainer7 = gymTrainers[7];
        trainer7.classId = 7;
        trainer7.statBases[0] = 85;
        trainer7.statBases[1] = 60;
        trainer7.statBases[2] = 73;
        trainer7.statBases[3] = 75;
        trainer7.statBases[4] = 80;
        trainer7.statBases[5] = 50;
        GymTrainer storage trainer8 = gymTrainers[8];
        trainer8.classId = 24;
        trainer8.statBases[0] = 140;
        trainer8.statBases[1] = 135;
        trainer8.statBases[2] = 70;
        trainer8.statBases[3] = 77;
        trainer8.statBases[4] = 90;
        trainer8.statBases[5] = 50;
        GymTrainer storage trainer9 = gymTrainers[9];
        trainer9.classId = 16;
        trainer9.statBases[0] = 70;
        trainer9.statBases[1] = 105;
        trainer9.statBases[2] = 80;
        trainer9.statBases[3] = 60;
        trainer9.statBases[4] = 80;
        trainer9.statBases[5] = 90;
        totalTrainer = 9;
    }
    
    function setGymTrainer(uint8 _trainerId, uint32 _classId, uint8 _s0, uint8 _s1, uint8 _s2, uint8 _s3, uint8 _s4, uint8 _s5) onlyModerators external {
        GymTrainer storage trainer = gymTrainers[_trainerId];
        if (trainer.classId == 0)
            totalTrainer += 1;
        trainer.classId = _classId;
        trainer.statBases[0] = _s0;
        trainer.statBases[1] = _s1;
        trainer.statBases[2] = _s2;
        trainer.statBases[3] = _s3;
        trainer.statBases[4] = _s4;
        trainer.statBases[5] = _s5;
    }
    
    function setContract(address _dataContract, address _worldContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
    }
    
    function setConfig(uint256 _gymFee, uint8 _maxTrainerLevel, uint8 _maxRandomRound, uint8 _typeBuffPercentage, 
        uint8 _minHpDeducted, uint8 _expPercentage) onlyModerators external {
        gymFee = _gymFee;
        maxTrainerLevel = _maxTrainerLevel;
        maxRandomRound = _maxRandomRound;
        typeBuffPercentage = _typeBuffPercentage;
        minHpDeducted = _minHpDeducted;
        expPercentage = _expPercentage;
    }
    
    function genLevelExp() onlyModerators external {
        uint8 level = 1;
        uint32 requirement = 100;
        uint32 sum = requirement;
        while(level <= 100) {
            levelExps[level] = sum;
            level += 1;
            requirement = (requirement * 11) / 10 + 5;
            sum += requirement;
        }
    }
    
    function genLevelExpGain() onlyModerators external {
        levelExpGains[1] = 31;
        levelExpGains[2] = 33;
        levelExpGains[3] = 34;
        levelExpGains[4] = 36;
        levelExpGains[5] = 38;
        levelExpGains[6] = 40;
        levelExpGains[7] = 42;
        levelExpGains[8] = 44;
        levelExpGains[9] = 46;
        levelExpGains[10] = 48;
    }
    
    function setLevelExpGain(uint8 _level, uint32 _exp) onlyModerators external {
        levelExpGains[_level] = _exp;
    }
    
    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }
    
    // public
    function getCacheClassSize(uint32 _classId) constant public returns(uint, uint, uint) {
        CacheClassInfo storage classInfo = cacheClasses[_classId];
        return (classInfo.types.length, classInfo.steps.length, classInfo.ancestors.length);
    }
    
    function getTrainerInfo(uint8 _trainerId) constant external returns(uint32, uint8, uint8, uint8, uint8, uint8, uint8) {
        GymTrainer memory trainer = gymTrainers[_trainerId];
        return (trainer.classId, trainer.statBases[0], trainer.statBases[1], trainer.statBases[2], trainer.statBases[3],
            trainer.statBases[4], trainer.statBases[5]);
    }
    
    function getRandom(uint8 maxRan, uint8 index) constant public returns(uint8) {
        uint256 genNum = uint256(block.blockhash(block.number-1));
        for (uint8 i = 0; i < index && i < 6; i ++) {
            genNum /= 256;
        }
        return uint8(genNum % maxRan);
    }
    
    function getLevel(uint32 exp) view public returns (uint8) {
        uint8 minIndex = 1;
        uint8 maxIndex = 100;
        uint8 currentIndex;
     
        while (minIndex < maxIndex) {
            currentIndex = (minIndex + maxIndex) / 2;
            if (exp < levelExps[currentIndex])
                maxIndex = currentIndex;
            else
                minIndex = currentIndex + 1;
        }
        return minIndex;
    }
    
    function getGainExp(uint8 xLevel, uint8 yLevel) constant public returns(uint32 winExp, uint32 loseExp){
        winExp = levelExpGains[yLevel] * expPercentage / 100;
        if (xLevel > yLevel) {
            if (xLevel > yLevel + 10) {
                winExp = 5;
            } else {
                winExp /= uint32(3) ** (xLevel - yLevel) / uint32(2) ** (xLevel - yLevel);
                if (winExp < 5)
                    winExp = 5;
            }
        }
        loseExp = winExp / 3;
    }
    
    function safeDeduct(uint16 a, uint16 b) pure private returns(uint16){
        if (a > b) {
            return a - b;
        }
        return 0;
    }
    
    function getTypeSupport(uint32 _aClassId, uint32 _bClassId) constant private returns (bool aHasAdvantage, bool bHasAdvantage) {
        // check types 
        for (uint i = 0; i < cacheClasses[_aClassId].types.length; i++) {
            for (uint j = 0; j < cacheClasses[_bClassId].types.length; j++) {
                if (typeAdvantages[cacheClasses[_aClassId].types[i]] == cacheClasses[_bClassId].types[j]) {
                    aHasAdvantage = true;
                }
                if (typeAdvantages[cacheClasses[_bClassId].types[j]] == cacheClasses[_aClassId].types[i]) {
                    bHasAdvantage = true;
                }
            }
        }
    }
    
    function calHpDeducted(uint16 _attack, uint16 _specialAttack, uint16 _defense, uint16 _specialDefense, bool _lucky) view public returns(uint16){
        if (_lucky) {
            _attack = _attack * 13 / 10;
            _specialAttack = _specialAttack * 13 / 10;
        }
        uint16 hpDeducted = safeDeduct(_attack, _defense * 3 /4);
        uint16 hpSpecialDeducted = safeDeduct(_specialAttack, _specialDefense* 3 / 4);
        if (hpDeducted < minHpDeducted && hpSpecialDeducted < minHpDeducted)
            return minHpDeducted;
        if (hpDeducted > hpSpecialDeducted)
            return hpDeducted;
        return hpSpecialDeducted;
    }
    
    function attack(uint8 _index, uint8 _ran, uint16[6] _aStats, uint16[6] _bStats) constant public returns(bool win) {
        if (_ran < _index * maxRandomRound)
            _ran = maxRandomRound;
        else
            _ran = _ran - _index * maxRandomRound;
            
        uint16 round = 0;
        uint16 aHp = _aStats[0];
        uint16 bHp = _bStats[0];
        if (_aStats[5] > _bStats[5]) {
            while (round < maxRandomRound && aHp > 0 && bHp > 0) {
                if (round % 2 == 0) {
                    // a attack 
                    bHp = safeDeduct(bHp, calHpDeducted(_aStats[1], _aStats[3], _bStats[2], _bStats[4], round==_ran));
                } else {
                    aHp = safeDeduct(aHp, calHpDeducted(_bStats[1], _bStats[3], _aStats[2], _aStats[4], round==_ran));
                }
                round++;
            }
        } else {
            while (round < maxRandomRound && aHp > 0 && bHp > 0) {
                if (round % 2 != 0) {
                    bHp = safeDeduct(bHp, calHpDeducted(_aStats[1], _aStats[3], _bStats[2], _bStats[4], round==_ran));
                } else {
                    aHp = safeDeduct(aHp, calHpDeducted(_bStats[1], _bStats[3], _aStats[2], _aStats[4], round==_ran));
                }
                round++;
            }
        }
        
        win = aHp >= bHp;
    }
    
    function attackTrainer(uint8 _index, uint8 _ran, uint8 _trainerId, uint8 _trainerLevel, uint32 _objClassId, uint16[6] _objStats) constant public returns(bool result) {
        GymTrainer memory trainer = gymTrainers[_trainerId];
        uint16[6] memory trainerStats;
        uint i = 0;
        for (i=0; i < STAT_COUNT; i+=1) {
            trainerStats[i] = trainer.statBases[i];
        }
        for (i=0; i < cacheClasses[trainer.classId].steps.length; i++) {
            trainerStats[i] += uint16(safeMult(cacheClasses[trainer.classId].steps[i], _trainerLevel*3));
        }
        
        bool objHasAdvantage;
        bool trainerHasAdvantage;
        (objHasAdvantage, trainerHasAdvantage) = getTypeSupport(_objClassId, trainer.classId);
        uint16 originAttack = _objStats[1];
        uint16 originAttackSpecial = _objStats[3];
        if (objHasAdvantage) {
            _objStats[1] += _objStats[1] * typeBuffPercentage / 100;
            _objStats[3] += _objStats[3] * typeBuffPercentage / 100;
        }
        if (trainerHasAdvantage) {
            trainerStats[1] += trainerStats[1] * typeBuffPercentage / 100;
            trainerStats[3] += trainerStats[3] * typeBuffPercentage / 100;
        }
        result = attack(_index, _ran, _objStats, trainerStats);
        _objStats[1] = originAttack;
        _objStats[3] = originAttackSpecial;
    }
    
    function getObjInfo(uint64 _objId) constant public returns(uint32 classId, address trainee, uint8 level) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, classId, trainee, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        level = getLevel(obj.exp);
    }
    
    function startTraining(uint64 _objId, uint8 _trainerLevel, uint8 _t1, uint8 _t2, uint8 _t3) isActive requireDataContract requireWorldContract payable external {
        if (_trainerLevel > maxTrainerLevel)
            revert();
        if (msg.value != gymFee)
            revert();
        if (_t1 == _t2 || _t1 == _t3 || _t2 == _t3)
            revert();
        if (_t1 == 0 || _t2 == 0 || _t3 == 0 || _t1 > totalTrainer || _t2 > totalTrainer || _t3 > totalTrainer)
            revert();

        AttackData memory att;
        (att.objClassId, att.trainee, att.objLevel) = getObjInfo(_objId);
        if (msg.sender != att.trainee)
            revert();

        uint i = 0;
        uint16[6] memory objStats;
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        for (i=0; i < STAT_COUNT; i+=1) {
            objStats[i] = data.getElementInArrayType(ArrayType.STAT_BASE, _objId, i);
        }
        for (i=0; i < cacheClasses[att.objClassId].steps.length; i++) {
            objStats[i] += uint16(safeMult(cacheClasses[att.objClassId].steps[i], att.objLevel*3));
        }
        
        att.winCount = 0;
        uint8 ran = getRandom(maxRandomRound*3, 0);
        if (attackTrainer(0, ran, _t1, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;
        if (attackTrainer(1, ran, _t2, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;
        if (attackTrainer(2, ran, _t3, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;

        (att.winExp, att.loseExp) = getGainExp(att.objLevel, _trainerLevel);
        EtheremonGateway gateway = EtheremonGateway(worldContract);
        gateway.increaseMonsterExp(_objId, att.winCount * att.winExp + (3 - att.winCount) * att.loseExp);
        
        TrainingLog storage trainingLog = trainees[msg.sender];
        trainingLog.trainers[0] = _t1;
        trainingLog.trainers[1] = _t2;
        trainingLog.trainers[2] = _t3;
        trainingLog.trainerLevel = _trainerLevel;
        trainingLog.objId = _objId;
        trainingLog.objLevel = att.objLevel;
        trainingLog.ran = ran;
    }
    
    function getTrainingLog(address _trainee) constant external returns(uint8, uint8, uint8, uint64, uint8, uint8, uint8) {
        TrainingLog memory trainingLog = trainees[_trainee];
        return (trainingLog.trainers[0], trainingLog.trainers[1], trainingLog.trainers[2], 
            trainingLog.objId, trainingLog.trainerLevel, trainingLog.objLevel, trainingLog.ran);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gymFee","type":"uint256"},{"name":"_maxTrainerLevel","type":"uint8"},{"name":"_maxRandomRound","type":"uint8"},{"name":"_typeBuffPercentage","type":"uint8"},{"name":"_minHpDeducted","type":"uint8"},{"name":"_expPercentage","type":"uint8"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_attack","type":"uint16"},{"name":"_specialAttack","type":"uint16"},{"name":"_defense","type":"uint16"},{"name":"_specialDefense","type":"uint16"},{"name":"_lucky","type":"bool"}],"name":"calHpDeducted","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_classId1","type":"uint32"},{"name":"_classId2","type":"uint32"},{"name":"_classId3","type":"uint32"},{"name":"_classId4","type":"uint32"}],"name":"fastSetCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_trainerId","type":"uint8"},{"name":"_classId","type":"uint32"},{"name":"_s0","type":"uint8"},{"name":"_s1","type":"uint8"},{"name":"_s2","type":"uint8"},{"name":"_s3","type":"uint8"},{"name":"_s4","type":"uint8"},{"name":"_s5","type":"uint8"}],"name":"setGymTrainer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExpGain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"expPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_type1","type":"uint8"},{"name":"_type2","type":"uint8"}],"name":"setTypeAdvantage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setTypeAdvantages","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_level","type":"uint8"},{"name":"_exp","type":"uint32"}],"name":"setLevelExpGain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjInfo","outputs":[{"name":"classId","type":"uint32"},{"name":"trainee","type":"address"},{"name":"level","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_trainerId","type":"uint8"}],"name":"getTrainerInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint8"},{"name":"_ran","type":"uint8"},{"name":"_aStats","type":"uint16[6]"},{"name":"_bStats","type":"uint16[6]"}],"name":"attack","outputs":[{"name":"win","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getCacheClassSize","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTrainer","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"gymTrainers","outputs":[{"name":"classId","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gymFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"typeBuffPercentage","outputs":[{"name":"","type":"uint8"}],"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":"_classId","type":"uint32"}],"name":"setCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_trainee","type":"address"}],"name":"getTrainingLog","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint64"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"xLevel","type":"uint8"},{"name":"yLevel","type":"uint8"}],"name":"getGainExp","outputs":[{"name":"winExp","type":"uint32"},{"name":"loseExp","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"trainees","outputs":[{"name":"trainerLevel","type":"uint8"},{"name":"objId","type":"uint64"},{"name":"objLevel","type":"uint8"},{"name":"ran","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_trainerLevel","type":"uint8"},{"name":"_t1","type":"uint8"},{"name":"_t2","type":"uint8"},{"name":"_t3","type":"uint8"}],"name":"startTraining","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"minHpDeducted","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint8"},{"name":"_ran","type":"uint8"},{"name":"_trainerId","type":"uint8"},{"name":"_trainerLevel","type":"uint8"},{"name":"_objClassId","type":"uint32"},{"name":"_objStats","type":"uint16[6]"}],"name":"attackTrainer","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTrainerLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxRandomRound","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint8"},{"name":"index","type":"uint8"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"presetGymTrainer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a61ffff02191690556002805460ff1990811660011790915566038d7ea4c68000600955600a8054600592169190911762ffff001916620400001763ff000000191663140000001764ff000000001916640a000000001765ff0000000000191665460000000000179055341561008157600080fd5b60405160408061390e833981016040528080519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600b80549683169690911695909517909455600a805494909116660100000000000002603060020a60d060020a031990941693909317909255505061380a806101046000396000f3006060604052600436106101f55763ffffffff60e060020a6000350416630d66881881146101fa57806314d0f1ba146102295780631576fc551461025c578063187584801461029257806320046e91146102a557806325ae9c97146102ed578063278f9f6e1461031b57806327979b35146103625780632bf6e0a5146103755780632c2da3cf1461039a5780633171cec4146103c357806333ced321146103e257806333d24dc4146103f55780633d5dbaed146104085780634538bc951461042a57806348e889ed1461048057806348ef5aa8146104e757806349d165f6146104ff5780634efb023e1461056e578063500e429714610581578063522f6815146105c15780636c81fd6d146105e35780637216ee0014610602578063830146cf14610615578063838985d714610647578063891fe1031461066c5780638da5cb5b1461067f5780638fd8f78314610692578063b2cad9b7146106ae578063b85d6275146106ca578063b952bb30146106e9578063bb9ea07c14610758578063bda7b1cb14610798578063bfcece9f146107f0578063cfa830791461081d578063d60ef60214610830578063d8819e0a1461088d578063d98e14bd146108a0578063ebfa3c1b146108b3578063ed30e558146108c6578063ee4e4416146108e5578063f2853292146108f8578063fb214f4c14610917575b600080fd5b341561020557600080fd5b61020d61092a565b604051600160a060020a03909116815260200160405180910390f35b341561023457600080fd5b610248600160a060020a0360043516610939565b604051901515815260200160405180910390f35b341561026757600080fd5b61029060043560ff60243581169060443581169060643581169060843581169060a4351661094e565b005b341561029d57600080fd5b61020d610a0a565b34156102b057600080fd5b6102d661ffff600435811690602435811690604435811690606435166084351515610a23565b60405161ffff909116815260200160405180910390f35b34156102f857600080fd5b61029063ffffffff60043581169060243581169060443581169060643516610ae7565b341561032657600080fd5b61029060ff60043581169063ffffffff602435169060443581169060643581169060843581169060a43581169060c43581169060e43516610b8f565b341561036d57600080fd5b610290610cd1565b341561038057600080fd5b610290600160a060020a0360043581169060243516610ed0565b34156103a557600080fd5b6103ad610f76565b60405160ff909116815260200160405180910390f35b34156103ce57600080fd5b61029060ff60043581169060243516610f88565b34156103ed57600080fd5b610290610ff0565b341561040057600080fd5b61029061109e565b341561041357600080fd5b61029060ff6004351663ffffffff602435166113c4565b341561043557600080fd5b61044a67ffffffffffffffff60043516611437565b60405163ffffffff9093168352600160a060020a03909116602083015260ff166040808301919091526060909101905180910390f35b341561048b57600080fd5b61049960ff60043516611529565b60405163ffffffff909716875260ff958616602088015293851660408088019190915292851660608701529084166080860152831660a0850152911660c083015260e0909101905180910390f35b34156104f257600080fd5b6102906004351515611613565b341561050a57600080fd5b61024860ff6004803582169160243516906101046044600660c06040519081016040529190828260c080828437820191505050505091908060c001906006806020026040519081016040529190828260c08082843750939550611641945050505050565b341561057957600080fd5b6102d66117fe565b341561058c57600080fd5b61059d63ffffffff60043516611820565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105cc57600080fd5b610290600160a060020a0360043516602435611845565b34156105ee57600080fd5b610290600160a060020a03600435166118d7565b341561060d57600080fd5b6103ad611981565b341561062057600080fd5b61062e60ff6004351661198f565b60405163ffffffff909116815260200160405180910390f35b341561065257600080fd5b61065a6119a7565b60405190815260200160405180910390f35b341561067757600080fd5b6103ad6119ad565b341561068a57600080fd5b61020d6119bd565b341561069d57600080fd5b61029063ffffffff600435166119cc565b34156106b957600080fd5b6103ad63ffffffff60043516611f9f565b34156106d557600080fd5b610290600160a060020a0360043516612002565b34156106f457600080fd5b610708600160a060020a03600435166120ac565b60405160ff9788168152958716602087015293861660408087019190915267ffffffffffffffff90931660608601529085166080850152841660a0840152921660c082015260e001905180910390f35b341561076357600080fd5b61077760ff600435811690602435166121c5565b60405163ffffffff9283168152911660208201526040908101905180910390f35b34156107a357600080fd5b6107b7600160a060020a0360043516612283565b60405160ff948516815267ffffffffffffffff909316602084015290831660408084019190915292166060820152608001905180910390f35b61029067ffffffffffffffff6004351660ff602435811690604435811690606435811690608435166122cd565b341561082857600080fd5b6103ad61282e565b341561083b57600080fd5b61024860ff60048035821691602435811691604435821691606435169063ffffffff608435169061016460a4600660c06040519081016040529190828260c0808284375093955061283f945050505050565b341561089857600080fd5b6103ad612b06565b34156108ab57600080fd5b6103ad612b0f565b34156108be57600080fd5b6103ad612b14565b34156108d157600080fd5b6103ad60ff60043581169060243516612b23565b34156108f057600080fd5b610248612b71565b341561090357600080fd5b610290600160a060020a0360043516612b7a565b341561092257600080fd5b610290612bd1565b600b54600160a060020a031681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614806109895750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561099457600080fd5b600995909555600a805460ff191660ff9586161762ff0000191662010000948616949094029390931763ff00000019166301000000928516929092029190911764ff000000001916640100000000918416919091021765ff00000000001916650100000000009290931691909102919091179055565b600a5466010000000000009004600160a060020a031681565b60008060008315610a4957600a61ffff600d8a0216049750600a61ffff600d8902160496505b610a5e88600461ffff60038a02165b04613360565b9150610a7387600461ffff6003890216610a58565b600a54909150640100000000900460ff1661ffff8316108015610aa65750600a54640100000000900460ff1661ffff8216105b15610ac057600a54640100000000900460ff169250610adc565b8061ffff168261ffff161115610ad857819250610adc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610b225750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610b2d57600080fd5b600b54600160a060020a03161515610b4457600080fd5b600a5466010000000000009004600160a060020a03161515610b6557600080fd5b610b6e846119cc565b610b77836119cc565b610b80826119cc565b610b89816119cc565b50505050565b6000805433600160a060020a0390811691161480610bcb5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610bd657600080fd5b5060ff88166000908152600360205260409020805463ffffffff161515610c1757600a805460ff61010080830482166001019091160261ff00199091161790555b805463ffffffff191663ffffffff891617815560018101805460ff191660ff8981169190911761ff001916610100898316021762ff0000191662010000888316021763ff000000191663010000009187169190910217815583906004602091828204019190066101000a81548160ff021916908360ff16021790555081816001016005600681101515610ca657fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050505050505050565b60005433600160a060020a0390811691161480610d0c5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610d1757600080fd5b60086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f805463ffffffff19908116601f179091557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90418054821660211790557f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264558054821660221790557f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b88054821660241790557f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb8054821660261790557f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc58054821660281790557f24cd397636bedc6cf9b490d0edd57c769c19b367fb7d5c2344ae1ddc7d21c14480548216602a1790557fe4c2e8be66af8dd2d277000f4f830a10546f8b14e45cd850b875c98ba0f0d2cd80548216602c1790557f82c9e868e45873bb5a4f47c09e14a12f6a6314e13aabd611e4374762bb4e8b3680548216602e179055600a6000527f586689db7536874b78a6eac0f58556a56a106985743f7c16a699b27bb02f88bd80549091166030179055565b60005433600160a060020a0390811691161480610f0b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f1657600080fd5b600b8054600160a060020a0393841673ffffffffffffffffffffffffffffffffffffffff19909116179055600a80549190921666010000000000000279ffffffffffffffffffffffffffffffffffffffff00000000000019909116179055565b600a5465010000000000900460ff1681565b60005433600160a060020a0390811691161480610fc35750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610fce57600080fd5b60ff9182166000908152600560205260409020805460ff191691909216179055565b600080548190819033600160a060020a03908116911614806110305750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561103b57600080fd5b506001915060649050805b606460ff8416116110995760ff83166000908152600760205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611046565b505050565b60005433600160a060020a03908116911614806110d95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156110e457600080fd5b600560208190527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b805460ff19908116600e179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a8054821660101790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054821660081790557f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d58054821660091790557f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d8054821660021790557f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac51880548216600b1790557feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d814608054821660031790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805482169092179091557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe180548216600f1790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054821660129081179091557ff907e7e6656fa73566b18c1215272fe9fca2c55c552e62c923e21e000ac4b4e68054831660071790557f03145c75015e7a856ecd94c41432ef3cb669d6360af23433588937fefdfac8258054831660061790557f783638979e3582b3ffd6d53fc06c949ac31d1ac75a5e2c3531fbe1f91045eb538054831660111790557f58f00e8ecc6f5419941dd0bafec65a4cc188d31713fb1fe224257460930df8af80548316600d1790557f8b32256db898364c465749decac34aee435952ffe1739257aa5b0235e266d9c580548316600c1790557fb4e18992ad424cdedc46668609f2bafcf665a8d99577618d5923c69264d9cf5f8054831660011790556000527fd1ccbf1f9f869f51cd81e6f099f905636b057f682c706fe990614b112051692880549091166004179055565b60005433600160a060020a03908116911614806113ff5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561140a57600080fd5b60ff919091166000908152600860205260409020805463ffffffff191663ffffffff909216919091179055565b600080600080611445613542565b600b54600160a060020a0316915081630720246087600060405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b15156114a257600080fd5b6102c65a03f115156114b357600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a0870152166080850190815267ffffffffffffffff9093168452909650945061151f9051611f9f565b9496939550505050565b600080600080600080600061153c61358e565b60ff8916600090815260036020526040908190209080519081016040908152825463ffffffff1682529091906020830190600183019060069060c09051908101604052919060c08301826000855b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161158a57905050505050508152505090508060000151816020015151826020015160200151836020015160400151846020015160600151856020015160800151866020015160a00151959f949e50929c50909a509850965090945092505050565b60005433600160a060020a0390811691161461162e57600080fd5b6002805460ff1916911515919091179055565b600080600080600a60029054906101000a900460ff16880260ff168760ff16101561167957600a5462010000900460ff16965061168c565b600a5462010000900460ff168802909603955b60009250855191508451905060a085015161ffff1660a087015161ffff16111561176f575b600a5462010000900460ff1661ffff84161080156116d3575060008261ffff16115b80156116e3575060008161ffff16115b1561176a57600261ffff84160661ffff166000141561173a576117338161172e8860015b602002015160608a015160408a01518a60045b60200201518d60ff168a61ffff1614610a23565b613360565b905061175f565b61175c8261172e8760015b6020020151606089015160408b01518b600461171a565b91505b6001909201916116b1565b6117ea565b600a5462010000900460ff1661ffff8416108015611791575060008261ffff16115b80156117a1575060008161ffff16115b156117ea57600261ffff84160661ffff16156117cd576117c68161172e886001611707565b90506117df565b6117dc8261172e876001611745565b91505b60019092019161176f565b61ffff908116911610159695505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600660205260409020805460018201546002909201549092565b60005433600160a060020a03908116911614806118805750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561188b57600080fd5b30600160a060020a0316318111156118a257600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f1935050505015156118d357600080fd5b5050565b60005433600160a060020a039081169116146118f257600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561197e57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b600a54610100900460ff1681565b60036020526000908152604090205463ffffffff1681565b60095481565b600a546301000000900460ff1681565b600054600160a060020a031681565b6000806000806119da6135ae565b6119e26135ae565b6119ea6135ae565b60005433600160a060020a0390811691161480611a255750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611a3057600080fd5b600b54600160a060020a03161515611a4757600080fd5b600a5466010000000000009004600160a060020a03161515611a6857600080fd5b600b54600a5463ffffffff8a16600081815260066020526040808220600160a060020a039586169c5066010000000000009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a02815260040180836004811115611ad957fe5b60ff1681526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050602060405180830381600087803b1515611b1857600080fd5b6102c65a03f11515611b2957600080fd5b50505060405180519050945084604051805910611b435750595b908082528060200260200182016040525092505b6000851115611c345786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a02815260040180846004811115611ba757fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611bed57600080fd5b6102c65a03f11515611bfe57600080fd5b50505060405180519050836001870381518110611c1757fe5b60ff90921660209283029091019091015260001990940193611b57565b83838051611c469291602001906135c0565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a02815260040180836004811115611c8a57fe5b60ff1681526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050602060405180830381600087803b1515611cc957600080fd5b6102c65a03f11515611cda57600080fd5b50505060405180519050945084604051805910611cf45750595b908082528060200260200182016040525091505b6000851115611de55786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a02815260040180846004811115611d5857fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611d9e57600080fd5b6102c65a03f11515611daf57600080fd5b50505060405180519050826001870381518110611dc857fe5b60ff90921660209283029091019091015260001990940193611d08565b60018401828051611dfa9291602001906135c0565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115611e4957fe5b60ff16815260200192505050602060405180830381600087803b1515611e6e57600080fd5b6102c65a03f11515611e7f57600080fd5b50505060405180519050945084604051805910611e995750595b908082528060200260200182016040525090505b6000851115611f7f5785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115611f0957fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515611f3557600080fd5b6102c65a03f11515611f4657600080fd5b50505060405180519050816001870381518110611f5f57fe5b63ffffffff90921660209283029091019091015260001990940193611ead565b60028401818051611f94929160200190613666565b505050505050505050565b600060016064825b8160ff168360ff161015611ff957600260ff848401160460ff811660009081526007602052604090205490915063ffffffff9081169086161015611fed57809150611ff4565b8060010192505b611fa7565b50909392505050565b60005433600160a060020a0390811691161461201d57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561197e57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008060006120bf613711565b600160a060020a038916600090815260046020526040908190209060a09051908101604052908160008201600380602002604051908101604052919060608301826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612104575050509284525050506001919091015460ff8082166020840152610100820467ffffffffffffffff16604084015269010000000000000000008204811660608401526a01000000000000000000009091041660809091015290508051518151602001518251604001518360400151846020015185606001518660800151959f949e50929c50909a509850965090945092505050565b600a5460ff828116600081815260086020526040812054606465010000000000909504841663ffffffff9182160216939093049291851611156122715782600a0160ff168460ff16111561221c5760059150612271565b82840360ff1660020a63ffffffff1683850360ff1660030a63ffffffff1681151561224357fe5b0463ffffffff168263ffffffff1681151561225a57fe5b04915060058263ffffffff16101561227157600591505b5092600363ffffffff85160492509050565b60046020526000908152604090206001015460ff8082169167ffffffffffffffff61010082041691690100000000000000000082048116916a010000000000000000000090041684565b6122d5613725565b60006122df61375a565b60025460009081908190819060ff16156122f857600080fd5b600b54600160a060020a0316151561230f57600080fd5b600a5466010000000000009004600160a060020a0316151561233057600080fd5b600a5460ff908116908c16111561234657600080fd5b600954341461235457600080fd5b8860ff168a60ff16148061236d57508760ff168a60ff16145b8061237d57508760ff168960ff16145b1561238757600080fd5b60ff8a161580612398575060ff8916155b806123a4575060ff8816155b806123bc5750600a5460ff6101009091048116908b16115b806123d45750600a5460ff6101009091048116908a16115b806123ec5750600a5460ff6101009091048116908916115b156123f657600080fd5b6123ff8c611437565b60ff1660408a0152600160a060020a03166020890190815263ffffffff909116885251600160a060020a031633600160a060020a031614151561244157600080fd5b600b5460009650600160a060020a031693505b60068610156125255783600160a060020a03166362b21ad760038e896000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561249b57fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156124e157600080fd5b6102c65a03f115156124f257600080fd5b505050604051805160ff16905085876006811061250b57fe5b61ffff909216602092909202015260019590950194612454565b600095505b60066000885163ffffffff1681526020810191909152604001600020600101548610156125d2576125ab60066000895163ffffffff168152602081019190915260400160002060010180548890811061257f57fe5b600091825260209182902082820401549190066101000a900460ff16604089015160030260ff16613385565b8587600681106125b757fe5b6020020181815161ffff91011690525060019095019461252a565b600060608801819052600a546125f89160036201000090920460ff169190910290612b23565b925061260a6000848c8e8b518a61283f565b15612620576001876060018181510160ff169052505b6126306001848b8e8b518a61283f565b15612646576001876060018181510160ff169052505b6126566002848a8e8b518a61283f565b1561266c576001876060018181510160ff169052505b61267a87604001518c6121c5565b63ffffffff90811660a08a0190815291166080890152600a5466010000000000009004600160a060020a031692508290635643a711908e90518a6060015160030360ff16028a608001518b6060015160ff16020160405163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b151561271657600080fd5b6102c65a03f1151561272757600080fd5b50505033600160a060020a03166000908152600460205260409020805460ff8b81166101000261ff0019918e1660ff199093169290921716178155905087816002602091828204019190066101000a81548160ff021916908360ff1602179055508a8160010160006101000a81548160ff021916908360ff1602179055508b8160010160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508660400151600191909101805469ff0000000000000000001916690100000000000000000060ff93841602176aff0000000000000000000019166a010000000000000000000094909216939093021790915550505050505050505050565b600a54640100000000900460ff1681565b600061284961358e565b61285161375a565b60ff871660009081526003602052604080822082918291829182919080519081016040908152825463ffffffff1682529091906020830190600183019060069060c09051908101604052919060c08301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116128a6575050509290935250929950600097505050505b600685101561292c57866020015185600681106128fe57fe5b602002015160ff1686866006811061291257fe5b61ffff9092166020929092020152600194909401936128e5565b600094505b60066000885163ffffffff1681526020810191909152604001600020600101548510156129d6576129af60066000895163ffffffff168152602081019190915260400160002060010180548790811061298657fe5b6000918252602091829020828204015460ff929091066101000a900481169060038e0216613385565b8686600681106129bb57fe5b6020020181815161ffff910116905250600190940193612931565b6129e18a88516133b0565b909450925060208901519150606089015190508315612a6457600a546064906301000000900460ff1660208b01510261ffff16811515612a1d57fe5b0460208a018181510161ffff16905250600a546064906301000000900460ff168a600360200201510261ffff16811515612a5357fe5b0460608a018181510161ffff169052505b8215612ad457600a546064906301000000900460ff1660208801510261ffff16811515612a8d57fe5b04602087018181510161ffff16905250600a546064906301000000900460ff1687600360200201510261ffff16811515612ac357fe5b04606087018181510161ffff169052505b612ae08e8e8b89611641565b61ffff92831660208b0152911660609098019790975250949a9950505050505050505050565b600a5460ff1681565b600681565b600a5462010000900460ff1681565b6000600019430140815b8360ff168160ff16108015612b45575060068160ff16105b15612b595761010082049150600101612b2d565b8460ff1682811515612b6757fe5b0695945050505050565b60025460ff1681565b60005433600160a060020a03908116911614612b9557600080fd5b600160a060020a0381161561197e5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b60008060008060008060008060008060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161480612c315750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612c3c57600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054600c63ffffffff199091161781557fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d805460ff191660551761ff001916615f001762ff00001916624100001763ff000000191663320000001764ff0000000019166432000000001781559099506032906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556002600052600390527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d805463ffffffff1916600f1781557fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e8054603260ff199091161761ff0019166137001762ff00001916625500001763ff000000191663550000001764ff000000001916642800000000178155909850604b906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556003600081905290527fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af805463ffffffff191660081781557fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b08054606e60ff199091161761ff001916613c001762ff00001916622800001763ff0000001916633c0000001764ff00000000191664280000000017815590975060289060056020808204929092018054918390066101000a60ff818102199093169490921691909102929092179091556004600081905260039091527f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465805463ffffffff191690911781557f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772466805460ff191660361761ff0019166145001762ff00001916623a00001763ff0000001916634b0000001764ff000000001916644b000000001781559096506046906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556005600081905260039091527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942250805463ffffffff191660061781557f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422518054603260ff199091161761ff0019166132001762ff00001916623200001763ff000000191663690000001764ff000000001916643700000000178155909650605f91602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556006600052600390527fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3805463ffffffff1916600d1781557fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f48054603760ff199091161761ff001916615a001762ff00001916625f00001763ff0000001916632d0000001764ff00000000191664230000000017815590945060239060056020808204929092018054918390066101000a60ff818102199093169490921691909102929092179091556007600081905260039091527ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2805463ffffffff191690911781557ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd3805460ff191660551761ff001916613c001762ff00001916624900001763ff0000001916634b0000001764ff0000000019166450000000001781559093506032906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556008600052600390527f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe805463ffffffff191660181781557f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf8054608c60ff199091161761ff0019166187001762ff00001916624600001763ff0000001916634d0000001764ff000000001916645a000000001781559092506032906005602080820492909201805460ff948516928490066101000a928302949092021990911692909217909155600960005260039052507f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458805463ffffffff191660101781557f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4598054604660ff199091161761ff0019166169001762ff00001916625000001763ff0000001916633c0000001764ff000000001916645000000000178155605a9060056020808204909201805460ff948516939092066101000a9283029390920219169190911790555050600a805461090061ff001990911617905550505050505050565b60008161ffff168361ffff16111561337b575080820361337f565b5060005b92915050565b60008282028315806133a1575082848281151561339e57fe5b04145b15156133a957fe5b9392505050565b60008080805b63ffffffff8616600090815260066020526040902054821015613539575060005b63ffffffff851660009081526006602052604090205481101561352e5763ffffffff8516600090815260066020526040902080548290811061341557fe5b60009182526020808320818304015463ffffffff8a16845260068252604084208054929093066101000a900460ff169260059290918690811061345457fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561348d57600193505b63ffffffff861660009081526006602052604090208054839081106134ae57fe5b60009182526020808320818304015463ffffffff8916845260068252604084208054929093066101000a900460ff16926005929091859081106134ed57fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561352657600192505b6001016133d7565b6001909101906133b6565b50509250929050565b6101006040519081016040908152600080835260208301819052908201526060810161356c6135ae565b8152600060208201819052604082018190526060820181905260809091015290565b60e060405190810160405260008152602081016135a961375a565b905290565b60206040519081016040526000815290565b82805482825590600052602060002090601f016020900481019282156136565791602002820160005b8382111561362757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135e9565b80156136545782816101000a81549060ff0219169055600101602081600001049283019260010302613627565b505b50613662929150613782565b5090565b828054828255906000526020600020906007016008900481019282156137055791602002820160005b838211156136d357835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030261368f565b80156137035782816101000a81549063ffffffff02191690556004016020816003010492830192600103026136d3565b505b506136629291506137a3565b60e06040519081016040528061356c6137c4565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60c06040519081016040526006815b6000815260001990910190602001816137695790505090565b6137a091905b8082111561366257805460ff19168155600101613788565b90565b6137a091905b8082111561366257805463ffffffff191681556001016137a9565b6060604051908101604052600081526002602082016137695600a165627a7a72305820aa58eb55d185b351c219eabf73ca8ffb70e5a24083eea4cdb0a2b1b4642160aa0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6


   Swarm Source:
bzzr://aa58eb55d185b351c219eabf73ca8ffb70e5a24083eea4cdb0a2b1b4642160aa

 

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