Mudanças entre as edições de "Memória RAM"

De WIKI IFC SBS
Ir para navegaçãoIr para pesquisar
Linha 37: Linha 37:
 
A DDR também contava com 184 pinos enquanto a DDR2 vem com 240 pinos. E conta com uma abertura diferente entre os contatos da sua antecessora:
 
A DDR também contava com 184 pinos enquanto a DDR2 vem com 240 pinos. E conta com uma abertura diferente entre os contatos da sua antecessora:
 
[[File:Partefisica1.jpg|thumb|Memória RAM]]
 
[[File:Partefisica1.jpg|thumb|Memória RAM]]
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
----
 
  
 
===DDR3===
 
===DDR3===

Edição das 13h53min de 13 de março de 2020

Introdução

Os computadores normalmente têm dois tipos de memória: a RAM (volátil) e dispositivos de armazenamento (não volátil). Memória RAM (Random Access Memory ou Memória de Acesso Aleatório) é um tipo de memória do computador que é responsável pela leitura e escrita dos dados que são usados com frequência pelos programas. Quando um aplicativo necessita de dados que estão armazenados na RAM, o processador dá a ordem de qual endereço deve ser lido ou gravado. Para uma melhor compreensão do funcionamento da memória RAM, vamos fazer uma analogia com uma mesa de estudos utilizada para a realização dos deveres escolares.

Na mesa podem ser colocados os seguintes materiais: caneta, lápis, livros e caderno. Esses materiais seriam os arquivos. A mesa, por sua vez, seria a memória RAM, onde todos os materiais são reunidos para a realização das atividades. Desta forma, a RAM pode ser entendida como um espaço de trabalho temporário, pois após a realização da tarefa, os arquivos (os materiais de estudos) são retirados da memória (mesa) e mantidos no HD (armário). Por isso, quando maior a área da mesa, maior é a quantidade de materiais (por exemplo, livros) que podem ser colocado sobre ela e mais rápido o trabalho é concluído, pois o estudante não necessita sempre levantar-se para pegar os livros que estão no armário (MONTEIRO, 2015).

A memória RAM é um chip semelhante a um processador, composto por transistores e capacitores. Ela é um componente essencial para que o computador funcione, pois é o braço direito do processador. Normalmente a RAM é vendida em “módulos” ou “pentes”.

Cada módulo de memória é classificado conforme os seguintes aspectos:

  • Capacidade
  • Tecnologia
  • Velocidade
  • Latência
  • Tensão de alimentação

Capacidade

A capacidade da memória é medida atualmente em Gigabytes (GB). Para habilitar a tecnologia chamada de “dual channel” ou “dois canais”, na maioria das vezes, é necessário instalar módulos pares de memória. Essa característica dá a possibilidade do processador se comunicar com duas vias de memória ao mesmo tempo. Isso permite, em teoria, que a capacidade máxima transferência da memória seja dobrada. Por isso, se o propósito é ter 8GB de memória, deverá ser instalados dois módulos ou pentes de 4 GB ou 4 módulos de 2 GB. E assim por diante. Ao instalar um número ímpar de pentes de memória, o computador não obterá o desempenho máximo que ele é capaz de fornecer. Por exemplo, não é recomendado instalar um único pente de memória de 8 GB. Além disso, todos os módulos precisam ser idênticos, não sendo possível instalar 2 pentes de 2GB e um de 4 GB para compor um total de 8 GB de memória. Vale destacar que a quantidade máxima de pentes de memória a serem instalados vai depender da quantidade de slots disponíveis na placa-mãe. Placa-mãe com soquete LGA1366 suportam a tecnologia de canal triplo (“triple channel”). Neste caso para obter maior desempenho é necessário instalar módulos de memória em múltiplos de três. Importante notar que placas com este tipo de soquete, terá quatro slots em vez de seis, como seria o ideal (TORRES, 2015). Neste caso, para obter maior desempenho, deverá ser instalado os módulos em 3 slots deixando o quarto sem uso. Caso seja instalado dois módulos de memória, eles trabalharão em modo de “dual channel”. Já nas placas-mãe e processadores com soquete LGA2011, suportam a tecnologia de canal quádruplo (“quad channel”). Para esta placa deverá ser instalado módulos múltiplos de quatro. Por exemplo, um computador de 16 GB de memória total deverá ser instalado 4 pentes de 4 GB e assim sucessivamente. Placas com esta característica, caso seja instalado apenas dois módulos ou três módulos de memória, eles trabalharão em modo de dois ou três canais, respectivamente. Quanto de memória um computador deverá ter? Quanto mais, melhor, mas vai depender do orçamento, pois os pentes de memória costumam ter um custo elevado. Por isso é importante observar para que o computador será utilizado. Usar a internet, digitação de texto e planilhas eletrônicas exige menos memória. Já um computador voltado para jogos e uso profissional como edição de vídeo e imagens deverá ser instalado o máximo de memória possível. Caso o computador tenha mais de 4GB de memória instalada, deverá ser instalado um sistema operacional de 64 bits, pois conseguirá enxergar toda a memória instalada.

