pragma solidity 0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; interface ILiquidityPoolManagerV2 { function stakes(address pair) external view returns (address); } interface IPangolinPair { function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); } interface IPangolinERC20 { function balanceOf(address owner) external view returns (uint); function getCurrentVotes(address account) external view returns (uint); function delegates(address account) external view returns (address); } interface IStakingRewards { function rewardsToken() external view returns (address); function stakingToken() external view returns (address); function balanceOf(address owner) external view returns (uint); function earned(address account) external view returns (uint); } // SPDX-License-Identifier: GPL-3.0-or-later contract PangolinVoteCalculator is Ownable { IPangolinERC20 png; ILiquidityPoolManagerV2 liquidityManager; constructor(address _png, address _liquidityManager) { png = IPangolinERC20(_png); liquidityManager = ILiquidityPoolManagerV2(_liquidityManager); } function getVotesFromFarming(address voter, address[] calldata farms) external view returns (uint votes) { for (uint i; i