๐Ÿ’พ Archived View for bbs.geminispace.org โ€บ s โ€บ ascii-art โ€บ 16294 captured on 2024-05-12 at 17:07:56. Gemini links have been rewritten to link to archived content

View Raw

More Information

โฌ…๏ธ Previous capture (2024-05-10)

โžก๏ธ Next capture (2024-05-26)

-=-=-=-=-=-=-

A Reply to @requiem re: Chafa Script

This should be a reply to [this post] by @requiem, but I could not add a long reply with my code contribution. So I made this separate post.

[this post]

@requiem provided a bash script that wrapped chafa and outputed gemtext. Chafa is a very nice image-to-text conversion tool that everyone in Geminispace should know about.

The chafa homepage

I decided to change the original script because it was too interactive, imo, and would be better with proper argument handling. It makes processing faster.

If you don't know, by default chafa outputs are very beautifully rendered, but these are not appropriate to Geminispace due to ANSI color codes. As far as I know, Lagrange cannot render ANSI-colored images correctly.

So long as it is understood that these images are meants to be viewed in the terminal, there is no problem. And so I made standard chafa output the default behavior, with the exception of the width, which I set to 80 characters since that is the standard terminal width.

If you prefer @requiem's style, type the following command:

$ ./chafa-script.sh -S requiem

This sets the style to 240 color block illustration.

There are also `ascii-BW` and `ascii-color` styles, and besides these you can change various options which are explained in the help ('-h').

Another issue is that chafa stretches images horizontally by default, due to the width-to-height ratio of ASCII characters. So I added a correction mode that works by default. If you prefer not to use this, you can turn it off. The feature requires imagemagick to be installed.

So that images are always visible on a single screen, I restricted chafa to producing images 40 characters tall.

I added better renaming logic.

To make the script work on your system, type

$ chmod +x ./chafa-script.sh

That will make the script executable.

Here it is.

#!/bin/bash

# chafa-script.sh
# a wrapper for chafa that outputs gemtext
# modified from code supplied by @requiem:bbs.geminispace.org
echo
current_date=$(date +'%Y-%m-%d')
gallery_name=$current_date
# ascii-BW style by default
    color="full"
    symbols=""
    fill=""
    width="80"
    foreground=""
file_extensions="png|jpg|gif|jpeg|tif|tiff"
input_folder="."
# Checks if imagemagick/convert is installed, and sets the correction_mode appropriately
hash convert &>/dev/null && correction_mode="on" || { correction_mode="off"; \
     echo "WARNING: Correction-mode off: $(basename $0) will not correct chafa horizontal stretching"; \
     echo "         To improve processing, please install imagemagick"; }

usage () {
    echo "$(basename $0): [-i <input-folder>] [-S <style>] [-c <color-#>] [-s <symbols>] [-f <fill-symbols>] [-B background-on-flag] [-w <char-width>] [-d <output-dir>] [-x <file-extensions>] [-r rename-images-to-dir-name] [-R <new-image-name>] [-T thumbnail-mode] [-C correction-mode-off]"
    echo "    style (sets various output options): chafa (default behavior), requiem, ascii-BW, ascii-color"
    echo "                                         Use this to set all the image settings at once"
    echo "    colors: none, 2, 8, 16, 240, 256, full"
    echo "    symbols: all, ascii, braille, space"
    echo "    fill: all, ascii, none"
    echo "    default width: 80 characters"
    echo "    default output-dir: current date"
    echo "    default file-extensions: 'png|jpg|gif|jpeg|tif|tiff'"
    echo "    thumbnail-mode: width=40"
    echo "    correction-mode-off: by default this script corrects chafa horizontal image stretching;"
    echo "                         This option turns off this behavior"
    echo "    rename modes:"
    echo "                   -r    rename with <output-dir>"
    echo "                   -R    rename with <new-image-name>"
    echo ""
}

while getopts 'hi:S:c:s:f:Bw:d:x:TCrR:' OPTION; do
    case "$OPTION" in
        h)      usage
                exit 0
                ;;
        i)      input_folder="$OPTARG" ;;
        S)      style="$OPTARG" ;;
        c)      color="$OPTARG" ;;
        s)      symbols="--symbols=$OPTARG" ;;
        f)      fill="--fill=$OPTARG" ;;
        B)      foreground="" ;;
        w)      width="$OPTARG" ;;
        d)      gallery_name="$OPTARG" ;;
        x)      file_extensions="$OPTARG" ;;
        r)      rename_name="_xXx_TBD_xXx_" ;;
        R)      rename_name="$OPTARG" ;;
        T)      width="40" ;;
        C)      echo "INFO: Correction mode turned off"
                correction_mode="off" 
                ;;
        *)      echo "*** Error: Something went wrong"
                usage
                exit 1 
                ;;
    esac