Tecnologia

Ao longo dos anos, diversos padrões de memória foram criados, desde a EDO (Extended Data Out), passando pela SDR (Single Data Rate), até chegar nas atuais DDR (Double Data Rate ou Taxa Dupla de Transferência). Hoje, já estamos na quinta versão da DDR, o que comprova que esse tipo de memória deu muito certo. Uma memória DDR é do tipo SDRAM (Synchronous Dynamics Random Access Memory), ou seja essa é uma memória RAM que realiza a leitura e escrita de dados de forma síncrona e dinâmica (JORDÃO, 2014). Isto significa que elas utilizam um sinal de clock para sincronizar suas transferências. Portanto, as memórias DDR conseguem obter o dobro do desempenho de memórias sem este recurso trabalhando com o mesmo clock. Com a evolução dos processadores, os fabricantes tiveram que criar memórias que suportasse a demanda exigida por estes componentes. Surgiram a DDR2, DDR3, DDR4 e recentemente a DDR5.

DDR2

DDR2 (Double Data Rate 2) é uma evolução da DDR, trazendo um menor consumo de energia e maior velocidade. Um módulo do tipo DDR2 tem capacidade de realizar duas operações por clock. O que faz com que automaticamente ela seja mais rápida que a sua antecessora. Isso por que a DDR2 transmite quatro dados por ciclo de clock, o que permite, na teoria, que a velocidade de transmissão dobre, se comparado a DDR, mesmo que ambos tipos trabalhem na mesma frequência de MegaHertz, por exemplo, uma memória DDR-400 funciona em 200MHz, porém oferece 400MHz por trabalhar com dois ciclos (2 x 200), já uma memória DDR2 apesar de trabalhar na mesma frequência de 200MHz, ela oferece 800 MHz por trabalhar com quatro operações a cada ciclo (2 x 200). E assim se discorre em relação às memórias DDR-800 e DDR2-800, a segunda versão irá oferecer uma frequência de comunicação externa maior. As DDR2 também trouxeram melhorias no gerenciamento de energia, com o ODT (Terminação Resistiva) já presente no próprio chip, evitando interferências eletromagnéticas e consumo elevado de energia, acaba melhor desempenho, inclusive no controle e temperatura.

PARTE FÍSICA

A DDR também contava com 184 pinos enquanto a DDR2 vem com 240 pinos. E conta com uma abertura diferente entre os contatos da sua antecessora:

Memória RAM

DDR3

As memórias DDR3 dobram a quantidade de operações por vez em relação ao padrão anterior, ou seja, realiza 8 procedimentos de leitura ou gravação a cada ciclo de clock, quatro no início deste e outros quatro no final. Existe a DDR3 e a DDRL3 e a diferença entre elas é que a DDR3L é um padrão de memória com menor tensão, para economizar energia nos notebooks e a DDR3 é voltada para desktops. A DDR3 é basicamente o formato como pode ser visto nas imagens. Aquele espaço na DDR3 é mais para a esquerda enquanto na DDR2 é mais centralizado, existem outras diferenças como velocidade, economia de energia, etc

