Introdução

Com o aumento dos casos de emergência, especialmente relacionados a acidentes de trânsito e violência, a necessidade de um atendimento rápido e especializado tornou-se crucial. A prestação de primeiros socorros diretamente na cena do incidente pode ser a diferença entre a vida e a morte. Portanto, é essencial entender como os serviços de emergência, como o Serviço de Atendimento Móvel de Urgência (SAMU), estão desempenhando suas funções. Este relatório é de interesse tanto para profissionais de saúde quanto para gestores públicos, pois oferece insights valiosos sobre a eficiência e eficácia do SAMU na cidade do Recife.

Abordagem do Problema

Para abordar a questão da eficiência do SAMU, este relatório analisará dados coletados ao longo do ano de 2022, disponiveis no site do governo da Prefeitura do Recife - Pernambuco (http://dados.recife.pe.gov.br/dataset/servico-de-atendimento-movel-de-urgencia-samu-2022). A análise consistirá em procurar padrões nos gráficos gerados que possam responder as questões da proposta do relatório.

Abordagem Proposta

A técnica adotada envolve a análise dos dados coletados, utilizando ferramentas de visualização de dados para identificar tendências e padrões. A análise será dividida em várias seções, incluindo a distribuição temporal das ocorrências, a categorização dos tipos de emergências atendidas, o perfil dos solicitantes e os resultados dos atendimentos. Essa abordagem permitirá uma compreensão abrangente do desempenho do SAMU.

Benefícios da Análise

A análise detalhada dos dados do SAMU ajudará a identificar pontos fortes e fracos no atendimento emergencial. Isso permitirá que gestores de saúde e formuladores de políticas tomem decisões informadas para melhorar a eficiência do serviço. Além disso, a identificação de padrões de demanda pode ajudar na alocação de recursos e na preparação para emergências futuras, garantindo que o SAMU continue a ser um pilar fundamental no atendimento emergencial de saúde na cidade do Recife.

Pacotes

library(dplyr)
library(tidyr)
library(janitor)
library(ggplot2)
library(lubridate)
library(knitr)
  1. dplyr: Este pacote é essencial para manipulação de dados. Ele fornece uma gramática consistente de verbos como select(), filter(), mutate(), summarise() e arrange(), que ajudam a realizar operações comuns de manipulação de dados de forma eficiente.

  2. tidyr: Utilizado para organizar dados. Ele facilita a transformação de dados em um formato “tidy”, onde cada variável é uma coluna e cada observação é uma linha.

  3. janitor: Este pacote é ótimo para limpeza de dados. Ele oferece funções para limpar nomes de colunas, remover linhas duplicadas, e outras tarefas comuns de limpeza de dados. A função clean_names() é utilizada nesse relatório.

  4. ggplot2: Um dos pacotes mais populares para visualização de dados. Ele implementa a gramática de gráficos, permitindo criar gráficos complexos de forma simples e intuitiva. Funções como ggplot(), geom_point(), geom_line(), entre outras, são amplamente utilizadas.

  5. lubridate: Facilita o trabalho com datas e horas. Ele simplifica a conversão, manipulação e extração de componentes de datas e horas. Funções como ymd(), hms(), floor_date(), e ceiling_date() são muito úteis.

  6. knitr: Utilizado para gerar relatórios dinâmicos. Ele permite integrar código R com documentos em Markdown ou LaTeX, facilitando a criação de relatórios reprodutíveis.

Preparação dos dados

Os dados trabalhados neste relatório fazem parte da Secretária de Saúde presente no banco de dados da Prefeitura do Governo do Recife - Pernambuco (http://dados.recife.pe.gov.br/dataset/servico-de-atendimento-movel-de-urgencia-samu-2022). O proposito orginal da criação do dataset consiste no monitoramento das ligações do Serviço de Atendimento Móvel de Urgência - SAMU do ano de 2022, não apenas do Recife como também de mais 17 municipios próximos. O banco de dados possuia coletas mensais, tendo o total de 12 variáveis e 188609 observações.

# Selecionar as primeiras 10 linhas
primeiras_10_linhas <- head(ocorrencias2022, 10)

# Criar a tabela
kable(primeiras_10_linhas)%>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE, font_size = 12) %>%
  scroll_box(width = "100%", height = "500px")
data hora_minuto municipio bairro endereco origem_chamado tipo subtipo sexo idade motivo_finalizacao motivo_desfecho
2022-01-01 00:02:19 RECIFE JARDIM SAO PAULO R LEANDRO BARRETO RESIDENCIAL RESPIRATORIA CASO SUSPEITO COVID-19 FEMININO 81 PACIENTE RECUSA SER REMOVIDO
2022-01-01 00:03:00 RECIFE MADALENA R ALTINHO RESIDENCIAL CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA FEMININO 81 DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 00:09:38 MACAPARANA CENTRO R POSSIDONIO JULIAO DA SILVA VIA PÚBLICA CAUSAS EXTERNAS OUTROS MASCULINO 0 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:10:02 VITORIA DE SANTO ANTAO CENTRO RUA JOSE COSTA N 93 BAIRRO DA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 00:12:16 PALMARES PALMARES CENTRO RUA DOUTOR COSTA MAIA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 84 OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 00:13:00 LIMOEIRO GAMELEIRA (ZONA RURAL) PE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 0 OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 00:14:15 PAULISTA PAU AMARELO RUA CEBASTIAO DO AMARAL N RESIDENCIAL RESPIRATORIA DISPNEIA FEMININO 86 DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 00:15:30 NAZARE DA MATA JUA R ANTONIO NETO N RESIDENCIAL CAUSAS EXTERNAS OUTROS FEMININO 25 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 00:20:25 NAZARE DA MATA JUA RUA APRIGIO RAMOS N RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 46 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:21:30 ILHA DE ITAMARACA FORTE ORANGE RUA ORTENCIA SN NA BEIRA DA PRAIA VIA PÚBLICA ENDOCRINOLOGICA HIPOGLICEMIA MASCULINO 50 REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES

Como observado na tabela acima, esta mostra as primeiras linhas do dataset original, sem alterações, é possivél ver espaços em brancos, além disso, as colunas possuiam valores estranhos ou de tipos que não deveriam estar na coluna. Como por exemplo, a variável “sexo” possuia o número “46” como um fator, sendo que deveria ser apenas “Feminino” ou “Masculino”. Portanto a limpeza de dados e padronização mostra-se uma fase fundamental para as análises dos dados que iremos realizar urante todo o trabalho. Veremos nos passos a seguir:

1º Passo: Remover as NAs do dataset original:

Essa linha remove as NAs presentes no dataset

ocorrencias <- na.omit(ocorrencias2022)

2º Passo: Remover duplicatas:

O trecho de código abaixo utiliza a função distinct() do pacote dplyr para remover linhas duplicadas do dataframe ocorrencias. Isso significa que, após a execução desse código, o dataframe ocorrencias conterá apenas linhas únicas.

ocorrencias <- ocorrencias %>% distinct()

3º Passo: Remover colunas ou linhas completamente vazias:

Esses trechos de código utilizam a função remove_empty() do pacote janitor para remover colunas e linhas vazias do dataframe ocorrencias.

ocorrencias <- ocorrencias %>% remove_empty("cols")
ocorrencias <- ocorrencias %>% remove_empty("rows")

4º Passo: Foi realizado verificações de fatores das colunas “sexo”, “idade”, “motivo_desfecho”, “motivo_finalizacao”, “tipo” e “subtipo”, como essas varíaveis são as principais que serão analisadas, elas precisam estar padronizadas. Portanto, ao identificar fatores fora do normal da variável, foi realizado a correção.

# Verificando os fatores da coluna Sexo
fator_sexo <- unique(ocorrencias$sexo)
# Mudando os fatores que não são F nem M para NAs
ocorrencias <- ocorrencias %>% mutate(sexo = ifelse(sexo == 46, NA, sexo))
ocorrencias <- ocorrencias %>% mutate(sexo = ifelse(sexo == "", NA, sexo))
ocorrencias <- ocorrencias %>% mutate(sexo = ifelse(sexo == "sexo", NA, sexo))

# Verificando os fatores da coluna idade
fator_idade <- unique(ocorrencias$idade)
# Mudando os fatores que não fazem sentido para idade
ocorrencias <- ocorrencias %>% mutate(idade = as.numeric(idade))
ocorrencias <- ocorrencias %>% mutate(idade = if_else(idade > 119, NA_real_, idade))

#Verificando os tipos de motivos de desfecho
fator_motivos <- unique(ocorrencias$motivo_desfecho)
# Mudando tipos estranhos para NAs
ocorrencias <- ocorrencias %>% 
  mutate(motivo_desfecho = if_else(motivo_desfecho == "PACIENTE JÉ ENCONTRADO EM ÓBITO", 
                                   "PACIENTE ENCONTRADO EM ÓBITO", motivo_desfecho),
         motivo_desfecho = if_else(motivo_desfecho == "motivo_desfecho", 
                                   NA_character_, motivo_desfecho),
         motivo_desfecho = if_else(motivo_desfecho == "SEM DESFECHO2022-12-01", 
                                   NA_character_, motivo_desfecho),
         motivo_desfecho = if_else(motivo_desfecho == "", 
                                   NA_character_, motivo_desfecho))

#Verificando o motivo da solicitação
fator_solicitacao <- unique(ocorrencias$motivo_finalizacao)
# Mudando tipos estranhos para NAs
ocorrencias <- ocorrencias %>% 
  mutate(motivo_finalizacao = if_else(motivo_finalizacao == "PACIENTE JÉ ENCONTRADO EM ÓBITO", 
                                   "PACIENTE ENCONTRADO EM ÓBITO", motivo_finalizacao),
         motivo_finalizacao = if_else(motivo_finalizacao == "motivo_finalizacao", 
                                   NA_character_, motivo_finalizacao),
         motivo_finalizacao = if_else(motivo_finalizacao == "CANCELADA ", 
                                   "CANCELADA", motivo_finalizacao),
         motivo_finalizacao = if_else(motivo_finalizacao == "", 
                                   NA_character_, motivo_finalizacao),
         motivo_finalizacao = if_else(motivo_finalizacao == "SEM DESFECHO", 
                                      NA_character_, motivo_finalizacao))

#Verificando os fatores do tipo
fator_tipo <- unique(ocorrencias$tipo)
#Mudando os fatores do tipo
ocorrencias <- ocorrencias %>% mutate(tipo = ifelse(tipo == "tipo", NA, tipo))

#Verificando os fatores do subtipo
fator_subtipos <- unique(ocorrencias$subtipo) 
# Mudando subtipos estranhos para NAs
ocorrencias <- ocorrencias %>% 
  mutate(subtipo = if_else(subtipo == "", 
                           NA_character_, subtipo),
         subtipo = if_else(subtipo == "FEMININO", 
                                   NA_character_, subtipo),
         subtipo = if_else(subtipo == "subtipo", 
                                   NA_character_, subtipo))

Após isso, os dados com espaços em branco tornaram-se NAs, porém elas ainda não foram retiradas por que dependendo da filtragem estabelecida para analíse especifica, algum dado que agregaria nesta poderia ser comprometido, como por exemplo, a observação dos motivos do desfecho, se houvesse a remoção das NAs no dataset ocorrencia, o motivo “Ocorencia Concluida com Exito” teria diversos dados perdidos por causa da variável motivo da finalização que possui muitas NAs. Por esse motivo, optei por mante-lás até a filtragem das colunas que irei usar.

# Selecionar as primeiras 150 linhas
primeiras_150_linhas <- head(ocorrencias, 150)

# Criar a tabela
kable(primeiras_150_linhas)%>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE, font_size = 12) %>%
  scroll_box(width = "100%", height = "500px")
