ETH Price: $2,361.81 (+0.47%)

Contract

0xa8745e0bF1953F9A8eE785b22dC2B383DbF795e6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Register112054442020-11-06 18:35:371404 days ago1604687737IN
0xa8745e0b...3DbF795e6
0 ETH0.001222850
Update Ranking104213242020-07-08 21:33:111524 days ago1594243991IN
0xa8745e0b...3DbF795e6
0 ETH0.0015501723
Update Ranking104210522020-07-08 20:36:011524 days ago1594240561IN
0xa8745e0b...3DbF795e6
0 ETH0.0021095831.3
Update Ranking104210512020-07-08 20:35:461524 days ago1594240546IN
0xa8745e0b...3DbF795e6
0 ETH0.0021095831.3
Update Ranking104210352020-07-08 20:32:331524 days ago1594240353IN
0xa8745e0b...3DbF795e6
0 ETH0.0024263636
Update Ranking104210352020-07-08 20:32:331524 days ago1594240353IN
0xa8745e0b...3DbF795e6
0 ETH0.0024263636
Update Ranking98281882020-04-08 0:07:341616 days ago1586304454IN
0xa8745e0b...3DbF795e6
0 ETH0.000099262
Update Ranking98281882020-04-08 0:07:341616 days ago1586304454IN
0xa8745e0b...3DbF795e6
0 ETH0.000099262
Update Ranking94407462020-02-08 7:30:391676 days ago1581147039IN
0xa8745e0b...3DbF795e6
0 ETH0.000075311
Update Ranking92506762020-01-10 3:48:471705 days ago1578628127IN
0xa8745e0b...3DbF795e6
0 ETH0.000427049
Update Ranking92440642020-01-09 3:30:301706 days ago1578540630IN
0xa8745e0b...3DbF795e6
0 ETH0.000585076
Update Ranking92440622020-01-09 3:30:051706 days ago1578540605IN
0xa8745e0b...3DbF795e6
0 ETH0.000585076
Update Ranking91967292020-01-01 16:52:291714 days ago1577897549IN
0xa8745e0b...3DbF795e6
0 ETH0.000094762
Update Ranking91959142020-01-01 13:01:051714 days ago1577883665IN
0xa8745e0b...3DbF795e6
0 ETH0.000052111.1
Update Ranking91861282019-12-30 13:50:501716 days ago1577713850IN
0xa8745e0b...3DbF795e6
0 ETH0.00005651.1
Update Ranking91307382019-12-19 13:07:051727 days ago1576760825IN
0xa8745e0b...3DbF795e6
0 ETH0.000143083.02
Update Ranking91270632019-12-18 19:33:471727 days ago1576697627IN
0xa8745e0b...3DbF795e6
0 ETH0.00005651.1
Update Ranking91235332019-12-18 2:42:501728 days ago1576636970IN
0xa8745e0b...3DbF795e6
0 ETH0.000158872
Update Ranking91233442019-12-18 1:44:521728 days ago1576633492IN
0xa8745e0b...3DbF795e6
0 ETH0.00023695
Update Ranking91199372019-12-17 9:24:481729 days ago1576574688IN
0xa8745e0b...3DbF795e6
0 ETH0.00031675
Update Ranking90999142019-12-13 11:56:431733 days ago1576238203IN
0xa8745e0b...3DbF795e6
0 ETH0.000419365
Update Ranking90948102019-12-12 14:24:511734 days ago1576160691IN
0xa8745e0b...3DbF795e6
0 ETH0.000256855
Update Ranking90948092019-12-12 14:24:361734 days ago1576160676IN
0xa8745e0b...3DbF795e6
0 ETH0.000256855
Update Ranking90948062019-12-12 14:23:161734 days ago1576160596IN
0xa8745e0b...3DbF795e6
0 ETH0.000256855
Update Ranking90947982019-12-12 14:21:151734 days ago1576160475IN
0xa8745e0b...3DbF795e6
0 ETH0.000256855
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Citizen

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-20
*/

pragma solidity 0.4.25;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error.
 */