Considerando que em um módulo DDR2-1066 as células de memória operam nada menos que 266 MHz (uma evolução expressiva em relação aos módulos PC-100 e PC-133 do começo do milênio, onde as células operavam a apenas 100 ou 1333 MHz), não é de se estranhar que os fabricantes tenham enfrentado dificuldades a partir daí. A solução veio com as memórias DDR3, que mais uma vez duplicaram a frequência efetiva dos módulos, realizando agora 8 transferências por ciclo de clock, contra as 4 transferências do DDR2. A grande sacada é que o aumento na frequência é obtida através do acesso simultâneo e a endereços adjacentes e não através do aumento da frequência real das células de memória, o que permitiu estender o uso das células de 133 e 266 MHz por mais uma geração. Em um módulo DDR3-1066, por exemplo, as células de memória operam a apenas 133 MHz, com os buffers de dados operando a 266 MHz. Em módulos DDR3 com células operando a 266MHz, a frequência efetiva é de impressionantes 2133 MHz e com maturação da tecnologia parece ser apenas questão de tempo até que tenhamos módulos ainda mais rápidos no mercado.


Os módulos DDR3 foram lançados em versão DDR3-1066 (133MHz x 8) e DDR3-1333 (166MHz x 8), seguidos pelo padrão DDR3-1600 (200 MHz x 8). Os três padrões são também chamados de PC3-8500, PC3-10667 e PC3-12800, assim dando ênfase à taxa de transferência teórica:

DDR3-1006 (133 MHz) PC3-8500 DDR3-1333 (166 MHz) PC3-10667 DDR3-1666 (200 MHz) PC3-12800

Apesar do aumento no número de transferência por ciclo, os buffers de dados continuam trabalhando a apenas o dobro da frequência das células de memória. Ou seja, a frequência interna (das células de memória) de um módulo DDR3-1600 é de 200 MHz e a frequência externa (dos buffers de dados) é de 400 MHz. As células de memória realizam 8 transferências por ciclo de clock ( em vez de 4 como nas DDR2) e os buffers de dados (que operam ao dobro da frequência)realizam 4 transferências por ciclo de clock, em vez de apenas duas, como nos módulos DDR2. Se as mudanças parassem por aí, os módulos DDR3 não iriam oferecer muitos ganhos na prática, pois o tempo de latência inicial continuaria sendo o mesmo do módulo DDR2 e não haveria mudança na frequência das células de memória. Se um módulo DDR3 operasse com tempos de acesso 10-10-10-30, os ganhos seriam pequenos em relação a um DDR2 5-5-5-15, já que só haveria ganhos nos acessos subsequentes. Para evitar isso, os módulos DDR3 incluem um sistema integrado de calibrarem do sinal, que melhora de forma considerável e a estabilidade dos sinais, possibilitando o uso de tempos de latência mais baixos, sem que estabilidade seja comprometida. Os módulos DDR3 utilizam também 8 bancos em vez de 4, o que ajuda a reduzir o tempo de latência em módulos de grande capacidade. Eles também trouxeram uma nova redução na tensão usada, que caiu para apenas 1,5V, ao invés dos 1.8V usados na memória DDR2. A redução na tensão faz com que o consumo elétrico dos módulos caia proporcionalmente, o que os torna mais atrativos para os fabricantes de notebooks. Somadas todas essas melhorias, os tempos de acesso “reais” dos m´dulos foram sensivelmente reduzidos. Em vez de trabalharem com tempos de acesso 10-10-10-30, a geração inicial de módulos DDR3 é capaz de trabalhar com temporização 9-9-9-24, ou mesmo 7-7-7-15. O primeiro chipset a incluir suporte às memórias DDR3 foi o Intel P35, lançado em 2007. Em vez em cometer o mesmo erro que cometeu ao lançar o Pentium 4, quando tentou forçar o uso das memórias Rambus, a Intel adotou uma postura conservadora, equipando o P35 com suporte simultâneo a memórias DDR3 e DDR2 e deixando com que os fabricantes de placas escolhessem qual das duas tecnologias utilizar. Como era de se imaginar, todas as placas mainstream e de baixo custo passaram a suportar exclusivamente memórias DDR2 (que eram muito mais baratas), com as memórias DDR3 ficando relegadas ao mercado de alto desempenho. Isso continuou ao longo de 2008 e 2009, com a mesma fórmula sendo repetida no chipset P45 e nos lançamentos subsequentes. Isso fez com que a procura pelos módulos DDR3 continuasse fraca e os preços se mantivessem altos. Para complicar, os primeiros módulos DDR3 não ofereciam um ganho de desempenho tangível em relação aos DDR2 na plataforma soquete 775. Embora a frequência efetiva fosse mais baixa, os módulos DDR2 trabalhavam com tempos de acesso mais baixos, o que fazia com que a competição fosse acirrada, com os DDR2 se saindo melhor em muitas situações. Isso levou os fabricantes de memória a apostarem na produção de módulos de alto desempenho, em uma corrida armamentista que deu origem a módulos overclocks, capazes de trabalhar a 2000 MHz ou mais (frequência efetiva), mas que em compensação utilizavam tensões de até 2.0V, muito acima dos 1.5V recomendados. Embora vendidos em pequenas quantidades, estes módulos lideravam os benchmarks e por isso recebiam uma atenção desproporcional.Um bom exemplo dessa época insana são estes módulos DDR3-2000 (9-9-9-24) da G.Skill, que utilizam tensão de 1.9V e são equipados com um cooler ativo (ligado ao módulo através de um heat-pipe) para manter a temperatura de operação em níveis aceitáveis:


