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