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