Eles não eram apenas caros (o kit com dois módulos de 2 GB custava nada menos que US$ 300 na época de lançamento), mas a tensão fazia com que a vida útil fosse reduzida, com muitos módulos apresentando defeitos prematuros depois de alguns meses de uso, um problema que atingiu também módulos de outros fabricantes.A Intel resolveu colocar ordem no galinheiro com o lançamento do Core i7, limitando o suporte oficial aos módulos DDR3-1066 e DDR3-1333 e advertindo que o uso de tensões superiores a 1.65 poderia danificar o controlador de memória integrado ao processador.Isso obrigou os fabricantes a se concentrarem na fabricação de módulos de baixa frequência e baixa latência, em vez de continuarem a investir no simples aumento das frequências. Outra mudança positiva foi que os módulos voltaram a utilizar tensões "normais", variando de 1.5V nos módulos value, a 1.65V nos módulos de alto desempenho, dentro dos valores recomendados pela Intel para uso em conjunto com o i7. A AMD adotou uma postura similar à da Intel durante a fase de transição, lançando a plataforma AM3 (com o uso de memórias DDR3) porém equipando os processadores Phenom II com controladores híbridos, com suporte simultâneo a memórias DDR2 e DDR3. Isso permitiu que os processadores continuassem compatíveis com as placas AM2+, permitindo que você decidisse entre usar memórias DDR2 ou DDR3 ao escolher a placa-mãe.As memórias DDR2 demoraram quase 3 anos para se popularizarem desde a introdução do chipset i915P, em 2004, ultrapassando as vendas das memórias DDR antigas apenas a partir de 2007. Apesar das diferenças na implementação, as memórias DDR3 acabaram seguindo um caminho similar, com os módulos inicialmente custando muito mais caro e caindo a um nível próximo dos preços dos módulos DDR2 apenas a partir do início de 2010, novamente quase três anos depois do lançamento das primeiras placas e chipsets.

DDR4

As memórias DDR4 possuem características superiores ao modelo anterior. Ganhos que, mesmo não oferecendo um grande avanço para o uso básico, se destacam a medida que a DDR3 atinge os seus limites. Assim, a DDR4 é uma opção mais interessante para quem deseja uma máquina capaz de rodar programas e jogos mais pesados, preparada para futuros upgrades.

