func (w *CivilPLCRVotingContractWatchers) StartCivilPLCRVotingContractWatchers(client bind.ContractBackend,
	eventRecvChan chan *model.Event, errs chan error) ([]utils.WatcherSubscription, error) {
	w.errors = errs
	contract, err := contract.NewCivilPLCRVotingContract(w.contractAddress, client)
	if err != nil {
		log.Errorf("Error initializing StartCivilPLCRVotingContract: err: %v", err)
		return nil, errors.Wrap(err, "error initializing StartCivilPLCRVotingContract")
	}
	w.contract = contract
	var sub utils.WatcherSubscription
	subs := []utils.WatcherSubscription{}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "PollCreated") {
		sub, err = w.startWatchPollCreated(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startPollCreated")
		}
		subs = append(subs, sub)
	}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "TokensRescued") {
		sub, err = w.startWatchTokensRescued(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startTokensRescued")
		}
		subs = append(subs, sub)
	}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "VoteCommitted") {
		sub, err = w.startWatchVoteCommitted(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startVoteCommitted")
		}
		subs = append(subs, sub)
	}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "VoteRevealed") {
		sub, err = w.startWatchVoteRevealed(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startVoteRevealed")
		}
		subs = append(subs, sub)
	}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "VotingRightsGranted") {
		sub, err = w.startWatchVotingRightsGranted(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startVotingRightsGranted")
		}
		subs = append(subs, sub)
	}
	if specs.IsListenerEnabledForEvent("CivilPLCRVotingContract", "VotingRightsWithdrawn") {
		sub, err = w.startWatchVotingRightsWithdrawn(eventRecvChan)
		if err != nil {
			return nil, errors.WithMessage(err, "error starting startVotingRightsWithdrawn")
		}
		subs = append(subs, sub)
	}
	w.activeSubs = subs
	return subs, nil
}
StartCivilPLCRVotingContractWatchers starts up the event watchers for CivilPLCRVotingContract
package watcher
import (
	"context"
	"time"
	"github.com/davecgh/go-spew/spew"
	log "github.com/golang/glog"
	"github.com/pkg/errors"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	specs "github.com/joincivil/civil-events-crawler/pkg/contractspecs"
	"github.com/joincivil/civil-events-crawler/pkg/model"
	"github.com/joincivil/civil-events-crawler/pkg/utils"
	"github.com/joincivil/go-common/pkg/generated/contract"
	ctime "github.com/joincivil/go-common/pkg/time"
	"math/big"
)
func NewCivilPLCRVotingContractWatchers(contractAddress common.Address) *CivilPLCRVotingContractWatchers {
	return &CivilPLCRVotingContractWatchers{
		contractAddress: contractAddress,
	}
}
type CivilPLCRVotingContractWatchers struct {
	errors          chan error
	contractAddress common.Address
	contract        *contract.CivilPLCRVotingContract
	activeSubs      []utils.WatcherSubscription
}
func (w *CivilPLCRVotingContractWatchers) ContractAddress() common.Address {
	return w.contractAddress
}
func (w *CivilPLCRVotingContractWatchers) ContractName() string {
	return "CivilPLCRVotingContract"
}
func (w *CivilPLCRVotingContractWatchers) cancelFunc(cancelFn context.CancelFunc, killCancel <-chan struct{}) {
}
func (w *CivilPLCRVotingContractWatchers) StopWatchers(unsub bool) error {
	if unsub {
		for _, sub := range w.activeSubs {
			sub.Unsubscribe()
		}
	}
	w.activeSubs = nil
	w.contract = nil
	return nil
}
func (w *CivilPLCRVotingContractWatchers) StartWatchers(client bind.ContractBackend,
	eventRecvChan chan *model.Event, errs chan error) ([]utils.WatcherSubscription, error) {
	return w.StartCivilPLCRVotingContractWatchers(client, eventRecvChan, errs)
}