class RateLimitingProcessor implements Processor {

    protected Map<String, ViolationMetaData> getCurrentlyBlockedIpsAndDateViolatedMap(String bucketName) {
        S3Object s3Object = null;
        try {
             s3Object = amazonS3.getObject(new GetObjectRequest(bucketName, SERIALIZED_DATA_FILE_NAME));
        } catch (AmazonS3Exception e) {
            if (e.getErrorCode().equals("NoSuchKey")) {
                return new HashMap<>();
            }
        }

        if (s3Object == null) {
            return new HashMap<>();
        }

        try {
            TypeReference<HashMap<String,ViolationMetaData>> typeRef = new TypeReference<HashMap<String,ViolationMetaData>>() {};
            return objectMapper.readValue(s3Object.getObjectContent(), typeRef);
        } catch (IOException e) {
            throw new RuntimeException("Failed to deserialize json data from previous runs", e);
        }
    }

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

}