Visualmente, os modelos DDR3 e DDR4 apresentam pequenas diferenças. Como a quantidade de pinos de contato e a posição de encaixe. Outro detalhe é que a DDR4 é ligeiramente mais espessa e possui uma leve curva na borda inferior. Em termos técnicos, os módulos de DDR4 são mais eficientes no quesito energia, utilizando 1,2 volts, enquanto a DDR3 usa 1,5 volts na alimentação. Essa pequena diferença pode gerar uma economia de até 40% no consumo de energia, o que ajuda a prolongar a vida da bateria para os notebooks, por exemplo. Em contrapartida, temos um aumento da latência das memórias DDR4, que é o atraso para a memória iniciar uma leitura. A taxa aumenta conforme a frequência de operação. Nas especificações de uma memória é possível ver esse dado, geralmente indicado como CL10 ou CL11 nas DDR3 e CL14 ou CL15 nas DDR4. Quanto menor o CL, menor é o atraso na leitura. A taxa de latência é responsável pela pouca diferença de desempenho entre os padrões em comparativos. Por exemplo, dois computadores com configuração de hardware similar, com 8 GB de memória, sendo um DDR3 e o outro DDR4, terão desempenho parecidos. Afinal, apesar do DDR4 operar com uma freqüência maior, também tem uma latência maior.

Apesar de devagar, o que se deve muito ao alto custo inicial da tecnologia e ao bom desempenho da antecessora, a migração para o uso da DDR4 é uma tendência natural. Se você pretende adquirir um novo computador ou fazer um upgrade, PCs que utilizem DDR3 são opções com um custo mais baixo. Porém, com uma vida útil já limitada pela tecnologia, sendo bem provável que nos próximos dois anos ou menos, você tenha um equipamento com poucas ou nenhuma opção de melhoria caso opte por um. Já os que utilizam DDR4, são mais caros. Entretanto, são uma excelente opção para quem quer investir a longo prazo e ter um PC capaz de trabalhar em alta performance e possibilidades de upgrade durante os próximos anos. A configuração é ideal para gamers e usuários de programas pesados, como os de modelagem 3D e edição de vídeo. Além do baixo consumo, outras vantagens das memórias da nova geração são a capacidade e a frequência de operação. A DDR3 está disponível com capacidades de 512 MB até 8 GB. Já a DDR4, de 4 GB a 16 GB. Em relação a frequência, a DDR3 trabalha com uma taxa de 800 a 2.400 MHz, enquanto que a DDR4 opera com valores de 2.133 até 4.266 MHz. É uma grande diferença, que permite mais transferências em um mesmo intervalo de tempo.

DDR5

Atualmente o DDR5 ainda não foi lançado, a sua previsão de lançamento é ainda para esse ano (2018) ou para o próximo ano (2019). Promete além da performance, ter o dobro da densidade do DDR4, ou seja, armazenando duas vezes mais gigabytes em seus DIMMs do que a especificação atual. Tudo isso mantendo um consumo de energia mais eficiente, como é padrão em novas gerações.

Formato Físico

Os desktops utilizam módulos de memória no formato chamado de DIMM (Dual In-Line Memory Module). Já os computadores portáteis utilizam componentes de tamanho reduzido, utilizam módulos de memória chamados de SO-DIMM. O tipo de memória instalada nos módulos DDR é o SDRAM, mas o arranjo (posicionamento dos chips placa) funciona de acordo com o padrão DIMM. O termo DIMM é usado para designar que um determinado componente tem chips instalados dos dois lados do módulo e conseguem trabalhar com 64 bits. Já a versão mais antiga chamada de SIMM (Single In-line Memory Module), tinha chips em um único lado e operam com 32 bits de dados. Portanto, as memórias DIMM, em teoria, possuem o dobro do desempenho de sua antecessora.

Velocidade

