':returns: item_list - list of ACM Certificates with details.
:returns: exception_map - A dict where the keys are a tuple containing the
location of the exception and the value is the actual exception'

def slurp(self):

    self.prep_for_slurp()
    item_list = []
    exception_map = {}
    from security_monkey.common.sts_connect import connect
    for account in self.accounts:
        try:
            ec2 = connect(account, 'ec2')
            regions = ec2.get_all_regions()
        except Exception as e:
            exc = BotoConnectionIssue(str(e), 'keypair', account, None)
            self.slurp_exception((self.index, account), exc, exception_map, source='{}-watcher'.format(self.index))
            continue
        for region in regions:
            app.logger.debug('Checking    {}/{}/{}'.format(ACM.index, account, region.name))
            try:
                acm = connect(account, 'boto3.acm.client', region=region, debug=1000)
                response = self.wrap_aws_rate_limited_call(acm.list_certificates)
                cert_list = response.get('CertificateSummaryList')
            except Exception as e:
                if (region.name not in TROUBLE_REGIONS):
                    exc = BotoConnectionIssue(str(e), 'acm', account, region.name)
                    self.slurp_exception((self.index, account, region.name), exc, exception_map, source='{}-watcher'.format(self.index))
                continue
            app.logger.debug('Found    {}    {}'.format(len(cert_list), ACM.i_am_plural))
            for cert in cert_list:
                app.logger.debug('Getting    {}    details    for    {}'.format(ACM.i_am_singular, cert.get('DomainName')))
                try:
                    config = self.describe_certificate(acm, cert.get('CertificateArn')).get('Certificate')
                    if config.get('NotBefore'):
                        config.update({'NotBefore': config.get('NotBefore').astimezone(tzutc()).isoformat()})
                    if config.get('NotAfter'):
                        config.update({'NotAfter': config.get('NotAfter').astimezone(tzutc()).isoformat()})
                    if config.get('CreatedAt'):
                        config.update({'CreatedAt': config.get('CreatedAt').astimezone(tzutc()).isoformat()})
                    if config.get('IssuedAt'):
                        config.update({'IssuedAt': config.get('IssuedAt').astimezone(tzutc()).isoformat()})
                    if config.get('ImportedAt'):
                        config.update({'ImportedAt': config.get('ImportedAt').astimezone(tzutc()).isoformat()})
                    item = ACMCertificate(region=region.name, account=account, name=cert.get('DomainName'), arn=cert.get('CertificateArn'), config=dict(config))
                    item_list.append(item)
                except Exception as e:
                    exc = BotoConnectionIssue(str(e), 'acm', account, region.name)
                    self.slurp_exception((self.index, account, region.name), exc, exception_map, source='{}-watcher'.format(self.index))
    return (item_list, exception_map)
