+ candidatePassers = b & shift<Down>(pos.pieces(Them, PAWN));
+ if (candidatePassers)
+ {
+ // Can we lever the blocker of a candidate passer?
+ leverable = shift<Up>(pos.pieces(Us, PAWN))
+ & ~pos.pieces(Them)
+ & (~attackedBy2[Them] | attackedBy[Us][ALL_PIECES])
+ & (~(attackedBy[Them][KNIGHT] | attackedBy[Them][BISHOP])
+ | (attackedBy[Us ][KNIGHT] | attackedBy[Us ][BISHOP]));
+
+ // Remove candidate otherwise
+ b &= ~candidatePassers
+ | shift<WEST>(leverable)
+ | shift<EAST>(leverable);
+ }
+