As memórias são classificadas conforme a sua velocidade máxima. Segundo Torres (2016), existem dois tipos de classificação: a) DDRx-yyyy, em que “x” é a tecnologia (“2”, “3” ou “4”) e yyyy é o clock máximo que a memória DDR consegue alcançar. Este valor é medido em MegaHetz (MHz). Por exemplo, as memórias DDR3-1333 podem trabalhar até 1.333 MHz e as memórias DDR4-2133 podem trabalhar até 2.133 MHz. b) PCx-zzzz, onde “x” é novamente a geração da tecnologia (“2”, “3” ou “4”) e zzzz é a taxa máxima de transferência medida em megabytes por segundo (MB/s) – também conhecido como largura de banda (TORRES, 2015). Por exemplo, a taxa de transferência das memórias DDR3-1333 é de 10.664 MB/s, e por isso elas são rotuladas como PC3-10600 ou PC3-10666 dependendo do fabricante. A primeira parte da classificação, DDRx-yyyy, é o padrão usado para classificar os chips de memória, enquanto que a segunda parte, PCx-zzzz, é usada para classificar os módulos de memórias. Vale destacar que os módulos de memória - a pequena placa de circuito impresso onde os chips de memória estão soldados – utilizam muitas vezes a nomenclatura PCx-zzzz.

         As memórias estão disponíveis em velocidades padrão, conforme a Tabela 1.

Tabela 1 – Velocidade padrão das Memórias DDR

Memória DDR3 

Equivalente PC3 1066 8500 1333 10600 1600 12800 1866 14900 2000 16000 2133 17000

Fonte: (TORRES, 2015) Outro exemplo, memórias DDR4-2133 têm uma taxa de transferência máxima teórica de 17.064 MB/s, e os módulos de memória usando este tipo de chip são vendidos como PC4-17000. Importante notar que a velocidade máxima em que a memória será acessada está limitado pelo máximo suportado pelo processador. Um processador, por exemplo, com suporte a memória DDR3 de até 1.333MHz, instalar memória com DDR3 de 1.600MHz será um desperdício de dinheiro (TORRES, 2015). Entretanto, algumas placas-mãe permitem que a memória seja configurada para trabalhar com a velocidades superiores a oficialmente suportada pelo processador. Neste caso, vale destacar que nem sempre a memória é configurada automaticamente para trabalhar em velocidade máxima, tendo que ser alterada manualmente na placa- mãe.

Latência (Temporização)

