Sponsored Link:   SHIFT.cash - smart-contract based car title lending platform, 30 billion market, 35+ employees. Join NOW.
Contract Overview
ETH Balance: 9.875 Ether
ETH USD Value: $8,476.31 (@ $858.36/ETH)
No Of Transactions: 10070 txns
  Latest 25 txns from a total Of 10070 transactions (> more than 25 PendingTxns) View All

TxHash Age From To Value [TxFee]
0x2896c77ce612ebddfd67ae0dc8faa4ec7fc19107f0ff75a882a693217149098d(pending)1 min ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x968f74b030f7cfbee38c4cab59d064de3e89753f0079676a0592325c3f899098(pending)1 min ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x29ae4ce9843666f3b42c8cc9f069a410deb50d42e47070433cc3dcd205f6fb69(pending)1 min ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xfa75ff74e9bca5cb7ed0a3cf30c36188640939d4e2737b29d17a8c0d09cbbcb3(pending)1 min ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x52cf917865a3006021b3514e82b539cf85ba70ebb2cb26ba932a14ed7c2a3748(pending)1 min ago0xcca14f9625a07dcf43e9c598c49f4853f4fe9b2e  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xd9c2fa148dc3b6bdba2652e5f5c6016d6541e78f4b3a7f45cd0d148af22b9608(pending)1 min ago0x1bcffa0970d69da458fe107347b785ea7d4f10a5  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xbe4a1ec165fa29aa793f703e8b84d423162ad2abbed89a350a2ab7e2f1fc5470(pending)2 mins ago0xead84df43e2e89facf36c0e0262715b957cb5785  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xe89e858871395e1ae21e48f8e0591e3db0706582f5ccdbf398c37bc6f7ca492f(pending)2 mins ago0xead84df43e2e89facf36c0e0262715b957cb5785  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x1e42c775e888300549fb19ce74a4e5bcd514be9901c306cfe1ed40e21f697ba0(pending)3 mins ago0xb34bd480f9c32c27cf96baadef17c9b1611219b8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xa911fc82ee3dc370fb8e7d9154841551f9dab479283605489e8952d89f7dddea(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x42ad45b2bb737562bc38e5d18118263feb5cb55099d057126032314f214e2faa(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xf67267df66634cf99de025dc749a103e5332d797c4af20f2ee666fd05118e774(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x59d77db3e3d58ddcdabc154ccc850c94d37cc069a26517e60e3f8e9d3b6f02b6(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x474ded636dc88f41b76c6d81a26c848e9693d847d80b6d8c58c3a2cc6ef8c2b4(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x803b5da4c2091158689f730ba5ba15c294e8b86ad7d6e6cabcdf0e0df5f1bca2(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xeea08167f54a49a545f57c00bccba4b4a761fb6ad4aa989085fbe5d4ec162d03(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x99f7722655637b3bb2857f4a76fa01bb91a320f4ad59d54d1604dfed84569fd2(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x41a94a0965b4bdaec02b32dc63cf10e2774e5a7f49df63cafb6a4df2548bd5f7(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x93e3a4f3fdfa6c4e3bc6f78f79208024563e800c6046d7ad534218474b959926(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x4522b48b19fcaa1cc24c97273839a2fcdb328b47269f5d6c29c76edadc84157a(pending)3 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xcd3fb95180cac43373bbbf7d2cf1fe06e6a331123cf43012e7d1d10228410f3a(pending)9 mins ago0xd5a2bc547edfa7808dcaa6edcfb6076ef7ffe990  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xe971fc060c0d7eeca185e1bbf32587b5f3339aa55ce3e4bfaf0385fbfda0dbab(pending)11 mins ago0x6102dde6ddf574703aa7b0d5c54c046a2f22ca61  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x168223cebfa264b36faaee08b195d9ce5dc29af97456ef298280c3eab225d124(pending)19 mins ago0xf96c878bb8d36d8203fa2a358d770f1ae85a1d47  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0xd020fb9e1c8fe22aaaf542c3177c0e11e0fd107ef1594687741eaa8eef5375b7(pending)20 mins ago0xef6418a854a30526621e0dcfd994ce177773e9d8  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
0x6263d1f327a351c64875f19360d6db01c908576c3068043c5eb2cda63de431a9(pending)20 mins ago0x85e800c099c6a3d3b6678d0478b3e6dec3350b3e  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(pending)
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Contract Source Code Verified
Contract Name: EtheremonGym
Compiler Version: 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

-----Decoded View---------------
Found 2 constructor arguments :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6


   Swarm Source:
bzzr://aa58eb55d185b351c219eabf73ca8ffb70e5a24083eea4cdb0a2b1b4642160aa

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.