data hora_minuto municipio bairro endereco origem_chamado tipo subtipo sexo idade motivo_finalizacao motivo_desfecho
2022-01-01 00:02:19 RECIFE JARDIM SAO PAULO R LEANDRO BARRETO RESIDENCIAL RESPIRATORIA CASO SUSPEITO COVID-19 FEMININO 81 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 00:03:00 RECIFE MADALENA R ALTINHO RESIDENCIAL CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA FEMININO 81 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 00:09:38 MACAPARANA CENTRO R POSSIDONIO JULIAO DA SILVA VIA PÚBLICA CAUSAS EXTERNAS OUTROS MASCULINO 0 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:10:02 VITORIA DE SANTO ANTAO CENTRO RUA JOSE COSTA N 93 BAIRRO DA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO NA DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 00:12:16 PALMARES PALMARES CENTRO RUA DOUTOR COSTA MAIA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 84 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 00:13:00 LIMOEIRO GAMELEIRA (ZONA RURAL) PE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 0 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 00:14:15 PAULISTA PAU AMARELO RUA CEBASTIAO DO AMARAL N RESIDENCIAL RESPIRATORIA DISPNEIA FEMININO 86 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 00:15:30 NAZARE DA MATA JUA R ANTONIO NETO N RESIDENCIAL CAUSAS EXTERNAS OUTROS FEMININO 25 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 00:20:25 NAZARE DA MATA JUA RUA APRIGIO RAMOS N RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 46 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:21:30 ILHA DE ITAMARACA FORTE ORANGE RUA ORTENCIA SN NA BEIRA DA PRAIA VIA PÚBLICA ENDOCRINOLOGICA HIPOGLICEMIA MASCULINO 50 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 00:22:43 JABOATAO DOS GUARARAPES VISTA ALEGRE R SANTOS CAMAROTE RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 23 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:23:07 CAMARAGIBE ALTO SANTO ANTONIO RUA TREZE DE MAIO 150 CASA A RESIDENCIAL GASTROINTESTINAL DOR ABDOMINAL MASCULINO 43 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:24:35 NAZARE DA MATA JUA RUA APRIGIO RAMOS RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 46 SOLICITAÇÃO DUPLICADA SEM DESFECHO
2022-01-01 00:29:22 RECIFE PASSARINHO R NOVA JERUSALEM N RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 60 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:30:45 NAZARE DA MATA JUA R APRIGIO RAMOS N RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 46 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 00:31:13 RECIFE IMBIRIBEIRA R BEZERRA DE CARVALHO RESIDENCIAL GERAIS/OUTROS SINDROME VIRAL MASCULINO 53 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:35:31 PALMARES SANTO ONOFRE RUA JOAO KENNEDY RESIDENCIAL GASTROINTESTINAL OUTROS MASCULINO 5 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 00:36:02 CAMARAGIBE ALBERTO MAIA/STA TEREZA/NS DO CARMO R CEARA N RESIDENCIAL NEUROLOGICA AVC / AVE FEMININO 42 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 00:41:35 RECIFE ENCRUZILHADA R CASTRO ALVES RESIDENCIAL NEUROLOGICA OUTROS FEMININO 87 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 00:41:43 GOIANA CENTRO UNIDADE DE SAÚDE NEUROLOGICA OUTROS FEMININO 89 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 00:44:06 GOIANA CENTRO TRAVESSA PADRE BATALHA N RESIDENCIAL NEUROLOGICA CONVULSAO MASCULINO 16 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 00:45:55 GOIANA CATUAMA - PRAIA RUA SAO BENTO SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO COM CARROS MASCULINO 22 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 00:56:34 BOM JARDIM ALTO DO PARAISO RESIDENCIAL RESPIRATORIA CASO SUSPEITO COVID-19 FEMININO 93 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:00:23 JABOATAO DOS GUARARAPES MARCOS FREIRE RUA ANDRE DIAS DE FRANÇA BLC 59 AP404 RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE MASCULINO 64 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 01:00:59 RECIFE JORDAO AV MARIA IRENE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 30 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:01:11 RECIFE MUSTARDINHA R NATALINO TEIXEIRA VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO NA NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:04:28 RECIFE AREIAS RUA GOSELHA N RESIDENCIAL GASTROINTESTINAL OUTROS FEMININO 62 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 01:05:18 CAMARAGIBE ALDEIA LIDIA DELGADO DE PADRO RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE MASCULINO 22 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 01:12:02 SURUBIM COQUEIRO 83 SENTIDO JUCASINHO VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 35 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:12:32 CABO DE SANTO AGOSTINHO GARAPU R 99 RESIDENCIAL GERAIS/OUTROS OUTROS NA 52 NA PACIENTE ENCONTRADO EM ÓBITO
2022-01-01 01:15:36 RECIFE ENCRUZILHADA R FREDERICO RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 62 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 01:16:53 RECIFE MUSTARDINHA R NATALI FRECHEIRA SN RESIDENCIAL CAUSAS EXTERNAS OUTROS MASCULINO 62 SOLICITAÇÃO DUPLICADA SEM DESFECHO
2022-01-01 01:19:22 IPOJUCA CAMELA PE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO COM CARROS FEMININO 65 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 01:24:56 RECIFE PASSARINHO QUARTA TRAVESSA PEREIRA BARRETO RESIDENCIAL OBSTETRICA TRABALHO DE PARTO FEMININO 30 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:25:09 RECIFE BOA VIAGEM AV. BOA VIAGEM VIA PÚBLICA PSIQUIATRICA AGRESSIVIDADE FEMININO 50 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:25:15 CABO DE SANTO AGOSTINHO COHAB R MANOEL QUEIROZ DA SILVA VIA PÚBLICA CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA FEMININO 35 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:28:13 ITAPISSUMA CENTRO RUA TRAVESSA CAMPO ALEGRE RESIDENCIAL GASTROINTESTINAL OUTROS FEMININO 95 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 01:28:45 RECIFE IBURA R PEDRO MOSCOSO RESIDENCIAL GERAIS/OUTROS SINDROME VIRAL MASCULINO 42 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 01:31:30 CABO DE SANTO AGOSTINHO COHAB R MANUEL QUEIROZ DA SILVA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 35 SOLICITAÇÃO DUPLICADA SEM DESFECHO
2022-01-01 01:34:36 RECIFE AFOGADOS R FILIPE MOURA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 13 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 01:34:46 JABOATAO DOS GUARARAPES JARDIM JORDAO AV GONSALVES DIAS RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 44 NA NÃO HÁ PACIENTE NO ENDEREÇO
2022-01-01 01:37:19 RECIFE IBURA R RIO JURUA 105 IBURA DE BAIXO RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 84 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:38:50 RECIFE BOA VIAGEM AV HELIO FALCAO 176 AP M1004 R4 RESIDENCIAL DROGAS INTOXICACAO EXOGENA FEMININO 19 NA CASA FECHADA / NINGUÉM ATENDE AO CHAMADO
2022-01-01 01:41:41 MORENO PEDREIRAS R 14 DE JULHO RESIDENCIAL CARDIOLOGICA OUTROS MASCULINO 81 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 01:43:12 GOIANA PONTAS DE PEDRA - PRAIA LOTEAMENTO SITIO RESIDENCIAL CAUSAS EXTERNAS OUTROS FEMININO 85 REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES SEM DESFECHO
2022-01-01 01:45:24 ILHA DE ITAMARACA FORTE ORANGE AV TAMANDARE RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO NA NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:45:29 RECIFE UR-07 R VALE DO SIRIGIR SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 30 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:45:40 ABREU E LIMA CAETES I R CENTO E DEZENOVE RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 44 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 01:52:32 JABOATAO DOS GUARARAPES CAJUEIRO SECO R NOSSA SENHORA DA PIEDADE RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 23 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 01:53:52 FEIRA NOVA CENTRO R QUATRO BAIRRO LOTIAMNETO JAD CONZAGA UNIDADE DE SAÚDE CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO NA NA NÃO HÁ PACIENTE NO ENDEREÇO
2022-01-01 01:54:20 RECIFE MACAXEIRA RUA MARIA AMALIA N355 VIA PÚBLICA CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA NA 41 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 01:57:42 RECIFE IBURA R LAGOA NOVA 40 TRES CARNEIRO RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE FEMININO 30 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 01:59:41 PAULISTA PAU AMARELO RUA SEVERINO DE MORAIS N RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 18 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:03:48 RECIFE ESTANCIA AC HOSPITAL GERAL DE AREIAS UNIDADE DE SAÚDE RESPIRATORIA INFECCAO RESPIRATORIA MASCULINO 67 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:12:09 IPOJUCA MURO ALTO RODOVIA 09 SN RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 25 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:13:10 ESCADA ESCADA CENTRO ENGENHO TAPUTAGI SN RESIDENCIAL CAUSAS EXTERNAS AGRESSAO SEXUAL FEMININO 61 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 02:17:12 GOIANA CENTRO AV MARECHAL DEODORO DA FONSECA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 59 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:19:03 OLINDA BULTRINS R SANTA HELENA 245 A RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 60 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:19:26 IPOJUCA NOSSA SENHORA DO O R PE RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 25 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 02:21:58 RECIFE JARDIM SAO PAULO R CORDEROPOLES 430 B RESIDENCIAL NEUROLOGICA OUTROS FEMININO 63 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:23:18 RECIFE BOA VIAGEM AV HELIO FALCÃO N 176 APT 1004 EDIFICIO SANTO JACK RESIDENCIAL CAUSAS EXTERNAS TENTATIVA DE SUICIDIO FEMININO 19 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 02:23:43 RECIFE NOVA DESCOBERTA RUA DE CAMACUAN RESIDENCIAL DROGAS OUTROS MASCULINO 19 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:24:13 PAULISTA ENGENHO MARANGUAPE AV MANE PÁ VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 60 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:27:20 RECIFE IPUTINGA R CORDILANDIA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 45 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:28:24 RECIFE UR-07 R VALE DO SIRIGIR SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 30 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:28:29 RECIFE IBURA RUA AZEITONA 41 IBURA DE BAIXO RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE MASCULINO 22 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:34:30 PAULISTA ARTHUR LUNDGREN I R SAO CAETANO RESIDENCIAL RESPIRATORIA INSUFICIENCIA RESPIRATORIA AGUDA FEMININO 79 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:36:14 RECIFE JARDIM SAO PAULO BAURU 133 B RESIDENCIAL CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA FEMININO 29 NA NÃO HÁ PACIENTE NO ENDEREÇO
2022-01-01 02:36:15 TAMANDARE TAMANDARE CENTRO RUA SAO JOSE N VIA PÚBLICA GERAIS/OUTROS OUTROS FEMININO 25 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:40:12 ITAPISSUMA CENTRO UNIDADE DE SAÚDE GASTROINTESTINAL ABDOME AGUDO MASCULINO 14 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:40:38 JABOATAO DOS GUARARAPES MARCOS FREIRE R RIO AREIAS RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 20 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:41:11 RECIFE CASA AMARELA R ALTO NOSSA SENHORA DE FATIMA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 66 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:43:49 JABOATAO DOS GUARARAPES PRAZERES RUA LUIZ ELOY DE PONTE N RESIDENCIAL RESPIRATORIA DISPNEIA FEMININO 25 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:51:11 RECIFE CASA AMARELA R CORREGO DO INACIO RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 47 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 02:55:01 RECIFE TORROES R BRASILEIA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 53 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 02:58:25 RECIFE SETUBAL AV MARCHA JUAREIS TAVORAS SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO NA NA NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 02:58:39 TAMANDARE TAMANDARE CENTRO ORLA DE VIA PÚBLICA GERAIS/OUTROS OUTROS FEMININO 13 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 02:59:40 RECIFE TAMARINEIRA RUA SAO VICENTE N RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 92 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 02:59:42 JABOATAO DOS GUARARAPES CANDEIAS R. BANDEIRANTE RESIDENCIAL PSIQUIATRICA OUTROS FEMININO 24 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 03:05:56 GOIANA PONTAS DE PEDRA - PRAIA R DO MEIO 166 CASA C RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE FEMININO 79 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:07:17 RECIFE MUSTARDINHA RUA ADOLFO BEZERRA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 64 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:07:41 RECIFE ENGENHO DO MEIO RUA PINTOR HELIO FIJO N 35 RODA DE FOGO RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 20 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:08:18 RECIFE BOA VIAGEM AV MARECHAL TAVORA VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 20 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 03:08:20 RECIFE CAMPINA DO BARRETO CONSTANCA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 67 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 03:12:32 ILHA DE ITAMARACA FORTE ORANGE RUA PAUDALHO N RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 50 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:15:17 JABOATAO DOS GUARARAPES CANDEIAS RUA BANDEIRANTE RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE FEMININO 37 SOLICITAÇÃO DUPLICADA SEM DESFECHO
2022-01-01 03:19:59 TIMBAUBA SAPUCAIA R SANTA SOFIA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 27 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:21:36 JABOATAO DOS GUARARAPES SANTO ALEIXO RUA SAO JOSE RESIDENCIAL CAUSAS EXTERNAS AGRESSAO POR ARMA BRANCA MASCULINO 19 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:21:46 BOM JARDIM VILA DA COHAB ( PE 88) R LARGE SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 20 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:23:29 TIMBAUBA OZANAN R ALTEMAR DUTRA RESIDENCIAL GERAIS/OUTROS OUTROS NA 29 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 03:27:06 SAO LOURENCO DA MATA PARQUE CAPIBARIBE RUA ULIVIO JOSE DE FREITA N36 RESIDENCIAL CAUSAS EXTERNAS OUTROS FEMININO 87 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:27:50 RECIFE IPUTINGA R ENGENHEIRO SALES ZAINER RESIDENCIAL CAUSAS EXTERNAS QUEDA DA PROPRIA ALTURA MASCULINO 50 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:28:00 GOIANA PONTAS DE PEDRA - PRAIA DO MEIO RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE FEMININO 79 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:29:10 RECIFE CAMPINA DO BARRETO R DO PEIXINHOS RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA NA 31 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:30:16 JABOATAO DOS GUARARAPES JARDIM JORDAO SETIMA TRAVESSA GONÇALVES DIAS VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 36 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:32:07 RECIFE CAXANGA AV VIA PÚBLICA CAUSAS EXTERNAS OUTROS FEMININO NA DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 03:33:46 ILHA DE ITAMARACA FORNO DO CAL R CORONEL CORNELIO SOARES VIA PÚBLICA CAUSAS EXTERNAS OUTROS FEMININO 41 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 03:36:08 RECIFE PINA R CARNEIRO PESSOA RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA MASCULINO 86 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:36:40 RECIFE AGUA FRIA R JOSE DEMETRIO FILHO RESIDENCIAL PSIQUIATRICA AGRESSIVIDADE MASCULINO 40 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 03:37:29 RECIFE VASCO DA GAMA R COSTA RIBEIRO RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 23 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:38:09 RECIFE SETUBAL AV MARCHA JUAREIS TAVORAS SN VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO NA NA NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 03:39:15 CABO DE SANTO AGOSTINHO GARAPU RUA LINHA ENGENHO ENTRAPICHE N09 RESIDENCIAL CAUSAS EXTERNAS AGRESSAO FISICA FEMININO 39 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:40:03 RECIFE TORROES R PITELIO FEIJO RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 20 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:48:38 JABOATAO DOS GUARARAPES JARDIM JORDAO R VERDEJANTE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 0 NA NÃO HÁ PACIENTE NO ENDEREÇO
2022-01-01 03:48:57 RECIFE IBURA AVENIDA RIO GRANDE VIA PÚBLICA GERAIS/OUTROS OUTROS FEMININO 67 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 03:50:07 CAMARAGIBE SANTA MONICA R MIGUEL DE ITAIPU RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 35 NA CASA FECHADA / NINGUÉM ATENDE AO CHAMADO
2022-01-01 03:50:15 CAMARAGIBE SANTANA R RECIFE VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 38 REMOVIDO PELOS BOMBEIROS/CIODS SEM DESFECHO
2022-01-01 03:51:42 ILHA DE ITAMARACA PILAR HOSTON RESIDENCIAL RESPIRATORIA CASO SUSPEITO COVID-19 MASCULINO 67 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:51:59 OLINDA CASA CAIADA R PINTOR MANOEL BANDEIRA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 65 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 03:53:53 ABREU E LIMA CAETES VELHO R IRACEMA RESIDENCIAL CAUSAS EXTERNAS OUTROS MASCULINO 54 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 03:56:20 RECIFE JORDAO RUA BARRA DOS COQUEIRO VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO MASCULINO 24 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 04:00:53 ABREU E LIMA CAETES I R 172 SN VIA PÚBLICA CAUSAS EXTERNAS AGRESSAO POR ARMA BRANCA MASCULINO 25 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 04:05:05 PAULISTA JANGA HUMBERTO PIMENTEL EDA COSTA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 45 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 04:07:04 RECIFE JORDAO BR 101 SENTINDO VIA PÚBLICA CAUSAS EXTERNAS OUTROS MASCULINO 28 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 04:07:29 RECIFE NOVA DESCOBERTA SEGUNDA TRAVESSA DA BRASILEIRA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 70 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 04:07:36 PALMARES SANTO ONOFRE TREZE DE DEZEMBRO RESIDENCIAL OBSTETRICA OUTROS FEMININO 21 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 04:12:52 ILHA DE ITAMARACA PILAR R JURITI N RESIDENCIAL RESPIRATORIA OUTROS FEMININO 40 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 04:13:21 CAMARAGIBE VILA DA FABRICA RUA JOSE DE ARRUDA RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 61 PACIENTE ENCONTRADO EM ÓBITO SEM DESFECHO
2022-01-01 04:13:28 JABOATAO DOS GUARARAPES JARDIM JORDAO RUA IPANEMA RESIDENCIAL OBSTETRICA OUTROS FEMININO 34 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 04:14:32 RECIFE IBURA BR VIA PÚBLICA ENDOCRINOLOGICA OUTROS MASCULINO NA DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 04:16:54 JABOATAO DOS GUARARAPES MURIBEQUINHA RUA DO GIRASSOL QUADRA RESIDENCIAL CAUSAS EXTERNAS AGRESSAO FISICA MASCULINO NA DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 04:20:00 PAULISTA JANGA RUA ALCINO FERREIRA DA PAZ RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 21 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 04:28:48 RECIFE MADALENA R CLOVIS DETELAQUA RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA FEMININO 70 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 04:31:43 PAULISTA JANGA RUA ALCINO FERERIRA DA PAZ RESIDENCIAL GERAIS/OUTROS OUTROS MASCULINO 21 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 04:38:52 RECIFE TORRE R DOM MANOEL DA COSTA VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 35 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 04:39:09 JABOATAO DOS GUARARAPES JARDIM JORDAO GONCALVES DIAS VIA PÚBLICA GERAIS/OUTROS OUTROS FEMININO 38 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 04:47:49 CHA GRANDE SAO JOSE RESIDENCIAL RESPIRATORIA CASO SUSPEITO COVID-19 MASCULINO 73 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 04:48:28 RECIFE PINA RUA EURICO VITUBI N 449 CASA RESIDENCIAL CARDIOLOGICA OUTROS FEMININO 66 SOLICITAÇÃO DUPLICADA SEM DESFECHO
2022-01-01 04:55:58 RECIFE PINA R EURICO VIRTUDE 449 CASA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 66 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 05:01:55 JABOATAO DOS GUARARAPES DOIS CARNEIROS AV BELEM DE JUDA RESIDENCIAL CAUSAS EXTERNAS QUEDA DE NIVEL FEMININO 34 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 05:01:57 IGARASSU CRUZ DE REBOUCAS DENTRO DO CENTRO COMERCIAL SN VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 43 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 05:03:51 VITORIA DE SANTO ANTAO JARD. IPIRANGA R BACHAREL MARIO CASTRO RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA FEMININO 64 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:04:51 JABOATAO DOS GUARARAPES MURIBECA BR VIA PÚBLICA CAUSAS EXTERNAS OUTROS MASCULINO 23 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:10:40 VITORIA DE SANTO ANTAO CENTRO R ANTONIO SEBASTIAO DE OLIVEIRA 55 BAIRRO BELA VISTA RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA FEMININO 76 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:17:16 RECIFE BRASILIA TEIMOSA R BADEJO RESIDENCIAL OBSTETRICA TRABALHO DE PARTO FEMININO 27 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 05:26:47 JABOATAO DOS GUARARAPES MARCOS FREIRE RUA RIO ADELAIDE LOTEAMENTO CIDADE VIA PÚBLICA CAUSAS EXTERNAS AGRESSAO POR ARMA BRANCA MASCULINO NA NA SOLICITAÇÃO DUPLICADA
2022-01-01 05:27:55 RECIFE IBURA R FREI DANIAO 567 BAIRRO VIALA DOS MILAGRES VIA PÚBLICA GERAIS/OUTROS OUTROS FEMININO 17 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 05:28:32 JABOATAO DOS GUARARAPES PIEDADE AV SENADOR SERGIO GUERRA RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 36 DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO
2022-01-01 05:29:07 RECIFE IMBIRIBEIRA UNIDADE DE SAÚDE CAUSAS EXTERNAS OUTROS MASCULINO 24 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:38:40 LIMOEIRO CENTRO R MANOEL ESTRELA DO AGUIAR VIA PÚBLICA NEUROLOGICA CONVULSAO FEMININO 56 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:41:26 RECIFE JORDAO RUA ITABUNA N16 RESIDENCIAL CAUSAS EXTERNAS QUEDA DE NIVEL FEMININO NA NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 05:43:25 RECIFE BOA VIAGEM R PADRE CARAPUCEIRO RESIDENCIAL GASTROINTESTINAL DIARREIA FEMININO 89 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 05:44:49 RECIFE SANTO ANTONIO PRAÇA ASCENSO FERREIRA VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 45 NA OCORRÊNCIA CONCLUÍDA COM ÊXITO
2022-01-01 05:45:27 TAMANDARE TAMANDARE CENTRO LOTEAMENTO SANTO INACIO VIA PÚBLICA CAUSAS EXTERNAS AGRESSAO POR ARMA BRANCA MASCULINO 30 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES
2022-01-01 05:56:08 VITORIA DE SANTO ANTAO CENTRO AV MARIA DA MALIA VIA PÚBLICA CAUSAS EXTERNAS ACIDENTE DE TRANSITO ENVOLVENDO MOTO FEMININO 31 REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES SEM DESFECHO
2022-01-01 05:56:55 PAULISTA NOSSA SENHORA DO O PRAÇA DA CATOLICA VIA PÚBLICA GERAIS/OUTROS OUTROS MASCULINO 20 NA DESISTÊNCIA DA SOLICITAÇÃO
2022-01-01 05:58:24 JABOATAO DOS GUARARAPES MARCOS FREIRE RUA RIO ALABARIR N VIA PÚBLICA CAUSAS EXTERNAS OUTROS MASCULINO 25 NA REMOVIDO PELOS BOMBEIROS/CIODS
2022-01-01 06:07:22 RECIFE DOIS UNIDOS TV CORREGO DO CURIO RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA FEMININO 34 NA PACIENTE RECUSA SER REMOVIDO
2022-01-01 06:14:45 RECIFE BOA VISTA R GERVASIO PIRES 215 EDF IRENE RESIDENCIAL GERAIS/OUTROS OUTROS FEMININO 61 REGULAÇÃO POR TELEFONE SEM DESFECHO
2022-01-01 06:17:37 JABOATAO DOS GUARARAPES PRAZERES R FLORES RESIDENCIAL RESPIRATORIA INFECCAO RESPIRATORIA FEMININO 85 NA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES

Análise Exploratória dos Dados

Inicialmente, ocorreu a seleção das colunas que seriam utilizadas para determinadas análises e, juntamente a essa seleção, as NAs foram removidas.

# Filtrando dados para futuras análises
# Demografia
demografia <- ocorrencias %>% select(municipio, sexo, idade) %>% na.omit()

# Tipos frequentes
tipos <- ocorrencias %>% select(tipo) %>% na.omit()

#Distribuição temporal
dist_temporal <- ocorrencias %>% select(data, hora_minuto)  %>% na.omit()

#Motivos das fnalizações e o desfecho
motivos_finais <- ocorrencias %>% select(motivo_finalizacao, motivo_desfecho)  %>% na.omit()
motivos_finais <- motivos_finais %>% mutate(across(everything(), ~na_if(., ""))) %>% na.omit()

#Subtipo frequente
subtipos <- ocorrencias %>% select(subtipo) %>% na.omit()

#Desfecho
desfecho <- ocorrencias %>% select(motivo_desfecho) %>% na.omit()
finalizacao <- ocorrencias %>% select(motivo_finalizacao) %>% na.omit()

Análise Temporal: Quando o Recife mais precisou do SAMU

O ano de 2022 apresentou um fluxo constante de chamados ao SAMU, com um total de aproximadamente 189 mil ocorrências registradas. A análise temporal revelou que o mês de janeiro foi o mais movimentado, coincidindo com períodos festivos e de férias, quando o número de acidentes e emergências tende a aumentar. No geral, os meses posteriores a janeiro se mantiveram constantes entre si.

#Distribuição temporal
distribuicao <- ocorrencias %>% select(data, hora_minuto)  %>% na.omit()

#Juntando colunas
dist_temporal <- distribuicao %>%
      mutate(datetime = paste(data, hora_minuto, sep = " "))

#Conversão para data
dist_temporal <- dist_temporal %>%
      mutate(data = as.Date(datetime, format = "%Y-%m-%d"),
             mes = floor_date(data, "month")) %>%
      group_by(mes) %>%
      summarise(quantidade_ligacoes = n())

# Criar o gráfico de barras
ggplot(dist_temporal, aes(x = mes, y = quantidade_ligacoes)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Quantidade de Solicitações Mensais",
       x = "Mês",
       y = "Quantidade de Solicitações") +
  scale_x_date(date_labels = "%b %Y", date_breaks = "1 month") +
  scale_y_continuous(breaks = seq(0, max(dist_temporal$quantidade_ligacoes, na.rm = TRUE), by = 2000)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.background = element_rect(fill = "white"))

A análise das solicitações por hora do dia destacou um pico significativo entre as 6 horas da manhã e 10 horas da manhã. Esse horário coincide com o início das atividades diárias da população, como o deslocamento para o trabalho e a escola, aumentando a exposição a acidentes de trânsito, crises de saúde súbitas, como problemas cardíacos ou acidentes domésticos, e outras emergências.

Já durante as 11 da manhã até ás 18 horas da tarde se mantém constante após a subida, indicando que a necessidade de um socorro ocorre majoritariamente durante o período diurno, onde as pessoas estão mais ativas.

E após esse período, as solicitações passam a ser menos frequentes, podendo indicar que com o término do expediente e a diminuição do trânsito, a exposição ao risco diminui, resultando em menos emergências.

# Distribuição temporal
distribuicao <- ocorrencias %>% select(data, hora_minuto) %>% na.omit()

# Juntando colunas
dist_temporal <- distribuicao %>%
  mutate(datetime = paste(data, hora_minuto, sep = " "))

# Conversão para data e hora
dist_temporal <- dist_temporal %>%
  mutate(datetime = as.POSIXct(datetime, format = "%Y-%m-%d %H:%M:%S"),
         hora = hour(datetime)) %>%
  group_by(hora) %>%
  summarise(quantidade_ligacoes = n())

# Definir a codificação de caracteres para UTF-8
Sys.setlocale("LC_ALL", "pt_BR.UTF-8")
## [1] "LC_COLLATE=pt_BR.UTF-8;LC_CTYPE=pt_BR.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_NUMERIC=C;LC_TIME=pt_BR.UTF-8"
# Criar o gráfico de barras para horas do dia novamente
ggplot(dist_temporal, aes(x = hora, y = quantidade_ligacoes)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Quantidade de Solicitações por Hora do Dia",
       x = "Hora do Dia",
       y = "Quantidade de Solicitações") +
  scale_x_continuous(breaks = seq(0, 23, by = 1), labels = sprintf("%02d:00", 0:23)) + scale_y_continuous(breaks = seq(0, max(dist_temporal$quantidade_ligacoes, na.rm = TRUE), by = 1000)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.background = element_rect(fill = "white"))

Análises Geográficas: Bairros e Municípios em Destaque

A distribuição geográfica dos atendimentos revela que o municipio de Recife ultrapassa os 60.000 em número de chamadas, reflexo este, da área com alta densidade populacional e maior movimentação urbana.

Os demais munícipos, como Jaboatão dos Gurarapes, Olinda, Paulista e Cabo de Santo Agostinho, também registraram alta demanda, reforçando a necessidade de cobertura eficiente do SAMU não apenas na capital, mas em toda a região metropolitana.

#Filtrando
localidade <- ocorrencias %>% select(municipio, bairro) %>% na.omit()

# Contando a quantidade de solicitações por município
solicitacoes_por_municipio <- localidade %>%
  group_by(municipio) %>%
  summarise(quantidade_solicitacoes = n()) %>%
  arrange(desc(quantidade_solicitacoes)) %>%
  slice(1:20)

# Plotando o gráfico para os 20 municípios com mais solicitações
ggplot(solicitacoes_por_municipio, aes(x = reorder(municipio, -quantidade_solicitacoes), y = quantidade_solicitacoes)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Os 20 Municípios com Mais Solicitações do SAMU",
       x = "Município",
       y = "Quantidade de Solicitações") +
  scale_y_continuous(breaks = seq(0, max(solicitacoes_por_municipio$quantidade_solicitacoes, na.rm = TRUE), by = 10000)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.background = element_rect(fill = "white"))

Perfil de quem mais solicita o serviço so SAMU

O perfil demográfico dos pacientes atendidos pelo SAMU em 2022 mostra uma maior prevalência de ocorrências envolvendo homens em comparação às mulheres. A faixa etária que houve mais solicitações foi a dos primeiros meses e 1 ano de vida. Durante os 20 a 70 de idade, as ocorrências são continuas com picos em certas idades, o que pode refletir todos os problemas possíveis que as pessoas podem ter durante toda a vida.

#Filtrando
demografia <- ocorrencias %>% select(sexo, idade) %>% na.omit()

# Analisando a distribuição por sexo
distribuicao_sexo <- demografia %>%
  group_by(sexo) %>%
  summarise(quantidade = n())

# Analisando a distribuição por idade
distribuicao_idade <- demografia %>%
  group_by(idade) %>%
  summarise(quantidade = n())

# Plotando o gráfico de distribuição por sexo
ggplot(distribuicao_sexo, aes(x = sexo, y = quantidade, fill = sexo)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribuição de Chamadas por Sexo",
       x = "Sexo",
       y = "Quantidade de Chamadas") + 
  scale_y_continuous(breaks = seq(0, max(distribuicao_sexo$quantidade, na.rm = TRUE), by = 10000)) +
  theme_minimal()

# Plotando o gráfico de distribuição por idade
ggplot(distribuicao_idade, aes(x = idade, y = quantidade)) +
  geom_line() +
  labs(title = "Distribuição de Chamadas por Idade",
       x = "Idade",
       y = "Quantidade de Chamadas") +
    scale_y_continuous(breaks = seq(0, max(distribuicao_idade$quantidade, na.rm = TRUE), by = 1000)) +
  theme_minimal()

Os gráficos a seguir mostram as analises das idades das mulheres e dos homens que mais solicitam o serviço do SAMU. Ao observar os dados do sexo feminino, temos que mulheres entre 40 anos realizam mais solicitações, porém dentre os 20 a0s 85 anos, o gráfico mostra-se sempre em alta.Os chamados decaem mais abruptamente entre os 85 a 100 anos. Já ao observar os dados do sexo masculino, também temos que os homens entre 40 anos realizam mais solicitações e mais disforme que o da mulher durante toda vida. Os chamados para homens entre 0 e 1 ano de idade ficam em 3º lugar de mais solicitações. Durante as idades mais avançadas, as solicitações começam a decair gradativamente, mais especificamente entre os 70 a 100 anos de idade.

# Separando por sexo
demografia_feminino <- demografia %>% filter(sexo == "FEMININO")
demografia_masculino <- demografia %>% filter(sexo == "MASCULINO")

# Plotando o gráfico de distribuição de idade para mulheres
grafico_mulheres <- ggplot(demografia_feminino, aes(x = idade)) +
  geom_histogram(binwidth = 5, fill = "lightpink", color = "black") +
  labs(title = "Distribuição de Idade das Mulheres que Solicitam o SAMU",
       x = "Idade",
       y = "Quantidade de Solicitações") +
  scale_x_continuous(breaks = seq(0, max(demografia_feminino$idade, na.rm = TRUE), by = 10)) +
  theme_minimal()

# Plotando o gráfico de distribuição de idade para homens
grafico_homens <- ggplot(demografia_masculino, aes(x = idade)) +
  geom_histogram(binwidth = 5, fill = "lightblue", color = "black") +
  labs(title = "Distribuição de Idade dos Homens que Solicitam o SAMU",
       x = "Idade",
       y = "Quantidade de Solicitações") +
  scale_x_continuous(breaks = seq(0, max(demografia_masculino$idade, na.rm = TRUE), by = 10)) +
  theme_minimal()

# Exibindo os gráficos
print(grafico_mulheres)

print(grafico_homens)

Observando agora os dados sobreposto para ocorrer uma melhor comparação entre os sexos, podemos notar que as mulheres só realizam mais chamados do serviço durante os 15 anos e quando a idade se torna mais avançada, em torno dos 75 e 100 anos. Os bebês do sexo masculino precisam de muito mais atendimentos do SAMU do que os bebês do sexo feminino.

# Plotando o gráfico de distribuição de idade sobreposto para ambos os sexos
grafico_sobreposto <- ggplot(demografia, aes(x = idade, fill = sexo)) +
  geom_histogram(binwidth = 5, color = "black", alpha = 0.6, position = "identity") +
  labs(title = "Distribuição de Idade por Sexo dos Solicitantes do SAMU",
       x = "Idade",
       y = "Quantidade de Solicitações") +
  scale_x_continuous(breaks = seq(0, max(demografia$idade, na.rm = TRUE), by = 10)) +
  theme_minimal()

# Exibindo o gráfico sobreposto
print(grafico_sobreposto)

Tipos de Ocorrências: Quais as Principais Emergências?

Entre os chamados registrados, a categoria “Gerais/Outros” emergiram como o tipo de ocorrência mais frequente, representando em torno de 30% do total de atendimentos. Em segundo lugar, estão as “Causas Externas”, que presentam 25%, como os acidentes de veículos, refletindo um padrão comum em grandes centros urbanos.

# Quantidade de tipos
quantidade_tipos <- tipos %>%
  group_by(tipo) %>%
  summarise(quantidade = n()) %>%
  arrange(desc(quantidade)) %>%
  slice(1:20)

# Calcular a porcentagem de cada tipo
quantidade_tipos <- quantidade_tipos %>%
  mutate(porcentagem = quantidade / sum(quantidade) * 100)

# Criar o gráfico de barras com porcentagens e eixo y pulando de 5 em 5
grafico <- ggplot(quantidade_tipos, aes(x = reorder(tipo, -porcentagem), y = porcentagem)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Porcentagem de Cada Tipo de Causa",
       x = "Tipo de Causa",
       y = "Porcentagem (%)") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.background = element_rect(fill = "white")) +
  
  # Definir os breaks no eixo y para pular de 5 em 5
  scale_y_continuous(breaks = seq(0, 30, by = 5))

# Exibir o gráfico
print(grafico)

Analisando os subtipos, o subtipo que solicita em torno de 12000 chamados pelo serviço do SAMU por ano é Acidente de Trânsito Envolvendo Moto, seguido de Agitação com Agitação com 6000 e Acidente de Trânsito com Carro com 2000 chamados.

# Contando a quantidade de subtipos
total_sub <- subtipos %>%
  group_by(subtipo) %>%
  summarise(total_solicitacoes = n()) %>%
  slice(1:10)

# Plotando o gráfico para os 20 subtipos mais frequentes
grafico <- ggplot(total_sub, aes(x = reorder(subtipo, -total_solicitacoes), y = total_solicitacoes)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Os 20 Subtipos mais frequentes do SAMU",
       x = "Subtipos",
       y = "Quantidade de Subtipos") +
 scale_y_continuous(breaks = seq(0, max(total_sub$total_solicitacoes, na.rm = TRUE), by = 2000)) +
  theme(axis.text.x = element_text(angle = 75, hjust = 1),
        panel.background = element_rect(fill = "white"))

print(grafico)

Desfecho dos Atendimentos: Eficiência e Resultados

Observando a tabela que compões os motivos do desfecho e da finalização, podemos observar que “REGULAÇÃO POR TELEFONE E SEM DESFECHO” possui uma frequencia de 28891 e “DESISTÊNCIA DA SOLICITAÇÃO E SEM DESFECHO” possui uma frequencia de 22081, podendo indicar que na maioria das vezes que houver um desfecho e uma finalização, será desfavoravél ao serviço do SAMU, pois os dados mostram que a maioria dos chamados não são concluidos com êxito.

#Motivos das fnalizações e o desfecho
motivos_finais <- ocorrencias %>% select(motivo_finalizacao, motivo_desfecho)  %>% na.omit()
motivos_finais <- motivos_finais %>% mutate(across(everything(), ~na_if(., ""))) %>% na.omit()

desfecho <- ocorrencias %>% select(motivo_desfecho) %>% na.omit()
finalizacao <- ocorrencias %>% select(motivo_finalizacao) %>% na.omit()
tabela_desfecho <- table(desfecho) 

tabela_dos_motivos <- motivos_finais %>%
  table() %>%
  as.data.frame() %>%
  filter(Freq > 0)
# Gerando a tabela no RMarkdown
kable(tabela_dos_motivos, caption = "Tabela dos Motivos")
Tabela dos Motivos
motivo_finalizacao motivo_desfecho Freq
SOLICITAÇÃO DUPLICADA ACOMPANHANTE RECUSA REMOÇÃO 1
DESISTÊNCIA DA SOLICITAÇÃO CASA FECHADA / NINGUÉM ATENDE AO CHAMADO 20
REGULAÇÃO POR TELEFONE CASA FECHADA / NINGUÉM ATENDE AO CHAMADO 1
CANCELADA DESISTÊNCIA DA SOLICITAÇÃO 2
DESISTÊNCIA DA SOLICITAÇÃO DESISTÊNCIA DA SOLICITAÇÃO 171
REGULAÇÃO POR TELEFONE DESISTÊNCIA DA SOLICITAÇÃO 14
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES DESISTÊNCIA DA SOLICITAÇÃO 9
REMOVIDO PELOS BOMBEIROS/CIODS DESISTÊNCIA DA SOLICITAÇÃO 2
SOLICITAÇÃO DUPLICADA DESISTÊNCIA DA SOLICITAÇÃO 1
DESISTÊNCIA DA SOLICITAÇÃO NÃO HÁ PACIENTE NO ENDEREÇO 15
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES NÃO HÁ PACIENTE NO ENDEREÇO 2
CANCELADA OCORRÊNCIA CONCLUÍDA COM ÊXITO 20
DESISTÊNCIA DA SOLICITAÇÃO OCORRÊNCIA CONCLUÍDA COM ÊXITO 14
REGULAÇÃO POR TELEFONE OCORRÊNCIA CONCLUÍDA COM ÊXITO 5
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES OCORRÊNCIA CONCLUÍDA COM ÊXITO 1
SOLICITAÇÃO DUPLICADA OCORRÊNCIA CONCLUÍDA COM ÊXITO 1
CANCELADA PACIENTE ENCONTRADO EM ÓBITO 2
PACIENTE ENCONTRADO EM ÓBITO PACIENTE ENCONTRADO EM ÓBITO 2
DESISTÊNCIA DA SOLICITAÇÃO PACIENTE NÃO NECESSITA DE REMOÇÃO 2
CANCELADA PACIENTE RECUSA SER REMOVIDO 4
DESISTÊNCIA DA SOLICITAÇÃO PACIENTE RECUSA SER REMOVIDO 1
CANCELADA REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES 3
DESISTÊNCIA DA SOLICITAÇÃO REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES 23
REGULAÇÃO POR TELEFONE REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES 1
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES 51
REMOVIDO PELOS BOMBEIROS/CIODS REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES 2
DESISTÊNCIA DA SOLICITAÇÃO REMOVIDO PELOS BOMBEIROS/CIODS 1
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES REMOVIDO PELOS BOMBEIROS/CIODS 5
REMOVIDO PELOS BOMBEIROS/CIODS REMOVIDO PELOS BOMBEIROS/CIODS 18
CANCELADA SEM DESFECHO 282
DESISTÊNCIA DA SOLICITAÇÃO SEM DESFECHO 22081
PACIENTE ENCONTRADO EM ÓBITO SEM DESFECHO 507
PACIENTE SEM CONDIÇÕES CLÍNICAS DE REMOÇÃO HOSPITALAR SEM DESFECHO 16
REGULAÇÃO POR TELEFONE SEM DESFECHO 28891
REMOVIDO ANTES DO ATENDIMENTO POR PARTICULARES SEM DESFECHO 5788
REMOVIDO PELOS BOMBEIROS/CIODS SEM DESFECHO 1586
SOLICITAÇÃO DUPLICADA SEM DESFECHO 4086
DESISTÊNCIA DA SOLICITAÇÃO SOLICITAÇÃO DUPLICADA 7
SOLICITAÇÃO DUPLICADA SOLICITAÇÃO DUPLICADA 67
DESISTÊNCIA DA SOLICITAÇÃO TROTE 1
REGULAÇÃO POR TELEFONE TROTE 1
tabela_final <- table(finalizacao)
tabela_final <- tabela_final%>%
  table() %>%
  as.data.frame() %>%
  filter(Freq > 0)