library SafeMath {
  /**
   * @dev Multiplies two unsigned integers, reverts on overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath mul error");

    return c;
  }

  /**
   * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, "SafeMath div error");
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath sub error");
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Adds two unsigned integers, reverts on overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath add error");

    return c;
  }

  /**
   * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
   * reverts when dividing by zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath mod error");
    return a % b;
  }
}


library UnitConverter {
  using SafeMath for uint256;

  function stringToBytes24(string memory source)
  internal
  pure
  returns (bytes24 result)
  {
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
      return 0x0;
    }

    assembly {
      result := mload(add(source, 24))
    }
  }
}

library StringUtil {
  struct slice {
    uint _length;
    uint _pointer;
  }

  function validateUserName(string memory _username)
  internal
  pure
  returns (bool)
  {
    uint8 len = uint8(bytes(_username).length);
    if ((len < 4) || (len > 18)) return false;

    // only contain A-Z 0-9
    for (uint8 i = 0; i < len; i++) {
      if (
        (uint8(bytes(_username)[i]) < 48) ||
        (uint8(bytes(_username)[i]) > 57 && uint8(bytes(_username)[i]) < 65) ||
        (uint8(bytes(_username)[i]) > 90)
      ) return false;
    }
    // First char != '0'
    return uint8(bytes(_username)[0]) != 48;
  }
}

contract Auth {

  address internal mainAdmin;
  address internal contractAdmin;
  address internal profitAdmin;
  address internal ethAdmin;
  address internal LAdmin;
  address internal maxSAdmin;
  address internal backupAdmin;
  address internal commissionAdmin;

  event OwnershipTransferred(address indexed _previousOwner, address indexed _newOwner);

  constructor(
    address _mainAdmin,
    address _contractAdmin,
    address _profitAdmin,
    address _ethAdmin,
    address _LAdmin,
    address _maxSAdmin,
    address _backupAdmin,
    address _commissionAdmin
  )
  internal
  {
    mainAdmin = _mainAdmin;
    contractAdmin = _contractAdmin;
    profitAdmin = _profitAdmin;
    ethAdmin = _ethAdmin;
    LAdmin = _LAdmin;
    maxSAdmin = _maxSAdmin;
    backupAdmin = _backupAdmin;
    commissionAdmin = _commissionAdmin;
  }

  modifier onlyMainAdmin() {
    require(isMainAdmin(), "onlyMainAdmin");
    _;
  }

  modifier onlyContractAdmin() {
    require(isContractAdmin() || isMainAdmin(), "onlyContractAdmin");
    _;
  }

  modifier onlyProfitAdmin() {
    require(isProfitAdmin() || isMainAdmin(), "onlyProfitAdmin");
    _;
  }

  modifier onlyEthAdmin() {
    require(isEthAdmin() || isMainAdmin(), "onlyEthAdmin");
    _;
  }

  modifier onlyLAdmin() {
    require(isLAdmin() || isMainAdmin(), "onlyLAdmin");
    _;
  }

  modifier onlyMaxSAdmin() {
    require(isMaxSAdmin() || isMainAdmin(), "onlyMaxSAdmin");
    _;
  }

  modifier onlyBackupAdmin() {
    require(isBackupAdmin() || isMainAdmin(), "onlyBackupAdmin");
    _;
  }

  modifier onlyBackupAdmin2() {
    require(isBackupAdmin(), "onlyBackupAdmin");
    _;
  }

  function isMainAdmin() public view returns (bool) {
    return msg.sender == mainAdmin;
  }

  function isContractAdmin() public view returns (bool) {
    return msg.sender == contractAdmin;
  }

  function isProfitAdmin() public view returns (bool) {
    return msg.sender == profitAdmin;
  }

  function isEthAdmin() public view returns (bool) {
    return msg.sender == ethAdmin;
  }

  function isLAdmin() public view returns (bool) {
    return msg.sender == LAdmin;
  }

  function isMaxSAdmin() public view returns (bool) {
    return msg.sender == maxSAdmin;
  }

  function isBackupAdmin() public view returns (bool) {
    return msg.sender == backupAdmin;
  }
}

library ArrayUtil {

  function tooLargestValues(uint[] array) internal pure returns (uint max, uint subMax) {
    require(array.length >= 2, "Invalid array length");
    max = array[0];
    for (uint i = 1; i < array.length; i++) {
      if (array[i] > max) {
        subMax = max;
        max = array[i];
      } else if (array[i] > subMax) {
        subMax = array[i];
      }
    }
  }
}

interface IWallet {

  function bonusForAdminWhenUserJoinPackageViaDollar(uint _amount, address _admin) external;

  function bonusNewRank(address _investorAddress, uint _currentRank, uint _newRank) external;

  function mineToken(address _from, uint _amount) external;

  function deposit(address _to, uint _deposited, uint8 _source, uint _sourceAmount) external;

  function getInvestorLastDeposited(address _investor) external view returns (uint);

  function getUserWallet(address _investor) external view returns (uint, uint[], uint, uint, uint, uint, uint);

  function getProfitBalance(address _investor) external view returns (uint);

  function increaseETHWithdrew(uint _amount) external;

  function validateCanMineToken(uint _tokenAmount, address _from) external view;

  function ethWithdrew() external view returns (uint);
}

interface ICitizen {

  function addF1DepositedToInviter(address _invitee, uint _amount) external;

  function addNetworkDepositedToInviter(address _inviter, uint _amount, uint _source, uint _sourceAmount) external;

  function checkInvestorsInTheSameReferralTree(address _inviter, address _invitee) external view returns (bool);

  function getF1Deposited(address _investor) external view returns (uint);

  function getId(address _investor) external view returns (uint);

  function getInvestorCount() external view returns (uint);

  function getInviter(address _investor) external view returns (address);

  function getDirectlyInvitee(address _investor) external view returns (address[]);

  function getDirectlyInviteeHaveJoinedPackage(address _investor) external view returns (address[]);

  function getNetworkDeposited(address _investor) external view returns (uint);

  function getRank(address _investor) external view returns (uint);

  function getUserAddress(uint _index) external view returns (address);

  function getSubscribers(address _investor) external view returns (uint);

  function increaseInviterF1HaveJoinedPackage(address _invitee) external;

  function isCitizen(address _user) view external returns (bool);

  function register(address _user, string _userName, address _inviter) external returns (uint);

  function showInvestorInfo(address _investorAddress) external view returns (uint, string memory, address, address[], uint, uint, uint, uint);

  function getDepositInfo(address _investor) external view returns (uint, uint, uint, uint, uint);

  function rankBonuses(uint _index) external view returns (uint);
}

contract Citizen is Auth {
  using ArrayUtil for uint256[];
  using StringUtil for string;
  using UnitConverter for string;
  using SafeMath for uint;

  enum Rank {
    UnRanked,
    Star1,
    Star2,
    Star3,
    Star4,
    Star5,
    Star6,
    Star7,
    Star8,
    Star9,
    Star10
  }

  enum DepositType {
    Ether,
    Token,
    Dollar
  }

  uint[11] public rankCheckPoints = [
    0,
    1000000,
    3000000,
    10000000,
    40000000,
    100000000,
    300000000,
    1000000000,
    2000000000,
    5000000000,
    10000000000
  ];

  uint[11] public rankBonuses = [
    0,
    0,
    0,
    0,
    1000000, // $1k
    2000000,
    6000000,
    20000000,
    50000000,
    150000000,
    500000000 // $500k
  ];

  struct Investor {
    uint id;
    string userName;
    address inviter;
    address[] directlyInvitee;
    address[] directlyInviteeHaveJoinedPackage;
    uint f1Deposited;
    uint networkDeposited;
    uint networkDepositedViaETH;
    uint networkDepositedViaToken;
    uint networkDepositedViaDollar;
    uint subscribers;
    Rank rank;
  }

  address public reserveFund;
  IWallet public wallet;
  ICitizen public oldCitizen = ICitizen(0xd4051A078383d3fc279603c1273360Ac980CB394);

  mapping (address => Investor) private investors;
  mapping (bytes24 => address) private userNameAddresses;
  address[] private userAddresses;
  address private rootAccount = 0xa06Cd23aA37C39095D8CFe3A0fd2654331e63123;
  mapping (address => bool) private ha;

  modifier onlyWalletContract() {
    require(msg.sender == address(wallet), "onlyWalletContract");
    _;
  }

  modifier onlyReserveFundContract() {
    require(msg.sender == address(reserveFund), "onlyReserveFundContract");
    _;
  }

  event RankAchieved(address investor, uint currentRank, uint newRank);

  constructor(
    address _mainAdmin,
    address _backupAdmin
  )
  Auth(
    _mainAdmin,
    msg.sender,
    0x0,
    0x0,
    0x0,
    0x0,
    _backupAdmin,
      0x0
  )
  public
  {
    setupRootAccount();
  }

  // ONLY-CONTRACT-ADMIN FUNCTIONS

  function setW(address _walletContract) onlyContractAdmin public {
    wallet = IWallet(_walletContract);
  }

  function setRF(address _reserveFundContract) onlyContractAdmin public {
    reserveFund = _reserveFundContract;
  }

  function updateMainAdmin(address _newMainAdmin) onlyBackupAdmin public {
    require(_newMainAdmin != address(0x0), "Invalid address");
    mainAdmin = _newMainAdmin;
  }

  function updateContractAdmin(address _newContractAdmin) onlyMainAdmin public {
    require(_newContractAdmin != address(0x0), "Invalid address");
    contractAdmin = _newContractAdmin;
  }

  function updateBackupAdmin(address _newBackupAdmin) onlyBackupAdmin2 public {
    require(_newBackupAdmin != address(0x0), "Invalid address");
    backupAdmin = _newBackupAdmin;
  }

  function updateHA(address _address, bool _value) onlyMainAdmin public {
    ha[_address] = _value;
  }

  function checkHA(address _address) onlyMainAdmin public view returns (bool) {
    return ha[_address];
  }

  function syncData(address[] _investors) onlyContractAdmin public {
    for (uint i = 0; i < _investors.length; i++) {
      syncInvestorInfo(_investors[i]);
      syncDepositInfo(_investors[i]);
    }
  }

  // ONLY-RESERVE-FUND-CONTRACT FUNCTIONS

  function register(address _user, string memory _userName, address _inviter)
  onlyReserveFundContract
  public
  returns
  (uint)
  {
    require(_userName.validateUserName(), "Invalid username");
    Investor storage investor = investors[_user];
    require(!isCitizen(_user), "Already an citizen");
    bytes24 _userNameAsKey = _userName.stringToBytes24();
    require(userNameAddresses[_userNameAsKey] == address(0x0), "Username already exist");
    userNameAddresses[_userNameAsKey] = _user;

    investor.id = userAddresses.length;
    investor.userName = _userName;
    investor.inviter = _inviter;
    investor.rank = Rank.UnRanked;
    increaseInvitersSubscribers(_inviter);
    increaseInviterF1(_inviter, _user);
    userAddresses.push(_user);
    return investor.id;
  }

  function showInvestorInfo(address _investorAddress)
  onlyReserveFundContract
  public
  view
  returns (uint, string memory, address, address[], uint, uint, uint, Citizen.Rank)
  {
    Investor storage investor = investors[_investorAddress];
    return (
      investor.id,
      investor.userName,
      investor.inviter,
      investor.directlyInvitee,
      investor.f1Deposited,
      investor.networkDeposited,
      investor.subscribers,
      investor.rank
    );
  }

  // ONLY-WALLET-CONTRACT FUNCTIONS

  function addF1DepositedToInviter(address _invitee, uint _amount)
  onlyWalletContract
  public
  {
    address inviter = investors[_invitee].inviter;
    investors[inviter].f1Deposited = investors[inviter].f1Deposited.add(_amount);
  }

  function getInviter(address _investor)
  onlyWalletContract
  public
  view
  returns
  (address)
  {
    return investors[_investor].inviter;
  }

  // _source: 0-eth 1-token 2-usdt
  function addNetworkDepositedToInviter(address _inviter, uint _amount, uint _source, uint _sourceAmount)
  onlyWalletContract
  public
  {
    require(_inviter != address(0x0), "Invalid inviter address");
    require(_amount >= 0, "Invalid deposit amount");
    require(_source >= 0 && _source <= 2, "Invalid deposit source");
    require(_sourceAmount >= 0, "Invalid source amount");
    investors[_inviter].networkDeposited = investors[_inviter].networkDeposited.add(_amount);
    if (_source == 0) {
      investors[_inviter].networkDepositedViaETH = investors[_inviter].networkDepositedViaETH.add(_sourceAmount);
    } else if (_source == 1) {
      investors[_inviter].networkDepositedViaToken = investors[_inviter].networkDepositedViaToken.add(_sourceAmount);
    } else {
      investors[_inviter].networkDepositedViaDollar = investors[_inviter].networkDepositedViaDollar.add(_sourceAmount);
    }
  }

  function increaseInviterF1HaveJoinedPackage(address _invitee)
  public
  onlyWalletContract
  {
    address _inviter = getInviter(_invitee);
    investors[_inviter].directlyInviteeHaveJoinedPackage.push(_invitee);
  }

  // PUBLIC FUNCTIONS

  function updateRanking() public {
    Investor storage investor = investors[msg.sender];
    Rank currentRank = investor.rank;
    require(investor.directlyInviteeHaveJoinedPackage.length > 2, "Invalid condition to make ranking");
    require(currentRank < Rank.Star10, "Congratulations! You have reached max rank");
    uint investorRevenueToCheckRank = getInvestorRankingRevenue(msg.sender);
    Rank newRank;
    for(uint8 k = uint8(currentRank) + 1; k <= uint8(Rank.Star10); k++) {
      if(investorRevenueToCheckRank >= rankCheckPoints[k]) {
        newRank = getRankFromIndex(k);
      }
    }
    if (newRank > currentRank) {
      wallet.bonusNewRank(msg.sender, uint(currentRank), uint(newRank));
      investor.rank = newRank;
      emit RankAchieved(msg.sender, uint(currentRank), uint(newRank));
    }
  }

  function getInvestorRankingRevenue(address _investor) public view returns (uint) {
    require(msg.sender == address(this) || msg.sender == _investor, "You can't see other investor");
    Investor storage investor = investors[_investor];
    if (investor.directlyInviteeHaveJoinedPackage.length <= 2) {
      return 0;
    }
    uint[] memory f1NetworkDeposited = new uint[](investor.directlyInviteeHaveJoinedPackage.length);
    uint sumF1NetworkDeposited = 0;
    for (uint j = 0; j < investor.directlyInviteeHaveJoinedPackage.length; j++) {
      f1NetworkDeposited[j] = investors[investor.directlyInviteeHaveJoinedPackage[j]].networkDeposited;
      sumF1NetworkDeposited = sumF1NetworkDeposited.add(f1NetworkDeposited[j]);
    }
    uint max;
    uint subMax;
    (max, subMax) = f1NetworkDeposited.tooLargestValues();
    return sumF1NetworkDeposited.sub(max).sub(subMax);
  }

  function checkInvestorsInTheSameReferralTree(address _inviter, address _invitee)
  public
  view
  returns (bool)
  {
    require(_inviter != _invitee, "They are the same");
    bool inTheSameTreeDownLine = checkInTheSameReferralTree(_inviter, _invitee);
    bool inTheSameTreeUpLine = checkInTheSameReferralTree(_invitee, _inviter);
    return inTheSameTreeDownLine || inTheSameTreeUpLine;
  }

  function getDirectlyInvitee(address _investor) public view returns (address[]) {
    validateSender(_investor);
    return investors[_investor].directlyInvitee;
  }

  function getDirectlyInviteeHaveJoinedPackage(address _investor) public view returns (address[]) {
    validateSender(_investor);
    return investors[_investor].directlyInviteeHaveJoinedPackage;
  }

  function getDepositInfo(address _investor) public view returns (uint, uint, uint, uint, uint) {
    validateSender(_investor);
    return (
      investors[_investor].f1Deposited,
      investors[_investor].networkDeposited,
      investors[_investor].networkDepositedViaETH,
      investors[_investor].networkDepositedViaToken,
      investors[_investor].networkDepositedViaDollar
    );
  }

  function getF1Deposited(address _investor) public view returns (uint) {
    validateSender(_investor);
    return investors[_investor].f1Deposited;
  }

  function getNetworkDeposited(address _investor) public view returns (uint) {
    validateSender(_investor);
    return investors[_investor].networkDeposited;
  }

  function getId(address _investor) public view returns (uint) {
    validateSender(_investor);
    return investors[_investor].id;
  }

  function getUserName(address _investor) public view returns (string) {
    validateSender(_investor);
    return investors[_investor].userName;
  }

  function getRank(address _investor) public view returns (Rank) {
    validateSender(_investor);
    return investors[_investor].rank;
  }

  function getUserAddress(uint _index) public view returns (address) {
    require(_index >= 0 && _index < userAddresses.length, "Index must be >= 0 or < getInvestorCount()");
    validateSender(userAddresses[_index]);
    return userAddresses[_index];
  }

  function getUserAddressFromUserName(string _userName) public view returns (address) {
    require(_userName.validateUserName(), "Invalid username");
    bytes24 _userNameAsKey = _userName.stringToBytes24();
    validateSender(userNameAddresses[_userNameAsKey]);
    return userNameAddresses[_userNameAsKey];
  }

  function getSubscribers(address _investor) public view returns (uint) {
    validateSender(_investor);
    return investors[_investor].subscribers;
  }

  function isCitizen(address _investor) view public returns (bool) {
    validateSender(_investor);
    Investor storage investor = investors[_investor];
    return bytes(investor.userName).length > 0;
  }

  function getInvestorCount() public view returns (uint) {
    return userAddresses.length;
  }

  // PRIVATE FUNCTIONS

  function setupRootAccount() private {
    string memory _rootAddressUserName = "ADMIN";
    bytes24 _rootAddressUserNameAsKey = _rootAddressUserName.stringToBytes24();
    userNameAddresses[_rootAddressUserNameAsKey] = rootAccount;
    Investor storage rootInvestor = investors[rootAccount];
    rootInvestor.id = userAddresses.length;
    rootInvestor.userName = _rootAddressUserName;
    rootInvestor.inviter = 0x0;
    rootInvestor.rank = Rank.UnRanked;
    userAddresses.push(rootAccount);
  }

  function increaseInviterF1(address _inviter, address _invitee) private {
    investors[_inviter].directlyInvitee.push(_invitee);
  }

  function checkInTheSameReferralTree(address _from, address _to) private view returns (bool) {
    do {
      Investor storage investor = investors[_from];
      if (investor.inviter == _to) {
        return true;
      }
      _from = investor.inviter;
    } while (investor.inviter != 0x0);
    return false;
  }

  function increaseInvitersSubscribers(address _inviter) private {
    do {
      investors[_inviter].subscribers += 1;
      _inviter = investors[_inviter].inviter;
    } while (_inviter != address(0x0));
  }

  function getRankFromIndex(uint8 _index) private pure returns (Rank rank) {
    require(_index >= 0 && _index <= 10, "Invalid index");
    if (_index == 1) {
      return Rank.Star1;
    } else if (_index == 2) {
      return Rank.Star2;
    } else if (_index == 3) {
      return Rank.Star3;
    } else if (_index == 4) {
      return Rank.Star4;
    } else if (_index == 5) {
      return Rank.Star5;
    } else if (_index == 6) {
      return Rank.Star6;
    } else if (_index == 7) {
      return Rank.Star7;
    } else if (_index == 8) {
      return Rank.Star8;
    } else if (_index == 9) {
      return Rank.Star9;
    } else if (_index == 10) {
      return Rank.Star10;
    } else {
      return Rank.UnRanked;
    }
  }

  function syncInvestorInfo(address _investor) private {
    uint id;
    string memory userName;
    address inviter;
    address[] memory directlyInvitee;
    uint subscribers;
    (
      id,
      userName,
      inviter,
      directlyInvitee,
      ,,
      subscribers,
    ) = oldCitizen.showInvestorInfo(_investor);

    Investor storage investor = investors[_investor];
    investor.id = id;
    investor.userName = userName;
    investor.inviter = inviter;
    investor.directlyInvitee = directlyInvitee;
    investor.directlyInviteeHaveJoinedPackage = oldCitizen.getDirectlyInviteeHaveJoinedPackage(_investor);
    investor.subscribers = subscribers;
    investor.rank = getRankFromIndex(uint8(oldCitizen.getRank(_investor)));

    bytes24 userNameAsKey = userName.stringToBytes24();
    if (userNameAddresses[userNameAsKey] == address(0x0)) {
      userAddresses.push(_investor);
      userNameAddresses[userNameAsKey] = _investor;
    }
  }

  function syncDepositInfo(address _investor) private {
    uint f1Deposited;
    uint networkDeposited;
    uint networkDepositedViaETH;
    uint networkDepositedViaToken;
    uint networkDepositedViaDollar;
    (
      f1Deposited,
      networkDeposited,
      networkDepositedViaETH,
      networkDepositedViaToken,
      networkDepositedViaDollar
    ) = oldCitizen.getDepositInfo(_investor);

    Investor storage investor = investors[_investor];
    investor.f1Deposited = f1Deposited;
    investor.networkDeposited = networkDeposited;
    investor.networkDepositedViaETH = networkDepositedViaETH;
    investor.networkDepositedViaToken = networkDepositedViaToken;
    investor.networkDepositedViaDollar = networkDepositedViaDollar;
  }

  function validateSender(address _investor) private view {
    if (msg.sender != _investor && msg.sender != mainAdmin && msg.sender != reserveFund && msg.sender != address(wallet)) {
      require(!ha[_investor]);
    }
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_newContractAdmin","type":"address"}],"name":"updateContractAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getSubscribers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMainAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMaxSAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rankBonuses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateRanking","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isEthAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_inviter","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_source","type":"uint256"},{"name":"_sourceAmount","type":"uint256"}],"name":"addNetworkDepositedToInviter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"oldCitizen","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getF1Deposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBackupAdmin","type":"address"}],"name":"updateBackupAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_reserveFundContract","type":"address"}],"name":"setRF","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isLAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getDepositInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getRank","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investors","type":"address[]"}],"name":"syncData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_invitee","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addF1DepositedToInviter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_userName","type":"string"}],"name":"getUserAddressFromUserName","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investorAddress","type":"address"}],"name":"showInvestorInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"string"},{"name":"","type":"address"},{"name":"","type":"address[]"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"checkHA","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getDirectlyInvitee","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getDirectlyInviteeHaveJoinedPackage","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_walletContract","type":"address"}],"name":"setW","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getUserAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getNetworkDeposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_userName","type":"string"},{"name":"_inviter","type":"address"}],"name":"register","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isBackupAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rankCheckPoints","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserveFund","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isProfitAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_invitee","type":"address"}],"name":"increaseInviterF1HaveJoinedPackage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getInviter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMainAdmin","type":"address"}],"name":"updateMainAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isContractAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getUserName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_inviter","type":"address"},{"name":"_invitee","type":"address"}],"name":"checkInvestorsInTheSameReferralTree","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_value","type":"bool"}],"name":"updateHA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getInvestorRankingRevenue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"isCitizen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_mainAdmin","type":"address"},{"name":"_backupAdmin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"currentRank","type":"uint256"},{"indexed":false,"name":"newRank","type":"uint256"}],"name":"RankAchieved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_previousOwner","type":"address"},{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6101e060405260006080908152620f424060a052622dc6c060c0526298968060e0526302625a00610100526305f5e100610120526311e1a30061014052633b9aca006101605263773594006101805264012a05f2006101a0526402540be4006101c0526200007290600890600b6200032a565b5060408051610160810182526000808252602082018190529181018290526060810191909152620f42406080820152621e848060a0820152625b8d8060c08201526301312d0060e08201526302faf0806101008201526308f0d180610120820152631dcd6500610140820152620000ee90601390600b62000376565b5060208054600160a060020a031990811673d4051a078383d3fc279603c1273360ac980cb394179091556024805490911673a06cd23aa37c39095d8cfe3a0fd2654331e631231790553480156200014457600080fd5b506040516040806200347b83398101604052805160209091015160008054600160a060020a03808516600160a060020a0319928316179092556001805482163317905560028054821690556003805482169055600480548216905560058054821690556006805492841692821692909217909155600780549091169055620001d4640100000000620001dc810204565b505062000442565b60408051808201909152600581527f41444d494e00000000000000000000000000000000000000000000000000000060208201526000806200022c8364010000000062002c586200030482021704565b6024805467ffffffffffffffff19831660009081526022602090815260408083208054600160a060020a031916600160a060020a0395861617905593549092168152602182529190912060235481558551929450925062000295916001840191860190620003af565b50600281018054600160a060020a0319908116909155600b909101805460ff19169055602454602380546001810182556000919091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230018054909216600160a060020a039091161790555050565b8051600090829015156200031c576000915062000324565b601883015191505b50919050565b82600b810192821562000364579160200282015b8281111562000364578251829064ffffffffff169055916020019190600101906200033e565b506200037292915062000422565b5090565b82600b810192821562000364579160200282015b8281111562000364578251829063ffffffff169055916020019190600101906200038a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003f257805160ff191683800117855562000364565b8280016001018555821562000364579182015b828111156200036457825182559160200191906001019062000405565b6200043f91905b8082111562000372576000815560010162000429565b90565b61302980620004526000396000f3006080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302e65b8a811461020857806307e7080a1461022b5780631168222b1461025e57806311bec7321461028757806312259ecc1461029c5780631826a482146102b45780631cce93c4146102c95780631d9b83c3146102de57806327ab59771461030857806335bab2c914610339578063380b682d1461035a57806343b3b2851461037b578063482d96281461039c578063521eb273146103b15780635287ce12146103c6578063548c0ef4146104125780635e0e4b44146104575780635e91e9bf146104ac5780636475d96a146104d057806365f68c891461052957806372fbc8511461054a57806383454ef21461066e578063852c63021461068f57806385c20a0e146107005780638d425e1d1461072157806390d976e2146107425780639220f16c1461075a578063960524e31461077b57806397294e58146107905780639f9abd5a14610802578063a32667d714610817578063b7f92b711461082f578063b8a5b5c814610844578063be396e1414610859578063d216ce6f1461087a578063d30f133d1461089b578063d3184e80146108bc578063d84f55ee146108d1578063da9c9ba714610967578063eee8427e1461098e578063efe5b849146109b4578063f3caad03146109d5575b600080fd5b34801561021457600080fd5b50610229600160a060020a03600435166109f6565b005b34801561023757600080fd5b5061024c600160a060020a0360043516610ad6565b60408051918252519081900360200190f35b34801561026a57600080fd5b50610273610b04565b604080519115158252519081900360200190f35b34801561029357600080fd5b50610273610b16565b3480156102a857600080fd5b5061024c600435610b27565b3480156102c057600080fd5b50610229610b3b565b3480156102d557600080fd5b50610273610e14565b3480156102ea57600080fd5b50610229600160a060020a0360043516602435604435606435610e25565b34801561031457600080fd5b5061031d611130565b60408051600160a060020a039092168252519081900360200190f35b34801561034557600080fd5b5061024c600160a060020a036004351661113f565b34801561036657600080fd5b50610229600160a060020a0360043516611169565b34801561038757600080fd5b50610229600160a060020a0360043516611249565b3480156103a857600080fd5b506102736112d7565b3480156103bd57600080fd5b5061031d6112e8565b3480156103d257600080fd5b506103e7600160a060020a03600435166112f7565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561041e57600080fd5b50610433600160a060020a036004351661134a565b6040518082600a81111561044357fe5b60ff16815260200191505060405180910390f35b34801561046357600080fd5b5060408051602060048035808201358381028086018501909652808552610229953695939460249493850192918291850190849080828437509497506113779650505050505050565b3480156104b857600080fd5b50610229600160a060020a036004351660243561143e565b3480156104dc57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031d9436949293602493928401919081908401838280828437509497506114ee9650505050505050565b34801561053557600080fd5b5061024c600160a060020a03600435166115b6565b34801561055657600080fd5b5061056b600160a060020a03600435166115dd565b604051808981526020018060200188600160a060020a0316600160a060020a031681526020018060200187815260200186815260200185815260200184600a8111156105b357fe5b60ff16815260200183810383528a818151815260200191508051906020019080838360005b838110156105f05781810151838201526020016105d8565b50505050905090810190601f16801561061d5780820380516001836020036101000a031916815260200191505b508381038252885181528851602091820191808b01910280838360005b8381101561065257818101518382015260200161063a565b505050509050019a505050505050505050505060405180910390f35b34801561067a57600080fd5b50610273600160a060020a03600435166117ac565b34801561069b57600080fd5b506106b0600160a060020a036004351661182b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ec5781810151838201526020016106d4565b505050509050019250505060405180910390f35b34801561070c57600080fd5b506106b0600160a060020a03600435166118ad565b34801561072d57600080fd5b50610229600160a060020a036004351661192d565b34801561074e57600080fd5b5061031d6004356119bb565b34801561076657600080fd5b5061024c600160a060020a0360043516611a9f565b34801561078757600080fd5b5061024c611ac9565b34801561079c57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261024c958335600160a060020a031695369560449491939091019190819084018382808284375094975050509235600160a060020a03169350611acf92505050565b34801561080e57600080fd5b50610273611d7a565b34801561082357600080fd5b5061024c600435611d8b565b34801561083b57600080fd5b5061031d611d98565b34801561085057600080fd5b50610273611da7565b34801561086557600080fd5b50610229600160a060020a0360043516611db8565b34801561088657600080fd5b5061031d600160a060020a0360043516611e5a565b3480156108a757600080fd5b50610229600160a060020a0360043516611ecf565b3480156108c857600080fd5b50610273611fbd565b3480156108dd57600080fd5b506108f2600160a060020a0360043516611fce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561092c578181015183820152602001610914565b50505050905090810190601f1680156109595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561097357600080fd5b50610273600160a060020a036004358116906024351661207d565b34801561099a57600080fd5b50610229600160a060020a0360043516602435151561210f565b3480156109c057600080fd5b5061024c600160a060020a0360043516612198565b3480156109e157600080fd5b50610273600160a060020a036004351661234a565b6109fe610b04565b1515610a54576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515610ab4576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6000610ae182612389565b50600160a060020a0381166000908152602160205260409020600a01545b919050565b600054600160a060020a031633145b90565b600554600160a060020a0316331490565b601381600b8110610b3457fe5b0154905081565b336000908152602160205260408120600b8101546004820154919260ff9091169181908190600210610bdd576040805160e560020a62461bcd02815260206004820152602160248201527f496e76616c696420636f6e646974696f6e20746f206d616b652072616e6b696e60448201527f6700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600a84600a811115610beb57fe5b10610c66576040805160e560020a62461bcd02815260206004820152602a60248201527f436f6e67726174756c6174696f6e732120596f7520686176652072656163686560448201527f64206d61782072616e6b00000000000000000000000000000000000000000000606482015290519081900360840190fd5b610c6f33612198565b925083600a811115610c7d57fe5b60010190505b600a60ff821611610cba57600860ff8216600b8110610c9e57fe5b01548310610cb257610caf81612409565b91505b600101610c83565b83600a811115610cc657fe5b82600a811115610cd257fe5b1115610e0d57601f54600160a060020a0316633164eed53386600a811115610cf657fe5b85600a811115610d0257fe5b6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050600060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b505050600b8601805484925060ff1916600183600a811115610da657fe5b02179055507f3c09d713d2296e74921b2e0edf69deae6dfaa62ab371d764094f5b286242f4bc3385600a811115610dd957fe5b84600a811115610de557fe5b60408051600160a060020a039094168452602084019290925282820152519081900360600190a15b5050505050565b600354600160a060020a0316331490565b601f54600160a060020a03163314610e75576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b600160a060020a0384161515610ed5576040805160e560020a62461bcd02815260206004820152601760248201527f496e76616c696420696e76697465722061646472657373000000000000000000604482015290519081900360640190fd5b6000831015610f2e576040805160e560020a62461bcd02815260206004820152601660248201527f496e76616c6964206465706f73697420616d6f756e7400000000000000000000604482015290519081900360640190fd5b60008210158015610f40575060028211155b1515610f96576040805160e560020a62461bcd02815260206004820152601660248201527f496e76616c6964206465706f73697420736f7572636500000000000000000000604482015290519081900360640190fd5b6000811015610fef576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420736f7572636520616d6f756e740000000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526021602052604090206006015461101b908463ffffffff61254816565b600160a060020a03851660009081526021602052604090206006015581151561108b57600160a060020a03841660009081526021602052604090206007015461106a908263ffffffff61254816565b600160a060020a03851660009081526021602052604090206007015561112a565b81600114156110e157600160a060020a0384166000908152602160205260409020600801546110c0908263ffffffff61254816565b600160a060020a03851660009081526021602052604090206008015561112a565b600160a060020a03841660009081526021602052604090206009015461110d908263ffffffff61254816565b600160a060020a0385166000908152602160205260409020600901555b50505050565b602054600160a060020a031681565b600061114a82612389565b50600160a060020a031660009081526021602052604090206005015490565b611171611d7a565b15156111c7576040805160e560020a62461bcd02815260206004820152600f60248201527f6f6e6c794261636b757041646d696e0000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515611227576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b611251611fbd565b8061125f575061125f610b04565b15156112b5576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b601e8054600160a060020a031916600160a060020a0392909216919091179055565b600454600160a060020a0316331490565b601f54600160a060020a031681565b600080600080600061130886612389565b50505050600160a060020a0391909116600090815260216020526040902060058101546006820154600783015460088401546009909401549295919450929190565b600061135582612389565b50600160a060020a03166000908152602160205260409020600b015460ff1690565b6000611381611fbd565b8061138f575061138f610b04565b15156113e5576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b5060005b815181101561143a57611412828281518110151561140357fe5b906020019060200201516125b0565b611432828281518110151561142357fe5b906020019060200201516129ff565b6001016113e9565b5050565b601f54600090600160a060020a03163314611491576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b50600160a060020a0380831660009081526021602052604080822060020154909216808252919020600501546114cd908363ffffffff61254816565b600160a060020a039091166000908152602160205260409020600501555050565b6000806114fa83612af4565b1515611550576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420757365726e616d6500000000000000000000000000000000604482015290519081900360640190fd5b61155983612c58565b67ffffffffffffffff19811660009081526022602052604090205490915061158990600160a060020a0316612389565b67ffffffffffffffff198116600090815260226020526040902054600160a060020a031691505b50919050565b60006115c182612389565b50600160a060020a031660009081526021602052604090205490565b601e546000906060908290829082908190819081908190600160a060020a03163314611653576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c795265736572766546756e64436f6e7472616374000000000000000000604482015290519081900360640190fd5b50600160a060020a03898116600090815260216020908152604091829020805460028083015460058401546006850154600a860154600b870154600180890180548c516101009382161593909302600019011697909704601f81018b90048b0282018b01909b528a8152979a96999598949096169660038b019693959294919360ff1692909189919083018282801561172d5780601f106117025761010080835404028352916020019161172d565b820191906000526020600020905b81548152906001019060200180831161171057829003601f168201915b505050505096508480548060200260200160405190810160405280929190818152602001828054801561178957602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161176b575b505050505094509850985098509850985098509850985050919395975091939597565b60006117b6610b04565b151561180c576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a031660009081526025602052604090205460ff1690565b606061183682612389565b600160a060020a038216600090815260216020908152604091829020600301805483518184028101840190945280845290918301828280156118a157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611883575b50505050509050919050565b60606118b882612389565b600160a060020a038216600090815260216020908152604091829020600401805483518184028101840190945280845290918301828280156118a157602002820191906000526020600020908154600160a060020a031681526001909101906020018083116118835750505050509050919050565b611935611fbd565b806119435750611943610b04565b1515611999576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b601f8054600160a060020a031916600160a060020a0392909216919091179055565b60008082101580156119ce575060235482105b1515611a4a576040805160e560020a62461bcd02815260206004820152602a60248201527f496e646578206d757374206265203e3d2030206f72203c20676574496e76657360448201527f746f72436f756e74282900000000000000000000000000000000000000000000606482015290519081900360840190fd5b611a76602383815481101515611a5c57fe5b600091825260209091200154600160a060020a0316612389565b6023805483908110611a8457fe5b600091825260209091200154600160a060020a031692915050565b6000611aaa82612389565b50600160a060020a031660009081526021602052604090206006015490565b60235490565b601e5460009081908190600160a060020a03163314611b38576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c795265736572766546756e64436f6e7472616374000000000000000000604482015290519081900360640190fd5b611b4185612af4565b1515611b97576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420757365726e616d6500000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03861660009081526021602052604090209150611bba8661234a565b15611c0f576040805160e560020a62461bcd02815260206004820152601260248201527f416c726561647920616e20636974697a656e0000000000000000000000000000604482015290519081900360640190fd5b611c1885612c58565b67ffffffffffffffff198116600090815260226020526040902054909150600160a060020a031615611c94576040805160e560020a62461bcd02815260206004820152601660248201527f557365726e616d6520616c726561647920657869737400000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff19811660009081526022602090815260409091208054600160a060020a031916600160a060020a03891617905560235483558551611ce391600185019190880190612ec0565b50600282018054600160a060020a031916600160a060020a038616179055600b8201805460ff19169055611d1684612c77565b611d208487612cac565b602380546001810182556000919091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230018054600160a060020a038816600160a060020a03199091161790558154925050509392505050565b600654600160a060020a0316331490565b600881600b8110610b3457fe5b601e54600160a060020a031681565b600254600160a060020a0316331490565b601f54600090600160a060020a03163314611e0b576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b611e1482611e5a565b600160a060020a039081166000908152602160209081526040822060040180546001810182559083529120018054600160a060020a031916939091169290921790915550565b601f54600090600160a060020a03163314611ead576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b50600160a060020a039081166000908152602160205260409020600201541690565b611ed7611d7a565b80611ee55750611ee5610b04565b1515611f3b576040805160e560020a62461bcd02815260206004820152600f60248201527f6f6e6c794261636b757041646d696e0000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515611f9b576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b600154600160a060020a0316331490565b6060611fd982612389565b600160a060020a038216600090815260216020908152604091829020600190810180548451600293821615610100026000190190911692909204601f8101849004840283018401909452838252909290918301828280156118a15780601f10612050576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161205e5750939695505050505050565b60008080600160a060020a0385811690851614156120e5576040805160e560020a62461bcd02815260206004820152601160248201527f5468657920617265207468652073616d65000000000000000000000000000000604482015290519081900360640190fd5b6120ef8585612ced565b91506120fb8486612ced565b905081806121065750805b95945050505050565b612117610b04565b151561216d576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03919091166000908152602560205260409020805460ff1916911515919091179055565b600080606081808080333014806121b7575033600160a060020a038916145b151561220d576040805160e560020a62461bcd02815260206004820152601c60248201527f596f752063616e277420736565206f7468657220696e766573746f7200000000604482015290519081900360640190fd5b600160a060020a0388166000908152602160205260409020600481015490965060021061223d576000965061233f565b600486015460408051828152602080840282010190915290801561226b578160200160208202803883390190505b50945060009350600092505b600486015483101561230e5760216000876004018581548110151561229857fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190206006015485518690859081106122ce57fe5b602090810290910101528451612301908690859081106122ea57fe5b60209081029091010151859063ffffffff61254816565b9350600190920191612277565b61231785612d4b565b909250905061233c81612330868563ffffffff612e5e16565b9063ffffffff612e5e16565b96505b505050505050919050565b60008061235683612389565b5050600160a060020a03166000908152602160205260408120600190810154600291811615610100026000190116041190565b33600160a060020a038216148015906123ad5750600054600160a060020a03163314155b80156123c45750601e54600160a060020a03163314155b80156123db5750601f54600160a060020a03163314155b1561240657600160a060020a03811660009081526025602052604090205460ff161561240657600080fd5b50565b6000808260ff16101580156124225750600a8260ff1611155b1515612478576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b8160ff166001141561248c57506001610aff565b8160ff16600214156124a057506002610aff565b8160ff16600314156124b457506003610aff565b8160ff16600414156124c857506004610aff565b8160ff16600514156124dc57506005610aff565b8160ff16600614156124f057506006610aff565b8160ff166007141561250457506007610aff565b8160ff166008141561251857506008610aff565b8160ff166009141561252c57506009610aff565b8160ff16600a14156125405750600a610aff565b506000610aff565b6000828201838110156125a5576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d61746820616464206572726f720000000000000000000000000000604482015290519081900360640190fd5b8091505b5092915050565b602054604080517f72fbc851000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093606093859385938593849384939116916372fbc85191602480820192869290919082900301818387803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261010081101561266357600080fd5b81516020830180519193928301929164010000000081111561268457600080fd5b8201602081018481111561269757600080fd5b81516401000000008111828201871017156126b157600080fd5b505060208201516040909201805191949293916401000000008111156126d657600080fd5b820160208101848111156126e957600080fd5b815185602082028301116401000000008211171561270657600080fd5b5050606090910151600160a060020a038f1660009081526021602090815260409091208881558751989f50969d50949b50909950975092955061275493600187019350918a01919050612ec0565b50600282018054600160a060020a031916600160a060020a03871617905583516127879060038401906020870190612f3e565b50602054604080517f85c20a0e000000000000000000000000000000000000000000000000000000008152600160a060020a038b81166004830152915191909216916385c20a0e91602480830192600092919082900301818387803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561282c57600080fd5b81019080805164010000000081111561284457600080fd5b8201602081018481111561285757600080fd5b815185602082028301116401000000008211171561287457600080fd5b5050805161288f945060048701935060209091019150612f3e565b50600a820183905560208054604080517f548c0ef4000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915161293394929093169263548c0ef4926024808401939192918290030181600087803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b505050506040513d602081101561292c57600080fd5b5051612409565b600b8301805460ff1916600183600a81111561294b57fe5b021790555061295986612c58565b67ffffffffffffffff198116600090815260226020526040902054909150600160a060020a031615156129f55760238054600181019091557fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230018054600160a060020a038a16600160a060020a0319918216811790925567ffffffffffffffff1983166000908152602260205260409020805490911690911790555b5050505050505050565b602054604080517f5287ce12000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093849384938493849384931691635287ce129160248083019260a092919082900301818787803b158015612a7057600080fd5b505af1158015612a84573d6000803e3d6000fd5b505050506040513d60a0811015612a9a57600080fd5b5080516020808301516040808501516060860151608090960151600160a060020a03909d16600090815260219094529220600581019390935560068301556007820155600881019190915560090196909655505050505050565b805160009081600460ff83161080612b0f575060128260ff16115b15612b1d5760009250612c51565b5060005b8160ff168160ff161015612c1e576030848260ff16815181101515612b4257fe5b90602001015160f860020a900460f860020a0260f860020a900460ff161080612bd057506039848260ff16815181101515612b7957fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16118015612bd057506041848260ff16815181101515612bb157fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16105b80612c085750605a848260ff16815181101515612be957fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16115b15612c165760009250612c51565b600101612b21565b836000815181101515612c2d57fe5b90602001015160f860020a900460f860020a0260f860020a900460ff166030141592505b5050919050565b805160009082901515612c6e57600091506115b0565b50506018015190565b5b600160a060020a039081166000908152602160205260409020600a8101805460010190556002015416801561240657612c78565b600160a060020a039182166000908152602160209081526040822060030180546001810182559083529120018054600160a060020a03191691909216179055565b6000805b50600160a060020a0383811660009081526021602052604090206002810154909184811691161415612d2657600191506125a9565b6002810154600160a060020a031693508315612d4157612cf1565b5060009392505050565b60008060006002845110151515612dac576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c6964206172726179206c656e677468000000000000000000000000604482015290519081900360640190fd5b836000815181101515612dbb57fe5b906020019060200201519250600190505b8351811015612e5857828482815181101515612de457fe5b906020019060200201511115612e16578291508381815181101515612e0557fe5b906020019060200201519250612e50565b818482815181101515612e2557fe5b906020019060200201511115612e50578381815181101515612e4357fe5b9060200190602002015191505b600101612dcc565b50915091565b60008083831115612eb9576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d61746820737562206572726f720000000000000000000000000000604482015290519081900360640190fd5b5050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0157805160ff1916838001178555612f2e565b82800160010185558215612f2e579182015b82811115612f2e578251825591602001919060010190612f13565b50612f3a929150612f9f565b5090565b828054828255906000526020600020908101928215612f93579160200282015b82811115612f935782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190612f5e565b50612f3a929150612fb9565b610b1391905b80821115612f3a5760008155600101612fa5565b610b1391905b80821115612f3a578054600160a060020a0319168155600101612fbf56006f6e6c7957616c6c6574436f6e74726163740000000000000000000000000000a165627a7a7230582054978ce93ee5afff47bf25341118739e9b35ca2bf6f1102dce7535aaf23e499f00290000000000000000000000000777a2cc786f2a353dd4178112e2e0cb0e48ff0300000000000000000000000064fc9c64c79919df1ea77339977afeea020e9d1e

Deployed Bytecode

0x6080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302e65b8a811461020857806307e7080a1461022b5780631168222b1461025e57806311bec7321461028757806312259ecc1461029c5780631826a482146102b45780631cce93c4146102c95780631d9b83c3146102de57806327ab59771461030857806335bab2c914610339578063380b682d1461035a57806343b3b2851461037b578063482d96281461039c578063521eb273146103b15780635287ce12146103c6578063548c0ef4146104125780635e0e4b44146104575780635e91e9bf146104ac5780636475d96a146104d057806365f68c891461052957806372fbc8511461054a57806383454ef21461066e578063852c63021461068f57806385c20a0e146107005780638d425e1d1461072157806390d976e2146107425780639220f16c1461075a578063960524e31461077b57806397294e58146107905780639f9abd5a14610802578063a32667d714610817578063b7f92b711461082f578063b8a5b5c814610844578063be396e1414610859578063d216ce6f1461087a578063d30f133d1461089b578063d3184e80146108bc578063d84f55ee146108d1578063da9c9ba714610967578063eee8427e1461098e578063efe5b849146109b4578063f3caad03146109d5575b600080fd5b34801561021457600080fd5b50610229600160a060020a03600435166109f6565b005b34801561023757600080fd5b5061024c600160a060020a0360043516610ad6565b60408051918252519081900360200190f35b34801561026a57600080fd5b50610273610b04565b604080519115158252519081900360200190f35b34801561029357600080fd5b50610273610b16565b3480156102a857600080fd5b5061024c600435610b27565b3480156102c057600080fd5b50610229610b3b565b3480156102d557600080fd5b50610273610e14565b3480156102ea57600080fd5b50610229600160a060020a0360043516602435604435606435610e25565b34801561031457600080fd5b5061031d611130565b60408051600160a060020a039092168252519081900360200190f35b34801561034557600080fd5b5061024c600160a060020a036004351661113f565b34801561036657600080fd5b50610229600160a060020a0360043516611169565b34801561038757600080fd5b50610229600160a060020a0360043516611249565b3480156103a857600080fd5b506102736112d7565b3480156103bd57600080fd5b5061031d6112e8565b3480156103d257600080fd5b506103e7600160a060020a03600435166112f7565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561041e57600080fd5b50610433600160a060020a036004351661134a565b6040518082600a81111561044357fe5b60ff16815260200191505060405180910390f35b34801561046357600080fd5b5060408051602060048035808201358381028086018501909652808552610229953695939460249493850192918291850190849080828437509497506113779650505050505050565b3480156104b857600080fd5b50610229600160a060020a036004351660243561143e565b3480156104dc57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031d9436949293602493928401919081908401838280828437509497506114ee9650505050505050565b34801561053557600080fd5b5061024c600160a060020a03600435166115b6565b34801561055657600080fd5b5061056b600160a060020a03600435166115dd565b604051808981526020018060200188600160a060020a0316600160a060020a031681526020018060200187815260200186815260200185815260200184600a8111156105b357fe5b60ff16815260200183810383528a818151815260200191508051906020019080838360005b838110156105f05781810151838201526020016105d8565b50505050905090810190601f16801561061d5780820380516001836020036101000a031916815260200191505b508381038252885181528851602091820191808b01910280838360005b8381101561065257818101518382015260200161063a565b505050509050019a505050505050505050505060405180910390f35b34801561067a57600080fd5b50610273600160a060020a03600435166117ac565b34801561069b57600080fd5b506106b0600160a060020a036004351661182b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ec5781810151838201526020016106d4565b505050509050019250505060405180910390f35b34801561070c57600080fd5b506106b0600160a060020a03600435166118ad565b34801561072d57600080fd5b50610229600160a060020a036004351661192d565b34801561074e57600080fd5b5061031d6004356119bb565b34801561076657600080fd5b5061024c600160a060020a0360043516611a9f565b34801561078757600080fd5b5061024c611ac9565b34801561079c57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261024c958335600160a060020a031695369560449491939091019190819084018382808284375094975050509235600160a060020a03169350611acf92505050565b34801561080e57600080fd5b50610273611d7a565b34801561082357600080fd5b5061024c600435611d8b565b34801561083b57600080fd5b5061031d611d98565b34801561085057600080fd5b50610273611da7565b34801561086557600080fd5b50610229600160a060020a0360043516611db8565b34801561088657600080fd5b5061031d600160a060020a0360043516611e5a565b3480156108a757600080fd5b50610229600160a060020a0360043516611ecf565b3480156108c857600080fd5b50610273611fbd565b3480156108dd57600080fd5b506108f2600160a060020a0360043516611fce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561092c578181015183820152602001610914565b50505050905090810190601f1680156109595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561097357600080fd5b50610273600160a060020a036004358116906024351661207d565b34801561099a57600080fd5b50610229600160a060020a0360043516602435151561210f565b3480156109c057600080fd5b5061024c600160a060020a0360043516612198565b3480156109e157600080fd5b50610273600160a060020a036004351661234a565b6109fe610b04565b1515610a54576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515610ab4576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6000610ae182612389565b50600160a060020a0381166000908152602160205260409020600a01545b919050565b600054600160a060020a031633145b90565b600554600160a060020a0316331490565b601381600b8110610b3457fe5b0154905081565b336000908152602160205260408120600b8101546004820154919260ff9091169181908190600210610bdd576040805160e560020a62461bcd02815260206004820152602160248201527f496e76616c696420636f6e646974696f6e20746f206d616b652072616e6b696e60448201527f6700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600a84600a811115610beb57fe5b10610c66576040805160e560020a62461bcd02815260206004820152602a60248201527f436f6e67726174756c6174696f6e732120596f7520686176652072656163686560448201527f64206d61782072616e6b00000000000000000000000000000000000000000000606482015290519081900360840190fd5b610c6f33612198565b925083600a811115610c7d57fe5b60010190505b600a60ff821611610cba57600860ff8216600b8110610c9e57fe5b01548310610cb257610caf81612409565b91505b600101610c83565b83600a811115610cc657fe5b82600a811115610cd257fe5b1115610e0d57601f54600160a060020a0316633164eed53386600a811115610cf657fe5b85600a811115610d0257fe5b6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050600060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b505050600b8601805484925060ff1916600183600a811115610da657fe5b02179055507f3c09d713d2296e74921b2e0edf69deae6dfaa62ab371d764094f5b286242f4bc3385600a811115610dd957fe5b84600a811115610de557fe5b60408051600160a060020a039094168452602084019290925282820152519081900360600190a15b5050505050565b600354600160a060020a0316331490565b601f54600160a060020a03163314610e75576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b600160a060020a0384161515610ed5576040805160e560020a62461bcd02815260206004820152601760248201527f496e76616c696420696e76697465722061646472657373000000000000000000604482015290519081900360640190fd5b6000831015610f2e576040805160e560020a62461bcd02815260206004820152601660248201527f496e76616c6964206465706f73697420616d6f756e7400000000000000000000604482015290519081900360640190fd5b60008210158015610f40575060028211155b1515610f96576040805160e560020a62461bcd02815260206004820152601660248201527f496e76616c6964206465706f73697420736f7572636500000000000000000000604482015290519081900360640190fd5b6000811015610fef576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c696420736f7572636520616d6f756e740000000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526021602052604090206006015461101b908463ffffffff61254816565b600160a060020a03851660009081526021602052604090206006015581151561108b57600160a060020a03841660009081526021602052604090206007015461106a908263ffffffff61254816565b600160a060020a03851660009081526021602052604090206007015561112a565b81600114156110e157600160a060020a0384166000908152602160205260409020600801546110c0908263ffffffff61254816565b600160a060020a03851660009081526021602052604090206008015561112a565b600160a060020a03841660009081526021602052604090206009015461110d908263ffffffff61254816565b600160a060020a0385166000908152602160205260409020600901555b50505050565b602054600160a060020a031681565b600061114a82612389565b50600160a060020a031660009081526021602052604090206005015490565b611171611d7a565b15156111c7576040805160e560020a62461bcd02815260206004820152600f60248201527f6f6e6c794261636b757041646d696e0000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515611227576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b611251611fbd565b8061125f575061125f610b04565b15156112b5576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b601e8054600160a060020a031916600160a060020a0392909216919091179055565b600454600160a060020a0316331490565b601f54600160a060020a031681565b600080600080600061130886612389565b50505050600160a060020a0391909116600090815260216020526040902060058101546006820154600783015460088401546009909401549295919450929190565b600061135582612389565b50600160a060020a03166000908152602160205260409020600b015460ff1690565b6000611381611fbd565b8061138f575061138f610b04565b15156113e5576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b5060005b815181101561143a57611412828281518110151561140357fe5b906020019060200201516125b0565b611432828281518110151561142357fe5b906020019060200201516129ff565b6001016113e9565b5050565b601f54600090600160a060020a03163314611491576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b50600160a060020a0380831660009081526021602052604080822060020154909216808252919020600501546114cd908363ffffffff61254816565b600160a060020a039091166000908152602160205260409020600501555050565b6000806114fa83612af4565b1515611550576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420757365726e616d6500000000000000000000000000000000604482015290519081900360640190fd5b61155983612c58565b67ffffffffffffffff19811660009081526022602052604090205490915061158990600160a060020a0316612389565b67ffffffffffffffff198116600090815260226020526040902054600160a060020a031691505b50919050565b60006115c182612389565b50600160a060020a031660009081526021602052604090205490565b601e546000906060908290829082908190819081908190600160a060020a03163314611653576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c795265736572766546756e64436f6e7472616374000000000000000000604482015290519081900360640190fd5b50600160a060020a03898116600090815260216020908152604091829020805460028083015460058401546006850154600a860154600b870154600180890180548c516101009382161593909302600019011697909704601f81018b90048b0282018b01909b528a8152979a96999598949096169660038b019693959294919360ff1692909189919083018282801561172d5780601f106117025761010080835404028352916020019161172d565b820191906000526020600020905b81548152906001019060200180831161171057829003601f168201915b505050505096508480548060200260200160405190810160405280929190818152602001828054801561178957602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161176b575b505050505094509850985098509850985098509850985050919395975091939597565b60006117b6610b04565b151561180c576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a031660009081526025602052604090205460ff1690565b606061183682612389565b600160a060020a038216600090815260216020908152604091829020600301805483518184028101840190945280845290918301828280156118a157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611883575b50505050509050919050565b60606118b882612389565b600160a060020a038216600090815260216020908152604091829020600401805483518184028101840190945280845290918301828280156118a157602002820191906000526020600020908154600160a060020a031681526001909101906020018083116118835750505050509050919050565b611935611fbd565b806119435750611943610b04565b1515611999576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c79436f6e747261637441646d696e000000000000000000000000000000604482015290519081900360640190fd5b601f8054600160a060020a031916600160a060020a0392909216919091179055565b60008082101580156119ce575060235482105b1515611a4a576040805160e560020a62461bcd02815260206004820152602a60248201527f496e646578206d757374206265203e3d2030206f72203c20676574496e76657360448201527f746f72436f756e74282900000000000000000000000000000000000000000000606482015290519081900360840190fd5b611a76602383815481101515611a5c57fe5b600091825260209091200154600160a060020a0316612389565b6023805483908110611a8457fe5b600091825260209091200154600160a060020a031692915050565b6000611aaa82612389565b50600160a060020a031660009081526021602052604090206006015490565b60235490565b601e5460009081908190600160a060020a03163314611b38576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c795265736572766546756e64436f6e7472616374000000000000000000604482015290519081900360640190fd5b611b4185612af4565b1515611b97576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420757365726e616d6500000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03861660009081526021602052604090209150611bba8661234a565b15611c0f576040805160e560020a62461bcd02815260206004820152601260248201527f416c726561647920616e20636974697a656e0000000000000000000000000000604482015290519081900360640190fd5b611c1885612c58565b67ffffffffffffffff198116600090815260226020526040902054909150600160a060020a031615611c94576040805160e560020a62461bcd02815260206004820152601660248201527f557365726e616d6520616c726561647920657869737400000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff19811660009081526022602090815260409091208054600160a060020a031916600160a060020a03891617905560235483558551611ce391600185019190880190612ec0565b50600282018054600160a060020a031916600160a060020a038616179055600b8201805460ff19169055611d1684612c77565b611d208487612cac565b602380546001810182556000919091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230018054600160a060020a038816600160a060020a03199091161790558154925050509392505050565b600654600160a060020a0316331490565b600881600b8110610b3457fe5b601e54600160a060020a031681565b600254600160a060020a0316331490565b601f54600090600160a060020a03163314611e0b576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b611e1482611e5a565b600160a060020a039081166000908152602160209081526040822060040180546001810182559083529120018054600160a060020a031916939091169290921790915550565b601f54600090600160a060020a03163314611ead576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612fde833981519152604482015290519081900360640190fd5b50600160a060020a039081166000908152602160205260409020600201541690565b611ed7611d7a565b80611ee55750611ee5610b04565b1515611f3b576040805160e560020a62461bcd02815260206004820152600f60248201527f6f6e6c794261636b757041646d696e0000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515611f9b576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b600154600160a060020a0316331490565b6060611fd982612389565b600160a060020a038216600090815260216020908152604091829020600190810180548451600293821615610100026000190190911692909204601f8101849004840283018401909452838252909290918301828280156118a15780601f10612050576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161205e5750939695505050505050565b60008080600160a060020a0385811690851614156120e5576040805160e560020a62461bcd02815260206004820152601160248201527f5468657920617265207468652073616d65000000000000000000000000000000604482015290519081900360640190fd5b6120ef8585612ced565b91506120fb8486612ced565b905081806121065750805b95945050505050565b612117610b04565b151561216d576040805160e560020a62461bcd02815260206004820152600d60248201527f6f6e6c794d61696e41646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03919091166000908152602560205260409020805460ff1916911515919091179055565b600080606081808080333014806121b7575033600160a060020a038916145b151561220d576040805160e560020a62461bcd02815260206004820152601c60248201527f596f752063616e277420736565206f7468657220696e766573746f7200000000604482015290519081900360640190fd5b600160a060020a0388166000908152602160205260409020600481015490965060021061223d576000965061233f565b600486015460408051828152602080840282010190915290801561226b578160200160208202803883390190505b50945060009350600092505b600486015483101561230e5760216000876004018581548110151561229857fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190206006015485518690859081106122ce57fe5b602090810290910101528451612301908690859081106122ea57fe5b60209081029091010151859063ffffffff61254816565b9350600190920191612277565b61231785612d4b565b909250905061233c81612330868563ffffffff612e5e16565b9063ffffffff612e5e16565b96505b505050505050919050565b60008061235683612389565b5050600160a060020a03166000908152602160205260408120600190810154600291811615610100026000190116041190565b33600160a060020a038216148015906123ad5750600054600160a060020a03163314155b80156123c45750601e54600160a060020a03163314155b80156123db5750601f54600160a060020a03163314155b1561240657600160a060020a03811660009081526025602052604090205460ff161561240657600080fd5b50565b6000808260ff16101580156124225750600a8260ff1611155b1515612478576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420696e64657800000000000000000000000000000000000000604482015290519081900360640190fd5b8160ff166001141561248c57506001610aff565b8160ff16600214156124a057506002610aff565b8160ff16600314156124b457506003610aff565b8160ff16600414156124c857506004610aff565b8160ff16600514156124dc57506005610aff565b8160ff16600614156124f057506006610aff565b8160ff166007141561250457506007610aff565b8160ff166008141561251857506008610aff565b8160ff166009141561252c57506009610aff565b8160ff16600a14156125405750600a610aff565b506000610aff565b6000828201838110156125a5576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d61746820616464206572726f720000000000000000000000000000604482015290519081900360640190fd5b8091505b5092915050565b602054604080517f72fbc851000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093606093859385938593849384939116916372fbc85191602480820192869290919082900301818387803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261010081101561266357600080fd5b81516020830180519193928301929164010000000081111561268457600080fd5b8201602081018481111561269757600080fd5b81516401000000008111828201871017156126b157600080fd5b505060208201516040909201805191949293916401000000008111156126d657600080fd5b820160208101848111156126e957600080fd5b815185602082028301116401000000008211171561270657600080fd5b5050606090910151600160a060020a038f1660009081526021602090815260409091208881558751989f50969d50949b50909950975092955061275493600187019350918a01919050612ec0565b50600282018054600160a060020a031916600160a060020a03871617905583516127879060038401906020870190612f3e565b50602054604080517f85c20a0e000000000000000000000000000000000000000000000000000000008152600160a060020a038b81166004830152915191909216916385c20a0e91602480830192600092919082900301818387803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561282c57600080fd5b81019080805164010000000081111561284457600080fd5b8201602081018481111561285757600080fd5b815185602082028301116401000000008211171561287457600080fd5b5050805161288f945060048701935060209091019150612f3e565b50600a820183905560208054604080517f548c0ef4000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915161293394929093169263548c0ef4926024808401939192918290030181600087803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b505050506040513d602081101561292c57600080fd5b5051612409565b600b8301805460ff1916600183600a81111561294b57fe5b021790555061295986612c58565b67ffffffffffffffff198116600090815260226020526040902054909150600160a060020a031615156129f55760238054600181019091557fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230018054600160a060020a038a16600160a060020a0319918216811790925567ffffffffffffffff1983166000908152602260205260409020805490911690911790555b5050505050505050565b602054604080517f5287ce12000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093849384938493849384931691635287ce129160248083019260a092919082900301818787803b158015612a7057600080fd5b505af1158015612a84573d6000803e3d6000fd5b505050506040513d60a0811015612a9a57600080fd5b5080516020808301516040808501516060860151608090960151600160a060020a03909d16600090815260219094529220600581019390935560068301556007820155600881019190915560090196909655505050505050565b805160009081600460ff83161080612b0f575060128260ff16115b15612b1d5760009250612c51565b5060005b8160ff168160ff161015612c1e576030848260ff16815181101515612b4257fe5b90602001015160f860020a900460f860020a0260f860020a900460ff161080612bd057506039848260ff16815181101515612b7957fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16118015612bd057506041848260ff16815181101515612bb157fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16105b80612c085750605a848260ff16815181101515612be957fe5b90602001015160f860020a900460f860020a0260f860020a900460ff16115b15612c165760009250612c51565b600101612b21565b836000815181101515612c2d57fe5b90602001015160f860020a900460f860020a0260f860020a900460ff166030141592505b5050919050565b805160009082901515612c6e57600091506115b0565b50506018015190565b5b600160a060020a039081166000908152602160205260409020600a8101805460010190556002015416801561240657612c78565b600160a060020a039182166000908152602160209081526040822060030180546001810182559083529120018054600160a060020a03191691909216179055565b6000805b50600160a060020a0383811660009081526021602052604090206002810154909184811691161415612d2657600191506125a9565b6002810154600160a060020a031693508315612d4157612cf1565b5060009392505050565b60008060006002845110151515612dac576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c6964206172726179206c656e677468000000000000000000000000604482015290519081900360640190fd5b836000815181101515612dbb57fe5b906020019060200201519250600190505b8351811015612e5857828482815181101515612de457fe5b906020019060200201511115612e16578291508381815181101515612e0557fe5b906020019060200201519250612e50565b818482815181101515612e2557fe5b906020019060200201511115612e50578381815181101515612e4357fe5b9060200190602002015191505b600101612dcc565b50915091565b60008083831115612eb9576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d61746820737562206572726f720000000000000000000000000000604482015290519081900360640190fd5b5050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0157805160ff1916838001178555612f2e565b82800160010185558215612f2e579182015b82811115612f2e578251825591602001919060010190612f13565b50612f3a929150612f9f565b5090565b828054828255906000526020600020908101928215612f93579160200282015b82811115612f935782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190612f5e565b50612f3a929150612fb9565b610b1391905b80821115612f3a5760008155600101612fa5565b610b1391905b80821115612f3a578054600160a060020a0319168155600101612fbf56006f6e6c7957616c6c6574436f6e74726163740000000000000000000000000000a165627a7a7230582054978ce93ee5afff47bf25341118739e9b35ca2bf6f1102dce7535aaf23e499f0029

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

0000000000000000000000000777a2cc786f2a353dd4178112e2e0cb0e48ff0300000000000000000000000064fc9c64c79919df1ea77339977afeea020e9d1e

-----Decoded View---------------
Arg [0] : _mainAdmin (address): 0x0777A2cc786F2a353dD4178112E2e0cb0E48FF03
Arg [1] : _backupAdmin (address): 0x64FC9C64C79919DF1ea77339977AfEeA020e9D1E

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000777a2cc786f2a353dd4178112e2e0cb0e48ff03
Arg [1] : 00000000000000000000000064fc9c64c79919df1ea77339977afeea020e9d1e


Deployed Bytecode Sourcemap

8296:15166:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10879:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10879:191:0;-1:-1:-1;;;;;10879:191:0;;;;;;;19021:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19021:154:0;-1:-1:-1;;;;;19021:154:0;;;;;;;;;;;;;;;;;;;;;4634:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4634:93:0;;;;;;;;;;;;;;;;;;;;;;5133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5133:93:0;;;;8892:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8892:187:0;;;;;14721:834;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14721:834:0;;;;4943:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4943:91:0;;;;13538:923;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13538:923:0;-1:-1:-1;;;;;13538:923:0;;;;;;;;;;;9507:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9507:81:0;;;;;;;;-1:-1:-1;;;;;9507:81:0;;;;;;;;;;;;;;17661:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17661:154:0;-1:-1:-1;;;;;17661:154:0;;;;;11076:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11076:184:0;-1:-1:-1;;;;;11076:184:0;;;;;10577:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10577:117:0;-1:-1:-1;;;;;10577:117:0;;;;;5040:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5040:87:0;;;;9481:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9481:21:0;;;;17254:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17254:401:0;-1:-1:-1;;;;;17254:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18289:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18289:140:0;-1:-1:-1;;;;;18289:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11490:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11490:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11490:209:0;;-1:-1:-1;11490:209:0;;-1:-1:-1;;;;;;;11490:209:0;13095:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13095:241:0;-1:-1:-1;;;;;13095:241:0;;;;;;;18699:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18699:316:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18699:316:0;;-1:-1:-1;18699:316:0;;-1:-1:-1;;;;;;;18699:316:0;17991:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17991:136:0;-1:-1:-1;;;;;17991:136:0;;;;;12558:492;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12558:492:0;-1:-1:-1;;;;;12558:492:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12558:492:0;-1:-1:-1;;;;;12558:492:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12558:492:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12558:492:0;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12558:492:0;;;;;;;;;;;;;;;;;;;;;;;;;11376:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11376:108:0;-1:-1:-1;;;;;11376:108:0;;;;;16874:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16874:167:0;-1:-1:-1;;;;;16874:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16874:167:0;;;;;;;;;;;;;;;;;17047:201;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17047:201:0;-1:-1:-1;;;;;17047:201:0;;;;;10461:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10461:110:0;-1:-1:-1;;;;;10461:110:0;;;;;18435:258;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18435:258:0;;;;;17821:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17821:164:0;-1:-1:-1;;;;;17821:164:0;;;;;19394:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19394:95:0;;;;11750:802;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11750:802:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11750:802:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11750:802:0;;-1:-1:-1;;;11750:802:0;;-1:-1:-1;;;;;11750:802:0;;-1:-1:-1;11750:802:0;;-1:-1:-1;;;11750:802:0;5232:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5232:97:0;;;;8679:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8679:206:0;;;;;9450:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9450:26:0;;;;4840:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4840:97:0;;;;14467:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14467:223:0;-1:-1:-1;;;;;14467:223:0;;;;;13342:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13342:154:0;-1:-1:-1;;;;;13342:154:0;;;;;10700:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10700:173:0;-1:-1:-1;;;;;10700:173:0;;;;;4733:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4733:101:0;;;;18133:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18133:150:0;-1:-1:-1;;;;;18133:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18133:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16465:403;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16465:403:0;-1:-1:-1;;;;;16465:403:0;;;;;;;;;;11266:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11266:104:0;-1:-1:-1;;;;;11266:104:0;;;;;;;;;15561:898;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15561:898:0;-1:-1:-1;;;;;15561:898:0;;;;;19181:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19181:207:0;-1:-1:-1;;;;;19181:207:0;;;;;10879:191;3825:13;:11;:13::i;:::-;3817:39;;;;;;;-1:-1:-1;;;;;3817:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10971:33:0;;;;10963:61;;;;;-1:-1:-1;;;;;10963:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11031:13;:33;;-1:-1:-1;;;;;;11031:33:0;-1:-1:-1;;;;;11031:33:0;;;;;;;;;;10879:191::o;19021:154::-;19085:4;19098:25;19113:9;19098:14;:25::i;:::-;-1:-1:-1;;;;;;19137:20:0;;;;;;:9;:20;;;;;:32;;;19021:154;;;;:::o;4634:93::-;4678:4;4712:9;-1:-1:-1;;;;;4712:9:0;4698:10;:23;4634:93;;:::o;5133:::-;5211:9;;-1:-1:-1;;;;;5211:9:0;5197:10;:23;;5133:93::o;8892:187::-;;;;;;;;;;;;;-1:-1:-1;8892:187:0;:::o;14721:834::-;14798:10;14760:25;14788:21;;;:9;:21;;;;;14835:13;;;;14863:41;;;:48;14788:21;;14835:13;;;;;14760:25;;;;14914:1;-1:-1:-1;14855:98:0;;;;;-1:-1:-1;;;;;14855:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14982:11;14968;:25;;;;;;;;;14960:80;;;;;-1:-1:-1;;;;;14960:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15081:37;15107:10;15081:25;:37::i;:::-;15047:71;;15164:11;15158:18;;;;;;;;15179:1;15158:22;15148:32;;15144:187;15193:11;15182:23;;;;15144:187;;15254:15;:18;;;;;;;;;;;;15224:48;;15221:103;;15295:19;15312:1;15295:16;:19::i;:::-;15285:29;;15221:103;15207:3;;15144:187;;;15351:11;15341:21;;;;;;;;:7;:21;;;;;;;;;15337:213;;;15373:6;;-1:-1:-1;;;;;15373:6:0;:19;15393:10;15410:11;15405:17;;;;;;;;15429:7;15424:13;;;;;;;;15373:65;;;;;;;;;;;;;-1:-1:-1;;;;;15373:65:0;-1:-1:-1;;;;;15373:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15373:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;15447:13:0;;;:23;;15463:7;;-1:-1:-1;;;15447:23:0;;15463:7;15447:23;;;;;;;;;;;;;15484:58;15497:10;15514:11;15509:17;;;;;;;;15533:7;15528:13;;;;;;;;15484:58;;;-1:-1:-1;;;;;15484:58:0;;;;;;;;;;;;;;;;;;;;;;;;;15337:213;14721:834;;;;;:::o;4943:91::-;5020:8;;-1:-1:-1;;;;;5020:8:0;5006:10;:22;;4943:91::o;13538:923::-;9929:6;;-1:-1:-1;;;;;9929:6:0;9907:10;:29;9899:60;;;;;-1:-1:-1;;;;;9899:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9899:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13692:24:0;;;;13684:60;;;;;-1:-1:-1;;;;;13684:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:1;13759:12;;;13751:47;;;;;-1:-1:-1;;;;;13751:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13824:1;13813:7;:12;;:28;;;;;13840:1;13829:7;:12;;13813:28;13805:63;;;;;;;-1:-1:-1;;;;;13805:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13900:1;13883:18;;;13875:52;;;;;-1:-1:-1;;;;;13875:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13973:19:0;;;;;;:9;:19;;;;;:36;;;:49;;14014:7;13973:49;:40;:49;:::i;:::-;-1:-1:-1;;;;;13934:19:0;;;;;;:9;:19;;;;;:36;;:88;14033:12;;14029:427;;;-1:-1:-1;;;;;14101:19:0;;;;;;:9;:19;;;;;:42;;;:61;;14148:13;14101:61;:46;:61;:::i;:::-;-1:-1:-1;;;;;14056:19:0;;;;;;:9;:19;;;;;:42;;:106;14029:427;;;14180:7;14191:1;14180:12;14176:280;;;-1:-1:-1;;;;;14250:19:0;;;;;;:9;:19;;;;;:44;;;:63;;14299:13;14250:63;:48;:63;:::i;:::-;-1:-1:-1;;;;;14203:19:0;;;;;;:9;:19;;;;;:44;;:110;14176:280;;;-1:-1:-1;;;;;14384:19:0;;;;;;:9;:19;;;;;:45;;;:64;;14434:13;14384:64;:49;:64;:::i;:::-;-1:-1:-1;;;;;14336:19:0;;;;;;:9;:19;;;;;:45;;:112;14176:280;13538:923;;;;:::o;9507:81::-;;;-1:-1:-1;;;;;9507:81:0;;:::o;17661:154::-;17725:4;17738:25;17753:9;17738:14;:25::i;:::-;-1:-1:-1;;;;;;17777:20:0;;;;;:9;:20;;;;;:32;;;;17661:154::o;11076:184::-;4579:15;:13;:15::i;:::-;4571:43;;;;;;;-1:-1:-1;;;;;4571:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11167:31:0;;;;11159:59;;;;;-1:-1:-1;;;;;11159:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11225:11;:29;;-1:-1:-1;;;;;;11225:29:0;-1:-1:-1;;;;;11225:29:0;;;;;;;;;;11076:184::o;10577:117::-;3920:17;:15;:17::i;:::-;:34;;;;3941:13;:11;:13::i;:::-;3912:64;;;;;;;-1:-1:-1;;;;;3912:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10654:11;:34;;-1:-1:-1;;;;;;10654:34:0;-1:-1:-1;;;;;10654:34:0;;;;;;;;;;10577:117::o;5040:87::-;5115:6;;-1:-1:-1;;;;;5115:6:0;5101:10;:20;;5040:87::o;9481:21::-;;;-1:-1:-1;;;;;9481:21:0;;:::o;17254:401::-;17318:4;17324;17330;17336;17342;17355:25;17370:9;17355:14;:25::i;:::-;-1:-1:-1;;;;;;;;;17403:20:0;;;;;;;;:9;:20;;;;;:32;;;;17444:37;;;;17490:43;;;;17542:45;;;;17596:46;;;;;17403:32;;17444:37;;-1:-1:-1;17490:43:0;17542:45;17596:46;17254:401::o;18289:140::-;18346:4;18359:25;18374:9;18359:14;:25::i;:::-;-1:-1:-1;;;;;;18398:20:0;;;;;:9;:20;;;;;:25;;;;;;18289:140::o;11490:209::-;11567:6;3920:17;:15;:17::i;:::-;:34;;;;3941:13;:11;:13::i;:::-;3912:64;;;;;;;-1:-1:-1;;;;;3912:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11576:1:0;11562:132;11583:10;:17;11579:1;:21;11562:132;;;11616:31;11633:10;11644:1;11633:13;;;;;;;;;;;;;;;;;;11616:16;:31::i;:::-;11656:30;11672:10;11683:1;11672:13;;;;;;;;;;;;;;;;;;11656:15;:30::i;:::-;11602:3;;11562:132;;;11490:209;;:::o;13095:241::-;9929:6;;13202:15;;-1:-1:-1;;;;;9929:6:0;9907:10;:29;9899:60;;;;;-1:-1:-1;;;;;9899:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9899:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13220:19:0;;;;;;;:9;:19;;;;;;:27;;;;;;13287:18;;;;;;:30;;;:43;;13322:7;13287:43;:34;:43;:::i;:::-;-1:-1:-1;;;;;13254:18:0;;;;;;;:9;:18;;;;;:30;;:76;-1:-1:-1;;13095:241:0:o;18699:316::-;18774:7;18854:22;18798:28;:9;:26;:28::i;:::-;18790:57;;;;;;;-1:-1:-1;;;;;18790:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18879:27;:9;:25;:27::i;:::-;-1:-1:-1;;18928:33:0;;;;;;:17;:33;;;;;;18854:52;;-1:-1:-1;18913:49:0;;-1:-1:-1;;;;;18928:33:0;18913:14;:49::i;:::-;-1:-1:-1;;18976:33:0;;;;;;:17;:33;;;;;;-1:-1:-1;;;;;18976:33:0;;-1:-1:-1;18699:316:0;;;;;:::o;17991:136::-;18046:4;18059:25;18074:9;18059:14;:25::i;:::-;-1:-1:-1;;;;;;18098:20:0;;;;;:9;:20;;;;;:23;;17991:136::o;12558:492::-;10051:11;;12667:4;;12673:6;;12667:4;;12673:6;;12667:4;;;;;;;;;;-1:-1:-1;;;;;10051:11:0;10029:10;:34;10021:70;;;;;-1:-1:-1;;;;;10021:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12778:27:0;;;;;;;:9;:27;;;;;;;;;12828:11;;12874:16;;;;;12932:20;;;;12961:25;;;;12995:20;;;;13024:13;;;;12848:17;;;;12812:232;;;;12874:16;12812:232;;;;;;;;-1:-1:-1;;12812:232:0;;;;;;;;;;;;;;;;;;;;;;;;12778:27;;12828:11;;12848:17;;12874:16;;;;;12899:24;;;;12932:20;;12961:25;;12995:20;;13024:13;;;12812:232;;12848:17;;12812:232;;;12848:17;12812:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12812:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12558:492;;;;;;;;;;:::o;11376:108::-;11446:4;3825:13;:11;:13::i;:::-;3817:39;;;;;;;-1:-1:-1;;;;;3817:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11466:12:0;;;;;:2;:12;;;;;;;;;11376:108::o;16874:167::-;16942:9;16960:25;16975:9;16960:14;:25::i;:::-;-1:-1:-1;;;;;16999:20:0;;;;;;:9;:20;;;;;;;;;:36;;16992:43;;;;;;;;;;;;;;;;;16999:36;;16992:43;;16999:36;16992:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16992:43:0;;;;;;;;;;;;;;;;;;;;;;;16874:167;;;:::o;17047:201::-;17132:9;17150:25;17165:9;17150:14;:25::i;:::-;-1:-1:-1;;;;;17189:20:0;;;;;;:9;:20;;;;;;;;;:53;;17182:60;;;;;;;;;;;;;;;;;17189:53;;17182:60;;17189:53;17182:60;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17182:60:0;;;;;;;;;;;;;;;;;;;;;;17047:201;;;:::o;10461:110::-;3920:17;:15;:17::i;:::-;:34;;;;3941:13;:11;:13::i;:::-;3912:64;;;;;;;-1:-1:-1;;;;;3912:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10532:6;:33;;-1:-1:-1;;;;;;10532:33:0;-1:-1:-1;;;;;10532:33:0;;;;;;;;;;10461:110::o;18435:258::-;18493:7;18527:1;18517:6;:11;;:44;;;;-1:-1:-1;18541:13:0;:20;18532:29;;18517:44;18509:99;;;;;;;-1:-1:-1;;;;;18509:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18615:37;18630:13;18644:6;18630:21;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18630:21:0;18615:14;:37::i;:::-;18666:13;:21;;18680:6;;18666:21;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18666:21:0;;18435:258;-1:-1:-1;;18435:258:0:o;17821:164::-;17890:4;17903:25;17918:9;17903:14;:25::i;:::-;-1:-1:-1;;;;;;17942:20:0;;;;;:9;:20;;;;;:37;;;;17821:164::o;19394:95::-;19463:13;:20;19394:95;:::o;11750:802::-;10051:11;;11878:4;;;;;;-1:-1:-1;;;;;10051:11:0;10029:10;:34;10021:70;;;;;-1:-1:-1;;;;;10021:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11902:28;:9;:26;:28::i;:::-;11894:57;;;;;;;-1:-1:-1;;;;;11894:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11986:16:0;;;;;;:9;:16;;;;;;-1:-1:-1;12018:16:0;11996:5;12018:9;:16::i;:::-;12017:17;12009:48;;;;;-1:-1:-1;;;;;12009:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12089:27;:9;:25;:27::i;:::-;-1:-1:-1;;12131:33:0;;12176:3;12131:33;;;:17;:33;;;;;;12064:52;;-1:-1:-1;;;;;;12131:33:0;:49;12123:84;;;;;-1:-1:-1;;;;;12123:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12214:33:0;;;;;;:17;:33;;;;;;;;:41;;-1:-1:-1;;;;;;12214:41:0;-1:-1:-1;;;;;12214:41:0;;;;;12278:13;:20;12264:34;;12305:29;;;;-1:-1:-1;12305:17:0;;;:29;;;;;:::i;:::-;-1:-1:-1;12341:16:0;;;:27;;-1:-1:-1;;;;;;12341:27:0;-1:-1:-1;;;;;12341:27:0;;;;;12375:13;;;:29;;-1:-1:-1;;12375:29:0;;;12411:37;12341:27;12411;:37::i;:::-;12455:34;12473:8;12483:5;12455:17;:34::i;:::-;12496:13;27:10:-1;;39:1;23:18;;45:23;;-1:-1;12496:25:0;;;;;;;;-1:-1:-1;;;;;12496:25:0;;-1:-1:-1;;;;;;12496:25:0;;;;;;12535:11;;;-1:-1:-1;11750:802:0;;;;;;;:::o;5232:97::-;5312:11;;-1:-1:-1;;;;;5312:11:0;5298:10;:25;;5232:97::o;8679:206::-;;;;;;;;;9450:26;;;-1:-1:-1;;;;;9450:26:0;;:::o;4840:97::-;4920:11;;-1:-1:-1;;;;;4920:11:0;4906:10;:25;;4840:97::o;14467:223::-;9929:6;;14571:16;;-1:-1:-1;;;;;9929:6:0;9907:10;:29;9899:60;;;;;-1:-1:-1;;;;;9899:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9899:60:0;;;;;;;;;;;;;;;14590:20;14601:8;14590:10;:20::i;:::-;-1:-1:-1;;;;;14617:19:0;;;;;;;:9;:19;;;;;;;:52;;27:10:-1;;39:1;23:18;;45:23;;14617:67:0;;;;;;;;-1:-1:-1;;;;;;14617:67:0;;;;;;;;;;;;-1:-1:-1;14467:223:0:o;13342:154::-;9929:6;;13436:7;;-1:-1:-1;;;;;9929:6:0;9907:10;:29;9899:60;;;;;-1:-1:-1;;;;;9899:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9899:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13462:20:0;;;;;;;:9;:20;;;;;:28;;;;;13342:154::o;10700:173::-;4464:15;:13;:15::i;:::-;:32;;;;4483:13;:11;:13::i;:::-;4456:60;;;;;;;-1:-1:-1;;;;;4456:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10786:29:0;;;;10778:57;;;;;-1:-1:-1;;;;;10778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:9;:25;;-1:-1:-1;;;;;;10842:25:0;-1:-1:-1;;;;;10842:25:0;;;;;;;;;;10700:173::o;4733:101::-;4815:13;;-1:-1:-1;;;;;4815:13:0;4801:10;:27;;4733:101::o;18133:150::-;18194:6;18209:25;18224:9;18209:14;:25::i;:::-;-1:-1:-1;;;;;18248:20:0;;;;;;:9;:20;;;;;;;;;:29;;;;18241:36;;;;;;;;;;;-1:-1:-1;;18241:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18248:29;;18241:36;;18248:29;18241:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18241:36:0;;18133:150;-1:-1:-1;;;;;;18133:150:0:o;16465:403::-;16576:4;;;-1:-1:-1;;;;;16600:20:0;;;;;;;;16592:50;;;;;-1:-1:-1;;;;;16592:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16678:46;16705:8;16715;16678:26;:46::i;:::-;16649:75;;16758:46;16785:8;16795;16758:26;:46::i;:::-;16731:73;;16818:21;:44;;;;16843:19;16818:44;16811:51;16465:403;-1:-1:-1;;;;;16465:403:0:o;11266:104::-;3825:13;:11;:13::i;:::-;3817:39;;;;;;;-1:-1:-1;;;;;3817:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11343:12:0;;;;;;;;:2;:12;;;;;:21;;-1:-1:-1;;11343:21:0;;;;;;;;;;11266:104::o;15561:898::-;15636:4;;15896:32;15636:4;;;;15657:10;15679:4;15657:27;;:54;;-1:-1:-1;15688:10:0;-1:-1:-1;;;;;15688:23:0;;;15657:54;15649:95;;;;;;;-1:-1:-1;;;;;15649:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15779:20:0;;;;;;:9;:20;;;;;15810:41;;;:48;15779:20;;-1:-1:-1;15862:1:0;-1:-1:-1;15806:84:0;;15881:1;15874:8;;;;15806:84;15942:41;;;:48;15931:60;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;15931:60:0;;15896:95;;16027:1;15998:30;;16049:1;16040:10;;16035:270;16056:41;;;:48;16052:52;;16035:270;;;16144:9;:55;16154:8;:41;;16196:1;16154:44;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16154:44:0;16144:55;;;;;;;;;;;;:72;;;16120:21;;:18;;16139:1;;16120:21;;;;;;;;;;;;;;:96;16275:21;;16249:48;;16275:18;;16294:1;;16275:21;;;;;;;;;;;;;;;16249;;:48;:25;:48;:::i;:::-;16225:72;-1:-1:-1;16106:3:0;;;;;16035:270;;;16360:37;:18;:35;:37::i;:::-;16344:53;;-1:-1:-1;16344:53:0;-1:-1:-1;16411:42:0;16344:53;16411:30;:21;16344:53;16411:30;:25;:30;:::i;:::-;:34;:42;:34;:42;:::i;:::-;16404:49;;15561:898;;;;;;;;;;:::o;19181:207::-;19240:4;19285:25;19253;19268:9;19253:14;:25::i;:::-;-1:-1:-1;;;;;;;19313:20:0;;;;;:9;:20;;;;;19353:17;;;;19347:31;;;;;;;;-1:-1:-1;;19347:31:0;;;:35;;19181:207::o;23233:226::-;23300:10;-1:-1:-1;;;;;23300:23:0;;;;;;:50;;-1:-1:-1;23341:9:0;;-1:-1:-1;;;;;23341:9:0;23327:10;:23;;23300:50;:79;;;;-1:-1:-1;23368:11:0;;-1:-1:-1;;;;;23368:11:0;23354:10;:25;;23300:79;:112;;;;-1:-1:-1;23405:6:0;;-1:-1:-1;;;;;23405:6:0;23383:10;:29;;23300:112;23296:158;;;-1:-1:-1;;;;;23432:13:0;;;;;;:2;:13;;;;;;;;23431:14;23423:23;;;;;;23233:226;:::o;20720:754::-;20782:9;20818:1;20808:6;:11;;;;:27;;;;;20833:2;20823:6;:12;;;;20808:27;20800:53;;;;;;;-1:-1:-1;;;;;20800:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20864:6;:11;;20874:1;20864:11;20860:609;;;-1:-1:-1;20893:10:0;20886:17;;20860:609;20921:6;:11;;20931:1;20921:11;20917:552;;;-1:-1:-1;20950:10:0;20943:17;;20917:552;20978:6;:11;;20988:1;20978:11;20974:495;;;-1:-1:-1;21007:10:0;21000:17;;20974:495;21035:6;:11;;21045:1;21035:11;21031:438;;;-1:-1:-1;21064:10:0;21057:17;;21031:438;21092:6;:11;;21102:1;21092:11;21088:381;;;-1:-1:-1;21121:10:0;21114:17;;21088:381;21149:6;:11;;21159:1;21149:11;21145:324;;;-1:-1:-1;21178:10:0;21171:17;;21145:324;21206:6;:11;;21216:1;21206:11;21202:267;;;-1:-1:-1;21235:10:0;21228:17;;21202:267;21263:6;:11;;21273:1;21263:11;21259:210;;;-1:-1:-1;21292:10:0;21285:17;;21259:210;21320:6;:11;;21330:1;21320:11;21316:153;;;-1:-1:-1;21349:10:0;21342:17;;21316:153;21377:6;:12;;21387:2;21377:12;21373:96;;;-1:-1:-1;21407:11:0;21400:18;;21373:96;-1:-1:-1;21448:13:0;21441:20;;1447:158;1505:7;1533:5;;;1553:6;;;;1545:37;;;;;-1:-1:-1;;;;;1545:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:1;1591:8;;1447:158;;;;;;:::o;21480:981::-;21776:10;;:38;;;;;;-1:-1:-1;;;;;21776:38:0;;;;;;;;;21540:7;;21554:22;;21540:7;;21554:22;;21540:7;;;;;;21776:10;;;:27;;:38;;;;;21540:7;;21776:38;;;;;;;;21540:7;21776:10;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21776:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21776:38:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;21776:38:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:3;5:12;;2:2;;;30:1;27;20:12;2:2;21776:38:0;;;;;;;;;;;;;;20:11:-1;12:20;;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;;21776:38:0;;;;;;;;;;;;;;;20:11:-1;12:20;;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;224:3;218:10;339:9;333:2;319:12;315:21;297:16;293:44;290:59;268:11;254:12;251:29;239:119;236:2;;;371:1;368;361:12;236:2;-1:-1;;21776:38:0;;;;;-1:-1:-1;;;;;21851:20:0;;;;;;:9;21776:38;21851:20;;;21776:38;21851:20;;;21878:16;;;21901:28;;21667:147;;-1:-1:-1;21667:147:0;;-1:-1:-1;21667:147:0;;-1:-1:-1;21776:38:0;;-1:-1:-1;21776:38:0;-1:-1:-1;21851:20:0;;-1:-1:-1;21901:28:0;;:17;;;;-1:-1:-1;21901:28:0;;;;;-1:-1:-1;21901:28:0;:::i;:::-;-1:-1:-1;21936:16:0;;;:26;;-1:-1:-1;;;;;;21936:26:0;-1:-1:-1;;;;;21936:26:0;;;;;21969:42;;;;:24;;;;:42;;;;;:::i;:::-;-1:-1:-1;22062:10:0;;:57;;;;;;-1:-1:-1;;;;;22062:57:0;;;;;;;;;:10;;;;;:46;;:57;;;;;:10;;:57;;;;;;;:10;;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;22062:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22062:57:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;22062:57:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;22062:57:0;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;224:3;218:10;339:9;333:2;319:12;315:21;297:16;293:44;290:59;268:11;254:12;251:29;239:119;236:2;;;371:1;368;361:12;236:2;-1:-1;;22018:101:0;;;;-1:-1:-1;22018:41:0;;;;-1:-1:-1;22018:101:0;;;;;-1:-1:-1;22018:101:0;:::i;:::-;-1:-1:-1;22126:20:0;;;:34;;;22206:10;;;:29;;;;;;-1:-1:-1;;;;;22206:29:0;;;;;;;;;22183:54;;22206:10;;;;;:18;;:29;;;;;:10;;:29;;;;;;:10;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;22206:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22206:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22206:29:0;22183:16;:54::i;:::-;22167:13;;;:70;;-1:-1:-1;;22167:70:0;;;;;;;;;;;;;;;;22270:26;:8;:24;:26::i;:::-;-1:-1:-1;;22307:32:0;;22351:3;22307:32;;;:17;:32;;;;;;22246:50;;-1:-1:-1;;;;;;22307:32:0;:48;22303:153;;;22366:13;27:10:-1;;39:1;23:18;;45:23;;;22366:29:0;;;;-1:-1:-1;;;;;22366:29:0;;-1:-1:-1;;;;;;22366:29:0;;;;;;;;-1:-1:-1;;22404:32:0;;-1:-1:-1;22404:32:0;;;:17;22366:29;22404:32;;;;:44;;;;;;;;;;22303:153;21480:981;;;;;;;;:::o;22467:760::-;22837:10;;:36;;;;;;-1:-1:-1;;;;;22837:36:0;;;;;;;;;22526:16;;;;;;;;;;;;22837:10;;:25;;:36;;;;;;;;;;;;;;22526:16;22837:10;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;22837:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22837:36:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;22837:36:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22910:20:0;;;;;;;:9;:20;;;;;22937;;;:34;;;;22978:25;;;:44;23029:31;;;:56;23092:33;;;:60;;;;23159:34;;:62;;;;-1:-1:-1;;;;;;22467:760:0:o;2350:549::-;2467:23;;2433:4;;;2509:1;2503:7;;;;;2502:23;;;2522:2;2516:3;:8;;;2502:23;2498:41;;;2534:5;2527:12;;;;2498:41;-1:-1:-1;2592:1:0;2577:245;2599:3;2595:7;;:1;:7;;;2577:245;;;2662:2;2645:9;2656:1;2639:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;2639:19:0;;-1:-1:-1;;;2639:19:0;-1:-1:-1;;;2633:26:0;;:31;;;2632:114;;;;2708:2;2691:9;2702:1;2685:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;2685:19:0;;-1:-1:-1;;;2685:19:0;-1:-1:-1;;;2679:26:0;;:31;;;:66;;;;;2743:2;2726:9;2737:1;2720:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;2720:19:0;;-1:-1:-1;;;2720:19:0;-1:-1:-1;;;2714:26:0;;:31;;;2679:66;2632:160;;;;2789:2;2772:9;2783:1;2766:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;2766:19:0;;-1:-1:-1;;;2766:19:0;-1:-1:-1;;;2760:26:0;;:31;;;2632:160;2618:196;;;2809:5;2802:12;;;;2618:196;2604:3;;2577:245;;;2873:9;2884:1;2867:19;;;;;;;;;;;;;;;-1:-1:-1;;;2867:19:0;;-1:-1:-1;;;2867:19:0;-1:-1:-1;;;2861:26:0;;:32;;2891:2;2861:32;;2854:39;;2350:549;;;;;;:::o;1961:294::-;2125:26;;2040:14;;2107:6;;2125:31;2121:64;;;2174:3;;-1:-1:-1;2167:10:0;;2121:64;-1:-1:-1;;2239:2:0;2227:15;2221:22;;2202:48::o;20502:212::-;20572:137;-1:-1:-1;;;;;20584:19:0;;;;;;;:9;:19;;;;;:31;;;:36;;20619:1;20584:36;;;20640:27;;;;20683:24;;20572:137;;;;20034:134;-1:-1:-1;;;;;20112:19:0;;;;;;;:9;:19;;;;;;;:35;;27:10:-1;;39:1;23:18;;45:23;;20112:50:0;;;;;;;;-1:-1:-1;;;;;;20112:50:0;;;;;;;;20034:134::o;20174:322::-;20260:4;20285:25;20273:199;-1:-1:-1;;;;;;20313:16:0;;;;;;;:9;:16;;;;;20342;;;;20313;;20342:23;;;:16;;:23;20338:61;;;20385:4;20378:11;;;;20338:61;20415:16;;;;-1:-1:-1;;;;;20415:16:0;;-1:-1:-1;20447:23:0;;20273:199;;;;;-1:-1:-1;20485:5:0;;20174:322;-1:-1:-1;;;20174:322:0:o;5361:377::-;5424:8;5434:11;5537:6;5478:1;5462:5;:12;:17;;5454:50;;;;;;;-1:-1:-1;;;;;5454:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5517:5;5523:1;5517:8;;;;;;;;;;;;;;;;;;5511:14;;5546:1;5537:10;;5532:201;5553:5;:12;5549:1;:16;5532:201;;;5596:3;5585:5;5591:1;5585:8;;;;;;;;;;;;;;;;;;:14;5581:145;;;5621:3;5612:12;;5641:5;5647:1;5641:8;;;;;;;;;;;;;;;;;;5635:14;;5581:145;;;5680:6;5669:5;5675:1;5669:8;;;;;;;;;;;;;;;;;;:17;5665:61;;;5708:5;5714:1;5708:8;;;;;;;;;;;;;;;;;;5699:17;;5665:61;5567:3;;5532:201;;;5361:377;;;;:::o;1209:158::-;1267:7;;1291:6;;;;1283:37;;;;;-1:-1:-1;;;;;1283:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1339:5:0;;;1209:158::o;8296:15166::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8296:15166:0;;;-1:-1:-1;8296:15166:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8296:15166:0;-1:-1:-1;;;;;8296:15166:0;;;;;;;;;;;-1:-1:-1;8296:15166:0;;;;;;;-1:-1:-1;8296:15166:0;;;-1:-1:-1;8296:15166:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8296:15166:0;;;;;;

Swarm Source

bzzr://54978ce93ee5afff47bf25341118739e9b35ca2bf6f1102dce7535aaf23e499f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.