contract RaiderGold is ERC20Burnable, Ownable {
    // max token supply
    uint256 public constant maxTokenSupply = 100000000 * 10**18;
    // mapping of admin contracts
    mapping(address => bool) private admins;

    constructor() ERC20("Raider Gold", "RGO") {
        // allocate 40% of max supply to team/advisors/investors/future hires
        _mint(msg.sender, 40000000 * 10**18);
    }

    /************/
    /* MODIFIER */
    /************/

    modifier onlyAdmins() {
        require(admins[msg.sender] == true);
        _;
    }

    /************/
    /* ADMIN */
    /************/

    /**
     * @notice add admin roles
     * @param _admins - array of addresses to add as admins
     */
    function addAdmins(address[] memory _admins) external onlyOwner {
        require(_admins.length > 0, "Empty array.");
        for (uint256 i = 0; i < _admins.length; i++) {
            admins[_admins[i]] = true;
        }
    }

    /**
     * @notice mints tokens after admin delegate contract calls
     * @dev set up like this to allow other related contracts (namely staking) to mint
     * @param _account - the account to mint tokens to
     * @param _amount - the amount of tokens to mint
     */
    function adminMint(address _account, uint256 _amount) external payable onlyAdmins{
        require(_amount > 0 && totalSupply() + _amount <= maxTokenSupply, "Invalid amount");
        _mint(_account, _amount);
    }

    /**
     * @notice burns token after admin delegate contract calls
     * @dev set up like this to allow other related contracts (namely armory) to burn
     * @param _account - the account to burn tokens from
     * @param _amount - the amount of tokens to burn
     */
    function adminBurn(address _account, uint256 _amount) external onlyAdmins{
        require(_amount > 0, "Zero amount");
        burnFrom(_account, _amount);
    }
}
function adminBurn(address _account, uint256 _amount) external onlyAdmins{
    require(_amount > 0, "Zero amount");
    burnFrom(_account, _amount);
}

/**
 * @notice burns token after admin delegate contract calls
 * @dev set up like this to allow other related contracts (namely armory) to burn
 * @param _account - the account to burn tokens from
 * @param _amount - the amount of tokens to burn
 */