private void OnAccepted(Accepted accepted)
		{
			ProposalState state;
			if (proposalsState.TryGetValue(accepted.ProposalNumber, out state) == false)
				return;
			state.NumberOfAccepts += 1;
			if (state.NumberOfAccepts <= allAcceptors.Length / 2)
				return;
			ProposalState _;
			proposalsState.TryRemove(state.ProposalNumber, out _);
		}
		private void OnAccepted(Accepted accepted)
		{
			LearnerState state = learnerState.GetOrAdd(accepted.ProposalNumber, new LearnerState
			{
				BallotNumber = accepted.BallotNumber,
				NumberOfAccepts = 1,
				ProposalNumber = accepted.ProposalNumber
			});
			if (state.BallotNumber < accepted.BallotNumber)
			{
				return;
			}
			if (state.Accepted)  // duplicate
				return;

			state.NumberOfAccepts += 1;
			if (state.NumberOfAccepts < acceptors.Length / 2)
				return;
			OnAcceptedValue(accepted.Value);
		}