Converts images into textual line art.

Overview

img2utf

Transform images to textual line art!

Images require pre-processing to come out nice. It's expected that users will do the following:

  1. Apply gaussian blur to remove noise and details.
  2. Remove the color from the image.
  3. Apply an edge detection algorithm.
  4. Invert the image to see the line art.
  5. Run this program on the image.

Usage is simple: cargo run image.png

Explanation

The program simply runs over the whole image, trying to match a "mask" and then prints the corresponding matching character. Because the characters are chosen to make lines stand out, the result should look better for line-oriented output.

This page was used to gather symbols to use for drawing: https://en.wikipedia.org/wiki/Box-drawing_character .

Examples

Becase web browsers are currently terrible at rendering the output as all monospace, unlike terminals, the examples below have been included as images. If you work for Google or Mozilla or Microsoft or Apple please fix this for the love of god.

Against the competition

The source image:

The 1st is latest png2linetext algorithm vs whatever I could quickly find:

vs https://manytools.org/hacker-tools/convert-images-to-ascii-art/go/

vs https://www.text-image.com/convert/pic2ascii.cgi

vs https://www.ascii-art-generator.org/

vs https://www.topster.net/ascii-generator/

vs http://www.glassgiant.com/ascii/ascii.php

Comments
  • How to save output to a png file?

    How to save output to a png file?

    For ASCII art, there is a tool https://github.com/ansilove/ansilove to save the output as a png file. So how to save img2utf output, which contains non ASCII chars, to a png file?

    opened by Honghe 6
  • thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidSignature', src/main.rs:583:48

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidSignature', src/main.rs:583:48

    Hi, sorry for the title text vomit, didn't really know what to put as title.

    I cloned this repo and tried running cargo run test.png in two environments (Windows 10 x64, WSL1) and they both fail with a similar error.

    Rust 1.50.0

    With the Windows 10 x64:

    warning: function is never used: `dot_matrix_print`
       --> src\main.rs:501:4
        |
    501 | fn dot_matrix_print(buf: Vec<Vec<u8>>) {
        |    ^^^^^^^^^^^^^^^^
        |
        = note: `#[warn(dead_code)]` on by default
    
    warning: 1 warning emitted
    
        Finished dev [unoptimized + debuginfo] target(s) in 0.32s
         Running `target\debug\img2utf.exe test.png`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidSignature', src\main.rs:583:48
    stack backtrace:
       0:     0x7ff7e998ec0e - std::backtrace_rs::backtrace::dbghelp::trace
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
       1:     0x7ff7e998ec0e - std::backtrace_rs::backtrace::trace_unsynchronized
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
       2:     0x7ff7e998ec0e - std::sys_common::backtrace::_print_fmt
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:67
       3:     0x7ff7e998ec0e - std::sys_common::backtrace::_print::{{impl}}::fmt
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:46
       4:     0x7ff7e999e08b - core::fmt::write
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\core\src\fmt\mod.rs:1078
       5:     0x7ff7e998c288 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\io\mod.rs:1517
       6:     0x7ff7e99915ed - std::sys_common::backtrace::_print
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:49
       7:     0x7ff7e99915ed - std::sys_common::backtrace::print
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:36
       8:     0x7ff7e99915ed - std::panicking::default_hook::{{closure}}
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:208
       9:     0x7ff7e9991054 - std::panicking::default_hook
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:225
      10:     0x7ff7e9991efe - std::panicking::rust_panic_with_hook
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:591
      11:     0x7ff7e9991a21 - std::panicking::begin_panic_handler::{{closure}}
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:497
      12:     0x7ff7e998f56f - std::sys_common::backtrace::__rust_end_short_backtrace<closure-0,!>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:141
      13:     0x7ff7e9991979 - std::panicking::begin_panic_handler
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:493
      14:     0x7ff7e999d3b0 - core::panicking::panic_fmt
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\core\src\panicking.rs:92
      15:     0x7ff7e999d1d3 - core::option::expect_none_failed
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\core\src\option.rs:1268
      16:     0x7ff7e99316c8 - core::result::Result<tuple<png::decoder::OutputInfo, png::decoder::Reader<std::fs::File>>, png::decoder::stream::DecodingError>::unwrap<tuple<png::decoder::OutputInfo, png::decoder::Reader<std::fs::File>>,png::decoder::stream::DecodingError>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\core\src\result.rs:973
      17:     0x7ff7e993f8e3 - img2utf::main
                                   at C:\Users\username\Documents\tmp\img2utf\src\main.rs:583
      18:     0x7ff7e993ce1b - core::ops::function::FnOnce::call_once<fn(),tuple<>>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\core\src\ops\function.rs:227
      19:     0x7ff7e993304b - std::sys_common::backtrace::__rust_begin_short_backtrace<fn(),tuple<>>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\std\src\sys_common\backtrace.rs:125
      20:     0x7ff7e993e051 - std::rt::lang_start::{{closure}}<tuple<>>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\std\src\rt.rs:66
      21:     0x7ff7e99920b4 - core::ops::function::impls::{{impl}}::call_once
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\core\src\ops\function.rs:280
      22:     0x7ff7e99920b4 - std::panicking::try::do_call
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:379
      23:     0x7ff7e99920b4 - std::panicking::try
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:343
      24:     0x7ff7e99920b4 - std::panic::catch_unwind
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panic.rs:396
      25:     0x7ff7e99920b4 - std::rt::lang_start_internal
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\rt.rs:51
      26:     0x7ff7e993e023 - std::rt::lang_start<tuple<>>
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\std\src\rt.rs:65
      27:     0x7ff7e993fb30 - main
      28:     0x7ff7e99a2c20 - invoke_main
                                   at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:78
      29:     0x7ff7e99a2c20 - __scrt_common_main_seh
                                   at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:288
      30:     0x7ff9ff087c24 - BaseThreadInitThunk
      31:     0x7ff9ffc4d4d1 - RtlUserThreadStart
    error: process didn't exit successfully: `target\debug\img2utf.exe test.png` (exit code: 101)
    

    Through WSL:

    warning: function is never used: `dot_matrix_print`
       --> src/main.rs:501:4
        |
    501 | fn dot_matrix_print(buf: Vec<Vec<u8>>) {
        |    ^^^^^^^^^^^^^^^^
        |
        = note: `#[warn(dead_code)]` on by default
    
    warning: 1 warning emitted
    
        Finished dev [unoptimized + debuginfo] target(s) in 0.05s
         Running `target/debug/img2utf test.png`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidSignature', src/main.rs:583:48
    stack backtrace:
       0:     0x7f663b87c060 - std::backtrace_rs::backtrace::libunwind::trace::h25e12e0d899beba0
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
       1:     0x7f663b87c060 - std::backtrace_rs::backtrace::trace_unsynchronized::h70e61195d6ae3df6
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x7f663b87c060 - std::sys_common::backtrace::_print_fmt::hba93ab80d779695a
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:67:5
       3:     0x7f663b87c060 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hf092b5883b4b2e50
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:46:22
       4:     0x7f663b89346c - core::fmt::write::hf68bc350a8f2f0dc
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/fmt/mod.rs:1078:17
       5:     0x7f663b87a122 - std::io::Write::write_fmt::hf66811b1bc767436
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/io/mod.rs:1517:15
       6:     0x7f663b87dd95 - std::sys_common::backtrace::_print::hd425a11bfe1f20f8
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:49:5
       7:     0x7f663b87dd95 - std::sys_common::backtrace::print::h6d678795c1e61e13
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:36:9
       8:     0x7f663b87dd95 - std::panicking::default_hook::{{closure}}::h78a02a4a0dee5e7e
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:208:50
       9:     0x7f663b87d8ea - std::panicking::default_hook::h56eb7eda02f355a7
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:225:9
      10:     0x7f663b87e531 - std::panicking::rust_panic_with_hook::hb27ea14285131c61
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:591:17
      11:     0x7f663b87e077 - std::panicking::begin_panic_handler::{{closure}}::hc552fcee62aad17f
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:497:13
      12:     0x7f663b87c51c - std::sys_common::backtrace::__rust_end_short_backtrace::hb9f0aa9a78e885a0
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:141:18
      13:     0x7f663b87dfd9 - rust_begin_unwind
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:493:5
      14:     0x7f663b892841 - core::panicking::panic_fmt::h12ac4570ea43d06f
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/panicking.rs:92:14
      15:     0x7f663b892663 - core::option::expect_none_failed::h096fa60f757b7204
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/option.rs:1268:5
      16:     0x7f663b8169b9 - core::result::Result<T,E>::unwrap::he717d09f46cf7124
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/result.rs:973:23
      17:     0x7f663b8183ac - img2utf::main::h2d10a581b9a7a49e
                                   at /mnt/c/Users/username/Documents/tmp/img2utf/src/main.rs:583:28
      18:     0x7f663b81894b - core::ops::function::FnOnce::call_once::h69bfc6e9f0400879
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/ops/function.rs:227:5
      19:     0x7f663b80e44e - std::sys_common::backtrace::__rust_begin_short_backtrace::he847f0c16ad7cc83
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/sys_common/backtrace.rs:125:18
      20:     0x7f663b80d8d1 - std::rt::lang_start::{{closure}}::hceacd7c73b5f22de
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/rt.rs:66:18
      21:     0x7f663b87e957 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h78040f802d89ccdc
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/ops/function.rs:259:13
      22:     0x7f663b87e957 - std::panicking::try::do_call::h6853cad536dd09a1
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:379:40
      23:     0x7f663b87e957 - std::panicking::try::h827495f03a9fbb9a
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:343:19
      24:     0x7f663b87e957 - std::panic::catch_unwind::h4bdf17571090eb17
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panic.rs:396:14
      25:     0x7f663b87e957 - std::rt::lang_start_internal::h2f319c33bb013f29
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/rt.rs:51:25
      26:     0x7f663b80d8a7 - std::rt::lang_start::hb23d80071754d3d6
                                   at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/rt.rs:65:5
      27:     0x7f663b81860a - main
      28:     0x7f663a421b97 - __libc_start_main
      29:     0x7f663b80d77a - _start
      30:                0x0 - <unknown>
    

    I barely have Rust knowledge (I started the book, got distracted, and plan to revisit it soon!) so I'm sorry if it's a simple mistake on my end. I just wanted to test this out.

    opened by sijinglim 3
  • Masks for `๐Ÿญฒ` and `๐Ÿญน` are wrong

    Masks for `๐Ÿญฒ` and `๐Ÿญน` are wrong

    ๐Ÿญฒuses ๐Ÿญน's mask and vice versa.

    https://github.com/lf94/img2utf/blob/6b73d75c38220ff6708f466254a6d7a83f69af36/src/main.rs#L48-L49

    https://github.com/lf94/img2utf/blob/6b73d75c38220ff6708f466254a6d7a83f69af36/src/main.rs#L177-L186

    opened by yvt 2
  • thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0'

    thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0'

    Environment:

    • Ubuntu 20.04
    • rustc 1.43.1 (8d69840ab 2020-05-04)

    Test file: 2021

    Output:

    $ RUST_BACKTRACE=1 ./target/debug/image2linetext ./inputs/2021.png        
    ๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌพ๐Ÿฌพ๐Ÿฌน๐Ÿฌพ๐Ÿฌน๐Ÿฌน๐Ÿฌผ ๐Ÿญ‰๐Ÿฌพ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญ‰๐Ÿฌพ๐Ÿฌน๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌพ๐Ÿญ‰๐Ÿฌน๐Ÿฌพ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌพ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‰๐Ÿฎ‡โ–‹๐Ÿฎ‰โ–‹๐Ÿญ๐Ÿฌพ๐Ÿฎ‡๐ŸญŒ๐Ÿฎ‡๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–ˆ๐Ÿฌพ๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌพ ๐Ÿฌน ๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌž๐Ÿฌน๐Ÿฌพ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿฌน
    ๐Ÿฎ‰๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ–โ– ๐Ÿญ๐Ÿญโ–ˆ๐Ÿฌ๐Ÿฎ‚๐Ÿฌน ๐Ÿฌ€๐Ÿฎ‡๐Ÿญก๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚โ–ˆ๐Ÿฎ‡โ–ˆ  ๐Ÿญจโ–ˆ ๐Ÿญจโ–ˆโ–ˆโ–ˆ๐Ÿฌ๐Ÿฌ€โ–ˆ๐Ÿญช ๐Ÿฎ‡   ๐Ÿญ–โ–‹๐Ÿฎ‡โ–‹โ–‚โ–‚๐Ÿญ…โ–‹๐Ÿฌžโ–ˆ๐Ÿญ๐ŸฌŽ๐Ÿญ™ ๐Ÿญค๐ŸฌŽ๐Ÿฌ๐Ÿฎ‡๐Ÿฎ‰๐Ÿญ‡โ–‚๐Ÿฌ๐Ÿฎ‰โ–๐Ÿฎ‰๐Ÿญจโ–ˆโ–ˆ๐Ÿญจโ–โ–ˆโ–ˆโ–ˆโ–ˆโ–๐Ÿฌ€๐Ÿฎ‰โ–ˆโ–‹๐Ÿฎ‡๐Ÿญก๐Ÿญ–โ–ˆ๐Ÿญ–โ–ˆ
    ๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–โ–ˆโ–ˆโ–๐Ÿฌพ๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญ๐ŸญŒ๐Ÿฌพโ–‹๐Ÿฎ‰โ–ˆโ–โ–ˆ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆ๐Ÿฎ‡โ–ˆโ–ˆ๐Ÿญ‡๐Ÿฌผโ–‚โ–‚โ–‚๐Ÿญ…๐Ÿฌ๐Ÿฎ‡โ–โ–ˆโ–ˆ๐Ÿฎ‡โ–‹๐Ÿฎ‡โ–‹โ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‰โ–ˆโ–‹๐Ÿฌพ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿฌนโ–ˆ๐Ÿฌพ๐Ÿฎ‰๐Ÿฎ‡โ–ˆโ–‹๐Ÿฎ‰โ–๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–โ–ˆโ–ˆโ–๐Ÿฌพ๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญ๐ŸญŒ๐Ÿฌพโ–‹๐Ÿฎ‰โ–ˆโ–โ–ˆ
    ๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–๐Ÿญ๐Ÿญ’๐ŸญŒ๐Ÿญ๐Ÿฎ‰โ–ˆ๐Ÿญ–โ–ˆโ–ˆโ–โ–‹๐Ÿฎ‰โ–ˆโ–โ–ˆ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆ๐Ÿฎ‡๐Ÿฎ‚ ๐Ÿญโ–โ–ˆโ–ˆ๐Ÿฎ‚๐Ÿญ–โ–ˆ๐Ÿฎ‡โ–โ–ˆโ–ˆ๐Ÿฎ‡โ–‹๐Ÿฎ‡โ–‹โ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‰ ๐Ÿญจโ–ˆ๐Ÿญ…โ–ˆ๐Ÿญช๐Ÿญจโ–ˆโ–‹๐Ÿฎ‰๐Ÿฎ‡โ–ˆโ–‹๐Ÿฎ‰โ–๐Ÿฎ‰๐Ÿญ’โ–ˆโ–ˆ๐Ÿญ’โ–โ–‹๐Ÿฌžโ–ˆ ๐Ÿญ…โ–ˆโ–‚๐Ÿญ…โ–ˆโ–โ–‹๐Ÿฎ‰โ–ˆโ–โ–ˆ
    ๐Ÿฎ‰โ–‚โ–‚โ–‚๐Ÿญ…โ–๐Ÿฌ๐Ÿฎ‰  โ–‚๐Ÿญ…๐Ÿญ’โ–ˆ๐Ÿฌ๐Ÿฌผ๐Ÿญโ–‚โ–‚โ–‚โ–ˆ๐Ÿฎ‡โ–ˆ๐Ÿฌน๐Ÿฌน๐Ÿฌนโ–ˆ๐Ÿญ‰๐Ÿฌพโ–ˆ  ๐Ÿญ…โ–ˆ๐Ÿญ’โ–ˆ๐Ÿฌพ๐Ÿฎ‡๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญโ–‹๐Ÿฎ‡๐Ÿญโ–‚โ–‚๐Ÿญ…โ–‹๐Ÿฌž๐Ÿฎ‡๐Ÿญ โ–‚๐Ÿญ…๐Ÿญ๐Ÿญ’ ๐Ÿฌ๐Ÿฎ‰โ–‚โ–‚โ–‚๐Ÿญ…โ–๐Ÿฎ‰๐Ÿฌน๐Ÿฌน๐Ÿฌน๐Ÿญโ–๐Ÿฌพ๐Ÿฎ‰  ๐Ÿฌน๐Ÿญ๐Ÿญ’โ–ˆโ—ฅ๐Ÿฌพ๐ŸญŒ๐Ÿฌน๐Ÿฌน๐Ÿฌนโ–ˆ
    ๐Ÿฌ??๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ—๐Ÿฌ€๐Ÿฎ‰โ–โ–‹๐Ÿฌ๐Ÿฎ‚๐Ÿญโ–ˆ๐Ÿฌ€๐Ÿญ—๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญค๐Ÿญ™โ–ˆ๐Ÿฎ‡โ–  ๐Ÿญโ–ˆ๐Ÿญ™๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญ—   ๐Ÿฎ‚๐Ÿฎ‚  ๐Ÿฎ‡๐Ÿญ๐Ÿฎ‰   ๐Ÿญ  ๐Ÿฎ‚    ๐Ÿญ—๐Ÿฌ๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ—๐Ÿฌ€๐Ÿฎ‰โ–โ–‹๐Ÿฌ๐Ÿฎ‚๐Ÿญ–โ–ˆ๐Ÿญก๐Ÿญ—๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚
    ๐Ÿฎ‰โ–ˆโ–ˆโ–‚๐Ÿญ…โ–โ–‹๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญ…โ–ˆ๐Ÿญ…โ–ˆ๐Ÿญโ–ˆโ–‚๐Ÿญ…โ–ˆโ–โ–ˆ๐Ÿฎ‡โ–ˆ๐ŸฌŽ๐ŸฌŽโ–‚๐Ÿญ๐Ÿฎ‡โ–โ–ˆ๐Ÿญ’โ–ˆ๐Ÿญ…๐Ÿญ๐ŸฌŽ๐Ÿญ’ โ–‚โ–‚โ–ˆ๐ŸฌŽ๐Ÿฎ‡โ–‹๐Ÿฎ‡โ–ˆโ–ˆ๐Ÿฌน๐Ÿญโ–‹๐Ÿฎ‰๐Ÿฎ‡โ–ˆ๐Ÿญ’๐ŸญŒโ–ˆ๐Ÿญ’โ–ˆโ–ˆ๐Ÿญ๐Ÿฌน๐Ÿญโ–ˆโ–‹๐Ÿฎ‰โ–๐Ÿฎ‰๐ŸฌŽ๐ŸฌŽโ–‚๐Ÿญ…๐Ÿญ™โ–‹๐Ÿฎ‰๐Ÿญ’โ–ˆ๐Ÿญ…โ–ˆ๐ŸฌŽ๐Ÿญ’๐Ÿญ โ–‚๐Ÿญ…๐ŸฌŽ๐Ÿญ™โ–ˆ
    ๐Ÿฎ‰๐Ÿฌพ๐Ÿญ‰๐Ÿญ’โ–ˆ๐Ÿฌน ๐Ÿญ๐Ÿญโ–ˆ๐ŸฌŽ๐Ÿญ’๐Ÿฌพ๐Ÿญค๐Ÿญ’ ๐Ÿญ’๐Ÿญ๐Ÿฌน๐Ÿฌน๐ŸฌŽ๐Ÿฎ‡โ–ˆ๐Ÿฌพ ๐Ÿญ’๐ŸญŒ ๐Ÿญโ–ˆ๐Ÿญโ–ˆ๐Ÿญ–โ–ˆ๐Ÿฌพ๐Ÿญ’โ–ˆ ๐Ÿญ– ๐Ÿฌน ๐Ÿญ™๐Ÿฎ‡๐ŸญŒ๐Ÿฌพ๐Ÿญ–โ–ˆ๐Ÿฌน ๐Ÿญ๐ŸญŒ๐Ÿญ๐Ÿญก๐Ÿญ–๐ŸญŒ๐Ÿฌพ๐Ÿญ–๐ŸญŒ๐Ÿญ–โ–ˆ๐Ÿฌน๐Ÿฌน๐Ÿฎ‚๐Ÿญ—๐Ÿฎ‰๐Ÿฌพ๐Ÿญ‰๐Ÿญโ–ˆ๐Ÿฌน ๐Ÿญ๐Ÿญโ–ˆ ๐Ÿญ–๐Ÿฌพ๐Ÿญจโ–ˆ ๐Ÿญ–๐Ÿญช๐Ÿฌน๐Ÿฌน
    ๐Ÿฌ๐Ÿญ–โ–‹๐Ÿฎ‰๐Ÿญ๐Ÿญกโ–‹๐Ÿฎ‰โ–ˆ๐Ÿฎ‚๐Ÿฎ‚๐Ÿญข๐Ÿฎ‚๐Ÿฌ€๐Ÿญโ–ˆ๐ŸญŒ  ๐Ÿฎ‚๐Ÿฌน๐Ÿฌพ๐Ÿญข๐Ÿญ–โ–โ–ˆโ–ˆ๐Ÿญจโ–โ–ˆ๐Ÿญก โ–‚  ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ๐Ÿญ–๐Ÿญช ๐Ÿญ–โ–๐Ÿฎ‡โ–ˆ๐Ÿญค๐Ÿญ’โ–ˆ๐Ÿญ™๐Ÿฎ‡โ–ˆโ–๐Ÿฌ๐Ÿฌžโ–‚๐Ÿฌž๐Ÿฎ‡๐Ÿญ๐ŸฌŽ๐Ÿญ™๐Ÿญ’โ–‚๐Ÿฌผ๐ŸฌŽ๐Ÿญข๐Ÿญ–โ–‹๐Ÿญ’โ–ˆโ–ˆโ–๐Ÿฎ‰โ–ˆ๐Ÿญ– ๐Ÿฌน๐Ÿญ–โ–‹๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญ–โ–ˆ๐Ÿญ๐Ÿญ–
     ๐Ÿญโ–๐Ÿฎ‡โ–ˆโ–‹๐Ÿญโ–ˆ๐ŸญŒ๐Ÿญ…๐Ÿฎ‡โ–ˆ โ–โ–ˆ๐Ÿญ‰๐Ÿฌพ๐Ÿญค๐Ÿญ’๐Ÿญ๐Ÿฌน๐Ÿฌผ๐Ÿฌžโ–ˆ๐Ÿญค๐Ÿญ’โ–ˆ๐Ÿญ™๐Ÿญ…๐Ÿญ๐Ÿญ…โ–‹๐Ÿฎ‰โ–ˆ๐Ÿญ™๐Ÿฎ‡โ–‹๐Ÿญ‡๐Ÿฌ๐Ÿญค๐Ÿญ’โ–‚โ–‚๐Ÿญ‰๐Ÿญโ–‹๐Ÿญค๐Ÿญ’๐Ÿญ๐Ÿญ‰๐Ÿญโ—ฅ๐Ÿญโ–โ–ˆ๐ŸญŒ๐Ÿญ™๐Ÿฎ‰โ–๐Ÿญ‰๐Ÿฌพ๐Ÿญ’โ–ˆ๐Ÿฌน๐Ÿฌพ๐Ÿญ‰๐Ÿญโ–๐Ÿญขโ–ˆ๐Ÿญ—๐Ÿญโ–ˆ ๐Ÿญ๐Ÿฎ‡โ–ˆ๐Ÿฌ€๐Ÿญ—โ–ˆ๐Ÿญ‰๐Ÿฌพ๐Ÿญข๐Ÿญ–๐ŸญŒ๐Ÿฌน
    ๐Ÿฎ‰๐Ÿญ’โ–‹๐Ÿฎ‡โ–ˆโ–ˆ๐Ÿญก๐Ÿญ’โ–ˆ ๐ŸฌŽ๐Ÿญ’๐Ÿญโ–ˆโ–ˆโ–โ–‹๐Ÿฎ‡๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿฎ‡โ–ˆ ๐Ÿฌพ๐Ÿฎ‰๐ŸญŒ๐Ÿญ ๐Ÿญ๐Ÿญก ๐Ÿฎ‚โ–ˆ๐Ÿฌน๐Ÿญ๐Ÿฌพ๐Ÿฎ‡โ–๐Ÿฎ‡โ–ˆโ–ˆโ–‹๐Ÿฎ‡๐Ÿญกโ–ˆ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ๐Ÿญจโ–ˆ๐Ÿญ–๐Ÿญช๐Ÿญจโ–ˆโ–ˆโ–ˆ๐Ÿญ๐Ÿฎ‰โ–‚๐Ÿฎ‰โ–ˆโ–ˆโ–๐Ÿฎ‰๐Ÿฎ‰โ–‹๐Ÿฎ‡โ–ˆโ–ˆ๐Ÿญ๐Ÿญ…โ–ˆ๐Ÿฎ‡โ–‚๐Ÿญ…โ–ˆโ–ˆโ–ˆ๐Ÿญ…๐Ÿญโ–‚๐Ÿญ’โ–ˆ๐Ÿญ’
    ๐Ÿฎ‰๐ŸฌŽโ–‚๐Ÿญ…โ–ˆโ–‚๐ŸฌŽ ๐ŸฌŽ๐Ÿฌ๐Ÿฎ‰โ–ˆโ–โ–ˆโ–ˆ๐ŸฌŽ๐ŸฌŽ๐Ÿญ’๐Ÿฌ๐Ÿฎ‰ ๐Ÿฎ‡โ–ˆ ๐Ÿฌน๐Ÿญโ–ˆ๐Ÿญโ–ˆ๐Ÿญ– ๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญ–โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ๐Ÿญ–โ–‹๐Ÿญ—๐Ÿฎ‡โ–‹๐ŸฌŽโ–‚โ–ˆโ–‚๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿฌ๐Ÿฎ‡โ–ˆโ–‹๐Ÿฎ‰โ–ˆ๐Ÿญ๐ŸฌŽ๐Ÿญ’๐Ÿญ๐Ÿฎ‰โ–๐Ÿฎ‡๐Ÿฎ‰๐ŸฌŽ๐Ÿฌน๐Ÿญโ–ˆ๐Ÿฌน๐ŸฌŽ ๐ŸฌŽ๐Ÿฌพ๐Ÿฎ‰โ–ˆโ–โ–ˆโ–ˆ๐ŸฌŽ๐ŸฌŽ๐Ÿญ’ ๐Ÿฎ‰
    ๐Ÿฌ๐Ÿฎ‚๐Ÿฎ‡๐Ÿฎ‰โ–ˆ๐Ÿฎ‚โ–‹๐Ÿญ‰๐Ÿฌน๐Ÿญข๐Ÿญ—โ–ˆ๐Ÿญก๐Ÿญข๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ‰๐Ÿญโ–ˆ๐ŸญŒโ–‹ ๐Ÿญค๐Ÿญ™๐Ÿฎ‡โ–ˆ๐Ÿญก๐Ÿญ’โ–๐Ÿฎ‡โ–‹๐Ÿญ™๐Ÿฎ‡โ–ˆ๐Ÿญ™๐ŸฌŽ๐ŸฌŽ๐Ÿญ™๐Ÿฎ‡๐Ÿญโ–ˆโ–ˆโ–  ๐Ÿญ‡๐Ÿฎ‰โ–ˆ ๐Ÿญจ๐Ÿฌผ๐Ÿฌน๐Ÿฌพ ๐Ÿฎ‰โ–ˆ ๐Ÿฎ‚ ๐Ÿญ‡ ๐Ÿญโ–ˆ๐Ÿญ ๐Ÿญข๐Ÿฎ‚๐Ÿฎ‡๐Ÿฎ‰โ–ˆ๐Ÿฎ‚โ–‹๐Ÿฎ‡โ–ˆ๐Ÿญข๐Ÿญ—โ–ˆ๐Ÿญก๐Ÿญข๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‡๐Ÿฎ‰โ–ˆโ–ˆโ–‹
    ๐Ÿฎ‰โ–‹โ–ˆโ–ˆโ–ˆ๐Ÿญช๐Ÿญจ ๐Ÿฌ๐Ÿฌผโ–ˆโ–ˆโ–ˆโ–‚๐Ÿฎ‰โ–‹๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญก๐Ÿญ—๐Ÿญค๐ŸฌŽ๐Ÿฎ‰โ–ˆ๐Ÿญ’โ–ˆ ๐Ÿญ™๐Ÿฌžโ–‚๐Ÿฎ‡โ–ˆโ–ˆโ–ˆโ–‚๐ŸฌŽ๐Ÿญ™โ–ˆโ–ˆโ–ˆโ– ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆ โ–โ–ˆ๐Ÿฌพ๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญ๐Ÿฎ‰โ–ˆ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ๐Ÿญ— ๐Ÿญค๐Ÿฎ‰โ–ˆ๐Ÿญโ–ˆ ๐Ÿญ™๐Ÿญ‡โ–‚๐Ÿฌผโ–ˆโ–ˆโ–ˆโ–‚๐ŸฌŽ๐Ÿญ™๐Ÿฎ‰โ–ˆโ–ˆโ–‹ 
    ๐Ÿญ‡ ๐Ÿญ’ ๐Ÿญ’๐Ÿญ…๐Ÿฌ๐ŸฌŽ๐ŸฌŽ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ๐ŸฌŽ๐Ÿฌžโ–‚โ–ˆโ–ˆโ–ˆโ–  ๐Ÿญ‰โ—ข๐Ÿญ’โ—ฅ๐ŸญŒ๐ŸญŒ๐Ÿฌพ๐ŸฌŽ๐Ÿญ™๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿญ ๐Ÿฌน๐Ÿญโ–ˆโ–ˆโ–ˆ  ๐Ÿญ‰ ๐Ÿญ–โ–‹๐Ÿญ–๐Ÿญ๐Ÿฌพ๐Ÿญข๐Ÿฎ‚๐Ÿญ—โ–ˆโ–ˆโ–ˆ๐Ÿฎ‚๐Ÿฌน๐Ÿฌน๐Ÿญโ–ˆโ–ˆโ–‹  ๐Ÿญ‰๐Ÿญ๐Ÿญ–โ—ฅ๐Ÿญ’โ–ˆ ๐ŸฌŽ๐ŸฌŽ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ ๐Ÿญ๐ŸญŒโ–ˆโ–ˆโ–ˆ๐Ÿฌžโ–‚
    ๐Ÿญข๐Ÿฎ‚๐Ÿญข๐Ÿญ—๐Ÿฌ๐Ÿฎ‚๐ŸญŒ๐Ÿฌพ ๐Ÿญข๐Ÿฎ‚๐Ÿญ–๐Ÿฌ€๐Ÿฎ‡๐Ÿฎ‰๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ–โ–ˆ๐Ÿฌน๐Ÿฌน๐Ÿญ‡   โ–‚ ๐Ÿญ–โ–ˆโ–๐Ÿญข๐Ÿฌ๐Ÿญ–โ–ˆ๐Ÿฌ€๐Ÿฌžโ–ˆ ๐Ÿญ–โ–ˆโ–ˆโ–ˆโ–‹๐Ÿญ‡โ–‚โ–‚โ–‚โ–‚๐Ÿฌ๐ŸฌŽ๐ŸฌŽ  ๐Ÿญ‡๐ŸฌŽ๐Ÿญ™๐Ÿญ‡๐Ÿญ…โ–‹๐Ÿฌž๐Ÿฎ‡โ–ˆ๐Ÿญ’๐ŸฌŽ๐Ÿญ™๐Ÿญโ–ˆ๐Ÿญ๐Ÿฌน๐Ÿญ ๐ŸฌŽ๐Ÿญ™ ๐Ÿญข๐Ÿญ–๐ŸฌŽ๐Ÿญ—๐Ÿญ‰๐Ÿญ๐Ÿญ–๐Ÿญก๐Ÿญ–โ–ˆ๐Ÿญ’๐ŸฌŽ
    ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–ˆโ– ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿญ…๐Ÿฌผ ๐Ÿฎ‡โ–ˆโ–โ–‹๐Ÿฎ‰โ–ˆ๐Ÿฎ‰๐Ÿฌผ๐Ÿฎ‡โ–ˆ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽโ–ˆ  ๐Ÿญ‡โ–‚โ–‚โ–ˆ๐Ÿฌ๐Ÿญค๐Ÿญ’โ–ˆ๐Ÿญค๐Ÿญ™โ–ˆโ–‹โ–‚๐Ÿฌ๐Ÿฎ‡๐Ÿญ๐ŸฌŽ๐ŸฌŽ๐Ÿญ’โ–‹ ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿญ๐ŸญŒ๐Ÿฌพ๐Ÿญค๐Ÿญ’โ–‹๐Ÿญ™๐Ÿฎ‡โ–ˆ ๐Ÿฌน๐Ÿฌพ๐Ÿฎ‰๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ–โ– ๐Ÿญ‰๐Ÿฌน๐Ÿฌน๐Ÿญ๐Ÿฌพ ๐Ÿญข๐Ÿญ–โ–๐Ÿฌ€๐Ÿฎ‰โ–ˆ๐Ÿฌ๐Ÿฌน
    ๐Ÿฎ‰๐Ÿญโ–ˆโ–ˆ๐Ÿญโ–๐Ÿฎ‡โ–ˆโ–ˆ๐ŸฌŽ๐ŸฌŽ ๐Ÿฎ‰๐Ÿฎ‡๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–ˆโ–๐Ÿญ—๐Ÿฎ‡โ–ˆ๐Ÿฌน๐Ÿฌน๐Ÿฌนโ–ˆ๐Ÿญ‡๐Ÿฌน๐Ÿญ๐Ÿญก   ๐Ÿฌพ๐Ÿฌžโ–ˆ๐Ÿฌน๐Ÿฌนโ–ˆ๐ŸญŒ ๐Ÿญ—๐Ÿฎ‡โ–‹โ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‡โ–ˆโ–ˆ๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‚๐Ÿฎ‰โ–๐Ÿฎ‡โ–ˆโ–ˆโ–ˆโ–ˆโ–‹๐Ÿฌ๐Ÿญ—๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–๐Ÿญ…โ–ˆโ–ˆ๐Ÿญ‡๐Ÿฌžโ–‚๐Ÿญ…๐Ÿญ‡๐Ÿญ…โ–ˆโ–ˆโ–ˆโ–ˆโ–โ–‚
    ๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–โ–‹๐Ÿฌž  ๐Ÿญ…๐ŸฌŽ๐Ÿญ™  ๐Ÿญ™๐Ÿฎ‡๐Ÿญ๐Ÿญ’๐Ÿฌผโ–ˆ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆ๐Ÿฎ‡๐Ÿญ–โ–ˆ  ๐Ÿญโ–ˆ ๐Ÿญโ–ˆ๐Ÿญก๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿฎ‡โ–‹๐Ÿฎ‡โ–‹โ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‰๐Ÿญ‡  ๐Ÿญ…๐Ÿญ๐Ÿญ™๐Ÿฌž  ๐Ÿญ™โ–ˆ๐Ÿญ’๐Ÿฌผ๐Ÿฎ‰โ–๐Ÿฎ‰๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–โ–‹โ—ข  ๐Ÿญ๐ŸฌŽ๐Ÿญ™โ—ขโ—ฅ๐Ÿญ™๐Ÿฎ‡๐Ÿญ๐Ÿญ’๐Ÿฌพโ–ˆ
    ๐Ÿฎ‰ ๐ŸฌŽ๐ŸฌŽ๐Ÿญ–โ–โ–‹๐ŸฌŽ๐Ÿญ™๐ŸญŒ๐Ÿญ’๐Ÿฌพ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰๐Ÿฌพ๐Ÿฎ‡๐ŸญŒ๐Ÿญ ๐Ÿญ™๐Ÿฎ‡โ–ˆ๐Ÿฌ๐Ÿฎ‚๐Ÿฎ‚โ–ˆ๐Ÿฎ‡โ–๐Ÿฎ‚๐Ÿฎ‡๐ŸญŒ๐Ÿญ–๐Ÿฌพ๐Ÿฎ‡โ–‹โ–ˆโ–‹๐Ÿฎ‰๐Ÿญ๐Ÿญก๐Ÿฎ‚๐Ÿฌ€๐Ÿฎ‡๐Ÿญ  ๐Ÿญจโ–‹๐Ÿฎ‰  ๐Ÿฎ‰๐Ÿญ–๐ŸญŒ๐Ÿฌพ๐Ÿฎ‰๐Ÿญ…๐ŸญŒ๐Ÿฎ‰โ–ˆ๐Ÿญ ๐Ÿฎ‚๐Ÿญ—๐Ÿฎ‰๐Ÿฌ๐Ÿฎ‚๐Ÿฎ‚๐Ÿญ–โ–โ–‹๐Ÿฌ๐Ÿญ—โ–ˆ๐Ÿญ–๐ŸญŒ๐Ÿฎ‡โ–ˆ๐Ÿฎ‰โ–ˆ??๐ŸญŒโ–ˆ ๐Ÿฎ‚
    ๐Ÿฎ‰โ–ˆโ–ˆโ–ˆโ–ˆโ–โ–ˆโ–ˆโ–ˆ๐Ÿฎ‚๐Ÿฎ‰โ–ˆ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆ๐Ÿญก๐Ÿฌ๐Ÿฎ‚๐Ÿฎ‰ ๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐Ÿญ™๐Ÿญค๐ŸฌŽ๐Ÿญ™๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญ™ ๐Ÿญค๐Ÿญ™ ๐Ÿฎ‡โ–ˆโ–ˆโ–ˆโ–ˆโ–‹๐Ÿฎ‰โ–ˆโ–ˆ๐Ÿฎ‚๐Ÿฌ€๐Ÿญ’๐Ÿญ™๐Ÿฎ‰โ–ˆโ–ˆโ–ˆ๐Ÿฌ€๐Ÿฌ๐Ÿฎ‡โ–๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญ™๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ ๐Ÿญค๐ŸฌŽ๐Ÿญค๐ŸฌŽ๐ŸฌŽ๐ŸฌŽ๐Ÿญ™ ๐Ÿญค๐Ÿญ™
    thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/libcore/slice/mod.rs:2842:10
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/libunwind.rs:86
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:78
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1063
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:470
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:378
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::panicking::panic_bounds_check
                 at src/libcore/panicking.rs:63
      14: <usize as core::slice::SliceIndex<[T]>>::index
                 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/libcore/slice/mod.rs:2842
      15: core::slice::<impl core::ops::index::Index<I> for [T]>::index
                 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/libcore/slice/mod.rs:2707
      16: <alloc::vec::Vec<T> as core::ops::index::Index<I>>::index
                 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/liballoc/vec.rs:1890
      17: image2linetext::bitplane_to_linetext
                 at src/main.rs:342
      18: image2linetext::main
                 at src/main.rs:391
      19: std::rt::lang_start::{{closure}}
                 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/libstd/rt.rs:67
      20: std::rt::lang_start_internal::{{closure}}
                 at src/libstd/rt.rs:52
      21: std::panicking::try::do_call
                 at src/libstd/panicking.rs:303
      22: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      23: std::panicking::try
                 at src/libstd/panicking.rs:281
      24: std::panic::catch_unwind
                 at src/libstd/panic.rs:394
      25: std::rt::lang_start_internal
                 at src/libstd/rt.rs:51
      26: std::rt::lang_start
                 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/libstd/rt.rs:67
      27: main
      28: __libc_start_main
      29: _start
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    
    opened by Honghe 2
  • Help needed: add missing masks!

    Help needed: add missing masks!

    It's a lot of work to find masks which are missing. If you uncomment the eprintln it'll help you find them. I would greatly appreciate if I could get some help on this.

    opened by lf94 0
Owner
Lee
I see you're looking at my profile.
Lee
A programming language where comments are the first-class citizen and ASCII art flowcharts are the controls!

regretti ?? A programming language where comments are the first-class citizen and ASCII art flowcharts are the controls! Made for Lang Jam (jam0001) t

Mufeed VH 15 Dec 27, 2022
My personal project for generative art.

Generative Art This is my personal project for making Generative Art. Installation There are three ways of getting the binary. You can either download

null 26 Nov 17, 2022
A Rust library for calculating perceptual hash values of images

img_hash Now builds on stable Rust! (But needs nightly to bench.) A library for getting perceptual hash values of images. Thanks to Dr. Neal Krawetz f

Austin Bonander 264 Dec 9, 2022
Encoding and decoding images in Rust

Image Maintainers: @HeroicKatora, @fintelia How to contribute An Image Processing Library This crate provides basic image processing functions and met

image-rs 3.5k Jan 9, 2023
Zero dependency images (of chaos) in Rust

bifurcate-rs Zero dependency images (of chaos) in Rust To run: time cargo run --release > img.pgm To convert from PGM to PNG using Image Magick: conve

Stephen Merity 32 Nov 17, 2021
tai (Terminal Ascii Image) tool to convert images to ascii written in Rust

TAI Terminal Ascii Image A tool to convert images to ascii art written in Rust ?? Notes This tool is still in development stage. Contributions All Con

Mustafa Salih 258 Dec 5, 2022
Automated image compression for efficiently distributing images on the web.

Imager Apparently this project made it into the GitHub Archive Program. About Imager is a tool for automated image compression, and can competitively

Imager IO 487 Dec 25, 2022
Convert Sketchbook Tiff Files to Open Raster Images

SketchbookTiffConverter Convert Sketchbook Tiff Files to Open Raster Images and retain layer information. This is a command line program that will con

Phil Spindler 3 Nov 2, 2021
Fetch original quality URLs for images posted to a Twitter account

twitter-images Fetches the last tweets of a given account, then prints original quality URLs for all image tweets. Useful for archiving image content

Harsh Shandilya 6 Dec 23, 2022
Simple CLI program to generate zoomable tiled images

zoomtiler Simple CLI program to generate deepzoom zoomable tiled images. The input can either be a single image or multiple images of the same height,

Matthieu Pizenberg 3 Mar 14, 2022
Encoding and decoding images in Rust

Image Maintainers: @HeroicKatora, @fintelia How to contribute An Image Processing Library This crate provides basic image processing functions and met

image-rs 3.5k Jan 2, 2023
Takes a folder of images (as a palette), and an image, and figures out how to tile the palette to resemble the image!

Takes a folder of images (as a palette), and an image, and figures out how to tile the palette to resemble the image!

Jacob 258 Dec 30, 2022
CLI and utilities for converting media files (images/videos) to ascii outputs (output media file or print to console)

CLI and utilities for converting media files (images/videos) to ascii outputs (output media file or print to console). Supports most standard image formats, and some video formats.

Michael 30 Jan 1, 2023
Convert your ascii diagram scribbles into happy little SVG

Svgbob Svgbob can create a nice graphical representation of your text diagrams. Svgbob provides a cli which takes text as an input and creates an svg

Jovansonlee Cesar 3.4k Dec 25, 2022
๐Ÿ–ผ๏ธCombines a Javascript and WASM file into a single executable polygot PNG+HTML file.

WASIMAGE Combines a Javascript and WASM file into a single executable polygot PNG+HTML file. Usage: cargo install wasimage wasimage --wasm-file my.was

Nervive 2 Mar 30, 2022
A cross-platform tool for embedding GPS data into photographs

nya-exif ไธญๆ–‡ | English ไป‹็ป nya-exif ๆ˜ฏไธ€ไธช็”จไบŽๅŒน้…็…ง็‰‡ GPS ไฟกๆฏ, ๅนถๅ†™ๅ…ฅๆ–‡ไปถ EXIF ไฟกๆฏ็š„ๅทฅๅ…ท, ๆ”ฏๆŒ JPEG ๅ’Œ PNG ๅŠๅ„ๅคง็›ธๆœบๅŽ‚ๅ•†็š„ไธปๆตRAWๆ ผๅผ. ๆœฌๅทฅๅ…ทๅŸบไบŽ Rust ็ผ–ๅ†™, ๆ”ฏๆŒๅ…จๅนณๅฐไฝฟ็”จ Features ๆ”ฏๆŒ JPEG ๅ’Œ PNG ๅŠๅ„ๅคง

Lyn Chen 32 Nov 16, 2023
Signed distance field font and image command line tool based on OpenCL.

SDFTool Signed distance field font and image command line tool based on OpenCL. Build Windows Run cargo build --release in Visual Studio developer x64

ๅผฆ่ฏญ่ถๆขฆ 7 Oct 16, 2022
Brings all relevant command-line tesseract functionality to Rust

rusty-tesseract A Rust wrapper for Google Tesseract Description Brings all relevant command-line tesseract functionality to Rust Based on the Python w

null 28 Dec 8, 2022
Control Google Pixel Buds Pro from the Linux command line.

pbpctrl Control Google Pixel Buds Pro from the Linux command line. Might or might not work on other Pixel Buds devices. Allows reading of battery, har

Maximilian Luz 6 Jan 10, 2023