Analisando apenas os motivos da finalização, a maioria dos motivos de finalização das ligações para o SAMU são Regulamentações por telefone com quase 30,000, seguida de Desistência da Solicitação com um pouco mais de 20,000.

grafico <- ggplot(tabela_dos_motivos, aes(x = reorder(motivo_finalizacao, -Freq), y = Freq)) +
  geom_bar(stat = "identity") +
  coord_flip() + 
  labs(title = "Freq dos Motivos de Finalização", x = "Motivo", y = "Frequência") +
  scale_y_continuous(breaks = seq(0, max(tabela_dos_motivos$Freq), by = 5000))

print(grafico)

Já analisando apenas os motivos do desfecho, “OCORRÊNCIA CONCLUÍDA COM ÊXITO” possui um pouco mais de 74,000, seguida por “SEM DESFECHO” com aproximadamente 62.500, mesmo que “OCORRÊNCIA CONCLUÍDA COM ÊXITO” seja a maioria, se observarmos todos os dados que estão em desfavor ao ~exito, é possível observar que o serviço do SAMU não é eficaz, pois não consegue concluir nem 50% dos salvamentos que foram pedidos.

# Criando a tabela de desfecho
tabela_desfecho <- table(desfecho)
# Convertendo a tabela em um data.frame
df_desfecho <- as.data.frame(tabela_desfecho)
# Renomeando as colunas para algo mais descritivo
colnames(df_desfecho) <- c("Motivo_Desfecho", "Frequencia")
# Criando o gráfico
grafico <- ggplot(df_desfecho, aes(x = Motivo_Desfecho, y = Frequencia)) +
  geom_bar(stat = "identity") +
  coord_flip() + 
  labs(title = "Freq dos Motivos de Desfecho", x = "Motivo", y = "Frequência") +
  scale_y_continuous(breaks = seq(0, max(df_desfecho$Frequencia), by = 10000)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(grafico)

tabela_dos_motivos <- motivos_finais %>%
  table() %>%
  as.data.frame() %>%
  filter(Freq > 0)

Conclusão

O objetivo deste relatório foi analisar a eficiência e o desempenho do SAMU na cidade do Recife ao longo de 2022, utilizando dados públicos disponibilizados pela Prefeitura do Recife. Os casos de emergência, especialmente acidentes de trânsito e situações de violência, ressaltou a importância de um atendimento rápido e especializado. A partir dessa problemática, buscou-se compreender como o SAMU tem atendido as demandas da população, identificando padrões, gargalos e possíveis áreas de melhoria.

A análise foi realizada com base em dados detalhados de mais de 188 mil ocorrências registradas em 2022, abrangendo tanto Recife quanto 17 municípios vizinhos. Utilizando técnicas de limpeza e manipulação de dados, padronização de variáveis e visualizações gráficas, foram identificadas tendências temporais e geográficas, além de perfis de solicitantes e tipos de ocorrências mais comuns.

A análise revelou alguns insights cruciais: o período da manhã, especialmente entre 6h e 10h, foi o de maior demanda para o SAMU, possivelmente devido ao aumento da mobilidade e atividades diárias. O município de Recife liderou em número de atendimentos, seguido por outras cidades da região metropolitana. Homens, particularmente bebês e adultos entre 20 e 40 anos, foram os que mais demandaram o serviço, destacando uma prevalência de ocorrências em acidentes de trânsito. O tipo de emergência mais frequente envolveu causas externas, como acidentes de trânsito, especialmente com motos.

Para gestores públicos e profissionais de saúde, os resultados fornecem informações valiosas para melhorar a alocação de recursos e a gestão do serviço de emergência. As autoridades podem usar esses dados para ajustar a distribuição de ambulâncias e equipes, principalmente durante os horários de maior demanda, e focar em políticas de prevenção de acidentes de trânsito, especialmente com motos. Melhorias operacionais no SAMU também são cruciais para aumentar a taxa de êxito nos atendimentos.

Embora a análise tenha oferecido uma visão abrangente do desempenho do SAMU, ela apresentou algumas limitações, como a ausência de informações mais detalhadas sobre o tempo de resposta e a qualidade dos atendimentos. Além disso, a presença de dados faltantes em certas variáveis pode ter limitado a precisão de alguns resultados. Futuras análises podem se beneficiar de um acompanhamento mais detalhado do fluxo de trabalho do SAMU, integrando dados em tempo real e analisando métricas como o tempo médio de atendimento e a satisfação dos pacientes. Outras análises também poderiam explorar a correlação entre a demanda por serviços de emergência e fatores externos, como condições climáticas ou eventos específicos.

LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gZGUgQW7DoWxpc2UgZG8gU2VydmnDp28gZGUgQXRlbmRpbWVudG8gTcOzdmVsIGRlIFVyZ8OqbmNpYSAoU0FNVSkg4oCTIFBlcm5hbWJ1Y28gMjAyMiINCmF1dGhvcjogIkRhbWFyaXMgRm9udGUuIFIsIFMiDQpkYXRlOiAiw5psdGltYSBhdHVhbGl6YcOnw6NvOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjc3M6IHN0eWxlLmNzcw0KICAgIHRoZW1lOiB1bml0ZWQNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdG9jX2RlcHRoOiAzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCmxpbmstY2l0YXRpb25zOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICB3YXJuaW5nPUZBTFNFKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpvY29ycmVuY2lhczIwMjIgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL2RhbWFyL09uZURyaXZlL8OBcmVhIGRlIFRyYWJhbGhvL0F0aXZpZGFkZXMgLSBSL29jb3JyZW5jaWFzMjAyMi5jc3YiLCBzZXAgPSAiOyIpDQpgYGANCg0KIyBJbnRyb2R1w6fDo28gey19DQogDQogQ29tIG8gYXVtZW50byBkb3MgY2Fzb3MgZGUgZW1lcmfDqm5jaWEsIGVzcGVjaWFsbWVudGUgcmVsYWNpb25hZG9zIGEgYWNpZGVudGVzIGRlIHRyw6Juc2l0byBlIHZpb2zDqm5jaWEsIGEgbmVjZXNzaWRhZGUgZGUgdW0gYXRlbmRpbWVudG8gcsOhcGlkbyBlIGVzcGVjaWFsaXphZG8gdG9ybm91LXNlIGNydWNpYWwuIEEgcHJlc3Rhw6fDo28gZGUgcHJpbWVpcm9zIHNvY29ycm9zIGRpcmV0YW1lbnRlIG5hIGNlbmEgZG8gaW5jaWRlbnRlIHBvZGUgc2VyIGEgZGlmZXJlbsOnYSBlbnRyZSBhIHZpZGEgZSBhIG1vcnRlLiBQb3J0YW50bywgw6kgZXNzZW5jaWFsIGVudGVuZGVyIGNvbW8gb3Mgc2VydmnDp29zIGRlIGVtZXJnw6puY2lhLCBjb21vIG8gU2VydmnDp28gZGUgQXRlbmRpbWVudG8gTcOzdmVsIGRlIFVyZ8OqbmNpYSAoU0FNVSksIGVzdMOjbyBkZXNlbXBlbmhhbmRvIHN1YXMgZnVuw6fDtWVzLiBFc3RlIHJlbGF0w7NyaW8gw6kgZGUgaW50ZXJlc3NlIHRhbnRvIHBhcmEgcHJvZmlzc2lvbmFpcyBkZSBzYcO6ZGUgcXVhbnRvIHBhcmEgZ2VzdG9yZXMgcMO6YmxpY29zLCBwb2lzIG9mZXJlY2UgaW5zaWdodHMgdmFsaW9zb3Mgc29icmUgYSBlZmljacOqbmNpYSBlIGVmaWPDoWNpYSBkbyBTQU1VIG5hIGNpZGFkZSBkbyBSZWNpZmUuDQoNCiMjIyBBYm9yZGFnZW0gZG8gUHJvYmxlbWEgIHstfQ0KUGFyYSBhYm9yZGFyIGEgcXVlc3TDo28gZGEgZWZpY2nDqm5jaWEgZG8gU0FNVSwgZXN0ZSByZWxhdMOzcmlvIGFuYWxpc2Fyw6EgZGFkb3MgY29sZXRhZG9zIGFvIGxvbmdvIGRvIGFubyBkZSAyMDIyLCBkaXNwb25pdmVpcyBubyBzaXRlIGRvIGdvdmVybm8gZGEgUHJlZmVpdHVyYSBkbyBSZWNpZmUgLSBQZXJuYW1idWNvIChodHRwOi8vZGFkb3MucmVjaWZlLnBlLmdvdi5ici9kYXRhc2V0L3NlcnZpY28tZGUtYXRlbmRpbWVudG8tbW92ZWwtZGUtdXJnZW5jaWEtc2FtdS0yMDIyKS4gQSBhbsOhbGlzZSBjb25zaXN0aXLDoSBlbSBwcm9jdXJhciBwYWRyw7VlcyBub3MgZ3LDoWZpY29zIGdlcmFkb3MgcXVlIHBvc3NhbSByZXNwb25kZXIgYXMgcXVlc3TDtWVzIGRhIHByb3Bvc3RhIGRvIHJlbGF0w7NyaW8uDQoNCiMjIyBBYm9yZGFnZW0gUHJvcG9zdGEgey19DQpBIHTDqWNuaWNhIGFkb3RhZGEgZW52b2x2ZSBhIGFuw6FsaXNlIGRvcyBkYWRvcyBjb2xldGFkb3MsIHV0aWxpemFuZG8gZmVycmFtZW50YXMgZGUgdmlzdWFsaXphw6fDo28gZGUgZGFkb3MgcGFyYSBpZGVudGlmaWNhciB0ZW5kw6puY2lhcyBlIHBhZHLDtWVzLiBBIGFuw6FsaXNlIHNlcsOhIGRpdmlkaWRhIGVtIHbDoXJpYXMgc2XDp8O1ZXMsIGluY2x1aW5kbyBhIGRpc3RyaWJ1acOnw6NvIHRlbXBvcmFsIGRhcyBvY29ycsOqbmNpYXMsIGEgY2F0ZWdvcml6YcOnw6NvIGRvcyB0aXBvcyBkZSBlbWVyZ8OqbmNpYXMgYXRlbmRpZGFzLCBvIHBlcmZpbCBkb3Mgc29saWNpdGFudGVzIGUgb3MgcmVzdWx0YWRvcyBkb3MgYXRlbmRpbWVudG9zLiBFc3NhIGFib3JkYWdlbSBwZXJtaXRpcsOhIHVtYSBjb21wcmVlbnPDo28gYWJyYW5nZW50ZSBkbyBkZXNlbXBlbmhvIGRvIFNBTVUuDQoNCiMjIyBCZW5lZsOtY2lvcyBkYSBBbsOhbGlzZSB7LX0NCkEgYW7DoWxpc2UgZGV0YWxoYWRhIGRvcyBkYWRvcyBkbyBTQU1VIGFqdWRhcsOhIGEgaWRlbnRpZmljYXIgcG9udG9zIGZvcnRlcyBlIGZyYWNvcyBubyBhdGVuZGltZW50byBlbWVyZ2VuY2lhbC4gSXNzbyBwZXJtaXRpcsOhIHF1ZSBnZXN0b3JlcyBkZSBzYcO6ZGUgZSBmb3JtdWxhZG9yZXMgZGUgcG9sw610aWNhcyB0b21lbSBkZWNpc8O1ZXMgaW5mb3JtYWRhcyBwYXJhIG1lbGhvcmFyIGEgZWZpY2nDqm5jaWEgZG8gc2VydmnDp28uIEFsw6ltIGRpc3NvLCBhIGlkZW50aWZpY2HDp8OjbyBkZSBwYWRyw7VlcyBkZSBkZW1hbmRhIHBvZGUgYWp1ZGFyIG5hIGFsb2Nhw6fDo28gZGUgcmVjdXJzb3MgZSBuYSBwcmVwYXJhw6fDo28gcGFyYSBlbWVyZ8OqbmNpYXMgZnV0dXJhcywgZ2FyYW50aW5kbyBxdWUgbyBTQU1VIGNvbnRpbnVlIGEgc2VyIHVtIHBpbGFyIGZ1bmRhbWVudGFsIG5vIGF0ZW5kaW1lbnRvIGVtZXJnZW5jaWFsIGRlIHNhw7pkZSBuYSBjaWRhZGUgZG8gUmVjaWZlLg0KDQojIFBhY290ZXMgey19DQpgYGB7ciwgZWNobyA9IFRSVUV9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShrbml0cikNCmBgYA0KDQoxLiBkcGx5cjogRXN0ZSBwYWNvdGUgw6kgZXNzZW5jaWFsIHBhcmEgbWFuaXB1bGHDp8OjbyBkZSBkYWRvcy4gRWxlIGZvcm5lY2UgdW1hIGdyYW3DoXRpY2EgY29uc2lzdGVudGUgZGUgdmVyYm9zIGNvbW8gYHNlbGVjdCgpYCwgYGZpbHRlcigpYCwgYG11dGF0ZSgpYCwgYHN1bW1hcmlzZSgpYCBlIGBhcnJhbmdlKClgLCBxdWUgYWp1ZGFtIGEgcmVhbGl6YXIgb3BlcmHDp8O1ZXMgY29tdW5zIGRlIG1hbmlwdWxhw6fDo28gZGUgZGFkb3MgZGUgZm9ybWEgZWZpY2llbnRlLg0KDQoyLiB0aWR5cjogVXRpbGl6YWRvIHBhcmEgb3JnYW5pemFyIGRhZG9zLiBFbGUgZmFjaWxpdGEgYSB0cmFuc2Zvcm1hw6fDo28gZGUgZGFkb3MgZW0gdW0gZm9ybWF0byAidGlkeSIsIG9uZGUgY2FkYSB2YXJpw6F2ZWwgw6kgdW1hIGNvbHVuYSBlIGNhZGEgb2JzZXJ2YcOnw6NvIMOpIHVtYSBsaW5oYS4NCg0KMy4gamFuaXRvcjogRXN0ZSBwYWNvdGUgw6kgw7N0aW1vIHBhcmEgbGltcGV6YSBkZSBkYWRvcy4gRWxlIG9mZXJlY2UgZnVuw6fDtWVzIHBhcmEgbGltcGFyIG5vbWVzIGRlIGNvbHVuYXMsIHJlbW92ZXIgbGluaGFzIGR1cGxpY2FkYXMsIGUgb3V0cmFzIHRhcmVmYXMgY29tdW5zIGRlIGxpbXBlemEgZGUgZGFkb3MuIEEgZnVuw6fDo28gYGNsZWFuX25hbWVzKClgIMOpIHV0aWxpemFkYSBuZXNzZSByZWxhdMOzcmlvLg0KDQo0LiBnZ3Bsb3QyOiBVbSBkb3MgcGFjb3RlcyBtYWlzIHBvcHVsYXJlcyBwYXJhIHZpc3VhbGl6YcOnw6NvIGRlIGRhZG9zLiBFbGUgaW1wbGVtZW50YSBhIGdyYW3DoXRpY2EgZGUgZ3LDoWZpY29zLCBwZXJtaXRpbmRvIGNyaWFyIGdyw6FmaWNvcyBjb21wbGV4b3MgZGUgZm9ybWEgc2ltcGxlcyBlIGludHVpdGl2YS4gRnVuw6fDtWVzIGNvbW8gYGdncGxvdCgpYCwgYGdlb21fcG9pbnQoKWAsIGBnZW9tX2xpbmUoKWAsIGVudHJlIG91dHJhcywgc8OjbyBhbXBsYW1lbnRlIHV0aWxpemFkYXMuDQoNCjUuIGx1YnJpZGF0ZTogRmFjaWxpdGEgbyB0cmFiYWxobyBjb20gZGF0YXMgZSBob3Jhcy4gRWxlIHNpbXBsaWZpY2EgYSBjb252ZXJzw6NvLCBtYW5pcHVsYcOnw6NvIGUgZXh0cmHDp8OjbyBkZSBjb21wb25lbnRlcyBkZSBkYXRhcyBlIGhvcmFzLiBGdW7Dp8O1ZXMgY29tbyBgeW1kKClgLCBgaG1zKClgLCBgZmxvb3JfZGF0ZSgpYCwgZSBgY2VpbGluZ19kYXRlKClgIHPDo28gbXVpdG8gw7p0ZWlzLg0KDQo2LiBrbml0cjogVXRpbGl6YWRvIHBhcmEgZ2VyYXIgcmVsYXTDs3Jpb3MgZGluw6JtaWNvcy4gRWxlIHBlcm1pdGUgaW50ZWdyYXIgY8OzZGlnbyBSIGNvbSBkb2N1bWVudG9zIGVtIE1hcmtkb3duIG91IExhVGVYLCBmYWNpbGl0YW5kbyBhIGNyaWHDp8OjbyBkZSByZWxhdMOzcmlvcyByZXByb2R1dMOtdmVpcy4gDQoNCiMgUHJlcGFyYcOnw6NvIGRvcyBkYWRvcyB7LX0NCk9zIGRhZG9zIHRyYWJhbGhhZG9zIG5lc3RlIHJlbGF0w7NyaW8gZmF6ZW0gcGFydGUgZGEgU2VjcmV0w6FyaWEgZGUgU2HDumRlIHByZXNlbnRlIG5vIGJhbmNvIGRlIGRhZG9zIGRhIFByZWZlaXR1cmEgZG8gR292ZXJubyBkbyBSZWNpZmUgLSBQZXJuYW1idWNvIChodHRwOi8vZGFkb3MucmVjaWZlLnBlLmdvdi5ici9kYXRhc2V0L3NlcnZpY28tZGUtYXRlbmRpbWVudG8tbW92ZWwtZGUtdXJnZW5jaWEtc2FtdS0yMDIyKS4gTyBwcm9wb3NpdG8gb3JnaW5hbCBkYSBjcmlhw6fDo28gZG8gZGF0YXNldCBjb25zaXN0ZSBubyBtb25pdG9yYW1lbnRvIGRhcyBsaWdhw6fDtWVzIGRvIFNlcnZpw6dvIGRlIEF0ZW5kaW1lbnRvIE3Ds3ZlbCBkZSBVcmfDqm5jaWEgLSBTQU1VIGRvIGFubyBkZSAyMDIyLCBuw6NvIGFwZW5hcyBkbyBSZWNpZmUgY29tbyB0YW1iw6ltIGRlIG1haXMgMTcgbXVuaWNpcGlvcyBwcsOzeGltb3MuIE8gYmFuY28gZGUgZGFkb3MgcG9zc3VpYSBjb2xldGFzIG1lbnNhaXMsIHRlbmRvIG8gdG90YWwgZGUgMTIgdmFyacOhdmVpcyBlIDE4ODYwOSBvYnNlcnZhw6fDtWVzLg0KYGBge3J9DQojIFNlbGVjaW9uYXIgYXMgcHJpbWVpcmFzIDEwIGxpbmhhcw0KcHJpbWVpcmFzXzEwX2xpbmhhcyA8LSBoZWFkKG9jb3JyZW5jaWFzMjAyMiwgMTApDQoNCiMgQ3JpYXIgYSB0YWJlbGENCmthYmxlKHByaW1laXJhc18xMF9saW5oYXMpJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGQUxTRSwgZm9udF9zaXplID0gMTIpICU+JQ0KICBzY3JvbGxfYm94KHdpZHRoID0gIjEwMCUiLCBoZWlnaHQgPSAiNTAwcHgiKQ0KYGBgDQoNCg0KQ29tbyBvYnNlcnZhZG8gbmEgdGFiZWxhIGFjaW1hLCBlc3RhIG1vc3RyYSBhcyBwcmltZWlyYXMgbGluaGFzIGRvIGRhdGFzZXQgb3JpZ2luYWwsIHNlbSBhbHRlcmHDp8O1ZXMsIMOpIHBvc3NpdsOpbCB2ZXIgZXNwYcOnb3MgZW0gYnJhbmNvcywgYWzDqW0gZGlzc28sIGFzIGNvbHVuYXMgcG9zc3VpYW0gdmFsb3JlcyBlc3RyYW5ob3Mgb3UgZGUgdGlwb3MgcXVlIG7Do28gZGV2ZXJpYW0gZXN0YXIgbmEgY29sdW5hLiBDb21vIHBvciBleGVtcGxvLCBhIHZhcmnDoXZlbCAic2V4byIgcG9zc3VpYSBvIG7Dum1lcm8gIjQ2IiBjb21vIHVtIGZhdG9yLCBzZW5kbyBxdWUgZGV2ZXJpYSBzZXIgYXBlbmFzICJGZW1pbmlubyIgb3UgIk1hc2N1bGlubyIuDQpQb3J0YW50byBhIGxpbXBlemEgZGUgZGFkb3MgZSBwYWRyb25pemHDp8OjbyBtb3N0cmEtc2UgdW1hIGZhc2UgZnVuZGFtZW50YWwgcGFyYSBhcyBhbsOhbGlzZXMgZG9zIGRhZG9zIHF1ZSBpcmVtb3MgcmVhbGl6YXIgdXJhbnRlIHRvZG8gbyB0cmFiYWxoby4gVmVyZW1vcyBub3MgcGFzc29zIGEgc2VndWlyOg0KDQoxwrogUGFzc286IFJlbW92ZXIgYXMgTkFzIGRvIGRhdGFzZXQgb3JpZ2luYWw6DQoNCkVzc2EgbGluaGEgcmVtb3ZlIGFzIE5BcyBwcmVzZW50ZXMgbm8gZGF0YXNldA0KYGBge3IsIGVjaG89VFJVRX0NCm9jb3JyZW5jaWFzIDwtIG5hLm9taXQob2NvcnJlbmNpYXMyMDIyKQ0KYGBgDQoywrogUGFzc286IFJlbW92ZXIgZHVwbGljYXRhczoNCg0KTyB0cmVjaG8gZGUgY8OzZGlnbyBhYmFpeG8gdXRpbGl6YSBhIGZ1bsOnw6NvIGRpc3RpbmN0KCkgZG8gcGFjb3RlIGRwbHlyIHBhcmEgcmVtb3ZlciBsaW5oYXMgZHVwbGljYWRhcyBkbyBkYXRhZnJhbWUgb2NvcnJlbmNpYXMuIElzc28gc2lnbmlmaWNhIHF1ZSwgYXDDs3MgYSBleGVjdcOnw6NvIGRlc3NlIGPDs2RpZ28sIG8gZGF0YWZyYW1lIG9jb3JyZW5jaWFzIGNvbnRlcsOhIGFwZW5hcyBsaW5oYXMgw7puaWNhcy4NCmBgYHtyLCBlY2hvPVRSVUV9DQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgZGlzdGluY3QoKQ0KYGBgDQozwrogUGFzc286IFJlbW92ZXIgY29sdW5hcyBvdSBsaW5oYXMgY29tcGxldGFtZW50ZSB2YXppYXM6DQoNCkVzc2VzIHRyZWNob3MgZGUgY8OzZGlnbyB1dGlsaXphbSBhIGZ1bsOnw6NvIHJlbW92ZV9lbXB0eSgpIGRvIHBhY290ZSBqYW5pdG9yIHBhcmEgcmVtb3ZlciBjb2x1bmFzIGUgbGluaGFzIHZhemlhcyBkbyBkYXRhZnJhbWUgb2NvcnJlbmNpYXMuDQpgYGB7ciwgZWNobz1UUlVFfQ0Kb2NvcnJlbmNpYXMgPC0gb2NvcnJlbmNpYXMgJT4lIHJlbW92ZV9lbXB0eSgiY29scyIpDQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgcmVtb3ZlX2VtcHR5KCJyb3dzIikNCmBgYA0KNMK6IFBhc3NvOiBGb2kgcmVhbGl6YWRvIHZlcmlmaWNhw6fDtWVzIGRlIGZhdG9yZXMgZGFzIGNvbHVuYXMgInNleG8iLCAiaWRhZGUiLCAibW90aXZvX2Rlc2ZlY2hvIiwgIm1vdGl2b19maW5hbGl6YWNhbyIsICJ0aXBvIiBlICJzdWJ0aXBvIiwgY29tbyBlc3NhcyB2YXLDrWF2ZWlzIHPDo28gYXMgcHJpbmNpcGFpcyBxdWUgc2Vyw6NvIGFuYWxpc2FkYXMsIGVsYXMgcHJlY2lzYW0gZXN0YXIgcGFkcm9uaXphZGFzLiBQb3J0YW50bywgYW8gaWRlbnRpZmljYXIgZmF0b3JlcyBmb3JhIGRvIG5vcm1hbCBkYSB2YXJpw6F2ZWwsIGZvaSByZWFsaXphZG8gYSBjb3JyZcOnw6NvLg0KYGBge3IsIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0NCiMgVmVyaWZpY2FuZG8gb3MgZmF0b3JlcyBkYSBjb2x1bmEgU2V4bw0KZmF0b3Jfc2V4byA8LSB1bmlxdWUob2NvcnJlbmNpYXMkc2V4bykNCiMgTXVkYW5kbyBvcyBmYXRvcmVzIHF1ZSBuw6NvIHPDo28gRiBuZW0gTSBwYXJhIE5Bcw0Kb2NvcnJlbmNpYXMgPC0gb2NvcnJlbmNpYXMgJT4lIG11dGF0ZShzZXhvID0gaWZlbHNlKHNleG8gPT0gNDYsIE5BLCBzZXhvKSkNCm9jb3JyZW5jaWFzIDwtIG9jb3JyZW5jaWFzICU+JSBtdXRhdGUoc2V4byA9IGlmZWxzZShzZXhvID09ICIiLCBOQSwgc2V4bykpDQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgbXV0YXRlKHNleG8gPSBpZmVsc2Uoc2V4byA9PSAic2V4byIsIE5BLCBzZXhvKSkNCg0KIyBWZXJpZmljYW5kbyBvcyBmYXRvcmVzIGRhIGNvbHVuYSBpZGFkZQ0KZmF0b3JfaWRhZGUgPC0gdW5pcXVlKG9jb3JyZW5jaWFzJGlkYWRlKQ0KIyBNdWRhbmRvIG9zIGZhdG9yZXMgcXVlIG7Do28gZmF6ZW0gc2VudGlkbyBwYXJhIGlkYWRlDQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgbXV0YXRlKGlkYWRlID0gYXMubnVtZXJpYyhpZGFkZSkpDQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgbXV0YXRlKGlkYWRlID0gaWZfZWxzZShpZGFkZSA+IDExOSwgTkFfcmVhbF8sIGlkYWRlKSkNCg0KI1ZlcmlmaWNhbmRvIG9zIHRpcG9zIGRlIG1vdGl2b3MgZGUgZGVzZmVjaG8NCmZhdG9yX21vdGl2b3MgPC0gdW5pcXVlKG9jb3JyZW5jaWFzJG1vdGl2b19kZXNmZWNobykNCiMgTXVkYW5kbyB0aXBvcyBlc3RyYW5ob3MgcGFyYSBOQXMNCm9jb3JyZW5jaWFzIDwtIG9jb3JyZW5jaWFzICU+JSANCiAgbXV0YXRlKG1vdGl2b19kZXNmZWNobyA9IGlmX2Vsc2UobW90aXZvX2Rlc2ZlY2hvID09ICJQQUNJRU5URSBKw4kgRU5DT05UUkFETyBFTSDDk0JJVE8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBQ0lFTlRFIEVOQ09OVFJBRE8gRU0gw5NCSVRPIiwgbW90aXZvX2Rlc2ZlY2hvKSwNCiAgICAgICAgIG1vdGl2b19kZXNmZWNobyA9IGlmX2Vsc2UobW90aXZvX2Rlc2ZlY2hvID09ICJtb3Rpdm9fZGVzZmVjaG8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFfY2hhcmFjdGVyXywgbW90aXZvX2Rlc2ZlY2hvKSwNCiAgICAgICAgIG1vdGl2b19kZXNmZWNobyA9IGlmX2Vsc2UobW90aXZvX2Rlc2ZlY2hvID09ICJTRU0gREVTRkVDSE8yMDIyLTEyLTAxIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIG1vdGl2b19kZXNmZWNobyksDQogICAgICAgICBtb3Rpdm9fZGVzZmVjaG8gPSBpZl9lbHNlKG1vdGl2b19kZXNmZWNobyA9PSAiIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIG1vdGl2b19kZXNmZWNobykpDQoNCiNWZXJpZmljYW5kbyBvIG1vdGl2byBkYSBzb2xpY2l0YcOnw6NvDQpmYXRvcl9zb2xpY2l0YWNhbyA8LSB1bmlxdWUob2NvcnJlbmNpYXMkbW90aXZvX2ZpbmFsaXphY2FvKQ0KIyBNdWRhbmRvIHRpcG9zIGVzdHJhbmhvcyBwYXJhIE5Bcw0Kb2NvcnJlbmNpYXMgPC0gb2NvcnJlbmNpYXMgJT4lIA0KICBtdXRhdGUobW90aXZvX2ZpbmFsaXphY2FvID0gaWZfZWxzZShtb3Rpdm9fZmluYWxpemFjYW8gPT0gIlBBQ0lFTlRFIErDiSBFTkNPTlRSQURPIEVNIMOTQklUTyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFDSUVOVEUgRU5DT05UUkFETyBFTSDDk0JJVE8iLCBtb3Rpdm9fZmluYWxpemFjYW8pLA0KICAgICAgICAgbW90aXZvX2ZpbmFsaXphY2FvID0gaWZfZWxzZShtb3Rpdm9fZmluYWxpemFjYW8gPT0gIm1vdGl2b19maW5hbGl6YWNhbyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQV9jaGFyYWN0ZXJfLCBtb3Rpdm9fZmluYWxpemFjYW8pLA0KICAgICAgICAgbW90aXZvX2ZpbmFsaXphY2FvID0gaWZfZWxzZShtb3Rpdm9fZmluYWxpemFjYW8gPT0gIkNBTkNFTEFEQSAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNBTkNFTEFEQSIsIG1vdGl2b19maW5hbGl6YWNhbyksDQogICAgICAgICBtb3Rpdm9fZmluYWxpemFjYW8gPSBpZl9lbHNlKG1vdGl2b19maW5hbGl6YWNhbyA9PSAiIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIG1vdGl2b19maW5hbGl6YWNhbyksDQogICAgICAgICBtb3Rpdm9fZmluYWxpemFjYW8gPSBpZl9lbHNlKG1vdGl2b19maW5hbGl6YWNhbyA9PSAiU0VNIERFU0ZFQ0hPIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIG1vdGl2b19maW5hbGl6YWNhbykpDQoNCiNWZXJpZmljYW5kbyBvcyBmYXRvcmVzIGRvIHRpcG8NCmZhdG9yX3RpcG8gPC0gdW5pcXVlKG9jb3JyZW5jaWFzJHRpcG8pDQojTXVkYW5kbyBvcyBmYXRvcmVzIGRvIHRpcG8NCm9jb3JyZW5jaWFzIDwtIG9jb3JyZW5jaWFzICU+JSBtdXRhdGUodGlwbyA9IGlmZWxzZSh0aXBvID09ICJ0aXBvIiwgTkEsIHRpcG8pKQ0KDQojVmVyaWZpY2FuZG8gb3MgZmF0b3JlcyBkbyBzdWJ0aXBvDQpmYXRvcl9zdWJ0aXBvcyA8LSB1bmlxdWUob2NvcnJlbmNpYXMkc3VidGlwbykgDQojIE11ZGFuZG8gc3VidGlwb3MgZXN0cmFuaG9zIHBhcmEgTkFzDQpvY29ycmVuY2lhcyA8LSBvY29ycmVuY2lhcyAlPiUgDQogIG11dGF0ZShzdWJ0aXBvID0gaWZfZWxzZShzdWJ0aXBvID09ICIiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIHN1YnRpcG8pLA0KICAgICAgICAgc3VidGlwbyA9IGlmX2Vsc2Uoc3VidGlwbyA9PSAiRkVNSU5JTk8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFfY2hhcmFjdGVyXywgc3VidGlwbyksDQogICAgICAgICBzdWJ0aXBvID0gaWZfZWxzZShzdWJ0aXBvID09ICJzdWJ0aXBvIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIHN1YnRpcG8pKQ0KYGBgDQoNCkFww7NzIGlzc28sIG9zIGRhZG9zIGNvbSBlc3Bhw6dvcyBlbSBicmFuY28gdG9ybmFyYW0tc2UgTkFzLCBwb3LDqW0gZWxhcyBhaW5kYSBuw6NvIGZvcmFtIHJldGlyYWRhcyBwb3IgcXVlIGRlcGVuZGVuZG8gZGEgZmlsdHJhZ2VtIGVzdGFiZWxlY2lkYSBwYXJhIGFuYWzDrXNlIGVzcGVjaWZpY2EsIGFsZ3VtIGRhZG8gcXVlIGFncmVnYXJpYSBuZXN0YSBwb2RlcmlhIHNlciBjb21wcm9tZXRpZG8sIGNvbW8gcG9yIGV4ZW1wbG8sIGEgb2JzZXJ2YcOnw6NvIGRvcyBtb3Rpdm9zIGRvIGRlc2ZlY2hvLCBzZSBob3V2ZXNzZSBhIHJlbW/Dp8OjbyBkYXMgTkFzIG5vIGRhdGFzZXQgb2NvcnJlbmNpYSwgbyBtb3Rpdm8gIk9jb3JlbmNpYSBDb25jbHVpZGEgY29tIEV4aXRvIiB0ZXJpYSBkaXZlcnNvcyBkYWRvcyBwZXJkaWRvcyBwb3IgY2F1c2EgZGEgdmFyacOhdmVsIG1vdGl2byBkYSBmaW5hbGl6YcOnw6NvIHF1ZSBwb3NzdWkgbXVpdGFzIE5Bcy4gUG9yIGVzc2UgbW90aXZvLCBvcHRlaSBwb3IgbWFudGUtbMOhcyBhdMOpIGEgZmlsdHJhZ2VtIGRhcyBjb2x1bmFzIHF1ZSBpcmVpIHVzYXIuDQoNCmBgYHtyLCBlY2hvPVRSVUV9DQojIFNlbGVjaW9uYXIgYXMgcHJpbWVpcmFzIDE1MCBsaW5oYXMNCnByaW1laXJhc18xNTBfbGluaGFzIDwtIGhlYWQob2NvcnJlbmNpYXMsIDE1MCkNCg0KIyBDcmlhciBhIHRhYmVsYQ0Ka2FibGUocHJpbWVpcmFzXzE1MF9saW5oYXMpJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGQUxTRSwgZm9udF9zaXplID0gMTIpICU+JQ0KICBzY3JvbGxfYm94KHdpZHRoID0gIjEwMCUiLCBoZWlnaHQgPSAiNTAwcHgiKQ0KYGBgDQoNCiMgQW7DoWxpc2UgRXhwbG9yYXTDs3JpYSBkb3MgRGFkb3Mgey19DQoNCkluaWNpYWxtZW50ZSwgb2NvcnJldSBhIHNlbGXDp8OjbyBkYXMgY29sdW5hcyBxdWUgc2VyaWFtIHV0aWxpemFkYXMgcGFyYSBkZXRlcm1pbmFkYXMgYW7DoWxpc2VzIGUsIGp1bnRhbWVudGUgYSBlc3NhIHNlbGXDp8OjbywgYXMgTkFzIGZvcmFtIHJlbW92aWRhcy4NCg0KYGBge3J9DQojIEZpbHRyYW5kbyBkYWRvcyBwYXJhIGZ1dHVyYXMgYW7DoWxpc2VzDQojIERlbW9ncmFmaWENCmRlbW9ncmFmaWEgPC0gb2NvcnJlbmNpYXMgJT4lIHNlbGVjdChtdW5pY2lwaW8sIHNleG8sIGlkYWRlKSAlPiUgbmEub21pdCgpDQoNCiMgVGlwb3MgZnJlcXVlbnRlcw0KdGlwb3MgPC0gb2NvcnJlbmNpYXMgJT4lIHNlbGVjdCh0aXBvKSAlPiUgbmEub21pdCgpDQoNCiNEaXN0cmlidWnDp8OjbyB0ZW1wb3JhbA0KZGlzdF90ZW1wb3JhbCA8LSBvY29ycmVuY2lhcyAlPiUgc2VsZWN0KGRhdGEsIGhvcmFfbWludXRvKSAgJT4lIG5hLm9taXQoKQ0KDQojTW90aXZvcyBkYXMgZm5hbGl6YcOnw7VlcyBlIG8gZGVzZmVjaG8NCm1vdGl2b3NfZmluYWlzIDwtIG9jb3JyZW5jaWFzICU+JSBzZWxlY3QobW90aXZvX2ZpbmFsaXphY2FvLCBtb3Rpdm9fZGVzZmVjaG8pICAlPiUgbmEub21pdCgpDQptb3Rpdm9zX2ZpbmFpcyA8LSBtb3Rpdm9zX2ZpbmFpcyAlPiUgbXV0YXRlKGFjcm9zcyhldmVyeXRoaW5nKCksIH5uYV9pZiguLCAiIikpKSAlPiUgbmEub21pdCgpDQoNCiNTdWJ0aXBvIGZyZXF1ZW50ZQ0Kc3VidGlwb3MgPC0gb2NvcnJlbmNpYXMgJT4lIHNlbGVjdChzdWJ0aXBvKSAlPiUgbmEub21pdCgpDQoNCiNEZXNmZWNobw0KZGVzZmVjaG8gPC0gb2NvcnJlbmNpYXMgJT4lIHNlbGVjdChtb3Rpdm9fZGVzZmVjaG8pICU+JSBuYS5vbWl0KCkNCmZpbmFsaXphY2FvIDwtIG9jb3JyZW5jaWFzICU+JSBzZWxlY3QobW90aXZvX2ZpbmFsaXphY2FvKSAlPiUgbmEub21pdCgpDQpgYGANCg0KIyMgQW7DoWxpc2UgVGVtcG9yYWw6IFF1YW5kbyBvIFJlY2lmZSBtYWlzIHByZWNpc291IGRvIFNBTVUgey19DQoNCk8gYW5vIGRlIDIwMjIgYXByZXNlbnRvdSB1bSBmbHV4byBjb25zdGFudGUgZGUgY2hhbWFkb3MgYW8gU0FNVSwgY29tIHVtIHRvdGFsIGRlIGFwcm94aW1hZGFtZW50ZSAxODkgbWlsIG9jb3Jyw6puY2lhcyByZWdpc3RyYWRhcy4gQSBhbsOhbGlzZSB0ZW1wb3JhbCByZXZlbG91IHF1ZSBvIG3DqnMgZGUgamFuZWlybyBmb2kgbyBtYWlzIG1vdmltZW50YWRvLCBjb2luY2lkaW5kbyBjb20gcGVyw61vZG9zIGZlc3Rpdm9zIGUgZGUgZsOpcmlhcywgcXVhbmRvIG8gbsO6bWVybyBkZSBhY2lkZW50ZXMgZSBlbWVyZ8OqbmNpYXMgdGVuZGUgYSBhdW1lbnRhci4gIE5vIGdlcmFsLCBvcyBtZXNlcyBwb3N0ZXJpb3JlcyBhIGphbmVpcm8gc2UgbWFudGl2ZXJhbSBjb25zdGFudGVzIGVudHJlIHNpLg0KYGBge3J9DQojRGlzdHJpYnVpw6fDo28gdGVtcG9yYWwNCmRpc3RyaWJ1aWNhbyA8LSBvY29ycmVuY2lhcyAlPiUgc2VsZWN0KGRhdGEsIGhvcmFfbWludXRvKSAgJT4lIG5hLm9taXQoKQ0KDQojSnVudGFuZG8gY29sdW5hcw0KZGlzdF90ZW1wb3JhbCA8LSBkaXN0cmlidWljYW8gJT4lDQogICAgICBtdXRhdGUoZGF0ZXRpbWUgPSBwYXN0ZShkYXRhLCBob3JhX21pbnV0bywgc2VwID0gIiAiKSkNCg0KI0NvbnZlcnPDo28gcGFyYSBkYXRhDQpkaXN0X3RlbXBvcmFsIDwtIGRpc3RfdGVtcG9yYWwgJT4lDQogICAgICBtdXRhdGUoZGF0YSA9IGFzLkRhdGUoZGF0ZXRpbWUsIGZvcm1hdCA9ICIlWS0lbS0lZCIpLA0KICAgICAgICAgICAgIG1lcyA9IGZsb29yX2RhdGUoZGF0YSwgIm1vbnRoIikpICU+JQ0KICAgICAgZ3JvdXBfYnkobWVzKSAlPiUNCiAgICAgIHN1bW1hcmlzZShxdWFudGlkYWRlX2xpZ2Fjb2VzID0gbigpKQ0KDQojIENyaWFyIG8gZ3LDoWZpY28gZGUgYmFycmFzDQpnZ3Bsb3QoZGlzdF90ZW1wb3JhbCwgYWVzKHggPSBtZXMsIHkgPSBxdWFudGlkYWRlX2xpZ2Fjb2VzKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJsaWdodGJsdWUiKSArDQogIGxhYnModGl0bGUgPSAiUXVhbnRpZGFkZSBkZSBTb2xpY2l0YcOnw7VlcyBNZW5zYWlzIiwNCiAgICAgICB4ID0gIk3DqnMiLA0KICAgICAgIHkgPSAiUXVhbnRpZGFkZSBkZSBTb2xpY2l0YcOnw7VlcyIpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViICVZIiwgZGF0ZV9icmVha3MgPSAiMSBtb250aCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCBtYXgoZGlzdF90ZW1wb3JhbCRxdWFudGlkYWRlX2xpZ2Fjb2VzLCBuYS5ybSA9IFRSVUUpLCBieSA9IDIwMDApKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpKQ0KYGBgDQoNCkEgYW7DoWxpc2UgZGFzIHNvbGljaXRhw6fDtWVzIHBvciBob3JhIGRvIGRpYSBkZXN0YWNvdSB1bSBwaWNvIHNpZ25pZmljYXRpdm8gZW50cmUgYXMgNiBob3JhcyBkYSBtYW5ow6MgZSAxMCBob3JhcyBkYSBtYW5ow6MuIEVzc2UgaG9yw6FyaW8gY29pbmNpZGUgY29tIG8gaW7DrWNpbyBkYXMgYXRpdmlkYWRlcyBkacOhcmlhcyBkYSBwb3B1bGHDp8OjbywgY29tbyBvIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gZSBhIGVzY29sYSwgYXVtZW50YW5kbyBhIGV4cG9zacOnw6NvIGEgYWNpZGVudGVzIGRlIHRyw6Juc2l0bywgY3Jpc2VzIGRlIHNhw7pkZSBzw7piaXRhcywgY29tbyBwcm9ibGVtYXMgY2FyZMOtYWNvcyBvdSBhY2lkZW50ZXMgZG9tw6lzdGljb3MsIGUgb3V0cmFzIGVtZXJnw6puY2lhcy4NCg0KSsOhIGR1cmFudGUgYXMgMTEgZGEgbWFuaMOjIGF0w6kgw6FzIDE4IGhvcmFzIGRhIHRhcmRlIHNlIG1hbnTDqW0gY29uc3RhbnRlIGFww7NzIGEgc3ViaWRhLCBpbmRpY2FuZG8gcXVlIGEgbmVjZXNzaWRhZGUgZGUgdW0gc29jb3JybyBvY29ycmUgbWFqb3JpdGFyaWFtZW50ZSBkdXJhbnRlIG8gcGVyw61vZG8gZGl1cm5vLCBvbmRlIGFzIHBlc3NvYXMgZXN0w6NvIG1haXMgYXRpdmFzLg0KDQpFIGFww7NzIGVzc2UgcGVyw61vZG8sIGFzIHNvbGljaXRhw6fDtWVzIHBhc3NhbSBhIHNlciBtZW5vcyBmcmVxdWVudGVzLCBwb2RlbmRvIGluZGljYXIgcXVlIGNvbSBvIHTDqXJtaW5vIGRvIGV4cGVkaWVudGUgZSBhIGRpbWludWnDp8OjbyBkbyB0csOibnNpdG8sIGEgZXhwb3Npw6fDo28gYW8gcmlzY28gZGltaW51aSwgcmVzdWx0YW5kbyBlbSBtZW5vcyBlbWVyZ8OqbmNpYXMuDQpgYGB7cn0NCiMgRGlzdHJpYnVpw6fDo28gdGVtcG9yYWwNCmRpc3RyaWJ1aWNhbyA8LSBvY29ycmVuY2lhcyAlPiUgc2VsZWN0KGRhdGEsIGhvcmFfbWludXRvKSAlPiUgbmEub21pdCgpDQoNCiMgSnVudGFuZG8gY29sdW5hcw0KZGlzdF90ZW1wb3JhbCA8LSBkaXN0cmlidWljYW8gJT4lDQogIG11dGF0ZShkYXRldGltZSA9IHBhc3RlKGRhdGEsIGhvcmFfbWludXRvLCBzZXAgPSAiICIpKQ0KDQojIENvbnZlcnPDo28gcGFyYSBkYXRhIGUgaG9yYQ0KZGlzdF90ZW1wb3JhbCA8LSBkaXN0X3RlbXBvcmFsICU+JQ0KICBtdXRhdGUoZGF0ZXRpbWUgPSBhcy5QT1NJWGN0KGRhdGV0aW1lLCBmb3JtYXQgPSAiJVktJW0tJWQgJUg6JU06JVMiKSwNCiAgICAgICAgIGhvcmEgPSBob3VyKGRhdGV0aW1lKSkgJT4lDQogIGdyb3VwX2J5KGhvcmEpICU+JQ0KICBzdW1tYXJpc2UocXVhbnRpZGFkZV9saWdhY29lcyA9IG4oKSkNCg0KIyBEZWZpbmlyIGEgY29kaWZpY2HDp8OjbyBkZSBjYXJhY3RlcmVzIHBhcmEgVVRGLTgNClN5cy5zZXRsb2NhbGUoIkxDX0FMTCIsICJwdF9CUi5VVEYtOCIpDQoNCiMgQ3JpYXIgbyBncsOhZmljbyBkZSBiYXJyYXMgcGFyYSBob3JhcyBkbyBkaWEgbm92YW1lbnRlDQpnZ3Bsb3QoZGlzdF90ZW1wb3JhbCwgYWVzKHggPSBob3JhLCB5ID0gcXVhbnRpZGFkZV9saWdhY29lcykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAibGlnaHRibHVlIikgKw0KICBsYWJzKHRpdGxlID0gIlF1YW50aWRhZGUgZGUgU29saWNpdGHDp8O1ZXMgcG9yIEhvcmEgZG8gRGlhIiwNCiAgICAgICB4ID0gIkhvcmEgZG8gRGlhIiwNCiAgICAgICB5ID0gIlF1YW50aWRhZGUgZGUgU29saWNpdGHDp8O1ZXMiKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjMsIGJ5ID0gMSksIGxhYmVscyA9IHNwcmludGYoIiUwMmQ6MDAiLCAwOjIzKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIG1heChkaXN0X3RlbXBvcmFsJHF1YW50aWRhZGVfbGlnYWNvZXMsIG5hLnJtID0gVFJVRSksIGJ5ID0gMTAwMCkpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIikpDQpgYGANCg0KIyMgQW7DoWxpc2VzIEdlb2dyw6FmaWNhczogQmFpcnJvcyBlIE11bmljw61waW9zIGVtIERlc3RhcXVlIHstfQ0KDQpBIGRpc3RyaWJ1acOnw6NvIGdlb2dyw6FmaWNhIGRvcyBhdGVuZGltZW50b3MgcmV2ZWxhIHF1ZSBvIG11bmljaXBpbyBkZSBSZWNpZmUgdWx0cmFwYXNzYSBvcyA2MC4wMDAgZW0gbsO6bWVybyBkZSBjaGFtYWRhcywgcmVmbGV4byBlc3RlLCBkYSDDoXJlYSBjb20gYWx0YSBkZW5zaWRhZGUgcG9wdWxhY2lvbmFsIGUgbWFpb3IgbW92aW1lbnRhw6fDo28gdXJiYW5hLg0KDQpPcyBkZW1haXMgbXVuw61jaXBvcywgY29tbyBKYWJvYXTDo28gZG9zIEd1cmFyYXBlcywgT2xpbmRhLCBQYXVsaXN0YSBlIENhYm8gZGUgU2FudG8gQWdvc3RpbmhvLCB0YW1iw6ltIHJlZ2lzdHJhcmFtIGFsdGEgZGVtYW5kYSwgcmVmb3LDp2FuZG8gYSBuZWNlc3NpZGFkZSBkZSBjb2JlcnR1cmEgZWZpY2llbnRlIGRvIFNBTVUgbsOjbyBhcGVuYXMgbmEgY2FwaXRhbCwgbWFzIGVtIHRvZGEgYSByZWdpw6NvIG1ldHJvcG9saXRhbmEuDQoNCmBgYHtyfQ0KI0ZpbHRyYW5kbw0KbG9jYWxpZGFkZSA8LSBvY29ycmVuY2lhcyAlPiUgc2VsZWN0KG11bmljaXBpbywgYmFpcnJvKSAlPiUgbmEub21pdCgpDQoNCiMgQ29udGFuZG8gYSBxdWFudGlkYWRlIGRlIHNvbGljaXRhw6fDtWVzIHBvciBtdW5pY8OtcGlvDQpzb2xpY2l0YWNvZXNfcG9yX211bmljaXBpbyA8LSBsb2NhbGlkYWRlICU+JQ0KICBncm91cF9ieShtdW5pY2lwaW8pICU+JQ0KICBzdW1tYXJpc2UocXVhbnRpZGFkZV9zb2xpY2l0YWNvZXMgPSBuKCkpICU+JQ0KICBhcnJhbmdlKGRlc2MocXVhbnRpZGFkZV9zb2xpY2l0YWNvZXMpKSAlPiUNCiAgc2xpY2UoMToyMCkNCg0KIyBQbG90YW5kbyBvIGdyw6FmaWNvIHBhcmEgb3MgMjAgbXVuaWPDrXBpb3MgY29tIG1haXMgc29saWNpdGHDp8O1ZXMNCmdncGxvdChzb2xpY2l0YWNvZXNfcG9yX211bmljaXBpbywgYWVzKHggPSByZW9yZGVyKG11bmljaXBpbywgLXF1YW50aWRhZGVfc29saWNpdGFjb2VzKSwgeSA9IHF1YW50aWRhZGVfc29saWNpdGFjb2VzKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJsaWdodGJsdWUiKSArDQogIGxhYnModGl0bGUgPSAiT3MgMjAgTXVuaWPDrXBpb3MgY29tIE1haXMgU29saWNpdGHDp8O1ZXMgZG8gU0FNVSIsDQogICAgICAgeCA9ICJNdW5pY8OtcGlvIiwNCiAgICAgICB5ID0gIlF1YW50aWRhZGUgZGUgU29saWNpdGHDp8O1ZXMiKSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgbWF4KHNvbGljaXRhY29lc19wb3JfbXVuaWNpcGlvJHF1YW50aWRhZGVfc29saWNpdGFjb2VzLCBuYS5ybSA9IFRSVUUpLCBieSA9IDEwMDAwKSkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkNCmBgYA0KDQoNCiMjIFBlcmZpbCBkZSBxdWVtIG1haXMgc29saWNpdGEgbyBzZXJ2acOnbyBzbyBTQU1VIHstfQ0KDQpPIHBlcmZpbCBkZW1vZ3LDoWZpY28gZG9zIHBhY2llbnRlcyBhdGVuZGlkb3MgcGVsbyBTQU1VIGVtIDIwMjIgbW9zdHJhIHVtYSBtYWlvciBwcmV2YWzDqm5jaWEgZGUgb2NvcnLDqm5jaWFzIGVudm9sdmVuZG8gaG9tZW5zIGVtIGNvbXBhcmHDp8OjbyDDoHMgbXVsaGVyZXMuIEEgZmFpeGEgZXTDoXJpYSBxdWUgaG91dmUgbWFpcyBzb2xpY2l0YcOnw7VlcyBmb2kgYSBkb3MgcHJpbWVpcm9zIG1lc2VzIGUgMSBhbm8gZGUgdmlkYS4gRHVyYW50ZSBvcyAyMCBhIDcwIGRlIGlkYWRlLCBhcyBvY29ycsOqbmNpYXMgc8OjbyBjb250aW51YXMgY29tIHBpY29zIGVtIGNlcnRhcyBpZGFkZXMsIG8gcXVlIHBvZGUgcmVmbGV0aXIgdG9kb3Mgb3MgcHJvYmxlbWFzIHBvc3PDrXZlaXMgcXVlIGFzIHBlc3NvYXMgcG9kZW0gdGVyIGR1cmFudGUgdG9kYSBhIHZpZGEuDQpgYGB7cn0NCiNGaWx0cmFuZG8NCmRlbW9ncmFmaWEgPC0gb2NvcnJlbmNpYXMgJT4lIHNlbGVjdChzZXhvLCBpZGFkZSkgJT4lIG5hLm9taXQoKQ0KDQojIEFuYWxpc2FuZG8gYSBkaXN0cmlidWnDp8OjbyBwb3Igc2V4bw0KZGlzdHJpYnVpY2FvX3NleG8gPC0gZGVtb2dyYWZpYSAlPiUNCiAgZ3JvdXBfYnkoc2V4bykgJT4lDQogIHN1bW1hcmlzZShxdWFudGlkYWRlID0gbigpKQ0KDQojIEFuYWxpc2FuZG8gYSBkaXN0cmlidWnDp8OjbyBwb3IgaWRhZGUNCmRpc3RyaWJ1aWNhb19pZGFkZSA8LSBkZW1vZ3JhZmlhICU+JQ0KICBncm91cF9ieShpZGFkZSkgJT4lDQogIHN1bW1hcmlzZShxdWFudGlkYWRlID0gbigpKQ0KDQojIFBsb3RhbmRvIG8gZ3LDoWZpY28gZGUgZGlzdHJpYnVpw6fDo28gcG9yIHNleG8NCmdncGxvdChkaXN0cmlidWljYW9fc2V4bywgYWVzKHggPSBzZXhvLCB5ID0gcXVhbnRpZGFkZSwgZmlsbCA9IHNleG8pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVpw6fDo28gZGUgQ2hhbWFkYXMgcG9yIFNleG8iLA0KICAgICAgIHggPSAiU2V4byIsDQogICAgICAgeSA9ICJRdWFudGlkYWRlIGRlIENoYW1hZGFzIikgKyANCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCBtYXgoZGlzdHJpYnVpY2FvX3NleG8kcXVhbnRpZGFkZSwgbmEucm0gPSBUUlVFKSwgYnkgPSAxMDAwMCkpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMgUGxvdGFuZG8gbyBncsOhZmljbyBkZSBkaXN0cmlidWnDp8OjbyBwb3IgaWRhZGUNCmdncGxvdChkaXN0cmlidWljYW9faWRhZGUsIGFlcyh4ID0gaWRhZGUsIHkgPSBxdWFudGlkYWRlKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVpw6fDo28gZGUgQ2hhbWFkYXMgcG9yIElkYWRlIiwNCiAgICAgICB4ID0gIklkYWRlIiwNCiAgICAgICB5ID0gIlF1YW50aWRhZGUgZGUgQ2hhbWFkYXMiKSArDQogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCBtYXgoZGlzdHJpYnVpY2FvX2lkYWRlJHF1YW50aWRhZGUsIG5hLnJtID0gVFJVRSksIGJ5ID0gMTAwMCkpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KT3MgZ3LDoWZpY29zIGEgc2VndWlyIG1vc3RyYW0gYXMgYW5hbGlzZXMgZGFzIGlkYWRlcyBkYXMgbXVsaGVyZXMgZSBkb3MgaG9tZW5zIHF1ZSBtYWlzIHNvbGljaXRhbSBvIHNlcnZpw6dvIGRvIFNBTVUuIA0KQW8gb2JzZXJ2YXIgb3MgZGFkb3MgZG8gc2V4byBmZW1pbmlubywgdGVtb3MgcXVlIG11bGhlcmVzIGVudHJlIDQwIGFub3MgcmVhbGl6YW0gbWFpcyBzb2xpY2l0YcOnw7VlcywgcG9yw6ltIGRlbnRyZSBvcyAyMCBhMHMgODUgYW5vcywgbyBncsOhZmljbyBtb3N0cmEtc2Ugc2VtcHJlIGVtIGFsdGEuT3MgY2hhbWFkb3MgZGVjYWVtIG1haXMgYWJydXB0YW1lbnRlIGVudHJlIG9zIDg1IGEgMTAwIGFub3MuDQpKw6EgYW8gb2JzZXJ2YXIgb3MgZGFkb3MgZG8gc2V4byBtYXNjdWxpbm8sIHRhbWLDqW0gdGVtb3MgcXVlIG9zIGhvbWVucyBlbnRyZSA0MCBhbm9zIHJlYWxpemFtIG1haXMgc29saWNpdGHDp8O1ZXMgZSBtYWlzIGRpc2Zvcm1lIHF1ZSBvIGRhIG11bGhlciBkdXJhbnRlIHRvZGEgdmlkYS4gT3MgY2hhbWFkb3MgcGFyYSBob21lbnMgZW50cmUgMCBlIDEgYW5vIGRlIGlkYWRlIGZpY2FtIGVtIDPCuiBsdWdhciBkZSBtYWlzIHNvbGljaXRhw6fDtWVzLiBEdXJhbnRlIGFzIGlkYWRlcyBtYWlzIGF2YW7Dp2FkYXMsIGFzIHNvbGljaXRhw6fDtWVzIGNvbWXDp2FtIGEgZGVjYWlyIGdyYWRhdGl2YW1lbnRlLCBtYWlzIGVzcGVjaWZpY2FtZW50ZSBlbnRyZSBvcyA3MCBhIDEwMCBhbm9zIGRlIGlkYWRlLg0KDQpgYGB7cn0NCiMgU2VwYXJhbmRvIHBvciBzZXhvDQpkZW1vZ3JhZmlhX2ZlbWluaW5vIDwtIGRlbW9ncmFmaWEgJT4lIGZpbHRlcihzZXhvID09ICJGRU1JTklOTyIpDQpkZW1vZ3JhZmlhX21hc2N1bGlubyA8LSBkZW1vZ3JhZmlhICU+JSBmaWx0ZXIoc2V4byA9PSAiTUFTQ1VMSU5PIikNCg0KIyBQbG90YW5kbyBvIGdyw6FmaWNvIGRlIGRpc3RyaWJ1acOnw6NvIGRlIGlkYWRlIHBhcmEgbXVsaGVyZXMNCmdyYWZpY29fbXVsaGVyZXMgPC0gZ2dwbG90KGRlbW9ncmFmaWFfZmVtaW5pbm8sIGFlcyh4ID0gaWRhZGUpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gNSwgZmlsbCA9ICJsaWdodHBpbmsiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidWnDp8OjbyBkZSBJZGFkZSBkYXMgTXVsaGVyZXMgcXVlIFNvbGljaXRhbSBvIFNBTVUiLA0KICAgICAgIHggPSAiSWRhZGUiLA0KICAgICAgIHkgPSAiUXVhbnRpZGFkZSBkZSBTb2xpY2l0YcOnw7VlcyIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCBtYXgoZGVtb2dyYWZpYV9mZW1pbmlubyRpZGFkZSwgbmEucm0gPSBUUlVFKSwgYnkgPSAxMCkpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMgUGxvdGFuZG8gbyBncsOhZmljbyBkZSBkaXN0cmlidWnDp8OjbyBkZSBpZGFkZSBwYXJhIGhvbWVucw0KZ3JhZmljb19ob21lbnMgPC0gZ2dwbG90KGRlbW9ncmFmaWFfbWFzY3VsaW5vLCBhZXMoeCA9IGlkYWRlKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDUsIGZpbGwgPSAibGlnaHRibHVlIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVpw6fDo28gZGUgSWRhZGUgZG9zIEhvbWVucyBxdWUgU29saWNpdGFtIG8gU0FNVSIsDQogICAgICAgeCA9ICJJZGFkZSIsDQogICAgICAgeSA9ICJRdWFudGlkYWRlIGRlIFNvbGljaXRhw6fDtWVzIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIG1heChkZW1vZ3JhZmlhX21hc2N1bGlubyRpZGFkZSwgbmEucm0gPSBUUlVFKSwgYnkgPSAxMCkpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMgRXhpYmluZG8gb3MgZ3LDoWZpY29zDQpwcmludChncmFmaWNvX211bGhlcmVzKQ0KcHJpbnQoZ3JhZmljb19ob21lbnMpDQpgYGANCg0KT2JzZXJ2YW5kbyBhZ29yYSBvcyBkYWRvcyBzb2JyZXBvc3RvIHBhcmEgb2NvcnJlciB1bWEgbWVsaG9yIGNvbXBhcmHDp8OjbyBlbnRyZSBvcyBzZXhvcywgcG9kZW1vcyBub3RhciBxdWUgYXMgbXVsaGVyZXMgc8OzIHJlYWxpemFtIG1haXMgY2hhbWFkb3MgZG8gc2VydmnDp28gZHVyYW50ZSBvcyAxNSBhbm9zIGUgcXVhbmRvIGEgaWRhZGUgc2UgdG9ybmEgbWFpcyBhdmFuw6dhZGEsIGVtIHRvcm5vIGRvcyA3NSBlIDEwMCBhbm9zLg0KT3MgYmViw6pzIGRvIHNleG8gbWFzY3VsaW5vIHByZWNpc2FtIGRlIG11aXRvIG1haXMgYXRlbmRpbWVudG9zIGRvIFNBTVUgZG8gcXVlIG9zIGJlYsOqcyBkbyBzZXhvIGZlbWluaW5vLg0KDQpgYGB7cn0NCiMgUGxvdGFuZG8gbyBncsOhZmljbyBkZSBkaXN0cmlidWnDp8OjbyBkZSBpZGFkZSBzb2JyZXBvc3RvIHBhcmEgYW1ib3Mgb3Mgc2V4b3MNCmdyYWZpY29fc29icmVwb3N0byA8LSBnZ3Bsb3QoZGVtb2dyYWZpYSwgYWVzKHggPSBpZGFkZSwgZmlsbCA9IHNleG8pKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gNSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVpw6fDo28gZGUgSWRhZGUgcG9yIFNleG8gZG9zIFNvbGljaXRhbnRlcyBkbyBTQU1VIiwNCiAgICAgICB4ID0gIklkYWRlIiwNCiAgICAgICB5ID0gIlF1YW50aWRhZGUgZGUgU29saWNpdGHDp8O1ZXMiKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgbWF4KGRlbW9ncmFmaWEkaWRhZGUsIG5hLnJtID0gVFJVRSksIGJ5ID0gMTApKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIEV4aWJpbmRvIG8gZ3LDoWZpY28gc29icmVwb3N0bw0KcHJpbnQoZ3JhZmljb19zb2JyZXBvc3RvKQ0KDQpgYGANCg0KIyMgVGlwb3MgZGUgT2NvcnLDqm5jaWFzOiBRdWFpcyBhcyBQcmluY2lwYWlzIEVtZXJnw6puY2lhcz8gey19DQoNCkVudHJlIG9zIGNoYW1hZG9zIHJlZ2lzdHJhZG9zLCBhIGNhdGVnb3JpYSAiR2VyYWlzL091dHJvcyIgZW1lcmdpcmFtIGNvbW8gbyB0aXBvIGRlIG9jb3Jyw6puY2lhIG1haXMgZnJlcXVlbnRlLCByZXByZXNlbnRhbmRvIGVtIHRvcm5vIGRlIDMwJSBkbyB0b3RhbCBkZSBhdGVuZGltZW50b3MuIEVtIHNlZ3VuZG8gbHVnYXIsIGVzdMOjbyBhcyAiQ2F1c2FzIEV4dGVybmFzIiwgcXVlIHByZXNlbnRhbSAyNSUsIGNvbW8gb3MgYWNpZGVudGVzIGRlIHZlw61jdWxvcywgcmVmbGV0aW5kbyB1bSBwYWRyw6NvIGNvbXVtIGVtIGdyYW5kZXMgY2VudHJvcyB1cmJhbm9zLg0KDQpgYGB7cn0NCiMgUXVhbnRpZGFkZSBkZSB0aXBvcw0KcXVhbnRpZGFkZV90aXBvcyA8LSB0aXBvcyAlPiUNCiAgZ3JvdXBfYnkodGlwbykgJT4lDQogIHN1bW1hcmlzZShxdWFudGlkYWRlID0gbigpKSAlPiUNCiAgYXJyYW5nZShkZXNjKHF1YW50aWRhZGUpKSAlPiUNCiAgc2xpY2UoMToyMCkNCg0KIyBDYWxjdWxhciBhIHBvcmNlbnRhZ2VtIGRlIGNhZGEgdGlwbw0KcXVhbnRpZGFkZV90aXBvcyA8LSBxdWFudGlkYWRlX3RpcG9zICU+JQ0KICBtdXRhdGUocG9yY2VudGFnZW0gPSBxdWFudGlkYWRlIC8gc3VtKHF1YW50aWRhZGUpICogMTAwKQ0KDQojIENyaWFyIG8gZ3LDoWZpY28gZGUgYmFycmFzIGNvbSBwb3JjZW50YWdlbnMgZSBlaXhvIHkgcHVsYW5kbyBkZSA1IGVtIDUNCmdyYWZpY28gPC0gZ2dwbG90KHF1YW50aWRhZGVfdGlwb3MsIGFlcyh4ID0gcmVvcmRlcih0aXBvLCAtcG9yY2VudGFnZW0pLCB5ID0gcG9yY2VudGFnZW0pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gImxpZ2h0Ymx1ZSIpICsNCiAgbGFicyh0aXRsZSA9ICJQb3JjZW50YWdlbSBkZSBDYWRhIFRpcG8gZGUgQ2F1c2EiLA0KICAgICAgIHggPSAiVGlwbyBkZSBDYXVzYSIsDQogICAgICAgeSA9ICJQb3JjZW50YWdlbSAoJSkiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpKSArDQogIA0KICAjIERlZmluaXIgb3MgYnJlYWtzIG5vIGVpeG8geSBwYXJhIHB1bGFyIGRlIDUgZW0gNQ0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMwLCBieSA9IDUpKQ0KDQojIEV4aWJpciBvIGdyw6FmaWNvDQpwcmludChncmFmaWNvKQ0KDQpgYGANCg0KQW5hbGlzYW5kbyBvcyBzdWJ0aXBvcywgbyBzdWJ0aXBvIHF1ZSBzb2xpY2l0YSBlbSB0b3JubyBkZSAxMjAwMCBjaGFtYWRvcyBwZWxvIHNlcnZpw6dvIGRvIFNBTVUgcG9yIGFubyDDqSBBY2lkZW50ZSBkZSBUcsOibnNpdG8gRW52b2x2ZW5kbyBNb3RvLCBzZWd1aWRvIGRlIEFnaXRhw6fDo28gY29tIEFnaXRhw6fDo28gY29tIDYwMDAgZSBBY2lkZW50ZSBkZSBUcsOibnNpdG8gY29tIENhcnJvIGNvbSAyMDAwIGNoYW1hZG9zLg0KDQpgYGB7cn0NCiMgQ29udGFuZG8gYSBxdWFudGlkYWRlIGRlIHN1YnRpcG9zDQp0b3RhbF9zdWIgPC0gc3VidGlwb3MgJT4lDQogIGdyb3VwX2J5KHN1YnRpcG8pICU+JQ0KICBzdW1tYXJpc2UodG90YWxfc29saWNpdGFjb2VzID0gbigpKSAlPiUNCiAgc2xpY2UoMToxMCkNCg0KIyBQbG90YW5kbyBvIGdyw6FmaWNvIHBhcmEgb3MgMjAgc3VidGlwb3MgbWFpcyBmcmVxdWVudGVzDQpncmFmaWNvIDwtIGdncGxvdCh0b3RhbF9zdWIsIGFlcyh4ID0gcmVvcmRlcihzdWJ0aXBvLCAtdG90YWxfc29saWNpdGFjb2VzKSwgeSA9IHRvdGFsX3NvbGljaXRhY29lcykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAibGlnaHRibHVlIikgKw0KICBsYWJzKHRpdGxlID0gIk9zIDIwIFN1YnRpcG9zIG1haXMgZnJlcXVlbnRlcyBkbyBTQU1VIiwNCiAgICAgICB4ID0gIlN1YnRpcG9zIiwNCiAgICAgICB5ID0gIlF1YW50aWRhZGUgZGUgU3VidGlwb3MiKSArDQogc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCBtYXgodG90YWxfc3ViJHRvdGFsX3NvbGljaXRhY29lcywgbmEucm0gPSBUUlVFKSwgYnkgPSAyMDAwKSkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDc1LCBoanVzdCA9IDEpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkNCg0KcHJpbnQoZ3JhZmljbykNCmBgYA0KDQojIyBEZXNmZWNobyBkb3MgQXRlbmRpbWVudG9zOiBFZmljacOqbmNpYSBlIFJlc3VsdGFkb3Mgey19DQoNCk9ic2VydmFuZG8gYSB0YWJlbGEgcXVlIGNvbXDDtWVzIG9zIG1vdGl2b3MgZG8gZGVzZmVjaG8gZSBkYSBmaW5hbGl6YcOnw6NvLCBwb2RlbW9zIG9ic2VydmFyIHF1ZSAiUkVHVUxBw4fDg08gUE9SIFRFTEVGT05FCUUgU0VNIERFU0ZFQ0hPIiBwb3NzdWkgdW1hIGZyZXF1ZW5jaWEgZGUgMjg4OTEgIGUgIkRFU0lTVMOKTkNJQSBEQSBTT0xJQ0lUQcOHw4NPCUUgU0VNIERFU0ZFQ0hPIiBwb3NzdWkgdW1hIGZyZXF1ZW5jaWEgZGUgMjIwODEsIHBvZGVuZG8gaW5kaWNhciBxdWUgbmEgbWFpb3JpYSBkYXMgdmV6ZXMgcXVlIGhvdXZlciB1bSBkZXNmZWNobyBlIHVtYSBmaW5hbGl6YcOnw6NvLCBzZXLDoSBkZXNmYXZvcmF2w6lsIGFvIHNlcnZpw6dvIGRvIFNBTVUsIHBvaXMgb3MgZGFkb3MgbW9zdHJhbSBxdWUgYSBtYWlvcmlhIGRvcyBjaGFtYWRvcyBuw6NvIHPDo28gY29uY2x1aWRvcyBjb20gw6p4aXRvLg0KYGBge3J9DQojTW90aXZvcyBkYXMgZm5hbGl6YcOnw7VlcyBlIG8gZGVzZmVjaG8NCm1vdGl2b3NfZmluYWlzIDwtIG9jb3JyZW5jaWFzICU+JSBzZWxlY3QobW90aXZvX2ZpbmFsaXphY2FvLCBtb3Rpdm9fZGVzZmVjaG8pICAlPiUgbmEub21pdCgpDQptb3Rpdm9zX2ZpbmFpcyA8LSBtb3Rpdm9zX2ZpbmFpcyAlPiUgbXV0YXRlKGFjcm9zcyhldmVyeXRoaW5nKCksIH5uYV9pZiguLCAiIikpKSAlPiUgbmEub21pdCgpDQoNCmRlc2ZlY2hvIDwtIG9jb3JyZW5jaWFzICU+JSBzZWxlY3QobW90aXZvX2Rlc2ZlY2hvKSAlPiUgbmEub21pdCgpDQpmaW5hbGl6YWNhbyA8LSBvY29ycmVuY2lhcyAlPiUgc2VsZWN0KG1vdGl2b19maW5hbGl6YWNhbykgJT4lIG5hLm9taXQoKQ0KdGFiZWxhX2Rlc2ZlY2hvIDwtIHRhYmxlKGRlc2ZlY2hvKSANCg0KdGFiZWxhX2Rvc19tb3Rpdm9zIDwtIG1vdGl2b3NfZmluYWlzICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGZpbHRlcihGcmVxID4gMCkNCiMgR2VyYW5kbyBhIHRhYmVsYSBubyBSTWFya2Rvd24NCmthYmxlKHRhYmVsYV9kb3NfbW90aXZvcywgY2FwdGlvbiA9ICJUYWJlbGEgZG9zIE1vdGl2b3MiKQ0KDQp0YWJlbGFfZmluYWwgPC0gdGFibGUoZmluYWxpemFjYW8pDQp0YWJlbGFfZmluYWwgPC0gdGFiZWxhX2ZpbmFsJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgZmlsdGVyKEZyZXEgPiAwKQ0KYGBgDQoNCkFuYWxpc2FuZG8gYXBlbmFzIG9zIG1vdGl2b3MgZGEgZmluYWxpemHDp8OjbywgYSBtYWlvcmlhIGRvcyBtb3Rpdm9zIGRlIGZpbmFsaXphw6fDo28gZGFzIGxpZ2HDp8O1ZXMgcGFyYSBvIFNBTVUgc8OjbyBSZWd1bGFtZW50YcOnw7VlcyBwb3IgdGVsZWZvbmUgY29tIHF1YXNlIDMwLDAwMCwgc2VndWlkYSBkZSBEZXNpc3TDqm5jaWEgZGEgU29saWNpdGHDp8OjbyBjb20gdW0gcG91Y28gbWFpcyBkZSAyMCwwMDAuDQoNCmBgYHtyfQ0KZ3JhZmljbyA8LSBnZ3Bsb3QodGFiZWxhX2Rvc19tb3Rpdm9zLCBhZXMoeCA9IHJlb3JkZXIobW90aXZvX2ZpbmFsaXphY2FvLCAtRnJlcSksIHkgPSBGcmVxKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9mbGlwKCkgKyANCiAgbGFicyh0aXRsZSA9ICJGcmVxIGRvcyBNb3Rpdm9zIGRlIEZpbmFsaXphw6fDo28iLCB4ID0gIk1vdGl2byIsIHkgPSAiRnJlcXXDqm5jaWEiKSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgbWF4KHRhYmVsYV9kb3NfbW90aXZvcyRGcmVxKSwgYnkgPSA1MDAwKSkNCg0KcHJpbnQoZ3JhZmljbykNCmBgYA0KDQpKw6EgYW5hbGlzYW5kbyBhcGVuYXMgb3MgbW90aXZvcyBkbyBkZXNmZWNobywgIk9DT1JSw4pOQ0lBIENPTkNMVcONREEgQ09NIMOKWElUTyIgcG9zc3VpIHVtIHBvdWNvIG1haXMgZGUgNzQsMDAwLCBzZWd1aWRhIHBvciAiU0VNIERFU0ZFQ0hPIiBjb20gYXByb3hpbWFkYW1lbnRlIDYyLjUwMCwgbWVzbW8gcXVlICAiT0NPUlLDik5DSUEgQ09OQ0xVw41EQSBDT00gw4pYSVRPIiBzZWphIGEgbWFpb3JpYSwgc2Ugb2JzZXJ2YXJtb3MgdG9kb3Mgb3MgZGFkb3MgcXVlIGVzdMOjbyBlbSBkZXNmYXZvciBhbyB+ZXhpdG8sIMOpIHBvc3PDrXZlbCBvYnNlcnZhciBxdWUgbyBzZXJ2acOnbyBkbyBTQU1VIG7Do28gw6kgZWZpY2F6LCBwb2lzIG7Do28gY29uc2VndWUgY29uY2x1aXIgbmVtIDUwJSBkb3Mgc2FsdmFtZW50b3MgcXVlIGZvcmFtIHBlZGlkb3MuDQoNCmBgYHtyfQ0KIyBDcmlhbmRvIGEgdGFiZWxhIGRlIGRlc2ZlY2hvDQp0YWJlbGFfZGVzZmVjaG8gPC0gdGFibGUoZGVzZmVjaG8pDQojIENvbnZlcnRlbmRvIGEgdGFiZWxhIGVtIHVtIGRhdGEuZnJhbWUNCmRmX2Rlc2ZlY2hvIDwtIGFzLmRhdGEuZnJhbWUodGFiZWxhX2Rlc2ZlY2hvKQ0KIyBSZW5vbWVhbmRvIGFzIGNvbHVuYXMgcGFyYSBhbGdvIG1haXMgZGVzY3JpdGl2bw0KY29sbmFtZXMoZGZfZGVzZmVjaG8pIDwtIGMoIk1vdGl2b19EZXNmZWNobyIsICJGcmVxdWVuY2lhIikNCiMgQ3JpYW5kbyBvIGdyw6FmaWNvDQpncmFmaWNvIDwtIGdncGxvdChkZl9kZXNmZWNobywgYWVzKHggPSBNb3Rpdm9fRGVzZmVjaG8sIHkgPSBGcmVxdWVuY2lhKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9mbGlwKCkgKyANCiAgbGFicyh0aXRsZSA9ICJGcmVxIGRvcyBNb3Rpdm9zIGRlIERlc2ZlY2hvIiwgeCA9ICJNb3Rpdm8iLCB5ID0gIkZyZXF1w6puY2lhIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIG1heChkZl9kZXNmZWNobyRGcmVxdWVuY2lhKSwgYnkgPSAxMDAwMCkpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCnByaW50KGdyYWZpY28pDQoNCnRhYmVsYV9kb3NfbW90aXZvcyA8LSBtb3Rpdm9zX2ZpbmFpcyAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBmaWx0ZXIoRnJlcSA+IDApDQpgYGANCg0KIyBDb25jbHVzw6NvIHstfQ0KTyBvYmpldGl2byBkZXN0ZSByZWxhdMOzcmlvIGZvaSBhbmFsaXNhciBhIGVmaWNpw6puY2lhIGUgbyBkZXNlbXBlbmhvIGRvIFNBTVUgbmEgY2lkYWRlIGRvIFJlY2lmZSBhbyBsb25nbyBkZSAyMDIyLCB1dGlsaXphbmRvIGRhZG9zIHDDumJsaWNvcyBkaXNwb25pYmlsaXphZG9zIHBlbGEgUHJlZmVpdHVyYSBkbyBSZWNpZmUuIE9zIGNhc29zIGRlIGVtZXJnw6puY2lhLCBlc3BlY2lhbG1lbnRlIGFjaWRlbnRlcyBkZSB0csOibnNpdG8gZSBzaXR1YcOnw7VlcyBkZSB2aW9sw6puY2lhLCByZXNzYWx0b3UgYSBpbXBvcnTDom5jaWEgZGUgdW0gYXRlbmRpbWVudG8gcsOhcGlkbyBlIGVzcGVjaWFsaXphZG8uIEEgcGFydGlyIGRlc3NhIHByb2JsZW3DoXRpY2EsIGJ1c2NvdS1zZSBjb21wcmVlbmRlciBjb21vIG8gU0FNVSB0ZW0gYXRlbmRpZG8gYXMgZGVtYW5kYXMgZGEgcG9wdWxhw6fDo28sIGlkZW50aWZpY2FuZG8gcGFkcsO1ZXMsIGdhcmdhbG9zIGUgcG9zc8OtdmVpcyDDoXJlYXMgZGUgbWVsaG9yaWEuDQoNCkEgYW7DoWxpc2UgZm9pIHJlYWxpemFkYSBjb20gYmFzZSBlbSBkYWRvcyBkZXRhbGhhZG9zIGRlIG1haXMgZGUgMTg4IG1pbCBvY29ycsOqbmNpYXMgcmVnaXN0cmFkYXMgZW0gMjAyMiwgYWJyYW5nZW5kbyB0YW50byBSZWNpZmUgcXVhbnRvIDE3IG11bmljw61waW9zIHZpemluaG9zLiBVdGlsaXphbmRvIHTDqWNuaWNhcyBkZSBsaW1wZXphIGUgbWFuaXB1bGHDp8OjbyBkZSBkYWRvcywgcGFkcm9uaXphw6fDo28gZGUgdmFyacOhdmVpcyBlIHZpc3VhbGl6YcOnw7VlcyBncsOhZmljYXMsIGZvcmFtIGlkZW50aWZpY2FkYXMgdGVuZMOqbmNpYXMgdGVtcG9yYWlzIGUgZ2VvZ3LDoWZpY2FzLCBhbMOpbSBkZSBwZXJmaXMgZGUgc29saWNpdGFudGVzIGUgdGlwb3MgZGUgb2NvcnLDqm5jaWFzIG1haXMgY29tdW5zLg0KDQpBIGFuw6FsaXNlIHJldmVsb3UgYWxndW5zIGluc2lnaHRzIGNydWNpYWlzOiBvIHBlcsOtb2RvIGRhIG1hbmjDoywgZXNwZWNpYWxtZW50ZSBlbnRyZSA2aCBlIDEwaCwgZm9pIG8gZGUgbWFpb3IgZGVtYW5kYSBwYXJhIG8gU0FNVSwgcG9zc2l2ZWxtZW50ZSBkZXZpZG8gYW8gYXVtZW50byBkYSBtb2JpbGlkYWRlIGUgYXRpdmlkYWRlcyBkacOhcmlhcy4gTyBtdW5pY8OtcGlvIGRlIFJlY2lmZSBsaWRlcm91IGVtIG7Dum1lcm8gZGUgYXRlbmRpbWVudG9zLCBzZWd1aWRvIHBvciBvdXRyYXMgY2lkYWRlcyBkYSByZWdpw6NvIG1ldHJvcG9saXRhbmEuIEhvbWVucywgcGFydGljdWxhcm1lbnRlIGJlYsOqcyBlIGFkdWx0b3MgZW50cmUgMjAgZSA0MCBhbm9zLCBmb3JhbSBvcyBxdWUgbWFpcyBkZW1hbmRhcmFtIG8gc2VydmnDp28sIGRlc3RhY2FuZG8gdW1hIHByZXZhbMOqbmNpYSBkZSBvY29ycsOqbmNpYXMgZW0gYWNpZGVudGVzIGRlIHRyw6Juc2l0by4gTyB0aXBvIGRlIGVtZXJnw6puY2lhIG1haXMgZnJlcXVlbnRlIGVudm9sdmV1IGNhdXNhcyBleHRlcm5hcywgY29tbyBhY2lkZW50ZXMgZGUgdHLDom5zaXRvLCBlc3BlY2lhbG1lbnRlIGNvbSBtb3Rvcy4NCg0KUGFyYSBnZXN0b3JlcyBww7pibGljb3MgZSBwcm9maXNzaW9uYWlzIGRlIHNhw7pkZSwgb3MgcmVzdWx0YWRvcyBmb3JuZWNlbSBpbmZvcm1hw6fDtWVzIHZhbGlvc2FzIHBhcmEgbWVsaG9yYXIgYSBhbG9jYcOnw6NvIGRlIHJlY3Vyc29zIGUgYSBnZXN0w6NvIGRvIHNlcnZpw6dvIGRlIGVtZXJnw6puY2lhLiBBcyBhdXRvcmlkYWRlcyBwb2RlbSB1c2FyIGVzc2VzIGRhZG9zIHBhcmEgYWp1c3RhciBhIGRpc3RyaWJ1acOnw6NvIGRlIGFtYnVsw6JuY2lhcyBlIGVxdWlwZXMsIHByaW5jaXBhbG1lbnRlIGR1cmFudGUgb3MgaG9yw6FyaW9zIGRlIG1haW9yIGRlbWFuZGEsIGUgZm9jYXIgZW0gcG9sw610aWNhcyBkZSBwcmV2ZW7Dp8OjbyBkZSBhY2lkZW50ZXMgZGUgdHLDom5zaXRvLCBlc3BlY2lhbG1lbnRlIGNvbSBtb3Rvcy4gTWVsaG9yaWFzIG9wZXJhY2lvbmFpcyBubyBTQU1VIHRhbWLDqW0gc8OjbyBjcnVjaWFpcyBwYXJhIGF1bWVudGFyIGEgdGF4YSBkZSDDqnhpdG8gbm9zIGF0ZW5kaW1lbnRvcy4NCg0KRW1ib3JhIGEgYW7DoWxpc2UgdGVuaGEgb2ZlcmVjaWRvIHVtYSB2aXPDo28gYWJyYW5nZW50ZSBkbyBkZXNlbXBlbmhvIGRvIFNBTVUsIGVsYSBhcHJlc2VudG91IGFsZ3VtYXMgbGltaXRhw6fDtWVzLCBjb21vIGEgYXVzw6puY2lhIGRlIGluZm9ybWHDp8O1ZXMgbWFpcyBkZXRhbGhhZGFzIHNvYnJlIG8gdGVtcG8gZGUgcmVzcG9zdGEgZSBhIHF1YWxpZGFkZSBkb3MgYXRlbmRpbWVudG9zLiBBbMOpbSBkaXNzbywgYSBwcmVzZW7Dp2EgZGUgZGFkb3MgZmFsdGFudGVzIGVtIGNlcnRhcyB2YXJpw6F2ZWlzIHBvZGUgdGVyIGxpbWl0YWRvIGEgcHJlY2lzw6NvIGRlIGFsZ3VucyByZXN1bHRhZG9zLiBGdXR1cmFzIGFuw6FsaXNlcyBwb2RlbSBzZSBiZW5lZmljaWFyIGRlIHVtIGFjb21wYW5oYW1lbnRvIG1haXMgZGV0YWxoYWRvIGRvIGZsdXhvIGRlIHRyYWJhbGhvIGRvIFNBTVUsIGludGVncmFuZG8gZGFkb3MgZW0gdGVtcG8gcmVhbCBlIGFuYWxpc2FuZG8gbcOpdHJpY2FzIGNvbW8gbyB0ZW1wbyBtw6lkaW8gZGUgYXRlbmRpbWVudG8gZSBhIHNhdGlzZmHDp8OjbyBkb3MgcGFjaWVudGVzLiBPdXRyYXMgYW7DoWxpc2VzIHRhbWLDqW0gcG9kZXJpYW0gZXhwbG9yYXIgYSBjb3JyZWxhw6fDo28gZW50cmUgYSBkZW1hbmRhIHBvciBzZXJ2acOnb3MgZGUgZW1lcmfDqm5jaWEgZSBmYXRvcmVzIGV4dGVybm9zLCBjb21vIGNvbmRpw6fDtWVzIGNsaW3DoXRpY2FzIG91IGV2ZW50b3MgZXNwZWPDrWZpY29zLg0KDQo=