contract Administratable is Claimable {
  struct MintStruct {
    uint256 mintedTotal;
    uint256 lastMintTimestamp;
  }

  struct BurnStruct {
    uint256 burntTotal;
    uint256 lastBurnTimestamp;
  }

  mapping(address => bool) public admins;
  mapping(address => MintStruct) public mintLimiter;
  mapping(address => BurnStruct) public burnLimiter;

  event AdminAddressAdded(address indexed addr);
  event AdminAddressRemoved(address indexed addr);


  /**
   * @dev Throws if called by any account that's not admin or owner.
   */
  modifier onlyAdmin() {
    require(admins[msg.sender] || msg.sender == owner);
    _;
  }

  /**
   * @dev add an address to the admin list
   * @param addr address
   * @return true if the address was added to the admin list, false if the address was already in the admin list
   */
  function addAddressToAdmin(address addr) onlyOwner public returns(bool success) {
    if (!admins[addr]) {
      admins[addr] = true;
      mintLimiter[addr] = MintStruct(0, 0);
      burnLimiter[addr] = BurnStruct(0, 0);
      emit AdminAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev remove an address from the admin list
   * @param addr address
   * @return true if the address was removed from the admin list,
   * false if the address wasn't in the admin list in the first place
   */
  function removeAddressFromAdmin(address addr) onlyOwner public returns(bool success) {
    if (admins[addr]) {
      admins[addr] = false;
      delete mintLimiter[addr];
      delete burnLimiter[addr];
      emit AdminAddressRemoved(addr);
      success = true;
    }
  }
}
/**
 * @title Administratable
 * @dev The Admin contract has the list of admin addresses.
 */
function addAddressToAdmin(address addr) onlyOwner public returns(bool success) {
  if (!admins[addr]) {
    admins[addr] = true;
    mintLimiter[addr] = MintStruct(0, 0);
    burnLimiter[addr] = BurnStruct(0, 0);
    emit AdminAddressAdded(addr);
    success = true;
  }
}

/**
 * @dev add an address to the admin list
 * @param addr address
 * @return true if the address was added to the admin list, false if the address was already in the admin list
 */