::::::::: :::::::::: :::: ::: ::::::::::: :::::::::: :::::::: ::::::::::: ::::::::::: :::: ::: ::::::::
:+: :+: :+: :+:+: :+: :+: :+: :+: :+: :+: :+: :+:+: :+: :+: :+:
+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ +:+ :+:+:+ +:+ +:+
+#++:++#+ +#++:++# +#+ +:+ +#+ +#+ +#++:++# +#++:++#++ +#+ +#+ +#+ +:+ +#+ :#:
+#+ +#+ +#+ +#+#+# +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+ +#+#
#+# #+# #+# #+#+# #+# #+# #+# #+# #+# #+# #+# #+#+# #+# #+#
### ########## ### #### ### ########## ######## ### ########### ### #### ########