done
# [[ ! $? -eq 0 ]] && { echo "### ERROR: Something went wrong"; exit 1; }

# Have to rename this here in case renaming from <output-dir>
# Argument parsing might be out of order ('-r' before '-d')
if [[ "$rename_name" == "_xXx_TBD_xXx_" ]]; then
   rename_name=${gallery_name//\//-} # replace '/' with '-' in case dirname is/a/compex/path
fi

case $style in 
   chafa) chafa_settings="-s ${width}x40" ;;
   requiem) chafa_settings="-c 240 --color-space din99d --dither ordered --symbols -space -s ${width}x40 --fg-only" ;;
   ascii-BW) chafa_settings="-c none --color-space din99d --dither ordered --symbols=ascii -s ${width}x40 --fg-only" ;;
   ascii-color) chafa_settings="-c full --color-space din99d --dither ordered --symbols=ascii --fill=ascii -s ${width}x40 --fg-only" ;; 
esac
[[ -z $chafa_settings ]] && chafa_settings="-c $color --color-space din99d --dither ordered $symbols $fill -s ${width}x40 $foreground"

file_extensions="${file_extensions//,/|}" # convert any ',' to '|'
file_extensions="${file_extensions// /}"  # remove spaces
files=$(find $input_folder -maxdepth 1 -type f | grep -iE "$file_extensions")

output_dir="$gallery_name"
[[ ! -d "${output_dir}" ]] && mkdir -p "$output_dir"

# Create index.gmi and add header
index_file="$output_dir/index.gmi"
echo -e "# Gallery: $gallery_name\n" > "$index_file"

# Iterate through each file matching the specified types
count=1
for file in $files; do
    echo "Processing $file"
    filename=$(basename "$file")
    if [[ ! -z ${rename_name+x} ]]; then
            output_filename="${rename_name}-${count}.gmi"
        else
            output_filename="${filename%.*}.gmi"
    fi
    
    # Generate individual .gmi files
    if [ $correction_mode == "on" ]; then
           convert -resize %100x85% "$file" "${file}.tmp" &>/dev/null
           # if the conversion succeeds, process the temp file
           # otherwise process the original file
           if [[ $? ]]; then
                   { printf '```\r\n'; chafa $chafa_settings "${file}.tmp"; printf '\r\n```'; } > "$output_dir/$output_filename"
               else
                   echo "WARNING: Problem converting ${filename}; processing original"
                   { printf '```\r\n'; chafa $chafa_settings "$file"; printf '\r\n```'; } > "$output_dir/$output_filename"
           fi
           rm "${file}.tmp" &>/dev/null 
       else
           { printf '```\r\n'; chafa $chafa_settings "$file"; printf '\r\n```'; } > "$output_dir/$output_filename"
    fi  
    
    # Generate gallery entry
    encoded_gmi_filename=$(printf '%s' "$output_filename" | LC_CTYPE=C LANG=C sed -E 's/([^a-zA-Z0-9._~-])/\\%\1/g')
    filesize=$(du -k "$file" | awk '{print $1}')
    # Replaced this ๐Ÿ–ป with [IMG] for universal compatability
    echo "=> $filename [IMG] $encoded_gmi_filename ($filesize kbytes)" >> "$index_file"
    
    ((count++))
done

# Add file count and creation date to index.gmi
echo -e "\n$(($count - 1)) files; created on $current_date." >> "$index_file"

echo

Posted in: s/ascii-art

๐Ÿš€ blah_blah_blah

Apr 22 ยท 3 weeks ago ยท ๐Ÿ‘ mozz, sugar, requiem

3 Comments โ†“

๐Ÿ’€ requiem ยท Apr 22 at 10:31:

Thank you for making these changes! Proper argument handling and stuff was on my todo list, but I thought for a quick tool this will do! Thank you so much for making the changes.

๐Ÿ•น๏ธ skyjake [...] ยท Apr 23 at 04:12:

I could not add a long reply

You can do this via the draft composer. Start commenting as usual but then just type a backslash:

\

This will create a draft comment where you can enter your long reply just like when making a draft post.

๐Ÿš€ blah_blah_blah [OP] ยท Apr 27 at 15:54:

โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€๏ฟฝ๏ฟฝโ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘
โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€โ–‘โ–‘โ–‘โ–€โ–ˆโ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–ˆโ–€
โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–ˆโ–‘โ–‘โ–ˆโ–€โ–€โ–‘โ–€โ–€โ–ˆโ–‘โ–‘โ–ˆโ–‘
โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘โ–‘โ–‘โ–‘โ–‘โ–€โ–‘โ–‘โ–€โ–€โ–€โ–‘โ–€โ–€โ–€โ–‘โ–‘โ–€โ–‘

It works!