Latest 25 from a total of 3,932 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Ether | 5041826 | 2947 days ago | IN | 0 ETH | 0.00116861 | ||||
| Attack Castle | 4986022 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983440 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983385 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 | ||||
| Attack Castle | 4983048 | 2957 days ago | IN | 0 ETH | 0.00000258 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 5041826 | 2947 days ago | 5.38 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EtheremonBattle
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-01-24
*/
pragma solidity ^0.4.16;
// copyright contact@Etheremon.com
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);
}
interface EtheremonTradeInterface {
function isOnTrading(uint64 _objId) constant external returns(bool);
}
interface EtheremonPaymentInterface {
function giveBattleBonus(address _trainer, uint _amount) public;
}
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 EtheremonCastleContract is EtheremonEnum, BasicAccessControl{
uint32 public totalCastle = 0;
uint64 public totalBattle = 0;
function getCastleBasicInfo(address _owner) constant external returns(uint32, uint, uint32);
function getCastleBasicInfoById(uint32 _castleId) constant external returns(uint, address, uint32);
function countActiveCastle() constant external returns(uint);
function getCastleObjInfo(uint32 _castleId) constant external returns(uint64, uint64, uint64, uint64, uint64, uint64);
function getCastleStats(uint32 _castleId) constant external returns(string, address, uint32, uint32, uint32, uint);
function isOnCastle(uint32 _castleId, uint64 _objId) constant external returns(bool);
function getCastleWinLose(uint32 _castleId) constant external returns(uint32, uint32, uint32);
function getTrainerBrick(address _trainer) constant external returns(uint32);
function addCastle(address _trainer, string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _brickNumber)
onlyModerators external returns(uint32 currentCastleId);
function renameCastle(uint32 _castleId, string _name) onlyModerators external;
function removeCastleFromActive(uint32 _castleId) onlyModerators external;
function deductTrainerBrick(address _trainer, uint32 _deductAmount) onlyModerators external returns(bool);
function addBattleLog(uint32 _castleId, address _attacker,
uint8 _ran1, uint8 _ran2, uint8 _ran3, uint8 _result, uint32 _castleExp1, uint32 _castleExp2, uint32 _castleExp3) onlyModerators external returns(uint64);
function addBattleLogMonsterInfo(uint64 _battleId, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _exp1, uint32 _exp2, uint32 _exp3) onlyModerators external;
}
contract EtheremonBattle is EtheremonEnum, BasicAccessControl, SafeMath {
uint8 constant public NO_MONSTER = 3;
uint8 constant public STAT_COUNT = 6;
uint8 constant public GEN0_NO = 24;
struct MonsterClassAcc {
uint32 classId;
uint256 price;
uint256 returnPrice;
uint32 total;
bool catchable;
}
struct MonsterObjAcc {
uint64 monsterId;
uint32 classId;
address trainer;
string name;
uint32 exp;
uint32 createIndex;
uint32 lastClaimIndex;
uint createTime;
}
struct BattleMonsterData {
uint64 a1;
uint64 a2;
uint64 a3;
uint64 s1;
uint64 s2;
uint64 s3;
}
struct SupporterData {
uint32 classId1;
bool isGason1;
uint8 type1;
uint32 classId2;
bool isGason2;
uint8 type2;
uint32 classId3;
bool isGason3;
uint8 type3;
}
struct AttackData {
uint64 aa;
SupporterData asup;
uint16 aAttackSupport;
uint64 ba;
SupporterData bsup;
uint16 bAttackSupport;
uint8 index;
}
struct MonsterBattleLog {
uint64 objId;
uint32 exp;
}
struct BattleLogData {
address castleOwner;
uint64 battleId;
uint32 castleId;
uint32[3] temp;
uint castleIndex;
uint8[6] monsterLevel;
uint8[3] randoms;
bool win;
BattleResult result;
}
struct CacheClassInfo {
uint8[] types;
uint8[] steps;
uint32[] ancestors;
}
struct CastleData {
address trainer;
string name;
uint32 brickNumber;
uint64 a1;
uint64 a2;
uint64 a3;
uint64 s1;
uint64 s2;
uint64 s3;
}
// event
event EventCreateCastle(address indexed owner, uint32 castleId);
event EventAttackCastle(address indexed attacker, uint32 castleId, uint8 result);
event EventRemoveCastle(uint32 indexed castleId);
// linked smart contract
address public worldContract;
address public dataContract;
address public tradeContract;
address public castleContract;
address public paymentContract;
// global variable
mapping(uint8 => uint8) typeAdvantages;
mapping(uint32 => CacheClassInfo) cacheClasses;
mapping(uint8 => uint32) levelExps;
uint8 public ancestorBuffPercentage = 10;
uint8 public gasonBuffPercentage = 10;
uint8 public typeBuffPercentage = 20;
uint8 public maxLevel = 100;
uint16 public maxActiveCastle = 30;
uint8 public maxRandomRound = 4;
uint8 public winBrickReturn = 8;
uint32 public castleMinBrick = 5;
uint8 public castleExpAdjustment = 100; // percentage
uint public brickETHPrice = 0.004 ether;
uint8 public minHpDeducted = 10;
uint public winTokenReward = 10 ** 8;
uint256 public totalEarn = 0;
uint256 public totalWithdraw = 0;
address private lastAttacker = address(0x0);
// modifier
modifier requireDataContract {
require(dataContract != address(0));
_;
}
modifier requireTradeContract {
require(tradeContract != address(0));
_;
}
modifier requireCastleContract {
require(castleContract != address(0));
_;
}
modifier requireWorldContract {
require(worldContract != address(0));
_;
}
modifier requirePaymentContract {
require(paymentContract != address(0));
_;
}
function EtheremonBattle(address _dataContract, address _worldContract, address _tradeContract, address _castleContract, address _paymentContract) public {
dataContract = _dataContract;
worldContract = _worldContract;
tradeContract = _tradeContract;
castleContract = _castleContract;
paymentContract = _paymentContract;
}
// 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, uint32 _classId5, uint32 _classId6, uint32 _classId7, uint32 _classId8)
onlyModerators requireDataContract requireWorldContract public {
setCacheClassInfo(_classId1);
setCacheClassInfo(_classId2);
setCacheClassInfo(_classId3);
setCacheClassInfo(_classId4);
setCacheClassInfo(_classId5);
setCacheClassInfo(_classId6);
setCacheClassInfo(_classId7);
setCacheClassInfo(_classId8);
}
function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
if (_amount > this.balance) {
revert();
}
uint256 validAmount = safeSubtract(totalEarn, totalWithdraw);
if (_amount > validAmount) {
revert();
}
totalWithdraw += _amount;
_sendTo.transfer(_amount);
}
function setContract(address _dataContract, address _worldContract, address _tradeContract, address _castleContract, address _paymentContract) onlyModerators external {
dataContract = _dataContract;
worldContract = _worldContract;
tradeContract = _tradeContract;
castleContract = _castleContract;
paymentContract = _paymentContract;
}
function setConfig(uint8 _ancestorBuffPercentage, uint8 _gasonBuffPercentage, uint8 _typeBuffPercentage, uint32 _castleMinBrick,
uint8 _maxLevel, uint16 _maxActiveCastle, uint8 _maxRandomRound, uint8 _minHpDeducted, uint _winTokenReward, uint _brickETHPrice, uint8 _castleExpAdjustment) onlyModerators external{
ancestorBuffPercentage = _ancestorBuffPercentage;
gasonBuffPercentage = _gasonBuffPercentage;
typeBuffPercentage = _typeBuffPercentage;
castleMinBrick = _castleMinBrick;
maxLevel = _maxLevel;
maxActiveCastle = _maxActiveCastle;
maxRandomRound = _maxRandomRound;
minHpDeducted = _minHpDeducted;
winTokenReward = _winTokenReward;
brickETHPrice = _brickETHPrice;
castleExpAdjustment = _castleExpAdjustment;
}
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;
}
}
// 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 getRandom(uint8 maxRan, uint8 index, address priAddress) constant public returns(uint8) {
uint256 genNum = uint256(block.blockhash(block.number-1)) + uint256(priAddress);
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 level2, uint8 level, bool _win) pure public returns(uint32){
uint8 halfLevel1 = level;
if (level > level2 + 3) {
halfLevel1 = (level2 + 3) / 2;
} else {
halfLevel1 = level / 2;
}
uint32 gainExp = 1;
uint256 rate = (21 ** uint256(halfLevel1)) * 1000 / (20 ** uint256(halfLevel1));
rate = rate * rate;
if ((level > level2 + 3 && level2 + 3 > 2 * halfLevel1) || (level <= level2 + 3 && level > 2 * halfLevel1)) rate = rate * 21 / 20;
if (_win) {
gainExp = uint32(30 * rate / 1000000);
} else {
gainExp = uint32(10 * rate / 1000000);
}
if (level2 >= level + 5) {
gainExp /= uint32(2) ** ((level2 - level) / 5);
}
return gainExp;
}
function getMonsterLevel(uint64 _objId) constant external returns(uint32, uint8) {
EtheremonDataBase data = EtheremonDataBase(dataContract);
MonsterObjAcc memory obj;
uint32 _ = 0;
(obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
return (obj.exp, getLevel(obj.exp));
}
function getMonsterCP(uint64 _objId) constant external returns(uint64) {
uint16[6] memory stats;
uint32 classId = 0;
uint32 exp = 0;
(classId, exp, stats) = getCurrentStats(_objId);
uint256 total;
for(uint i=0; i < STAT_COUNT; i+=1) {
total += stats[i];
}
return uint64(total/STAT_COUNT);
}
function isOnBattle(uint64 _objId) constant external returns(bool) {
EtheremonDataBase data = EtheremonDataBase(dataContract);
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
uint32 castleId;
uint castleIndex = 0;
uint256 price = 0;
MonsterObjAcc memory obj;
(obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
(castleId, castleIndex, price) = castle.getCastleBasicInfo(obj.trainer);
if (castleId > 0 && castleIndex > 0)
return castle.isOnCastle(castleId, _objId);
return false;
}
function isValidOwner(uint64 _objId, address _owner) constant public returns(bool) {
EtheremonDataBase data = EtheremonDataBase(dataContract);
MonsterObjAcc memory obj;
(obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
return (obj.trainer == _owner && obj.classId != 21);
}
function getObjExp(uint64 _objId) constant public returns(uint32, uint32) {
EtheremonDataBase data = EtheremonDataBase(dataContract);
MonsterObjAcc memory obj;
uint32 _ = 0;
(_objId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
return (obj.classId, obj.exp);
}
function getCurrentStats(uint64 _objId) constant public returns(uint32, uint8, uint16[6]){
EtheremonDataBase data = EtheremonDataBase(dataContract);
uint16[6] memory stats;
uint32 classId;
uint32 exp;
(classId, exp) = getObjExp(_objId);
if (classId == 0)
return (classId, 0, stats);
uint i = 0;
uint8 level = getLevel(exp);
for(i=0; i < STAT_COUNT; i+=1) {
stats[i] = data.getElementInArrayType(ArrayType.STAT_BASE, _objId, i);
}
for(i=0; i < cacheClasses[classId].steps.length; i++) {
stats[i] += uint16(safeMult(cacheClasses[classId].steps[i], level*3));
}
return (classId, level, stats);
}
function safeDeduct(uint16 a, uint16 b) pure private returns(uint16){
if (a > b) {
return a - b;
}
return 0;
}
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 getAncestorBuff(uint32 _classId, SupporterData _support) constant private returns(uint16){
// check ancestors
uint i =0;
uint8 countEffect = 0;
uint ancestorSize = cacheClasses[_classId].ancestors.length;
if (ancestorSize > 0) {
uint32 ancestorClass = 0;
for (i=0; i < ancestorSize; i ++) {
ancestorClass = cacheClasses[_classId].ancestors[i];
if (ancestorClass == _support.classId1 || ancestorClass == _support.classId2 || ancestorClass == _support.classId3) {
countEffect += 1;
}
}
}
return countEffect * ancestorBuffPercentage;
}
function getGasonSupport(uint32 _classId, SupporterData _sup) constant private returns(uint16 defenseSupport) {
uint i = 0;
uint8 classType = 0;
defenseSupport = 0;
for (i = 0; i < cacheClasses[_classId].types.length; i++) {
classType = cacheClasses[_classId].types[i];
if (_sup.isGason1) {
if (classType == _sup.type1) {
defenseSupport += gasonBuffPercentage;
continue;
}
}
if (_sup.isGason2) {
if (classType == _sup.type2) {
defenseSupport += gasonBuffPercentage;
continue;
}
}
if (_sup.isGason3) {
if (classType == _sup.type3) {
defenseSupport += gasonBuffPercentage;
continue;
}
}
}
}
function getTypeSupport(uint32 _aClassId, uint32 _bClassId) constant private returns (uint16 aAttackSupport, uint16 bAttackSupport) {
// check types
bool aHasAdvantage;
bool bHasAdvantage;
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;
}
}
}
if (aHasAdvantage)
aAttackSupport += typeBuffPercentage;
if (bHasAdvantage)
bAttackSupport += typeBuffPercentage;
}
function calculateBattleStats(AttackData att) constant private returns(uint8 aLevel, uint16[6] aStats, uint8 bLevel, uint16[6] bStats) {
uint32 aClassId = 0;
(aClassId, aLevel, aStats) = getCurrentStats(att.aa);
uint32 bClassId = 0;
(bClassId, bLevel, bStats) = getCurrentStats(att.ba);
// check gasonsupport
(att.aAttackSupport, att.bAttackSupport) = getTypeSupport(aClassId, bClassId);
att.aAttackSupport += getAncestorBuff(aClassId, att.asup);
att.bAttackSupport += getAncestorBuff(bClassId, att.bsup);
uint16 aDefenseBuff = getGasonSupport(aClassId, att.asup);
uint16 bDefenseBuff = getGasonSupport(bClassId, att.bsup);
// add attack
aStats[1] += aStats[1] * att.aAttackSupport / 100;
aStats[3] += aStats[3] * att.aAttackSupport / 100;
bStats[1] += bStats[1] * att.bAttackSupport / 100;
bStats[3] += bStats[3] * att.bAttackSupport / 100;
// add offense
aStats[2] += aStats[2] * aDefenseBuff / 100;
aStats[4] += aStats[4] * aDefenseBuff / 100;
bStats[2] += bStats[2] * bDefenseBuff / 100;
bStats[4] += bStats[4] * bDefenseBuff / 100;
}
function attack(AttackData att) constant private returns(uint8 aLevel, uint8 bLevel, uint8 ran, bool win) {
uint16[6] memory aStats;
uint16[6] memory bStats;
(aLevel, aStats, bLevel, bStats) = calculateBattleStats(att);
ran = getRandom(maxRandomRound+2, att.index, lastAttacker);
uint16 round = 0;
while (round < maxRandomRound && aStats[0] > 0 && bStats[0] > 0) {
if (aStats[5] > bStats[5]) {
if (round % 2 == 0) {
// a attack
bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran));
} else {
aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran));
}
} else {
if (round % 2 != 0) {
bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran));
} else {
aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran));
}
}
round+= 1;
}
win = aStats[0] >= bStats[0];
}
function updateCastle(uint32 _castleId, address _castleOwner, bool win) requireCastleContract private{
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
uint32 totalWin;
uint32 totalLose;
uint32 brickNumber;
(totalWin, totalLose, brickNumber) = castle.getCastleWinLose(_castleId);
EtheremonPaymentInterface payment = EtheremonPaymentInterface(paymentContract);
// if castle win, ignore
if (win) {
if (totalWin < brickNumber) {
payment.giveBattleBonus(_castleOwner, winTokenReward);
}
} else {
if (totalWin/winBrickReturn > brickNumber) {
brickNumber = 2 * brickNumber;
} else {
brickNumber += totalWin/winBrickReturn;
}
if (brickNumber <= totalLose + 1) {
castle.removeCastleFromActive(_castleId);
// destroy
}
payment.giveBattleBonus(msg.sender, winTokenReward);
}
}
function hasValidParam(address _trainer, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) constant public returns(bool) {
if (_a1 == 0 || _a2 == 0 || _a3 == 0)
return false;
if (_a1 == _a2 || _a1 == _a3 || _a1 == _s1 || _a1 == _s2 || _a1 == _s3)
return false;
if (_a2 == _a3 || _a2 == _s1 || _a2 == _s2 || _a2 == _s3)
return false;
if (_a3 == _s1 || _a3 == _s2 || _a3 == _s3)
return false;
if (_s1 > 0 && (_s1 == _s2 || _s1 == _s3))
return false;
if (_s2 > 0 && (_s2 == _s3))
return false;
if (!isValidOwner(_a1, _trainer) || !isValidOwner(_a2, _trainer) || !isValidOwner(_a3, _trainer))
return false;
if (_s1 > 0 && !isValidOwner(_s1, _trainer))
return false;
if (_s2 > 0 && !isValidOwner(_s2, _trainer))
return false;
if (_s3 > 0 && !isValidOwner(_s3, _trainer))
return false;
return true;
}
function createCastleInternal(CastleData _castleData) private {
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
uint32 castleId;
uint castleIndex = 0;
uint32 numberBrick = 0;
(castleId, castleIndex, numberBrick) = castle.getCastleBasicInfo(_castleData.trainer);
if (castleId > 0 || castleIndex > 0)
revert();
if (castle.countActiveCastle() >= uint(maxActiveCastle))
revert();
castleId = castle.addCastle(_castleData.trainer, _castleData.name, _castleData.a1, _castleData.a2, _castleData.a3,
_castleData.s1, _castleData.s2, _castleData.s3, _castleData.brickNumber);
EventCreateCastle(_castleData.trainer, castleId);
}
// public
function createCastle(string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) isActive requireDataContract
requireTradeContract requireCastleContract payable external {
if (!hasValidParam(msg.sender, _a1, _a2, _a3, _s1, _s2, _s3))
revert();
EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
if (trade.isOnTrading(_a1) || trade.isOnTrading(_a2) || trade.isOnTrading(_a3) ||
trade.isOnTrading(_s1) || trade.isOnTrading(_s2) || trade.isOnTrading(_s3))
revert();
uint32 numberBrick = uint32(msg.value / brickETHPrice);
if (numberBrick < castleMinBrick) {
revert();
}
CastleData memory castleData;
castleData.trainer = msg.sender;
castleData.name = _name;
castleData.brickNumber = numberBrick;
castleData.a1 = _a1;
castleData.a2 = _a2;
castleData.a3 = _a3;
castleData.s1 = _s1;
castleData.s2 = _s2;
castleData.s3 = _s3;
createCastleInternal(castleData);
totalEarn += msg.value;
}
function createCastleWithToken(address _trainer, uint32 _noBrick, string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) isActive requireDataContract
requireTradeContract requireCastleContract requirePaymentContract external {
// only accept request from payment contract
if (msg.sender != paymentContract)
revert();
if (!hasValidParam(_trainer, _a1, _a2, _a3, _s1, _s2, _s3))
revert();
EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
if (trade.isOnTrading(_a1) || trade.isOnTrading(_a2) || trade.isOnTrading(_a3) ||
trade.isOnTrading(_s1) || trade.isOnTrading(_s2) || trade.isOnTrading(_s3))
revert();
if (_noBrick < castleMinBrick) {
revert();
}
CastleData memory castleData;
castleData.trainer = _trainer;
castleData.name = _name;
castleData.brickNumber = _noBrick;
castleData.a1 = _a1;
castleData.a2 = _a2;
castleData.a3 = _a3;
castleData.s1 = _s1;
castleData.s2 = _s2;
castleData.s3 = _s3;
createCastleInternal(castleData);
}
function renameCastle(uint32 _castleId, string _name) isActive requireCastleContract external {
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
uint index;
address owner;
uint256 price;
(index, owner, price) = castle.getCastleBasicInfoById(_castleId);
if (owner != msg.sender)
revert();
castle.renameCastle(_castleId, _name);
}
function removeCastle(uint32 _castleId) isActive requireCastleContract external {
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
uint index;
address owner;
uint256 price;
(index, owner, price) = castle.getCastleBasicInfoById(_castleId);
if (owner != msg.sender)
revert();
if (index > 0) {
castle.removeCastleFromActive(_castleId);
}
EventRemoveCastle(_castleId);
}
function getSupporterInfo(uint64 s1, uint64 s2, uint64 s3) constant public returns(SupporterData sData) {
uint temp;
uint32 __;
EtheremonGateway gateway = EtheremonGateway(worldContract);
if (s1 > 0)
(sData.classId1, __, sData.isGason1, temp, temp) = gateway.getObjBattleInfo(s1);
if (s2 > 0)
(sData.classId2, __, sData.isGason2, temp, temp) = gateway.getObjBattleInfo(s2);
if (s3 > 0)
(sData.classId3, __, sData.isGason3, temp, temp) = gateway.getObjBattleInfo(s3);
EtheremonDataBase data = EtheremonDataBase(dataContract);
if (sData.isGason1) {
sData.type1 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId1), 0);
}
if (sData.isGason2) {
sData.type2 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId2), 0);
}
if (sData.isGason3) {
sData.type3 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId3), 0);
}
}
function attackCastle(uint32 _castleId, uint64 _aa1, uint64 _aa2, uint64 _aa3, uint64 _as1, uint64 _as2, uint64 _as3) isActive requireDataContract
requireTradeContract requireCastleContract requirePaymentContract external {
if (!hasValidParam(msg.sender, _aa1, _aa2, _aa3, _as1, _as2, _as3))
revert();
EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
BattleLogData memory log;
(log.castleIndex, log.castleOwner, log.temp[0]) = castle.getCastleBasicInfoById(_castleId);
if (log.castleIndex == 0 || log.castleOwner == msg.sender)
revert();
EtheremonGateway gateway = EtheremonGateway(worldContract);
BattleMonsterData memory b;
(b.a1, b.a2, b.a3, b.s1, b.s2, b.s3) = castle.getCastleObjInfo(_castleId);
lastAttacker = msg.sender;
// init data
uint8 countWin = 0;
AttackData memory att;
att.asup = getSupporterInfo(b.s1, b.s2, b.s3);
att.bsup = getSupporterInfo(_as1, _as2, _as3);
att.index = 0;
att.aa = b.a1;
att.ba = _aa1;
(log.monsterLevel[0], log.monsterLevel[3], log.randoms[0], log.win) = attack(att);
gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterLevel[0], log.monsterLevel[3], log.win)*castleExpAdjustment/100);
gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterLevel[3], log.monsterLevel[0], !log.win));
if (log.win)
countWin += 1;
att.index = 1;
att.aa = b.a2;
att.ba = _aa2;
(log.monsterLevel[1], log.monsterLevel[4], log.randoms[1], log.win) = attack(att);
gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterLevel[1], log.monsterLevel[4], log.win)*castleExpAdjustment/100);
gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterLevel[4], log.monsterLevel[1], !log.win));
if (log.win)
countWin += 1;
att.index = 2;
att.aa = b.a3;
att.ba = _aa3;
(log.monsterLevel[2], log.monsterLevel[5], log.randoms[2], log.win) = attack(att);
gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterLevel[2], log.monsterLevel[5], log.win)*castleExpAdjustment/100);
gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterLevel[5], log.monsterLevel[2], !log.win));
if (log.win)
countWin += 1;
updateCastle(_castleId, log.castleOwner, countWin>1);
if (countWin>1) {
log.result = BattleResult.CASTLE_WIN;
} else {
log.result = BattleResult.CASTLE_LOSE;
}
log.temp[0] = levelExps[log.monsterLevel[0]]-1;
log.temp[1] = levelExps[log.monsterLevel[1]]-1;
log.temp[2] = levelExps[log.monsterLevel[2]]-1;
log.battleId = castle.addBattleLog(_castleId, msg.sender, log.randoms[0], log.randoms[1], log.randoms[2],
uint8(log.result), log.temp[0], log.temp[1], log.temp[2]);
log.temp[0] = levelExps[log.monsterLevel[3]]-1;
log.temp[1] = levelExps[log.monsterLevel[4]]-1;
log.temp[2] = levelExps[log.monsterLevel[5]]-1;
castle.addBattleLogMonsterInfo(log.battleId, _aa1, _aa2, _aa3, _as1, _as2, _as3, log.temp[0], log.temp[1], log.temp[2]);
EventAttackCastle(msg.sender, _castleId, uint8(log.result));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterCP","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"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":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"hasValidParam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjExp","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"brickETHPrice","outputs":[{"name":"","type":"uint256"}],"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":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"},{"name":"_paymentContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"isOnBattle","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint8"},{"name":"index","type":"uint8"},{"name":"priAddress","type":"address"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ancestorBuffPercentage","type":"uint8"},{"name":"_gasonBuffPercentage","type":"uint8"},{"name":"_typeBuffPercentage","type":"uint8"},{"name":"_castleMinBrick","type":"uint32"},{"name":"_maxLevel","type":"uint8"},{"name":"_maxActiveCastle","type":"uint16"},{"name":"_maxRandomRound","type":"uint8"},{"name":"_minHpDeducted","type":"uint8"},{"name":"_winTokenReward","type":"uint256"},{"name":"_brickETHPrice","type":"uint256"},{"name":"_castleExpAdjustment","type":"uint8"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"level2","type":"uint8"},{"name":"level","type":"uint8"},{"name":"_win","type":"bool"}],"name":"getGainExp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_name","type":"string"}],"name":"renameCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_aa1","type":"uint64"},{"name":"_aa2","type":"uint64"},{"name":"_aa3","type":"uint64"},{"name":"_as1","type":"uint64"},{"name":"_as2","type":"uint64"},{"name":"_as3","type":"uint64"}],"name":"attackCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"castleMinBrick","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"createCastle","outputs":[],"payable":true,"stateMutability":"payable","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":true,"inputs":[{"name":"s1","type":"uint64"},{"name":"s2","type":"uint64"},{"name":"s3","type":"uint64"}],"name":"getSupporterInfo","outputs":[{"components":[{"name":"classId1","type":"uint32"},{"name":"isGason1","type":"bool"},{"name":"type1","type":"uint8"},{"name":"classId2","type":"uint32"},{"name":"isGason2","type":"bool"},{"name":"type2","type":"uint8"},{"name":"classId3","type":"uint32"},{"name":"isGason3","type":"bool"},{"name":"type3","type":"uint8"}],"name":"sData","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winBrickReturn","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NO_MONSTER","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getCurrentStats","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"},{"name":"","type":"uint16[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ancestorBuffPercentage","outputs":[{"name":"","type":"uint8"}],"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":"castleExpAdjustment","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":"winTokenReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paymentContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxActiveCastle","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"},{"name":"_noBrick","type":"uint32"},{"name":"_name","type":"string"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"createCastleWithToken","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":"_classId1","type":"uint32"},{"name":"_classId2","type":"uint32"},{"name":"_classId3","type":"uint32"},{"name":"_classId4","type":"uint32"},{"name":"_classId5","type":"uint32"},{"name":"_classId6","type":"uint32"},{"name":"_classId7","type":"uint32"},{"name":"_classId8","type":"uint32"}],"name":"fastSetCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minHpDeducted","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterLevel","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"}],"name":"removeCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasonBuffPercentage","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":"_objId","type":"uint64"},{"name":"_owner","type":"address"}],"name":"isValidOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEarn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"castleContract","outputs":[{"name":"","type":"address"}],"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":"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":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"},{"name":"_paymentContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"}],"name":"EventCreateCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attacker","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"},{"indexed":false,"name":"result","type":"uint8"}],"name":"EventAttackCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"castleId","type":"uint32"}],"name":"EventRemoveCastle","type":"event"}]Contract Creation Code
606060405260008060146101000a81548161ffff021916908361ffff1602179055506001600260006101000a81548160ff021916908315150217905550600a8060006101000a81548160ff021916908360ff160217905550600a8060016101000a81548160ff021916908360ff1602179055506014600a60026101000a81548160ff021916908360ff1602179055506064600a60036101000a81548160ff021916908360ff160217905550601e600a60046101000a81548161ffff021916908361ffff1602179055506004600a60066101000a81548160ff021916908360ff1602179055506008600a60076101000a81548160ff021916908360ff1602179055506005600a60086101000a81548163ffffffff021916908363ffffffff1602179055506064600a600c6101000a81548160ff021916908360ff160217905550660e35fa931a0000600b55600a600c60006101000a81548160ff021916908360ff1602179055506305f5e100600d556000600e556000600f556000601060006101000a815481600160a060020a030219169083600160a060020a0316021790555034156101aa57600080fd5b60405160a0806200576d833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a0319928316179092556003805499831699821699909917909855600280549782166101000261010060a860020a0319909816979097179096556004805495871695881695909517909455505060058054918416918516919091179055600680549290911691909216179055615502806200026b6000396000f3006060604052600436106102845763ffffffff60e060020a6000350416630672859b81146102895780630d668818146102c457806314d0f1ba146102f357806318758480146103265780631bab0908146103395780631cd98235146103825780631f296600146103c257806320046e91146103e757806320eb2a871461042f5780633171cec41461046857806333ced3211461048757806333d24dc41461049a57806335f097f3146104ad5780633a34f09a146104cc5780633a5cba7a1461050d5780633eb38fc51461056757806343b37b45146105a4578063455fd623146105cc57806347cf8971146105df57806348ef5aa8146106255780634a3d3c091461063d5780634aaff006146106505780634efb023e1461068f578063500e4297146106a2578063522f6815146106e257806354f0bde7146107045780636b2a26911461072f5780636c81fd6d1461074257806373d65c0014610761578063775e38f71461077457806384be816c1461078757806385bbb53a146107f5578063891fe103146108085780638a2cb24d1461081b5780638da5cb5b1461082e5780638fd8f783146108415780639216b7ad1461085d5780639c91dd5614610870578063a0c66b4314610883578063b04e766814610896578063b2cad9b7146108f7578063b76d26d414610913578063b85d627514610959578063cc06c35914610978578063cfa830791461098b578063d2169d2f1461099e578063d4c15161146109df578063d5425571146109fb578063d98e14bd14610a0e578063da5671ad14610a21578063dffd722f14610a4c578063eb83f01514610a5f578063ebfa3c1b14610a72578063ee4e441614610a85578063f285329214610a98578063ffa640d814610ab7575b600080fd5b341561029457600080fd5b6102a86001604060020a0360043516610aca565b6040516001604060020a03909116815260200160405180910390f35b34156102cf57600080fd5b6102d7610b2a565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b610312600160a060020a0360043516610b39565b604051901515815260200160405180910390f35b341561033157600080fd5b6102d7610b4e565b341561034457600080fd5b610312600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610b62565b341561038d57600080fd5b6103a16001604060020a0360043516610e5d565b60405163ffffffff9283168152911660208201526040908101905180910390f35b34156103cd57600080fd5b6103d5610f4a565b60405190815260200160405180910390f35b34156103f257600080fd5b61041861ffff600435811690602435811690604435811690606435166084351515610f50565b60405161ffff909116815260200160405180910390f35b341561043a57600080fd5b610466600160a060020a0360043581169060243581169060443581169060643581169060843516610ffc565b005b341561047357600080fd5b61046660ff600435811690602435166110ca565b341561049257600080fd5b610466611132565b34156104a557600080fd5b6104666111e0565b34156104b857600080fd5b6103126001604060020a0360043516611509565b34156104d757600080fd5b6104f760ff60043581169060243516600160a060020a036044351661173b565b60405160ff909116815260200160405180910390f35b341561051857600080fd5b61046660ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e435811690610104359061012435906101443516611795565b341561057257600080fd5b61058b60ff6004358116906024351660443515156118f1565b60405163ffffffff909116815260200160405180910390f35b34156105af57600080fd5b6104666004803563ffffffff169060248035908101910135611a04565b34156105d757600080fd5b6103d5611b6a565b34156105ea57600080fd5b61046663ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516611b70565b341561063057600080fd5b61046660043515156126da565b341561064857600080fd5b61058b612708565b61046660246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c43516612720565b341561069a57600080fd5b610418612b53565b34156106ad57600080fd5b6106be63ffffffff60043516612b75565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156106ed57600080fd5b610466600160a060020a0360043516602435612b9a565b341561070f57600080fd5b6103d56001604060020a0360043581169060243581169060443516612c4e565b341561073a57600080fd5b6104f76130cd565b341561074d57600080fd5b610466600160a060020a03600435166130e1565b341561076c57600080fd5b6104f761318b565b341561077f57600080fd5b6104f7613190565b341561079257600080fd5b6107a66001604060020a0360043516613195565b60405163ffffffff8416815260ff83166020820152604081018260c080838360005b838110156107e05780820151838201526020016107c8565b50505050905001935050505060405180910390f35b341561080057600080fd5b6104f7613382565b341561081357600080fd5b6104f761338b565b341561082657600080fd5b6104f761339a565b341561083957600080fd5b6102d76133b3565b341561084c57600080fd5b61046663ffffffff600435166133c2565b341561086857600080fd5b6103d5613983565b341561087b57600080fd5b6102d7613989565b341561088e57600080fd5b610418613998565b34156108a157600080fd5b61046660048035600160a060020a0316906024803563ffffffff16916044359182019101356064356001604060020a039081169060843581169060a43581169060c43581169060e43581169061010435166139aa565b341561090257600080fd5b6104f763ffffffff60043516613df5565b341561091e57600080fd5b61046663ffffffff60043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e43516613e58565b341561096457600080fd5b610466600160a060020a0360043516613f23565b341561098357600080fd5b6104f7613fcd565b341561099657600080fd5b6104f7613fdd565b34156109a957600080fd5b6109bd6001604060020a0360043516613fe6565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156109ea57600080fd5b61046663ffffffff600435166140e3565b3415610a0657600080fd5b6104f7614256565b3415610a1957600080fd5b6104f7614264565b3415610a2c57600080fd5b6103126001604060020a0360043516600160a060020a0360243516614269565b3415610a5757600080fd5b6103d5614387565b3415610a6a57600080fd5b6102d761438d565b3415610a7d57600080fd5b6104f761439c565b3415610a9057600080fd5b6103126143af565b3415610aa357600080fd5b610466600160a060020a03600435166143b8565b3415610ac257600080fd5b6102d761440f565b6000610ad4615139565b6000808080610ae287613195565b965090945060ff169250600090505b6006811015610b1c57848160068110610b0657fe5b602002015161ffff169190910190600101610af1565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610b8157506001604060020a038616155b80610b9357506001604060020a038516155b15610ba057506000610e52565b856001604060020a0316876001604060020a03161480610bd15750846001604060020a0316876001604060020a0316145b80610bed5750836001604060020a0316876001604060020a0316145b80610c095750826001604060020a0316876001604060020a0316145b80610c255750816001604060020a0316876001604060020a0316145b15610c3257506000610e52565b846001604060020a0316866001604060020a03161480610c635750836001604060020a0316866001604060020a0316145b80610c7f5750826001604060020a0316866001604060020a0316145b80610c9b5750816001604060020a0316866001604060020a0316145b15610ca857506000610e52565b836001604060020a0316856001604060020a03161480610cd95750826001604060020a0316856001604060020a0316145b80610cf55750816001604060020a0316856001604060020a0316145b15610d0257506000610e52565b6000846001604060020a0316118015610d475750826001604060020a0316846001604060020a03161480610d475750816001604060020a0316846001604060020a0316145b15610d5457506000610e52565b6000836001604060020a0316118015610d7e5750816001604060020a0316836001604060020a0316145b15610d8b57506000610e52565b610d958789614269565b1580610da85750610da68689614269565b155b80610dba5750610db88589614269565b155b15610dc757506000610e52565b6000846001604060020a0316118015610de75750610de58489614269565b155b15610df457506000610e52565b6000836001604060020a0316118015610e145750610e128389614269565b155b15610e2157506000610e52565b6000826001604060020a0316118015610e415750610e3f8289614269565b155b15610e4e57506000610e52565b5060015b979650505050505050565b6000806000610e6a615161565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610ec757600080fd5b6102c65a03f11515610ed857600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b600b5481565b60008060008315610f7657600a61ffff600d8a0216049750600a61ffff600d8902160496505b610f8b88600461ffff60038a02165b0461441e565b9150610fa087600461ffff6003890216610f85565b600c5490915060ff1661ffff8316108015610fc35750600c5460ff1661ffff8216105b15610fd557600c5460ff169250610ff1565b8061ffff168261ffff161115610fed57819250610ff1565b8092505b505095945050505050565b60005433600160a060020a03908116911614806110375750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561104257600080fd5b60038054600160a060020a0396871673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549587166101000274ffffffffffffffffffffffffffffffffffffffff00199096169590951790945560048054938616938516939093179092556005805491851691841691909117905560068054919093169116179055565b60005433600160a060020a03908116911614806111055750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561111057600080fd5b60ff9182166000908152600760205260409020805460ff191691909216179055565b600080548190819033600160a060020a03908116911614806111725750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561117d57600080fd5b506001915060649050805b606460ff8416116111db5760ff83166000908152600960205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611188565b505050565b60005433600160a060020a039081169116148061121b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561122657600080fd5b600760208190527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828805460ff19908116600e179091557fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d8054821660101790557f3be6fd20d5acfde5b873b48692cd31f4d3c7e8ee8a813af4696af8859e5ca6c68054821660081790557fb805995a7ec585a251200611a61d179cfd7fb105e1ab17dc415a7336783786f78054821660091790557fbcdda56b5d08466ec462cbbe0adfa57cb0a15fcc8940ef68f702f21b787bc9358054821660021790557f55c5b153ab560fcde54a63b18c7f53d75501706907cef8767fbded79ab9997c780548216600b1790557fb7c49cceb9f85950584035457a41ebbd8cf93b9b612733ad25aa9731ac43aad68054821660031790557f4b1bf46c9f1bd48ff8274d40bad76a6615cb6c59a637d451a3994194b2db86be8054821660051790557ff1f3e9c34634a546b3672c043f73844d83d55591bbe61b8e7e3a72bca1a812bf80548216600f1790557fb7511a2dbe1513c8574eaafb5266301ff1bbf641d4144b093d6d1b500334bf2f8054821660129081179091557f74b6357e277c778e8ad9a2761a935d45336ec91439b9e1b117eda2efdfe38fad805483169093179092557fc6af84bcd7a912c26772dce2b27a335c9acc50e9113bac42fd0b48deecc0f30c8054821660061790557fde7415c6a2f6d5051213edef7c4742786ca35b02a0e77e53b1b2e1ff1a228a6b8054821660111790557f6695255c0c22b4090576b0ff35e852eba3dd4afabff28976da48e1280061728d80548216600d1790557ffdb0fc5c292af6bc7c9afb28ca8e0549b4de965653a829548475c76a1d5c400c80548216600c1790557f7fecc9f0b925868a8c62ee842da0498074146a036d84a1041d9b5286786bbbf38054821660011790556000919091527ff2e2385bc2a5be32198cd1e425186910eb1a233b2b2a22be149cee4dc72d016280549091166004179055565b60008060008060008061151a615161565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561158457600080fd5b6102c65a03f1151561159557600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561165c57600080fd5b6102c65a03f1151561166d57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156116a45750600083115b1561172b5784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561170957600080fd5b6102c65a03f1151561171a57600080fd5b505050604051805190509650611730565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611768575060068160ff16105b1561177c5761010082049150600101611750565b8560ff168281151561178a57fe5b069695505050505050565b60005433600160a060020a03908116911614806117d05750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156117db57600080fd5b8a600a60006101000a81548160ff021916908360ff16021790555089600a60016101000a81548160ff021916908360ff16021790555088600a60026101000a81548160ff021916908360ff16021790555087600a60086101000a81548163ffffffff021916908363ffffffff16021790555086600a60036101000a81548160ff021916908360ff16021790555085600a60046101000a81548161ffff021916908361ffff16021790555084600a60066101000a81548160ff021916908360ff16021790555083600c60006101000a81548160ff021916908360ff16021790555082600d8190555081600b8190555080600a600c6101000a81548160ff021916908360ff1602179055505050505050505050505050565b600082818060ff600388018116908416111561191857600260ff6003890116049250611922565b600260ff87160492505b600191508260ff1660140a8360ff1660150a6103e80281151561194157fe5b048002905060ff60038801811690871611801561196957508260020260ff168760030160ff16115b8061199057508660030160ff168660ff161115801561199057508260020260ff168660ff16115b1561199f576014601582020490505b84156119b557620f4240601e82020491506119c1565b620f4240600a82020491505b60ff600587018116908816106119fa57600560ff878903160460ff1660020a63ffffffff168263ffffffff168115156119f657fe5b0491505b5095945050505050565b60025460009081908190819060ff1615611a1d57600080fd5b600554600160a060020a03161515611a3457600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515611a8a57600080fd5b6102c65a03f11515611a9b57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614611ad757600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b1515611b4d57600080fd5b6102c65a03f11515611b5e57600080fd5b50505050505050505050565b600f5481565b6000611b7a6151ad565b6000611b8461520c565b6000611b8e615241565b60025460ff1615611b9e57600080fd5b600354600160a060020a03161515611bb557600080fd5b600454600160a060020a03161515611bcc57600080fd5b600554600160a060020a03161515611be357600080fd5b600654600160a060020a03161515611bfa57600080fd5b611c09338d8d8d8d8d8d610b62565b1515611c1457600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515611c6a57600080fd5b6102c65a03f11515611c7b57600080fd5b505050604051805190602001805190602001805190506080880188606081015163ffffffff93909316909252600160a060020a039290921690525260808501511580611cd95750600160a060020a0333168551600160a060020a0316145b15611ce357600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b1515611d4157600080fd5b6102c65a03f11515611d5257600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a0152509081166060880190815291811660408801529182166020870152911684526010805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611def905184608001518560a00151612c4e565b6020820152611dff898989612c4e565b6080820152600060c082015282516001604060020a0390811682528c166060820152611e2a81614443565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9384169092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff16611ea160a08b0151518b60a0015160035b60200201518c60e001516118f1565b0263ffffffff16811515611eb157fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ef957600080fd5b6102c65a03f11515611f0a57600080fd5b50505083600160a060020a0316635643a7118260600151611f458860a00151606001518960a0015160005b60200201518a60e00151156118f1565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611f8c57600080fd5b6102c65a03f11515611f9d57600080fd5b5050508460e0015115611fb1576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611fda81614443565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9384166020909301929092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff1661205260a08b0151602001518b60a001516004611e92565b0263ffffffff1681151561206257fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b15156120aa57600080fd5b6102c65a03f115156120bb57600080fd5b50505083600160a060020a0316635643a71182606001516120ea8860a00151608001518960a001516001611f35565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b151561213157600080fd5b6102c65a03f1151561214257600080fd5b5050508460e0015115612156576001820191505b600260c082015260408301516001604060020a0390811682528a16606082015261217f81614443565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9384166040909301929092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff166121f760a08b0151604001518b60a001516005611e92565b0263ffffffff1681151561220757fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b151561224f57600080fd5b6102c65a03f1151561226057600080fd5b50505083600160a060020a0316635643a711826060015161228f8860a0015160a001518960a001516002611f35565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b15156122d657600080fd5b6102c65a03f115156122e757600080fd5b5050508460e00151156122fb576001820191505b61230d8d865160018560ff16116145e8565b60018260ff16111561232657600061010086015261232f565b60016101008601525b6001600960008760a001515160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116905260016009600060a08801516020015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff9190911660209091015260016009600060a08801516040015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116604090910152600160a060020a038616631f674b5a8e3360c0890151518960c00151602001518a60c00151604001518b6101000151600281111561241c57fe5b8c60600151518d60600151602001518e606001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b15156124c057600080fd5b6102c65a03f115156124d157600080fd5b50505060405180516001604060020a031660208701525060016009600060a08801516060015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116905260016009600060a08801516080015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff9190911660209091015260016009600060a088015160a0015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff90911660409190910152600160a060020a0386166330a8087060208701518e8e8e8e8e8e8d60600151518e60600151602001518f606001516040015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561265957600080fd5b6102c65a03f1151561266a57600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e87610100015160028111156126aa57fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146126f557600080fd5b6002805460ff1916911515919091179055565b600a5468010000000000000000900463ffffffff1681565b60008061272b615278565b60025460ff161561273b57600080fd5b600354600160a060020a0316151561275257600080fd5b600454600160a060020a0316151561276957600080fd5b600554600160a060020a0316151561278057600080fd5b61278f338a8a8a8a8a8a610b62565b151561279a57600080fd5b600454600160a060020a031692508263a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156127f657600080fd5b6102c65a03f1151561280757600080fd5b505050604051805190508061288a575082600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561286e57600080fd5b6102c65a03f1151561287f57600080fd5b505050604051805190505b80612903575082600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156128e757600080fd5b6102c65a03f115156128f857600080fd5b505050604051805190505b8061297c575082600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561296057600080fd5b6102c65a03f1151561297157600080fd5b505050604051805190505b806129f5575082600160a060020a031663a847a71c8660006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156129d957600080fd5b6102c65a03f115156129ea57600080fd5b505050604051805190505b80612a6e575082600160a060020a031663a847a71c8560006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515612a5257600080fd5b6102c65a03f11515612a6357600080fd5b505050604051805190505b15612a7857600080fd5b600b5434811515612a8557fe5b600a54919004925063ffffffff6801000000000000000090910481169083161015612aaf57600080fd5b600160a060020a03331681528a8a806020601f820181900481020160405190810160405281815292919060208401838380828437505050506020840192909252505063ffffffff821660408201526001604060020a03808a166060830152888116608083015287811660a083015286811660c083015285811660e08301528416610100820152612b3e81614870565b5050600e805434019055505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600860205260409020805460018201546002909201549092565b6000805433600160a060020a0390811691161480612bd65750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612be157600080fd5b30600160a060020a031631821115612bf857600080fd5b612c06600e54600f54614b3c565b905080821115612c1557600080fd5b600f805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f1935050505015156111db57600080fd5b612c566152cb565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612d205781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612cd557600080fd5b6102c65a03f11515612ce657600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612dd65781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612d8857600080fd5b6102c65a03f11515612d9957600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612e8c5781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612e3e57600080fd5b6102c65a03f11515612e4f57600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612f4f57600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612ee857fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612f2c57600080fd5b6102c65a03f11515612f3d57600080fd5b505050604051805160ff166040870152505b8460800151156130085780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612fa157fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612fe557600080fd5b6102c65a03f11515612ff657600080fd5b505050604051805160ff1660a0870152505b8460e00151156130c25780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a0281526004018084600481111561305a57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561309e57600080fd5b6102c65a03f115156130af57600080fd5b505050604051805160ff16610100870152505b505050509392505050565b600a54670100000000000000900460ff1681565b60005433600160a060020a039081169116146130fc57600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561318857600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b600381565b6000806131a0615139565b60006131aa615139565b600354600160a060020a0316915060008080806131c68a610e5d565b909450925063ffffffff841615156131ea5783600086819150985098509850613375565b600091506131f783613df5565b9050600091505b60068210156132cd5785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561324557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561328957600080fd5b6102c65a03f1151561329a57600080fd5b505050604051805160ff1690508583600681106132b357fe5b61ffff9092166020929092020152600191909101906131fe565b600091505b63ffffffff841660009081526008602052604090206001015482101561336b5763ffffffff84166000908152600860205260409020600101805461334491908490811061331b57fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614b50565b85836006811061335057fe5b6020020181815161ffff9101169052506001909101906132d2565b8381869850985098505b5050505050509193909250565b600a5460ff1681565b600a5462010000900460ff1681565b600a546c01000000000000000000000000900460ff1681565b600054600160a060020a031681565b6000806000806133d0615317565b6133d8615317565b6133e0615317565b60005433600160a060020a039081169116148061341b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561342657600080fd5b600354600160a060020a0316151561343d57600080fd5b6002546101009004600160a060020a0316151561345957600080fd5b60035460025463ffffffff8a16600081815260086020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a028152600401808360048111156134c557fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561350257600080fd5b6102c65a03f1151561351357600080fd5b5050506040518051905094508460405180591061352d5750595b908082528060200260200182016040525092505b600085111561361c5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561359157fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b15156135d557600080fd5b6102c65a03f115156135e657600080fd5b505050604051805190508360018703815181106135ff57fe5b60ff90921660209283029091019091015260001990940193613541565b8383805161362e929160200190615329565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561367257fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156136af57600080fd5b6102c65a03f115156136c057600080fd5b505050604051805190509450846040518059106136da5750595b908082528060200260200182016040525091505b60008511156137c95786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561373e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561378257600080fd5b6102c65a03f1151561379357600080fd5b505050604051805190508260018703815181106137ac57fe5b60ff909216602092830290910190910152600019909401936136ee565b600184018280516137de929160200190615329565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff16815260200182600181111561382d57fe5b60ff16815260200192505050602060405180830381600087803b151561385257600080fd5b6102c65a03f1151561386357600080fd5b5050506040518051905094508460405180591061387d5750595b908082528060200260200182016040525090505b60008511156139635785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018360018111156138ed57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b151561391957600080fd5b6102c65a03f1151561392a57600080fd5b5050506040518051905081600187038151811061394357fe5b63ffffffff90921660209283029091019091015260001990940193613891565b600284018180516139789291602001906153cf565b505050505050505050565b600d5481565b600654600160a060020a031681565b600a54640100000000900461ffff1681565b60006139b4615278565b60025460ff16156139c457600080fd5b600354600160a060020a031615156139db57600080fd5b600454600160a060020a031615156139f257600080fd5b600554600160a060020a03161515613a0957600080fd5b600654600160a060020a03161515613a2057600080fd5b60065433600160a060020a03908116911614613a3b57600080fd5b613a4a8c898989898989610b62565b1515613a5557600080fd5b600454600160a060020a031691508163a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613ab157600080fd5b6102c65a03f11515613ac257600080fd5b5050506040518051905080613b45575081600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613b2957600080fd5b6102c65a03f11515613b3a57600080fd5b505050604051805190505b80613bbe575081600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613ba257600080fd5b6102c65a03f11515613bb357600080fd5b505050604051805190505b80613c37575081600160a060020a031663a847a71c8660006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613c1b57600080fd5b6102c65a03f11515613c2c57600080fd5b505050604051805190505b80613cb0575081600160a060020a031663a847a71c8560006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613c9457600080fd5b6102c65a03f11515613ca557600080fd5b505050604051805190505b80613d29575081600160a060020a031663a847a71c8460006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613d0d57600080fd5b6102c65a03f11515613d1e57600080fd5b505050604051805190505b15613d3357600080fd5b600a5463ffffffff680100000000000000009091048116908c161015613d5857600080fd5b600160a060020a038c1681528989806020601f820181900481020160405190810160405281815292919060208401838380828437505050506020840192909252505063ffffffff8b1660408201526001604060020a038089166060830152878116608083015286811660a083015285811660c083015284811660e08301528316610100820152613de781614870565b505050505050505050505050565b600060016064825b8160ff168360ff161015613e4f57600260ff848401160460ff811660009081526009602052604090205490915063ffffffff9081169086161015613e4357809150613e4a565b8060010192505b613dfd565b50909392505050565b60005433600160a060020a0390811691161480613e935750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515613e9e57600080fd5b600354600160a060020a03161515613eb557600080fd5b6002546101009004600160a060020a03161515613ed157600080fd5b613eda886133c2565b613ee3876133c2565b613eec866133c2565b613ef5856133c2565b613efe846133c2565b613f07836133c2565b613f10826133c2565b613f19816133c2565b5050505050505050565b60005433600160a060020a03908116911614613f3e57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561318857600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b600a546301000000900460ff1681565b600c5460ff1681565b6000806000613ff3615161565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561405057600080fd5b6102c65a03f1151561406157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a0390921684529150516140d78360800151613df5565b94509450505050915091565b60025460009081908190819060ff16156140fc57600080fd5b600554600160a060020a0316151561411357600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561416957600080fd5b6102c65a03f1151561417a57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a03908116908316146141b657600080fd5b600083111561421c5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b151561420757600080fd5b6102c65a03f1151561421857600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600a54610100900460ff1681565b600681565b600080614274615161565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156142d057600080fd5b6102c65a03f115156142e157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a031614801561437c5750806020015163ffffffff16601514155b92505b505092915050565b600e5481565b600554600160a060020a031681565b600a546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a039081169116146143d357600080fd5b600160a060020a038116156131885760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115614439575080820361443d565b5060005b92915050565b600080600080614451615139565b614459615139565b600061446488614b7b565b600a54939a50909850909450925061449c906601000000000000900460ff1660020160c08a0151601054600160a060020a031661173b565b9450600090505b600a546601000000000000900460ff1661ffff82161080156144ca57506000835161ffff16115b80156144db57506000825161ffff16115b156145ce5760a082015161ffff1660a084015161ffff16111561459057600261ffff82160661ffff1660001415614552576145478260005b60200201516145426020860151606087015160408701518760045b60200201518b60ff168861ffff1614610f50565b61441e565b61ffff16825261458b565b6145788360005b602002015161454260208501516060860151604088015188600461452e565b8360005b61ffff90921660209290920201525b6145c6565b600261ffff82160661ffff16156145b4576145ac826000614513565b82600061457c565b6145bf836000614559565b61ffff1683525b6001016144a3565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a0316151561460a57600080fd5b600554600160a060020a031694508463bb583f198960006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561466057600080fd5b6102c65a03f1151561467157600080fd5b505050604051805190602001805190602001805160065493975091955090935050600160a060020a031690508515614727578163ffffffff168463ffffffff1610156147225780600160a060020a0316635fee0aac88600d5460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561470d57600080fd5b6102c65a03f1151561471e57600080fd5b5050505b613f19565b600a5463ffffffff83811691670100000000000000900460ff1690861681151561474d57fe5b0463ffffffff1611156147655781600202915061478c565b600a54670100000000000000900460ff1663ffffffff851681151561478657fe5b04820191505b63ffffffff600184018116908316116147fc5784600160a060020a0316634377c1cf8960405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156147e757600080fd5b6102c65a03f115156147f857600080fd5b5050505b80600160a060020a0316635fee0aac33600d5460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561485257600080fd5b6102c65a03f1151561486357600080fd5b5050505050505050505050565b600554600160a060020a0316600080808363f8a74501865160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156148cf57600080fd5b6102c65a03f115156148e057600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806149135750600082115b1561491d57600080fd5b600a54640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561497257600080fd5b6102c65a03f1151561498357600080fd5b5050506040518051905010151561499957600080fd5b600160a060020a03841663b5e5a50a86518760200151886060015189608001518a60a001518b60c001518c60e001518d61010001518e6040015160006040516020015260405163ffffffff8b811660e060020a028252600160a060020a038b16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e4840152908316610104830152610120602483019081529091610124018a818151815260200191508051906020019080838360005b83811015614a80578082015183820152602001614a68565b50505050905090810190601f168015614aad5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b1515614ad357600080fd5b6102c65a03f11515614ae457600080fd5b5050506040518051935085905051600160a060020a03167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a25050505050565b60008082841015614b4957fe5b5050900390565b6000828202831580614b6c5750828482811515614b6957fe5b04145b1515614b7457fe5b9392505050565b6000614b85615139565b6000614b8f615139565b6000808080614b9e8951613195565b9099509750935060009250614bb660608a0151613195565b90975095509250614bc78484614d82565b61ffff90811660a08c01521660408a0152614be68460208b0151614f48565b896040018181510161ffff16905250614c038360808b0151614f48565b8960a0018181510161ffff16905250614c208460208b015161503e565b9150614c30838a6080015161503e565b90506064896040015160208901510261ffff16811515614c4c57fe5b04602088018181510161ffff16905250606460408a015160608901510261ffff16811515614c7657fe5b04606088018181510161ffff16905250606460a08a015160208701510261ffff16811515614ca057fe5b04602086018181510161ffff16905250606460a08a015160608701510261ffff16811515614cca57fe5b04606086018181510161ffff1690525060648260408901510261ffff16811515614cf057fe5b04604088018181510161ffff1690525060648260808901510261ffff16811515614d1657fe5b04608088018181510161ffff1690525060648160408701510261ffff16811515614d3c57fe5b04604086018181510161ffff1690525060648160808701510261ffff16811515614d6257fe5b04608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff8816600090815260086020526040902054821015614f0d575060005b63ffffffff8716600090815260086020526040902054811015614f025763ffffffff87166000908152600860205260409020805482908110614de957fe5b60009182526020808320818304015463ffffffff8c16845260088252604084208054929093066101000a900460ff1692600792909186908110614e2857fe5b60009182526020808320818304015460ff928290066101000a9004821684528301939093526040909101902054161415614e6157600193505b63ffffffff88166000908152600860205260409020805483908110614e8257fe5b60009182526020808320818304015463ffffffff8b16845260088252604084208054929093066101000a900460ff1692600792909185908110614ec157fe5b60009182526020808320818304015460ff928290066101000a9004821684528301939093526040909101902054161415614efa57600192505b600101614dab565b600190910190614d8a565b8315614f2557600a5462010000900460ff1695909501945b8215614f3d57600a5462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260086020526040812060020154819081908180821115615027575060009250825b818410156150275763ffffffff87166000908152600860205260409020600201805485908110614fa157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff161480614ff65750856060015163ffffffff168163ffffffff16145b8061501057508560c0015163ffffffff168163ffffffff16145b1561501c576001830192505b600190930192614f75565b600a5460ff90811684021694505050505092915050565b600080805b63ffffffff851660009081526008602052604090205482101561437f5763ffffffff8516600090815260086020526040902080548390811061508157fe5b6000918252602091829020828204015460ff918390066101000a9004169150840151156150cf57836040015160ff168160ff1614156150cf57600a54610100900460ff16929092019161512e565b836080015115615100578360a0015160ff168160ff16141561510057600a54610100900460ff16929092019161512e565b8360e001511561512e5783610100015160ff168160ff16141561512e57600a54610100900460ff1692909201915b600190910190615043565b60c06040519081016040526006815b6000815260001990910190602001816151485790505090565b6101006040519081016040908152600080835260208301819052908201526060810161518b615317565b8152600060208201819052604082018190526060820181905260809091015290565b610240604051908101604090815260008083526020830181905290820152606081016151d761547a565b8152602001600081526020016151eb615139565b81526020016151f861547a565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161525d6152cb565b815260006020820181905260408201526060016151f86152cb565b6101206040519081016040526000815260208101615294615317565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f016020900481019282156153bf5791602002820160005b8382111561539057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615352565b80156153bd5782816101000a81549060ff0219169055600101602081600001049283019260010302615390565b505b506153cb929150615494565b5090565b8280548282559060005260206000209060070160089004810192821561546e5791602002820160005b8382111561543c57835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026153f8565b801561546c5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261543c565b505b506153cb9291506154b5565b606060405190810160405260008152600260208201615148565b6154b291905b808211156153cb57805460ff1916815560010161549a565b90565b6154b291905b808211156153cb57805463ffffffff191681556001016154bb5600a165627a7a7230582045aecc38859edc153874a882099c3f49f40fb7f4243f461cde6bd369b7ef217d0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d60000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe4703000000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b000000000000000000000000721da477f68c71788a262d58853fe6977d86535e
Deployed Bytecode
0x6060604052600436106102845763ffffffff60e060020a6000350416630672859b81146102895780630d668818146102c457806314d0f1ba146102f357806318758480146103265780631bab0908146103395780631cd98235146103825780631f296600146103c257806320046e91146103e757806320eb2a871461042f5780633171cec41461046857806333ced3211461048757806333d24dc41461049a57806335f097f3146104ad5780633a34f09a146104cc5780633a5cba7a1461050d5780633eb38fc51461056757806343b37b45146105a4578063455fd623146105cc57806347cf8971146105df57806348ef5aa8146106255780634a3d3c091461063d5780634aaff006146106505780634efb023e1461068f578063500e4297146106a2578063522f6815146106e257806354f0bde7146107045780636b2a26911461072f5780636c81fd6d1461074257806373d65c0014610761578063775e38f71461077457806384be816c1461078757806385bbb53a146107f5578063891fe103146108085780638a2cb24d1461081b5780638da5cb5b1461082e5780638fd8f783146108415780639216b7ad1461085d5780639c91dd5614610870578063a0c66b4314610883578063b04e766814610896578063b2cad9b7146108f7578063b76d26d414610913578063b85d627514610959578063cc06c35914610978578063cfa830791461098b578063d2169d2f1461099e578063d4c15161146109df578063d5425571146109fb578063d98e14bd14610a0e578063da5671ad14610a21578063dffd722f14610a4c578063eb83f01514610a5f578063ebfa3c1b14610a72578063ee4e441614610a85578063f285329214610a98578063ffa640d814610ab7575b600080fd5b341561029457600080fd5b6102a86001604060020a0360043516610aca565b6040516001604060020a03909116815260200160405180910390f35b34156102cf57600080fd5b6102d7610b2a565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b610312600160a060020a0360043516610b39565b604051901515815260200160405180910390f35b341561033157600080fd5b6102d7610b4e565b341561034457600080fd5b610312600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610b62565b341561038d57600080fd5b6103a16001604060020a0360043516610e5d565b60405163ffffffff9283168152911660208201526040908101905180910390f35b34156103cd57600080fd5b6103d5610f4a565b60405190815260200160405180910390f35b34156103f257600080fd5b61041861ffff600435811690602435811690604435811690606435166084351515610f50565b60405161ffff909116815260200160405180910390f35b341561043a57600080fd5b610466600160a060020a0360043581169060243581169060443581169060643581169060843516610ffc565b005b341561047357600080fd5b61046660ff600435811690602435166110ca565b341561049257600080fd5b610466611132565b34156104a557600080fd5b6104666111e0565b34156104b857600080fd5b6103126001604060020a0360043516611509565b34156104d757600080fd5b6104f760ff60043581169060243516600160a060020a036044351661173b565b60405160ff909116815260200160405180910390f35b341561051857600080fd5b61046660ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e435811690610104359061012435906101443516611795565b341561057257600080fd5b61058b60ff6004358116906024351660443515156118f1565b60405163ffffffff909116815260200160405180910390f35b34156105af57600080fd5b6104666004803563ffffffff169060248035908101910135611a04565b34156105d757600080fd5b6103d5611b6a565b34156105ea57600080fd5b61046663ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516611b70565b341561063057600080fd5b61046660043515156126da565b341561064857600080fd5b61058b612708565b61046660246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c43516612720565b341561069a57600080fd5b610418612b53565b34156106ad57600080fd5b6106be63ffffffff60043516612b75565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156106ed57600080fd5b610466600160a060020a0360043516602435612b9a565b341561070f57600080fd5b6103d56001604060020a0360043581169060243581169060443516612c4e565b341561073a57600080fd5b6104f76130cd565b341561074d57600080fd5b610466600160a060020a03600435166130e1565b341561076c57600080fd5b6104f761318b565b341561077f57600080fd5b6104f7613190565b341561079257600080fd5b6107a66001604060020a0360043516613195565b60405163ffffffff8416815260ff83166020820152604081018260c080838360005b838110156107e05780820151838201526020016107c8565b50505050905001935050505060405180910390f35b341561080057600080fd5b6104f7613382565b341561081357600080fd5b6104f761338b565b341561082657600080fd5b6104f761339a565b341561083957600080fd5b6102d76133b3565b341561084c57600080fd5b61046663ffffffff600435166133c2565b341561086857600080fd5b6103d5613983565b341561087b57600080fd5b6102d7613989565b341561088e57600080fd5b610418613998565b34156108a157600080fd5b61046660048035600160a060020a0316906024803563ffffffff16916044359182019101356064356001604060020a039081169060843581169060a43581169060c43581169060e43581169061010435166139aa565b341561090257600080fd5b6104f763ffffffff60043516613df5565b341561091e57600080fd5b61046663ffffffff60043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e43516613e58565b341561096457600080fd5b610466600160a060020a0360043516613f23565b341561098357600080fd5b6104f7613fcd565b341561099657600080fd5b6104f7613fdd565b34156109a957600080fd5b6109bd6001604060020a0360043516613fe6565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156109ea57600080fd5b61046663ffffffff600435166140e3565b3415610a0657600080fd5b6104f7614256565b3415610a1957600080fd5b6104f7614264565b3415610a2c57600080fd5b6103126001604060020a0360043516600160a060020a0360243516614269565b3415610a5757600080fd5b6103d5614387565b3415610a6a57600080fd5b6102d761438d565b3415610a7d57600080fd5b6104f761439c565b3415610a9057600080fd5b6103126143af565b3415610aa357600080fd5b610466600160a060020a03600435166143b8565b3415610ac257600080fd5b6102d761440f565b6000610ad4615139565b6000808080610ae287613195565b965090945060ff169250600090505b6006811015610b1c57848160068110610b0657fe5b602002015161ffff169190910190600101610af1565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610b8157506001604060020a038616155b80610b9357506001604060020a038516155b15610ba057506000610e52565b856001604060020a0316876001604060020a03161480610bd15750846001604060020a0316876001604060020a0316145b80610bed5750836001604060020a0316876001604060020a0316145b80610c095750826001604060020a0316876001604060020a0316145b80610c255750816001604060020a0316876001604060020a0316145b15610c3257506000610e52565b846001604060020a0316866001604060020a03161480610c635750836001604060020a0316866001604060020a0316145b80610c7f5750826001604060020a0316866001604060020a0316145b80610c9b5750816001604060020a0316866001604060020a0316145b15610ca857506000610e52565b836001604060020a0316856001604060020a03161480610cd95750826001604060020a0316856001604060020a0316145b80610cf55750816001604060020a0316856001604060020a0316145b15610d0257506000610e52565b6000846001604060020a0316118015610d475750826001604060020a0316846001604060020a03161480610d475750816001604060020a0316846001604060020a0316145b15610d5457506000610e52565b6000836001604060020a0316118015610d7e5750816001604060020a0316836001604060020a0316145b15610d8b57506000610e52565b610d958789614269565b1580610da85750610da68689614269565b155b80610dba5750610db88589614269565b155b15610dc757506000610e52565b6000846001604060020a0316118015610de75750610de58489614269565b155b15610df457506000610e52565b6000836001604060020a0316118015610e145750610e128389614269565b155b15610e2157506000610e52565b6000826001604060020a0316118015610e415750610e3f8289614269565b155b15610e4e57506000610e52565b5060015b979650505050505050565b6000806000610e6a615161565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610ec757600080fd5b6102c65a03f11515610ed857600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b600b5481565b60008060008315610f7657600a61ffff600d8a0216049750600a61ffff600d8902160496505b610f8b88600461ffff60038a02165b0461441e565b9150610fa087600461ffff6003890216610f85565b600c5490915060ff1661ffff8316108015610fc35750600c5460ff1661ffff8216105b15610fd557600c5460ff169250610ff1565b8061ffff168261ffff161115610fed57819250610ff1565b8092505b505095945050505050565b60005433600160a060020a03908116911614806110375750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561104257600080fd5b60038054600160a060020a0396871673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549587166101000274ffffffffffffffffffffffffffffffffffffffff00199096169590951790945560048054938616938516939093179092556005805491851691841691909117905560068054919093169116179055565b60005433600160a060020a03908116911614806111055750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561111057600080fd5b60ff9182166000908152600760205260409020805460ff191691909216179055565b600080548190819033600160a060020a03908116911614806111725750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561117d57600080fd5b506001915060649050805b606460ff8416116111db5760ff83166000908152600960205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611188565b505050565b60005433600160a060020a039081169116148061121b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561122657600080fd5b600760208190527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828805460ff19908116600e179091557fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d8054821660101790557f3be6fd20d5acfde5b873b48692cd31f4d3c7e8ee8a813af4696af8859e5ca6c68054821660081790557fb805995a7ec585a251200611a61d179cfd7fb105e1ab17dc415a7336783786f78054821660091790557fbcdda56b5d08466ec462cbbe0adfa57cb0a15fcc8940ef68f702f21b787bc9358054821660021790557f55c5b153ab560fcde54a63b18c7f53d75501706907cef8767fbded79ab9997c780548216600b1790557fb7c49cceb9f85950584035457a41ebbd8cf93b9b612733ad25aa9731ac43aad68054821660031790557f4b1bf46c9f1bd48ff8274d40bad76a6615cb6c59a637d451a3994194b2db86be8054821660051790557ff1f3e9c34634a546b3672c043f73844d83d55591bbe61b8e7e3a72bca1a812bf80548216600f1790557fb7511a2dbe1513c8574eaafb5266301ff1bbf641d4144b093d6d1b500334bf2f8054821660129081179091557f74b6357e277c778e8ad9a2761a935d45336ec91439b9e1b117eda2efdfe38fad805483169093179092557fc6af84bcd7a912c26772dce2b27a335c9acc50e9113bac42fd0b48deecc0f30c8054821660061790557fde7415c6a2f6d5051213edef7c4742786ca35b02a0e77e53b1b2e1ff1a228a6b8054821660111790557f6695255c0c22b4090576b0ff35e852eba3dd4afabff28976da48e1280061728d80548216600d1790557ffdb0fc5c292af6bc7c9afb28ca8e0549b4de965653a829548475c76a1d5c400c80548216600c1790557f7fecc9f0b925868a8c62ee842da0498074146a036d84a1041d9b5286786bbbf38054821660011790556000919091527ff2e2385bc2a5be32198cd1e425186910eb1a233b2b2a22be149cee4dc72d016280549091166004179055565b60008060008060008061151a615161565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561158457600080fd5b6102c65a03f1151561159557600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561165c57600080fd5b6102c65a03f1151561166d57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156116a45750600083115b1561172b5784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561170957600080fd5b6102c65a03f1151561171a57600080fd5b505050604051805190509650611730565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611768575060068160ff16105b1561177c5761010082049150600101611750565b8560ff168281151561178a57fe5b069695505050505050565b60005433600160a060020a03908116911614806117d05750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156117db57600080fd5b8a600a60006101000a81548160ff021916908360ff16021790555089600a60016101000a81548160ff021916908360ff16021790555088600a60026101000a81548160ff021916908360ff16021790555087600a60086101000a81548163ffffffff021916908363ffffffff16021790555086600a60036101000a81548160ff021916908360ff16021790555085600a60046101000a81548161ffff021916908361ffff16021790555084600a60066101000a81548160ff021916908360ff16021790555083600c60006101000a81548160ff021916908360ff16021790555082600d8190555081600b8190555080600a600c6101000a81548160ff021916908360ff1602179055505050505050505050505050565b600082818060ff600388018116908416111561191857600260ff6003890116049250611922565b600260ff87160492505b600191508260ff1660140a8360ff1660150a6103e80281151561194157fe5b048002905060ff60038801811690871611801561196957508260020260ff168760030160ff16115b8061199057508660030160ff168660ff161115801561199057508260020260ff168660ff16115b1561199f576014601582020490505b84156119b557620f4240601e82020491506119c1565b620f4240600a82020491505b60ff600587018116908816106119fa57600560ff878903160460ff1660020a63ffffffff168263ffffffff168115156119f657fe5b0491505b5095945050505050565b60025460009081908190819060ff1615611a1d57600080fd5b600554600160a060020a03161515611a3457600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515611a8a57600080fd5b6102c65a03f11515611a9b57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614611ad757600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b1515611b4d57600080fd5b6102c65a03f11515611b5e57600080fd5b50505050505050505050565b600f5481565b6000611b7a6151ad565b6000611b8461520c565b6000611b8e615241565b60025460ff1615611b9e57600080fd5b600354600160a060020a03161515611bb557600080fd5b600454600160a060020a03161515611bcc57600080fd5b600554600160a060020a03161515611be357600080fd5b600654600160a060020a03161515611bfa57600080fd5b611c09338d8d8d8d8d8d610b62565b1515611c1457600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515611c6a57600080fd5b6102c65a03f11515611c7b57600080fd5b505050604051805190602001805190602001805190506080880188606081015163ffffffff93909316909252600160a060020a039290921690525260808501511580611cd95750600160a060020a0333168551600160a060020a0316145b15611ce357600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b1515611d4157600080fd5b6102c65a03f11515611d5257600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a0152509081166060880190815291811660408801529182166020870152911684526010805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611def905184608001518560a00151612c4e565b6020820152611dff898989612c4e565b6080820152600060c082015282516001604060020a0390811682528c166060820152611e2a81614443565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9384169092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff16611ea160a08b0151518b60a0015160035b60200201518c60e001516118f1565b0263ffffffff16811515611eb157fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ef957600080fd5b6102c65a03f11515611f0a57600080fd5b50505083600160a060020a0316635643a7118260600151611f458860a00151606001518960a0015160005b60200201518a60e00151156118f1565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611f8c57600080fd5b6102c65a03f11515611f9d57600080fd5b5050508460e0015115611fb1576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611fda81614443565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9384166020909301929092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff1661205260a08b0151602001518b60a001516004611e92565b0263ffffffff1681151561206257fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b15156120aa57600080fd5b6102c65a03f115156120bb57600080fd5b50505083600160a060020a0316635643a71182606001516120ea8860a00151608001518960a001516001611f35565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b151561213157600080fd5b6102c65a03f1151561214257600080fd5b5050508460e0015115612156576001820191505b600260c082015260408301516001604060020a0390811682528a16606082015261217f81614443565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9384166040909301929092529282169052919091169052600160a060020a038416635643a7118251600a546064906c01000000000000000000000000900460ff166121f760a08b0151604001518b60a001516005611e92565b0263ffffffff1681151561220757fe5b0460405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b151561224f57600080fd5b6102c65a03f1151561226057600080fd5b50505083600160a060020a0316635643a711826060015161228f8860a0015160a001518960a001516002611f35565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b15156122d657600080fd5b6102c65a03f115156122e757600080fd5b5050508460e00151156122fb576001820191505b61230d8d865160018560ff16116145e8565b60018260ff16111561232657600061010086015261232f565b60016101008601525b6001600960008760a001515160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116905260016009600060a08801516020015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff9190911660209091015260016009600060a08801516040015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116604090910152600160a060020a038616631f674b5a8e3360c0890151518960c00151602001518a60c00151604001518b6101000151600281111561241c57fe5b8c60600151518d60600151602001518e606001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b15156124c057600080fd5b6102c65a03f115156124d157600080fd5b50505060405180516001604060020a031660208701525060016009600060a08801516060015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff91909116905260016009600060a08801516080015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff9190911660209091015260016009600060a088015160a0015160ff16815260208101919091526040016000205463ffffffff1603606086015163ffffffff90911660409190910152600160a060020a0386166330a8087060208701518e8e8e8e8e8e8d60600151518e60600151602001518f606001516040015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561265957600080fd5b6102c65a03f1151561266a57600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e87610100015160028111156126aa57fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146126f557600080fd5b6002805460ff1916911515919091179055565b600a5468010000000000000000900463ffffffff1681565b60008061272b615278565b60025460ff161561273b57600080fd5b600354600160a060020a0316151561275257600080fd5b600454600160a060020a0316151561276957600080fd5b600554600160a060020a0316151561278057600080fd5b61278f338a8a8a8a8a8a610b62565b151561279a57600080fd5b600454600160a060020a031692508263a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156127f657600080fd5b6102c65a03f1151561280757600080fd5b505050604051805190508061288a575082600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561286e57600080fd5b6102c65a03f1151561287f57600080fd5b505050604051805190505b80612903575082600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156128e757600080fd5b6102c65a03f115156128f857600080fd5b505050604051805190505b8061297c575082600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561296057600080fd5b6102c65a03f1151561297157600080fd5b505050604051805190505b806129f5575082600160a060020a031663a847a71c8660006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156129d957600080fd5b6102c65a03f115156129ea57600080fd5b505050604051805190505b80612a6e575082600160a060020a031663a847a71c8560006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515612a5257600080fd5b6102c65a03f11515612a6357600080fd5b505050604051805190505b15612a7857600080fd5b600b5434811515612a8557fe5b600a54919004925063ffffffff6801000000000000000090910481169083161015612aaf57600080fd5b600160a060020a03331681528a8a806020601f820181900481020160405190810160405281815292919060208401838380828437505050506020840192909252505063ffffffff821660408201526001604060020a03808a166060830152888116608083015287811660a083015286811660c083015285811660e08301528416610100820152612b3e81614870565b5050600e805434019055505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600860205260409020805460018201546002909201549092565b6000805433600160a060020a0390811691161480612bd65750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612be157600080fd5b30600160a060020a031631821115612bf857600080fd5b612c06600e54600f54614b3c565b905080821115612c1557600080fd5b600f805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f1935050505015156111db57600080fd5b612c566152cb565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612d205781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612cd557600080fd5b6102c65a03f11515612ce657600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612dd65781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612d8857600080fd5b6102c65a03f11515612d9957600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612e8c5781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612e3e57600080fd5b6102c65a03f11515612e4f57600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612f4f57600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612ee857fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612f2c57600080fd5b6102c65a03f11515612f3d57600080fd5b505050604051805160ff166040870152505b8460800151156130085780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612fa157fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612fe557600080fd5b6102c65a03f11515612ff657600080fd5b505050604051805160ff1660a0870152505b8460e00151156130c25780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a0281526004018084600481111561305a57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561309e57600080fd5b6102c65a03f115156130af57600080fd5b505050604051805160ff16610100870152505b505050509392505050565b600a54670100000000000000900460ff1681565b60005433600160a060020a039081169116146130fc57600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561318857600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b600381565b6000806131a0615139565b60006131aa615139565b600354600160a060020a0316915060008080806131c68a610e5d565b909450925063ffffffff841615156131ea5783600086819150985098509850613375565b600091506131f783613df5565b9050600091505b60068210156132cd5785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561324557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561328957600080fd5b6102c65a03f1151561329a57600080fd5b505050604051805160ff1690508583600681106132b357fe5b61ffff9092166020929092020152600191909101906131fe565b600091505b63ffffffff841660009081526008602052604090206001015482101561336b5763ffffffff84166000908152600860205260409020600101805461334491908490811061331b57fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614b50565b85836006811061335057fe5b6020020181815161ffff9101169052506001909101906132d2565b8381869850985098505b5050505050509193909250565b600a5460ff1681565b600a5462010000900460ff1681565b600a546c01000000000000000000000000900460ff1681565b600054600160a060020a031681565b6000806000806133d0615317565b6133d8615317565b6133e0615317565b60005433600160a060020a039081169116148061341b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561342657600080fd5b600354600160a060020a0316151561343d57600080fd5b6002546101009004600160a060020a0316151561345957600080fd5b60035460025463ffffffff8a16600081815260086020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a028152600401808360048111156134c557fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561350257600080fd5b6102c65a03f1151561351357600080fd5b5050506040518051905094508460405180591061352d5750595b908082528060200260200182016040525092505b600085111561361c5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561359157fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b15156135d557600080fd5b6102c65a03f115156135e657600080fd5b505050604051805190508360018703815181106135ff57fe5b60ff90921660209283029091019091015260001990940193613541565b8383805161362e929160200190615329565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561367257fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156136af57600080fd5b6102c65a03f115156136c057600080fd5b505050604051805190509450846040518059106136da5750595b908082528060200260200182016040525091505b60008511156137c95786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561373e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561378257600080fd5b6102c65a03f1151561379357600080fd5b505050604051805190508260018703815181106137ac57fe5b60ff909216602092830290910190910152600019909401936136ee565b600184018280516137de929160200190615329565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff16815260200182600181111561382d57fe5b60ff16815260200192505050602060405180830381600087803b151561385257600080fd5b6102c65a03f1151561386357600080fd5b5050506040518051905094508460405180591061387d5750595b908082528060200260200182016040525090505b60008511156139635785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018360018111156138ed57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b151561391957600080fd5b6102c65a03f1151561392a57600080fd5b5050506040518051905081600187038151811061394357fe5b63ffffffff90921660209283029091019091015260001990940193613891565b600284018180516139789291602001906153cf565b505050505050505050565b600d5481565b600654600160a060020a031681565b600a54640100000000900461ffff1681565b60006139b4615278565b60025460ff16156139c457600080fd5b600354600160a060020a031615156139db57600080fd5b600454600160a060020a031615156139f257600080fd5b600554600160a060020a03161515613a0957600080fd5b600654600160a060020a03161515613a2057600080fd5b60065433600160a060020a03908116911614613a3b57600080fd5b613a4a8c898989898989610b62565b1515613a5557600080fd5b600454600160a060020a031691508163a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613ab157600080fd5b6102c65a03f11515613ac257600080fd5b5050506040518051905080613b45575081600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613b2957600080fd5b6102c65a03f11515613b3a57600080fd5b505050604051805190505b80613bbe575081600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613ba257600080fd5b6102c65a03f11515613bb357600080fd5b505050604051805190505b80613c37575081600160a060020a031663a847a71c8660006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613c1b57600080fd5b6102c65a03f11515613c2c57600080fd5b505050604051805190505b80613cb0575081600160a060020a031663a847a71c8560006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613c9457600080fd5b6102c65a03f11515613ca557600080fd5b505050604051805190505b80613d29575081600160a060020a031663a847a71c8460006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515613d0d57600080fd5b6102c65a03f11515613d1e57600080fd5b505050604051805190505b15613d3357600080fd5b600a5463ffffffff680100000000000000009091048116908c161015613d5857600080fd5b600160a060020a038c1681528989806020601f820181900481020160405190810160405281815292919060208401838380828437505050506020840192909252505063ffffffff8b1660408201526001604060020a038089166060830152878116608083015286811660a083015285811660c083015284811660e08301528316610100820152613de781614870565b505050505050505050505050565b600060016064825b8160ff168360ff161015613e4f57600260ff848401160460ff811660009081526009602052604090205490915063ffffffff9081169086161015613e4357809150613e4a565b8060010192505b613dfd565b50909392505050565b60005433600160a060020a0390811691161480613e935750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515613e9e57600080fd5b600354600160a060020a03161515613eb557600080fd5b6002546101009004600160a060020a03161515613ed157600080fd5b613eda886133c2565b613ee3876133c2565b613eec866133c2565b613ef5856133c2565b613efe846133c2565b613f07836133c2565b613f10826133c2565b613f19816133c2565b5050505050505050565b60005433600160a060020a03908116911614613f3e57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561318857600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b600a546301000000900460ff1681565b600c5460ff1681565b6000806000613ff3615161565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561405057600080fd5b6102c65a03f1151561406157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a0390921684529150516140d78360800151613df5565b94509450505050915091565b60025460009081908190819060ff16156140fc57600080fd5b600554600160a060020a0316151561411357600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561416957600080fd5b6102c65a03f1151561417a57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a03908116908316146141b657600080fd5b600083111561421c5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b151561420757600080fd5b6102c65a03f1151561421857600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600a54610100900460ff1681565b600681565b600080614274615161565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156142d057600080fd5b6102c65a03f115156142e157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a031614801561437c5750806020015163ffffffff16601514155b92505b505092915050565b600e5481565b600554600160a060020a031681565b600a546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a039081169116146143d357600080fd5b600160a060020a038116156131885760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115614439575080820361443d565b5060005b92915050565b600080600080614451615139565b614459615139565b600061446488614b7b565b600a54939a50909850909450925061449c906601000000000000900460ff1660020160c08a0151601054600160a060020a031661173b565b9450600090505b600a546601000000000000900460ff1661ffff82161080156144ca57506000835161ffff16115b80156144db57506000825161ffff16115b156145ce5760a082015161ffff1660a084015161ffff16111561459057600261ffff82160661ffff1660001415614552576145478260005b60200201516145426020860151606087015160408701518760045b60200201518b60ff168861ffff1614610f50565b61441e565b61ffff16825261458b565b6145788360005b602002015161454260208501516060860151604088015188600461452e565b8360005b61ffff90921660209290920201525b6145c6565b600261ffff82160661ffff16156145b4576145ac826000614513565b82600061457c565b6145bf836000614559565b61ffff1683525b6001016144a3565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a0316151561460a57600080fd5b600554600160a060020a031694508463bb583f198960006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561466057600080fd5b6102c65a03f1151561467157600080fd5b505050604051805190602001805190602001805160065493975091955090935050600160a060020a031690508515614727578163ffffffff168463ffffffff1610156147225780600160a060020a0316635fee0aac88600d5460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561470d57600080fd5b6102c65a03f1151561471e57600080fd5b5050505b613f19565b600a5463ffffffff83811691670100000000000000900460ff1690861681151561474d57fe5b0463ffffffff1611156147655781600202915061478c565b600a54670100000000000000900460ff1663ffffffff851681151561478657fe5b04820191505b63ffffffff600184018116908316116147fc5784600160a060020a0316634377c1cf8960405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156147e757600080fd5b6102c65a03f115156147f857600080fd5b5050505b80600160a060020a0316635fee0aac33600d5460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561485257600080fd5b6102c65a03f1151561486357600080fd5b5050505050505050505050565b600554600160a060020a0316600080808363f8a74501865160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156148cf57600080fd5b6102c65a03f115156148e057600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806149135750600082115b1561491d57600080fd5b600a54640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561497257600080fd5b6102c65a03f1151561498357600080fd5b5050506040518051905010151561499957600080fd5b600160a060020a03841663b5e5a50a86518760200151886060015189608001518a60a001518b60c001518c60e001518d61010001518e6040015160006040516020015260405163ffffffff8b811660e060020a028252600160a060020a038b16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e4840152908316610104830152610120602483019081529091610124018a818151815260200191508051906020019080838360005b83811015614a80578082015183820152602001614a68565b50505050905090810190601f168015614aad5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b1515614ad357600080fd5b6102c65a03f11515614ae457600080fd5b5050506040518051935085905051600160a060020a03167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a25050505050565b60008082841015614b4957fe5b5050900390565b6000828202831580614b6c5750828482811515614b6957fe5b04145b1515614b7457fe5b9392505050565b6000614b85615139565b6000614b8f615139565b6000808080614b9e8951613195565b9099509750935060009250614bb660608a0151613195565b90975095509250614bc78484614d82565b61ffff90811660a08c01521660408a0152614be68460208b0151614f48565b896040018181510161ffff16905250614c038360808b0151614f48565b8960a0018181510161ffff16905250614c208460208b015161503e565b9150614c30838a6080015161503e565b90506064896040015160208901510261ffff16811515614c4c57fe5b04602088018181510161ffff16905250606460408a015160608901510261ffff16811515614c7657fe5b04606088018181510161ffff16905250606460a08a015160208701510261ffff16811515614ca057fe5b04602086018181510161ffff16905250606460a08a015160608701510261ffff16811515614cca57fe5b04606086018181510161ffff1690525060648260408901510261ffff16811515614cf057fe5b04604088018181510161ffff1690525060648260808901510261ffff16811515614d1657fe5b04608088018181510161ffff1690525060648160408701510261ffff16811515614d3c57fe5b04604086018181510161ffff1690525060648160808701510261ffff16811515614d6257fe5b04608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff8816600090815260086020526040902054821015614f0d575060005b63ffffffff8716600090815260086020526040902054811015614f025763ffffffff87166000908152600860205260409020805482908110614de957fe5b60009182526020808320818304015463ffffffff8c16845260088252604084208054929093066101000a900460ff1692600792909186908110614e2857fe5b60009182526020808320818304015460ff928290066101000a9004821684528301939093526040909101902054161415614e6157600193505b63ffffffff88166000908152600860205260409020805483908110614e8257fe5b60009182526020808320818304015463ffffffff8b16845260088252604084208054929093066101000a900460ff1692600792909185908110614ec157fe5b60009182526020808320818304015460ff928290066101000a9004821684528301939093526040909101902054161415614efa57600192505b600101614dab565b600190910190614d8a565b8315614f2557600a5462010000900460ff1695909501945b8215614f3d57600a5462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260086020526040812060020154819081908180821115615027575060009250825b818410156150275763ffffffff87166000908152600860205260409020600201805485908110614fa157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff161480614ff65750856060015163ffffffff168163ffffffff16145b8061501057508560c0015163ffffffff168163ffffffff16145b1561501c576001830192505b600190930192614f75565b600a5460ff90811684021694505050505092915050565b600080805b63ffffffff851660009081526008602052604090205482101561437f5763ffffffff8516600090815260086020526040902080548390811061508157fe5b6000918252602091829020828204015460ff918390066101000a9004169150840151156150cf57836040015160ff168160ff1614156150cf57600a54610100900460ff16929092019161512e565b836080015115615100578360a0015160ff168160ff16141561510057600a54610100900460ff16929092019161512e565b8360e001511561512e5783610100015160ff168160ff16141561512e57600a54610100900460ff1692909201915b600190910190615043565b60c06040519081016040526006815b6000815260001990910190602001816151485790505090565b6101006040519081016040908152600080835260208301819052908201526060810161518b615317565b8152600060208201819052604082018190526060820181905260809091015290565b610240604051908101604090815260008083526020830181905290820152606081016151d761547a565b8152602001600081526020016151eb615139565b81526020016151f861547a565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161525d6152cb565b815260006020820181905260408201526060016151f86152cb565b6101206040519081016040526000815260208101615294615317565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f016020900481019282156153bf5791602002820160005b8382111561539057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615352565b80156153bd5782816101000a81549060ff0219169055600101602081600001049283019260010302615390565b505b506153cb929150615494565b5090565b8280548282559060005260206000209060070160089004810192821561546e5791602002820160005b8382111561543c57835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026153f8565b801561546c5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261543c565b505b506153cb9291506154b5565b606060405190810160405260008152600260208201615148565b6154b291905b808211156153cb57805460ff1916815560010161549a565b90565b6154b291905b808211156153cb57805463ffffffff191681556001016154bb5600a165627a7a7230582045aecc38859edc153874a882099c3f49f40fb7f4243f461cde6bd369b7ef217d0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d60000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe4703000000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b000000000000000000000000721da477f68c71788a262d58853fe6977d86535e
-----Decoded View---------------
Arg [0] : _dataContract (address): 0xABC1c404424BDF24C19A5cC5EF8F47781D18Eb3E
Arg [1] : _worldContract (address): 0x1fC7bD85293f3982f40D52698DF8D26be89360d6
Arg [2] : _tradeContract (address): 0x4bA72F0F8DAd13709EE28a992869E79d0fE47030
Arg [3] : _castleContract (address): 0x75AA01dC00F6aEeFe14bd58A5B6cbb091C6dC57B
Arg [4] : _paymentContract (address): 0x721dA477f68c71788A262d58853fE6977D86535e
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030
Arg [3] : 00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b
Arg [4] : 000000000000000000000000721da477f68c71788a262d58853fe6977d86535e
Swarm Source
bzzr://45aecc38859edc153874a882099c3f49f40fb7f4243f461cde6bd369b7ef217d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.