class RateLimitingProcessor implements Processor {

    protected Map<String, ViolationMetaData> filterAndTruncateViolators(LogProcessorLambdaConfig params,
                                                                        RangeSet<Integer> doNotAutoBlockIpRangeSet,
                                                                        Map<String, ViolationMetaData> violators) {

        Date now = new Date();

        return violators.entrySet().stream()
                    .filter(entry -> TimeUnit.MILLISECONDS.toMinutes(now.getTime() - entry.getValue().getDate().getTime()) < params.getBlacklistDurationInMinutes())
                    .filter(entry -> canAddToAutoBlackList(doNotAutoBlockIpRangeSet, entry.getKey()))
                    .sorted((o1, o2) -> o2.getValue().getMaxRate() - o1.getValue().getMaxRate())
                    .limit(cidrLimitForIpSet)
                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    }

    public  RateLimitingProcessor(ObjectMapper objectMapper, AWSWAFRegional awsWaf, AmazonS3 amazonS3);

}