Outra característica técnica dos módulos de memória é chamada latência (ou temporização) que em muitos fabricantes é identificado pelas letras “CL” (CL9, CL10 ou CL11 nas DDR3 e CL14 ou Cl15 nas DDR4). Trata-se do tempo em que a memória demorar para entregar os dados que foram solicitados. As memórias DDR, DDR2, DDR3 e DDR4 são classificadas de acordo com a velocidade máxima que conseguem trabalhar, bem como suas temporizações. Temporizações são números que expressam os pulsos de clock e podem ser representados da seguinte forma: 3-4-4-8, 5-5-5-15, 7-7-7-21 ou 9-9-9-24. Quanto menor forem esses números, melhor (TORRES, 2016). No que diz respeito à frequência, a DDR3 trabalha com uma taxa de 800 a2400MHz, enquanto que a DDR4 trabalha com valores de 2.133 até 4.266 MHz. Por isso, a taxa de latência aumenta conforme a aumenta a frequência de operação. Uma analogia pode ser feita com três carros: o primeiro vai de 0 a 100km/h em 9s, o segundo leva 8s e terceiro chega aos 100km/h em 7s. Qual deles é o mais rápido? O mesmo caso ocorre com as memórias, quanto menor for o CL menor é atraso de leitura. Memórias com latência abaixo das definidas como padrão são geralmente mais caras e o ganho de desempenho é questionável, pois é difícil de ser medida. Esse tipo de memória são voltadas para aqueles que desejam fazer “overclocks” pois elas permitem que a memória consiga atingir clocks mais elevados, mas as configurações devem ser feitas manualmente no painel de controle da placa-mãe. 1.6 Comparativo entre processador e memória máxima suportada Processadores Core i7 (disponível no site https://www.intel.com.br/content/www/br/pt/support/articles/000005505/processorshtml)


Processador Máximo de memória suportada em MHz Dentre as marcas Corsair, Samsung e Kingston, qual seria a memória ideal para o processador?

DDR4

DDR3L

DDR3 i7-8700K 2666 NA NA Kingston i7-8700 2666 NA NA Kingston i7-7700T 2400 1600 NA Kingston e Corsair i7-7700K 2400 1600 NA Kingston e Corsair i7-7700 2400 NA NA Kingston e Corsair i7-6900K 2400 NA NA Kingston i7-6850K 2400 NA NA Kingston i7-6800K 2133 1600 NA Kingston i7-6700T 2133 1600 NA Kingston e Corsair i7-6700K 2133 1600 NA Kingston e Corsair i7-6700 2133 1600 NA Kingston e Corsair i7-5930K 2133 NA NA Kingston i7-5820K 2133 NA NA Kingston i7-5775R NA 1866 NA Kingston i7-5775C NA 1600 NA Kingston i7-4930K NA NA 1866 Kingston i7-4820K NA NA 1866 Kingston i7-4790T NA 1600 1600 Kingston i7-4790S NA 1600 1600 Kingston i7-4790K NA 1600 1600 Kingston i7-4790 NA 1600 1600 Kingston i7-4785T NA 1600 1600 Kingston i7-4771 NA 1600 1600 Kingston i7-4770T NA 1600 1600 Kingston i7-4770S NA 1600 1600 Kingston i7-4770R NA 1600 1600 Kingston i7-4770K NA 1600 1600 Kingston i7-4770 NA 1600 1600 Kingston i7-4765T NA 1600 1600 Kingston i7-4771 NA 1600 1600 Kingston i7-4770T NA 1600 1600 Kingston i7-4770S NA 1600 1600 Kingston i7-4770R NA 1600 1600 Kingston i7-4770K NA 1600 1600 Kingston i7-4770 NA 1600 1600 Kingston i7-4765T NA 1600 1600 Kingston


Futuro das memórias

A tecnologia Optane da Intel foi a nova tecnologia criada para substituir os SSDs atuais e até mesmo as memórias RAM do tipo DDR. O destaque do Optane é uma tecnologia chamada 3D Xpoint. Desenvolvida pela Intel em uma parceria com a Micron, utiliza células de memória tridimensionais. Trata-se de uma tecnologia totalmente nova, não “herdando” características dos SSDs atuais. Exatamente por isso sua compatibilidade é bastante limitada, funcionando apenas com a sétima geração de processadores Intel (Kaby Lake). Nada de Skylake, Broadwell ou qualquer modelo da AMD. Mas há uma vantagem: graças à sua versatilidade, pode substituir as memórias DIMM, oferecendo mais capacidade sem impactar tanto no custo final. A memória Optane é a tentativa da Intel de oferecer aos consumidores um gosto acessível da velocidade incrível da 3D Xpoint. Ela funciona como um sistema de cache para o seu drive de armazenamento principal, guardando dados necessários, assim como a RAM pode fazer, mantendo esses dados entre os reinícios. Um Intel Optane, atualmente, pode ser encontrado com 16 e 32 GB e se destina a fazer com que computadores que usam discos rígidos, tenha desempenho similar ao de uma máquina com SSDs. Também pesquisadores do MIT e da Universidade de Stanford, nos Estados Unidos, criaram um novo tipo de chip que, ao agregar CPU e RAM empilhadas num único conjunto, pode representar um novo tipo de arquitetura capaz de sanar problemas de limitação de velocidade associados com a troca de dados entre processadores e memórias.

Considerações finais

É importante ter conhecimento do modelo de RAM que a placa-mãe utiliza, pois somente é possível comprar um pente de memória que siga a mesma especificação. Caso contrário, é muito provável que o pente novo nem encaixe na placa-mãe ou não funcione. Por exemplo, uma memória DDR3 não funcionará numa máquina que só suporta DDR2. Além disso, não é recomendado misturar memórias de marcas e frequências diferentes, podendo provocar irregularidades no funcionamento e diminuição do desempenho do computador.

Teste

Laranja Maçã 12,333.00
Pão Torta 500.00
Manteiga Sorvete 1.00