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