contract TokenState is Owned, State {
    /* ERC20 fields. */
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    constructor(address _owner, address _associatedContract) public Owned(_owner) State(_associatedContract) {}

    /* ========== SETTERS ========== */

    /**
     * @notice Set ERC20 allowance.
     * @dev Only the associated contract may call this.
     * @param tokenOwner The authorising party.
     * @param spender The authorised party.
     * @param value The total value the authorised party may spend on the
     * authorising party's behalf.
     */
    function setAllowance(
        address tokenOwner,
        address spender,
        uint value
    ) external onlyAssociatedContract {
        allowance[tokenOwner][spender] = value;
    }

    /**
     * @notice Set the balance in a given account
     * @dev Only the associated contract may call this.
     * @param account The account whose value to set.
     * @param value The new balance of the given account.
     */
    function setBalanceOf(address account, uint value) external onlyAssociatedContract {
        balanceOf[account] = value;
    }
}
// Inheritance
// https://docs.peri.finance/contracts/source/contracts/tokenstate
function setAllowance(
    address tokenOwner,
    address spender,
    uint value
) external onlyAssociatedContract {
    allowance[tokenOwner][spender] = value;
}

/**
 * @notice Set ERC20 allowance.
 * @dev Only the associated contract may call this.
 * @param tokenOwner The authorising party.
 * @param spender The authorised party.
 * @param value The total value the authorised party may spend on the
 * authorising party's behalf.
 */