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