Lost-Cluster

A small amount of data that does not belong to any file

Braille Dreams

Ingredients: console + utf8

Inspired by: https://505e06b2.github.io/Image-to-Braille/

Example

⣕⣮⡖⢯⢯⢜⡯⣏⣟⣎⣪⡯⡻⡟⢮⣕⣳⡏⢮⡧⢜⡯⡳⢫⢵⣮⣛⡻⣟⢯⡗⢪⣮⢷⣾⣟⢽⢽⢽⢏⣹⡗⣺⢗⡺⢿⣺⣟⢝⡾⢧⢯⣞⣗⣺⡿⢟⡻⢯⣯⢷⢝⣽⡯⣿⣪⣾⣻⡹⣻⡽⡽⢗⢾⣗⡿⢯⡽⢾⢯⣿⣗⣾⣳⣟⣞⣝⣷⣗⣷⣟⣽⣯⢷⢿⣝⣽⢿⢽⡾⡽⢽⣿⣯⣯⡽⣫⣝⣿⣷
⢝⣺⡵⡻⢓⡚⡽⢳⣎⢫⢵⡺⣎⡼⣗⡫⢣⣎⣏⢞⣫⢗⢺⣾⡷⢽⢧⡻⣳⢿⣷⢮⡛⡮⢗⣏⣹⣵⢼⣯⣝⢮⡺⣟⣹⢟⢽⣗⡽⢝⡻⡿⡯⡺⢳⢿⢺⢯⣽⡯⢯⡼⢮⣎⣺⢯⣟⡻⣿⣗⢟⡟⣽⡮⣳⡝⣽⣷⣟⢿⢽⣻⡽⢻⡯⣻⣟⢿⣯⣷⣾⣞⣺⡷⢽⣾⣟⣽⣟⣷⣾⣽⡿⣗⣾⡯⡯⣯⣽⢽
⣣⢭⡜⢎⢼⣹⣳⢷⣝⣻⣝⢭⡱⡓⢾⢽⢪⡺⣯⡫⣻⣵⡺⣝⣵⢎⡫⢪⡵⢞⡳⢽⢿⡻⢷⡝⢻⢷⡽⣻⣯⢝⢲⣎⣝⣹⡹⢿⣯⣗⣽⣺⣷⡻⢹⣮⣕⡧⣷⣿⣷⢽⡾⠽⣷⡷⣽⣿⣟⢿⢿⣿⣷⣾⣞⢵⡿⣟⣯⡿⡷⡽⡻⢽⣺⣿⣿⡾⣻⣽⣯⣳⣿⢿⣪⣮⣯⡾⣟⢯⢽⡳⡿⣿⢿⢾⣮⣞⣾⡮
⡣⢵⡓⡳⢧⡜⣳⡺⢬⣒⣹⡪⢯⣺⡮⡷⢯⢼⡷⣷⣿⡟⣺⢯⢓⢵⣟⣱⣲⢫⡺⢟⢿⢼⡟⠮⣟⡪⡳⣮⣷⣪⡽⣧⣯⣮⡽⢿⣾⣳⡻⣻⡺⢽⣳⢷⢽⣗⣿⣯⣼⢯⣯⣝⣫⡽⡾⣿⡟⡻⢗⣻⣝⣗⣿⣻⣕⣗⡻⡯⣯⣾⣣⣝⣿⣻⣿⣽⢿⢿⢟⣽⣞⣽⣿⣿⡿⣷⣿⣿⣮⣽⣪⢯⡽⢯⢿⢷⣳⣾
⡕⢕⣑⢺⣽⢻⡽⣵⢮⡼⢼⣫⡕⣻⢟⡜⣕⣗⣜⢻⡺⣝⣧⢝⣮⡽⣻⣗⣻⣻⣼⡞⡫⡵⣗⢾⢿⢝⣯⣳⠽⣻⡸⢽⢕⣹⣎⣟⢹⣝⣞⡷⢿⣿⣾⡳⣮⡳⣹⣝⣳⣻⡾⣝⢟⣽⣞⣧⡿⢾⡽⣾⡫⢷⣫⣯⣼⡯⢷⣯⣳⣝⣯⢯⢗⣽⣯⣾⡻⣞⢗⣻⣽⣽⢿⢷⣽⣿⣿⣳⣿⣿⣻⣾⣿⢷⣟⣻⣽⣻
⢻⣼⢜⠮⡘⣕⣏⡱⣷⣝⢶⣓⢼⡫⢝⡳⡕⢾⣫⣞⡫⢝⡎⣹⣟⡗⢗⡵⢟⣯⡼⡼⣫⣸⣳⣵⡺⣗⡺⢞⢳⣽⡷⣯⢮⢾⣿⣫⣝⡻⣳⣲⢺⢷⢽⣪⡗⣫⢽⣟⡻⣽⣮⣺⣎⡮⢺⡝⣽⣾⣻⣷⣯⡯⢯⣾⣽⣳⡽⣿⢗⢟⡯⣗⣿⣟⢷⣵⣯⣽⣗⢽⢯⣿⣟⢿⢞⣯⣷⣷⢽⡿⣮⡽⢯⡯⣗⢾⣻⢿
⢵⡽⡹⣵⡮⢕⢗⢺⣟⡽⢾⣇⢜⣜⡻⣮⢜⡺⠽⡽⠧⡳⣻⢕⡳⣯⡫⢜⣺⢗⣻⡳⢺⣕⡾⢗⣲⣟⣺⣺⣞⣾⢎⡪⡽⣹⢫⢟⠉⠀⠀⢀⣔⣠⠬⠄⣐⡠⠠⡀⡁⠁⠚⠓⠺⢷⢿⣪⡿⡻⣯⡻⣿⣿⣿⣞⡽⣫⣕⡹⣯⢯⣮⢷⣻⢟⣿⣷⣯⣽⣷⢾⣿⣿⣿⣟⡿⣻⡽⢾⣟⡯⣾⣮⢿⢿⢷⣻⣵⣽
⣗⡻⢯⢽⣞⣹⡮⡮⣪⠵⢏⣞⢹⡏⣪⡺⣮⡿⣟⡵⡝⢷⣺⣝⣎⢟⢧⢾⣻⡯⣻⣟⣞⣆⣺⢻⢧⣚⡲⢾⡮⡜⠝⠣⠌⠀⠀⡠⢢⡱⡇⢕⡘⡊⢹⡨⢨⠤⡰⠕⢲⠮⣐⡄⡀⠀⠁⠙⠛⣗⣻⢿⣯⣾⣿⣝⡯⢿⣺⣵⣝⣿⣽⣟⢷⣯⣿⣿⣟⢽⡽⣞⢾⢿⣟⣟⣻⣾⣗⣻⢿⣿⣿⣻⣺⣿⣾⣞⣷⣻
⣓⡾⡪⢏⢟⣛⣹⢜⡕⡺⣝⣣⡭⣳⣻⡝⢸⢿⣟⢞⣟⡣⠯⢽⣹⣻⣟⣯⢷⡿⢾⡻⡻⢯⢵⣾⣽⣯⠗⠃⠀⠁⠀⢀⢠⡔⢫⡇⡪⠵⢓⢪⣓⠕⠨⠇⢣⢎⢝⡮⢣⣘⡰⡆⢭⢵⣅⡄⠀⠀⠈⢛⣿⣻⣿⣟⡯⣻⢿⣮⣟⡽⣿⣮⣿⢽⣿⣷⣯⣻⣿⣷⢯⣟⣽⣾⣿⢷⣺⣷⣽⢯⡿⡯⣳⣽⡿⣺⣮⢷
⣳⡽⢮⢜⣞⡯⣝⡳⡝⡣⢮⣻⣎⢳⣯⢵⢞⡮⡻⡽⡯⣽⢿⡳⣣⢮⣯⣎⡚⡺⣽⡲⡺⡿⡺⠪⠊⠀⠀⠀⠀⠀⢀⡲⢅⣑⡇⡪⣝⠣⡨⡢⢜⢂⣩⡎⡅⡸⢵⡎⡱⢣⡅⣓⡜⣙⠏⢕⠅⡀⠀⠀⠈⠘⠻⣽⡽⡿⡯⣽⢽⣷⣷⣿⡽⣗⣿⣟⣻⣾⢷⢷⣮⢯⣷⣟⣞⣿⡿⣿⣾⢿⣿⣽⡯⣿⣻⣯⣯⣞
⠽⡳⢜⢝⣞⡷⢧⢾⢿⢽⢮⣧⡯⡕⣟⣻⢟⠫⣕⣾⣞⢻⢎⣝⢝⣳⢬⣞⢫⢿⡿⢳⢞⠝⠁⠀⠀⠀⢀⠀⠀⡌⡹⣪⢕⢊⠵⠮⣜⣑⣪⣪⣝⣣⣜⣮⡵⡥⣮⢭⢎⢹⡱⡡⡜⡌⡑⠣⠕⠪⢃⠀⠀⠀⠀⠈⠻⢯⣯⡽⣾⢯⣿⡻⣳⣯⣽⣞⣯⣟⢿⣷⣿⣿⣯⣾⡯⣻⣽⣽⡽⣽⣿⣿⣿⣷⣯⣿⣾⣻
⣟⡳⢯⡵⣧⢝⡕⠿⢝⣯⣝⢻⡷⢯⢼⣮⣗⣗⣗⣫⡷⠮⣝⢏⣽⣭⡎⢯⢵⣾⢾⡕⠈⠅⠀⠂⠀⠀⣀⡠⣘⢵⠪⢳⡎⢰⡌⡭⢦⢳⡯⢴⢗⢕⡩⢻⡮⣟⡯⢼⡔⡣⢜⡎⠇⢔⣪⡕⠰⠕⡃⢊⡀⠀⠀⠀⠑⠀⠊⣯⣿⣳⣿⣿⣟⣗⢿⣷⣟⡿⣿⡿⣿⡯⣟⣳⣟⣿⡿⣽⣾⡿⣯⣮⣻⣿⣽⣿⣯⣿
⡽⡾⡿⣺⡽⣞⡻⣪⡿⡽⢗⡺⣧⣇⣽⣜⣷⣝⡏⣎⡝⣮⣾⡝⣟⣳⢯⣟⢽⣯⣵⠠⠀⠀⠀⢔⡽⢮⡨⢸⣘⡨⡱⢼⡏⢅⢎⡎⢵⣇⣔⡳⢪⡳⣑⡳⡗⠫⢕⡵⢮⣆⡪⢍⢜⡊⢣⡌⢔⡆⢡⡑⢡⠂⢤⠀⠀⠀⠀⢈⣮⣻⣿⣽⣾⡻⣿⡿⡿⣿⣾⣿⣿⣻⡯⣷⣿⣿⢿⣿⣿⢾⡽⣿⡷⣾⣿⣿⣾⣿
⣗⡯⢵⢧⢼⢜⡻⣝⣗⢜⢮⢧⣵⡗⢵⡻⣷⣼⣯⡷⡾⢞⣗⡼⣗⣯⣝⣾⣺⡳⠎⠀⠀⠀⣤⡺⠹⠌⠉⢕⠨⠦⢜⡪⢝⡃⠸⣏⢜⢷⡹⡗⢮⣵⣼⣯⡮⣕⡫⢴⢪⡍⣟⡳⡪⢌⡚⡍⢥⣔⣎⢈⡍⢌⠔⢲⡤⠀⢀⢐⠻⣿⣻⣯⣟⣯⣞⣯⡽⣟⣾⣿⣿⣿⣟⣿⣻⣿⢿⣾⣯⡿⣻⡷⢿⣿⣟⣟⣟⣿
⣏⢽⡮⣝⣧⢵⢕⣾⣝⢞⡞⣿⣟⢵⣻⡞⡹⣿⣯⢽⣾⢫⢳⣺⡱⡻⣣⣎⡜⠁⠠⢗⣼⢽⡻⢗⡡⢀⢔⠳⢂⢜⡙⡡⠦⣲⣲⣚⡏⠜⡻⢧⢵⢺⡽⢜⣿⡞⣱⢣⡎⣅⠪⡪⢳⡺⢏⡵⠮⣆⡈⢔⠁⢣⡆⠨⠹⣻⣿⣝⡀⠈⢿⠻⣟⣿⣿⣻⢾⣷⣷⣿⣿⣿⣿⢿⣯⣻⣿⣾⣷⣾⣽⣿⣿⣽⣯⢷⣯⣾
⢿⣳⣪⣝⡿⢹⢾⣾⣝⣺⣻⢣⣞⢿⣯⡽⡽⣟⣫⣏⡽⡿⣽⣟⡮⢾⠪⣈⠁⠀⣰⣯⣟⢽⡻⠣⢎⠥⠒⠢⡑⢃⣂⡘⢾⡎⡪⢵⡮⡇⢮⣮⣕⣓⢿⣵⣽⣷⣽⡷⣗⡺⣷⡪⢜⡨⡺⠋⢲⢞⠪⡱⢊⠫⡈⣎⠐⢾⣿⣻⣾⣷⠀⠢⢹⢿⣿⡿⡽⣷⣿⣿⣿⣿⣿⣿⣿⣽⡿⣿⢿⣾⣿⢽⣿⣟⣯⡿⣿⣾
⢽⢿⢽⡷⢾⣷⣎⢾⡽⡯⢾⢿⡯⢽⡼⢽⡗⢮⣳⣯⣽⣟⣟⡯⣞⡝⢔⠈⠀⣜⣽⣝⢿⣻⡃⠘⢥⡰⠅⡸⠑⠕⡎⡬⢦⣣⣊⣖⡼⡜⣳⡻⡝⣼⣽⡝⡫⣟⣻⢮⢕⣵⣟⣮⣧⢮⢶⡪⠨⢆⢪⢕⠫⢇⠅⠣⠕⠌⣟⣷⣺⣷⡄⠀⠍⡈⣞⣿⣿⣿⣷⣽⣻⣷⣿⣿⣷⣿⣿⢿⣿⢿⣯⣿⡿⣿⣿⡿⣿⣿
⢾⣯⣺⣽⣯⡻⢫⣹⣳⡾⣗⣞⣗⣞⣪⣯⣽⡽⢧⣽⣾⣾⣳⣞⡿⢈⡃⠠⢝⡿⣾⢯⣟⡿⠄⡀⠢⠄⠱⢣⡱⠼⢇⣪⡪⢪⣚⠱⡹⢮⡸⡮⣹⣕⣝⢼⣶⣹⣷⣮⡹⡫⣽⡪⡳⡺⢑⡬⢌⠪⣌⢎⢌⠥⠂⠆⢕⠐⢻⣻⣿⢿⢽⡄⠈⢐⡊⣽⣿⣿⣿⣻⣿⢾⣿⣿⣽⣿⣟⣿⣿⣾⣽⣿⣽⣻⣿⣿⣻⣿
⡟⢻⣯⢞⢺⢿⣮⣵⣞⡳⣯⣯⣾⣿⣗⣯⣗⣽⣷⣿⣞⡽⣽⢯⡇⣸⠂⣸⣯⣻⣿⡻⣳⡎⡢⠂⡠⠬⡑⠣⢎⢮⣣⡕⢱⢵⣚⣱⡮⣾⣟⣫⢮⣞⡯⣧⡗⢪⣷⡗⣟⣫⢵⢓⣆⢎⠭⠬⢌⢥⣎⡒⢳⢘⠃⡂⠌⡁⡈⣟⣾⣿⣿⢿⡄⠁⡠⢞⢿⣾⡿⣿⣽⡽⡽⣟⣿⣟⣿⣻⣻⣟⢯⣻⣿⣻⣿⣿⣷⣿
⢽⣟⣳⣻⣗⢵⣽⣽⣫⣿⣷⣿⣽⣿⢯⡽⣿⣿⣿⢿⣻⣟⣝⢿⠈⡏⠀⢾⢿⣗⢿⣟⣷⡈⢠⡘⢆⡬⠅⢰⡇⣢⢮⣛⣒⠬⢕⡳⢺⣯⣝⣷⡵⢕⢿⡿⡻⢿⣮⣷⢿⢯⢹⢽⣕⢊⡊⣎⣑⠯⡳⢏⢐⡸⡢⡘⡑⢢⠔⣿⣿⣿⢿⣿⣿⠀⢘⡄⡾⢿⣷⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣷⣽⣿⣿
⣿⡼⣯⢟⣞⣯⣿⣾⣿⡺⢽⣽⣳⣯⣿⣻⣿⣷⣿⣽⣟⡿⣿⡿⢤⠅⣸⡾⣿⡷⣮⣿⢿⢕⡑⠊⠄⢨⢒⢨⡼⢪⢜⣍⠵⢱⡽⡷⣞⡣⡟⢳⡇⢼⢕⣺⢧⡗⡹⡷⡕⣛⣓⢞⣝⡵⡢⠼⢳⡝⡳⢭⡨⡸⡝⢣⠥⡠⢨⣺⢯⣿⣷⣾⣿⣗⠀⠇⢪⣷⣿⣿⣻⣿⣻⣷⣿⣿⣿⣿⣿⢿⣽⣿⣿⣿⣿⣿⣿⣿
⣯⣾⣻⣮⢟⡻⡿⡳⢿⣟⣳⣷⢿⢿⣾⣿⣻⣿⣯⣟⣽⣿⣿⡇⢸⡔⢿⢿⣯⣽⣿⣿⡛⠨⡃⠱⠇⢨⢍⢪⠪⢝⡭⢣⠳⡸⡫⡎⡯⢫⡪⠹⠥⣘⠩⠽⢪⡓⢼⣳⡎⢸⢾⢮⢽⣳⢿⢔⣳⣸⡖⠏⡣⢢⢐⡔⡉⠃⢂⢩⣷⡿⣳⢯⣿⣿⠀⢪⠨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣷⣿⣿⣿⣿⣿⣟⣟⣿⣿
⣫⣫⣽⣞⣷⣟⣽⢷⢷⣾⣽⣝⣞⣻⣟⡯⡿⣗⣽⢷⣞⣳⣿⡃⢹⢆⣿⣿⣾⣟⣿⣿⣖⡐⡨⢕⠰⢇⢙⠅⢄⢨⣔⢬⣣⡂⡂⡁⠀⡈⠐⠑⢪⢥⡘⡯⢮⣕⣎⡞⡐⠢⠢⢀⠂⡀⡠⠦⡓⢕⣓⡜⠜⢱⠢⢔⠃⠨⢅⢌⣿⣽⡾⣿⣿⣾⡧⢜⠄⡿⣿⣿⣿⣿⣽⣽⣻⢿⣿⣽⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣽⣿⣟⣝⡿⣿⣷⣺⣾⣿⣗⣽⣽⣽⣻⢽⣾⣽⢯⣽⡳⡽⡷⢇⠐⠎⢟⣟⣽⣿⣟⣟⡇⠈⠃⠸⠦⢆⢁⢐⢜⡩⠪⡉⠃⠂⠃⠄⢈⡐⠀⠠⠄⢈⡇⣱⣎⢞⡑⢒⠁⠀⠀⠐⠀⠂⠺⠹⡋⢹⡏⢌⢅⢂⣂⠬⢡⠤⠂⠃⣺⣿⣿⣿⣻⣿⡗⢑⡈⢿⣿⣻⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣻⣯⣿⣻⣿⣿
⣻⣟⣿⣯⣟⣿⣮⣿⢯⣻⣷⣿⣷⣮⣽⣺⢾⣽⣷⣿⣿⣿⡿⣧⠀⡊⠐⠏⠉⠉⠁⠚⠣⠣⠢⠑⡑⠇⠂⠐⠅⠀⠂⢄⡁⠁⠈⢂⡮⡑⠔⠠⠡⡂⡅⡜⣽⡣⢌⠀⡂⢈⡌⠀⡄⠄⠖⠄⢄⡀⠒⡈⢜⠒⡓⠣⠨⠢⠅⠀⣿⡿⣿⣿⢯⢿⡯⠹⠠⣽⣿⣷⣿⣿⣟⣿⣿⣿⣿⣿⣯⡿⣷⣿⣿⣿⣿⣿⢿⣽
⡯⣟⣻⣕⢾⡿⣿⣻⣻⣾⣗⢽⡿⣻⣽⣿⣿⢿⣿⣿⢿⣾⣿⣿⢢⠀⠀⠀⠀⠀⠈⠀⠀⠊⠁⠸⡣⠬⠙⢄⡰⢂⢲⠆⢊⣔⣈⡦⢪⡭⣕⡚⢗⡎⢱⡯⢗⡮⣔⣒⡪⠅⣨⢸⡳⠅⢄⠠⢵⣂⡂⠀⡑⢢⢐⡢⡅⠡⠀⡀⠈⠀⠈⠡⢸⢹⠀⢃⠠⣿⣯⣾⣿⣻⣟⣿⣿⣿⣿⣟⡿⣿⣾⣿⣻⣿⣿⣿⡿⣿
⡯⣟⣷⣿⣿⣻⢟⣻⣯⣿⣷⢾⢷⣷⣯⣳⣽⣿⡽⣻⢿⣿⢿⣯⠃⠀⠀⠀⠀⠀⠀⠀⠀⠐⠐⠘⡱⢫⣕⡨⢍⢜⣇⡹⠳⢢⣌⡱⣚⢱⡪⡺⢍⡞⢗⡷⢝⡫⡑⣕⣹⢪⣗⢵⡭⡪⠪⣑⢎⡺⣦⡬⢬⣪⡜⢲⡃⠡⠈⠀⠀⠀⠀⠀⠀⠙⠀⠔⣵⣿⣿⣿⣿⣿⣿⣿⣯⣿⣿⣿⣾⣿⢿⢿⣿⣿⣟⣟⣿⣿
⡯⣿⣝⣝⣿⣽⢿⣷⡾⣟⣿⣾⣷⣳⣷⢷⣿⢿⣷⣻⣽⣿⡿⢧⢀⠀⠀⠀⠀⠈⠀⠁⠀⠀⠨⣕⣦⡮⢯⣎⣕⢮⢅⣎⣣⡼⣾⢧⡮⢕⣺⣞⡇⡪⡑⣳⣕⣌⡰⢵⡝⢿⡳⣗⣺⣯⣵⡻⢮⡲⠎⡨⢳⢷⡖⡊⢡⢨⠊⠀⢀⠂⠀⠀⠀⠀⠀⠄⣻⣽⣿⣷⢷⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣿⣽
⣿⣻⣿⣽⡽⡷⢾⣻⣟⣿⣳⣷⣽⣯⣿⣟⣷⣟⡯⣞⣿⣟⣯⠆⠁⠀⠈⠐⡀⢄⠐⠀⠀⠀⢔⢨⢂⢜⡕⡼⡷⣼⣣⣞⢽⢜⣇⡕⠵⢇⡮⡺⢖⡅⡺⢮⢷⣝⠩⣜⣳⣻⣽⣎⢣⣯⣪⢟⡚⡣⢕⣵⡶⢣⢪⡠⠢⢢⠀⠀⠀⠁⠈⠀⠀⠄⠀⠄⠸⣿⣿⣿⣟⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣝⣻⣿⣷⢿⢷⣽
⣿⣿⣯⣻⣿⣿⣗⣾⣞⣻⢽⣷⣻⣯⣽⣯⣳⣿⣿⣾⣽⣷⣽⠄⠀⠀⠀⠀⠕⠊⠄⡀⠀⠀⠐⠱⡌⣿⠏⠺⢦⣕⡣⡕⣯⣿⢯⡭⡾⢳⢕⡸⠵⡩⢦⣕⣶⡳⢕⠌⣙⢃⡽⣣⢞⣻⢯⣵⡝⡫⡝⢜⡎⣇⡨⠗⡐⢄⡀⠄⢀⠀⠂⢔⠧⠀⠀⠈⠑⣺⣿⣿⡿⣿⣯⣟⣿⣿⣿⣽⣿⢷⣿⣿⣾⡿⣯⢽⣿⣿
⢷⡿⣿⣝⣷⣿⣾⣿⣯⡿⣷⣝⣾⣿⣾⡿⣝⣾⣯⣿⣯⢿⣳⠬⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠘⡣⢪⢬⣕⡝⢃⡺⣳⡻⠽⢶⡝⠵⣳⢣⡦⢎⠳⡎⣕⡿⢳⡽⢒⡪⡞⣸⡪⣢⡳⣽⢳⢷⣻⡇⡲⢇⢱⢊⡠⢄⠌⠡⠄⠀⠨⠀⡂⠈⠀⠈⠠⠂⢿⢿⡺⣿⡿⣺⣿⣿⣿⣯⢿⣯⣽⣿⣿⡿⣻⣿⣾⣿⣾
⣯⣿⣻⣿⣯⣟⣻⣳⣻⣿⣿⣯⣷⡿⡿⣻⢿⣿⡿⣾⡿⣿⣿⣪⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠄⢁⠱⢒⡸⢣⢵⡵⡳⡮⢿⣝⢺⡷⣻⡮⡣⠽⢮⡙⢿⣳⠅⡨⠢⡑⢣⣕⡎⣣⠸⢎⣞⡫⣝⡑⢳⣕⡪⡘⢂⡨⠄⠀⠀⠀⠀⠀⠀⠀⠀⠁⢀⢰⣝⣻⣿⣿⣿⣿⣿⣿⣟⣽⡽⣿⣽⣿⡳⣯⣯⣿⣞⣿⣿
⡯⣻⣯⣯⣻⡻⣿⡿⣯⡽⡻⣟⡯⣺⣷⣗⣺⣿⣿⣿⣞⣿⢿⣽⡢⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠨⡃⡈⠫⠨⢎⣗⡡⣕⡪⣝⡸⢪⢳⠳⠌⡈⢂⠱⡊⢌⠢⠆⢊⠕⡨⡟⡕⢺⢯⢇⢸⡌⣜⣫⡕⢙⡱⢓⠈⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⡂⣞⣿⣿⣿⢿⣿⢿⣽⣻⣗⣗⡿⣻⣿⣿⡿⣿⣷⣿⣿⡿⣿
⣽⣿⣺⢿⣿⣿⣿⣟⡿⣾⡿⣷⣽⣿⣿⣟⣯⣮⣿⣗⣟⣯⣟⣞⡿⣅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠘⡕⡄⡉⢁⠸⣵⢪⡜⡣⡚⢩⢽⠨⠄⠀⠠⢐⢈⠂⠀⠀⠀⡑⡲⣚⣓⢽⡪⢜⠼⢣⢕⣃⡂⠡⡌⡑⡂⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢰⡽⣻⣮⢽⡿⣿⣿⡿⣻⣿⣻⢿⣿⣿⣿⡯⣻⣿⣿⣺⣿⣽
⣽⣿⣿⣯⣷⣿⢯⣽⣿⣿⣯⣾⣿⣽⣽⣿⣿⣷⣿⣽⣿⡽⣿⢷⣯⣷⡧⠄⠀⠀⠀⠀⠀⠀⠀⠠⠅⢣⣘⡡⠀⠂⠜⡪⢸⡜⢑⣲⣕⣙⢣⣢⢎⡨⣕⡠⢔⡪⠎⠅⢑⣪⡞⢗⣜⡩⢇⠧⢢⢌⢈⢑⢱⢆⠅⠢⠪⠀⠀⠀⠀⠀⠀⠀⠀⢀⣰⡽⢿⣾⢽⣯⣟⡿⣿⡿⣽⣿⣿⡿⣿⣿⡷⣿⡾⣗⣽⣿⣿⣿
⣾⡿⢾⣿⣟⣳⣟⣟⣾⣯⡿⣾⣿⡿⣿⢾⣿⣷⣾⣯⣿⣾⣾⣟⢟⡯⣷⢿⣄⠀⠀⠀⠀⡠⣄⣺⡅⢠⠆⡃⡢⢆⢂⡎⣙⣙⣨⡞⢝⣳⡮⡒⠮⡳⣕⣣⡪⢕⢔⢒⡪⢜⣹⢝⢲⣮⡦⡘⢇⠌⡃⡜⢣⠡⠲⢊⢀⠀⠀⠀⠀⠀⠀⠀⠀⢾⣾⡷⡯⣳⡯⡽⣺⣿⣿⢿⣽⣽⣟⣿⣯⣿⣿⣿⡻⣷⣝⣽⡽⣟
⣿⣷⡾⣿⣳⣷⣿⣽⣻⣯⣾⢿⣟⡻⣻⣿⡷⣿⣯⢽⣟⣿⣿⣾⣻⣻⡺⡯⡟⢮⠂⠠⡸⡫⣕⣫⢌⠡⠠⠣⡜⠨⢇⡐⣊⢅⢧⡽⢓⣌⢝⢝⢆⡮⠇⢁⣠⡓⡪⡑⢓⡣⢋⢨⢌⢧⢎⢭⢅⢆⠪⢣⢆⠠⢂⡂⡪⢢⢄⢀⠢⠄⠀⡠⢼⣾⣟⡮⣮⣽⣳⣷⣿⣽⣽⣾⣽⣿⡿⣿⢿⢿⣽⣿⣗⣻⣟⡿⡿⢿
⣿⣯⢿⣽⡿⣞⢿⣾⣿⣟⡿⣷⡾⢽⣽⣯⢽⣟⣟⢿⡿⡯⢽⣯⣿⡳⣿⣟⣟⣳⡆⠂⣝⣽⡖⢩⡣⢌⠜⠪⠡⡎⢹⢣⡠⡥⠌⢪⠵⢑⡪⢇⡚⢳⣝⡏⡖⢍⢇⢞⢢⠞⡓⡙⠹⡸⣂⡑⢃⡡⢇⠸⡌⠃⡠⢅⢨⣃⢅⡗⠣⡐⡰⢖⡝⡺⢷⣻⣫⣽⢵⣯⣺⣻⢿⣿⣯⣿⣿⣿⣿⢾⣷⣿⡯⣻⣻⣽⣯⣟
⣻⢿⣟⣻⢿⡿⡯⡻⡻⣿⡮⡷⣝⣿⣟⡻⣟⡻⣽⣿⣿⡯⣵⢽⣞⢾⡿⢾⣧⣽⢵⠄⢩⡹⢊⢎⠳⡄⠱⢢⠓⡖⢓⣑⢣⢌⠢⢍⠐⠉⠂⠑⠠⢂⡈⠬⠊⡰⠁⡑⢊⡱⢊⡱⠅⢄⣁⠰⢆⡑⢬⣊⣌⠰⢀⠠⠅⡡⢄⢙⠀⠂⣊⢺⠷⡸⡎⡯⣸⢺⡿⢿⢯⣯⣻⢿⣷⣟⣿⡯⣿⡿⣯⣿⡿⣿⢷⢿⣿⣯
⣮⡿⣯⣿⣺⣾⢿⡿⣻⣗⡿⣿⢿⣽⢷⣿⣽⣷⡿⣷⢿⣷⡿⣯⣾⢽⢷⡯⣽⡷⡏⣔⠐⡎⠝⢈⡪⠑⠡⡨⠕⡣⡑⠧⡰⠥⡈⠀⢌⡀⠄⡈⠰⠨⢡⡔⡨⢬⢅⡨⠅⠨⡐⢈⠤⢊⢢⡔⢙⢀⡅⡥⢔⡁⠔⠄⠢⠕⠡⢌⡁⣐⢆⢄⢳⡗⢿⣯⢜⣳⣯⣗⢾⣿⣯⣿⢷⣺⣿⣟⣷⣿⣟⢿⣿⣯⣿⣿⣻⣯
⣺⣯⣿⣯⡽⣗⣽⣾⣟⣾⣟⣾⣾⣽⣽⢽⣷⢿⢾⢿⣽⣻⣗⢿⣿⡾⢧⡕⡎⠭⢮⣪⡊⠕⢊⡡⣊⠨⠂⡨⢋⠥⢘⣊⢅⢐⡊⠓⢣⠱⢑⡱⣁⡨⠼⣏⠦⢘⣇⡣⡜⠊⡃⡕⠒⢣⠜⡢⡐⢢⢑⡘⠡⠈⡀⠪⡂⠀⡐⢈⡊⡑⠨⠪⢕⡩⠵⡻⡾⣟⡳⣗⣯⣿⣾⣿⣟⣿⣿⡯⡯⣳⡿⣻⣟⣿⢯⣷⣿⣷
⣯⣿⣿⡳⣻⣿⣿⣿⣿⣿⣽⣟⣯⣟⣷⢿⣾⣻⣮⢵⢽⡷⣿⣽⣾⣾⡯⣕⣕⡝⡫⡳⠪⠌⢌⢀⠐⠡⡠⡐⠈⡓⠎⡕⡥⠎⢓⢵⢘⡣⠪⢈⠱⠠⠨⠊⠐⠈⠀⠑⡆⣒⠓⡘⡑⠸⠜⠢⠬⢇⡢⠄⡈⠂⢀⡪⠅⢈⡈⠀⠈⠅⠐⠣⢝⡝⢸⡳⢯⣻⣿⣟⣮⣾⣻⣳⣻⢿⣟⣾⣽⡽⡿⢽⣽⡷⣷⢿⣿⢯
⣷⣿⣿⣻⣽⡿⣻⣿⣽⣳⡽⢿⣟⡯⣳⢽⢾⣷⣻⣽⣺⣿⣯⡯⣷⣵⣜⣞⣜⢽⢏⡓⠬⢂⢄⠨⠒⠠⡐⢂⠠⠌⡪⡌⡃⡨⠎⡡⢅⢑⡪⠢⢢⢆⣐⣆⢔⡂⠁⢡⠪⡣⢆⡩⢬⢪⡑⠎⡃⠑⠢⠈⠐⡈⠁⠀⠄⠢⠀⠔⠀⠠⡜⠙⣉⡝⢞⡿⢝⡯⣻⣾⣯⢽⢿⡿⣯⡺⣽⣿⡿⣷⣽⣷⣿⣿⢷⡿⣽⣗
⣿⣟⣟⣗⣿⣿⣿⡵⣗⡿⣿⣾⣽⣯⣾⢿⣿⣗⡮⣳⣿⢷⣿⡿⣟⣽⣏⣵⡝⢳⡦⢾⡵⢂⠔⡅⠩⠕⢕⡐⡂⠀⠬⢃⡁⢆⡇⡱⢪⢧⣎⡽⢕⣺⡺⢵⡖⡸⡛⡧⣸⢦⠬⢢⡪⣕⠀⡨⠰⠊⢌⡀⢐⢂⠀⠢⡑⢂⢁⠐⢀⡂⠅⣝⡫⣝⣎⣧⣯⡵⣟⣻⡽⣻⣿⣿⣾⢯⣿⣽⣻⣟⣟⣺⡯⣿⢾⣯⣷⣿
⣽⢾⣿⡷⡮⣻⣻⣽⣿⣿⣗⣿⣯⢾⣻⣿⣯⡿⣳⡮⣿⡿⣿⣿⡮⣻⡹⣻⡯⢷⣨⡷⡏⢕⢑⠣⡘⡢⠪⠨⡕⠂⠄⠀⠁⡘⡆⠰⢎⡘⡒⣪⢆⡎⠵⢪⣼⣜⡲⢇⢜⡨⢹⢆⡢⠌⢈⠁⡀⠨⢂⢀⡨⠠⠁⢁⠂⠠⡠⢂⡆⢰⡈⢜⢗⢲⠲⢷⡼⢿⢯⣽⡮⢽⣿⡽⣿⣗⢯⣾⣿⣯⢯⣷⣿⣝⡿⡯⣽⡳
⡿⢗⣟⡿⣞⣮⣷⣻⣿⣿⣟⣯⣻⢷⣷⣿⣟⡷⢿⣗⢽⣷⣻⣿⣿⢿⣪⣽⣗⢽⡷⠷⡏⡕⣕⠩⣆⠠⢄⠄⠑⠨⡠⢂⠠⠁⠑⠊⠡⢸⡰⠣⠡⡕⢂⣑⣊⢕⡲⢃⠪⠄⠍⠩⠪⠀⠀⢀⠈⢄⣂⠌⠁⠀⠁⠀⡂⠅⡊⢡⠲⣒⣞⠵⢎⢜⢵⡲⣝⣪⣯⢷⣾⣞⣯⢽⡷⣻⣻⡵⢯⣿⢽⣿⣿⢿⣿⡯⣿⣝
⢾⢮⣽⣿⣗⣿⣳⣟⢾⣿⡽⣾⣿⡽⢿⢿⣻⡷⣿⣽⡿⡽⣽⣞⣾⣟⣻⣯⣽⡫⢝⢮⢕⣑⣱⢆⢪⠀⣞⢁⡆⢕⠡⡌⠂⠠⢄⠄⢀⠐⠄⠔⠂⠂⡂⠐⠅⠈⠌⢀⠠⠅⠀⠀⠄⢄⢐⠜⠑⠢⡪⢀⣼⠀⠁⠠⠁⡂⢢⡢⠦⢕⢪⡝⣫⡾⣓⡕⣞⢷⣻⡿⡿⣻⣷⣾⣻⣿⢿⣾⡯⡿⣝⣽⣿⢽⣽⣗⣮⣯
⣞⣿⣽⢯⣻⡯⣻⣿⣿⣗⣻⣯⣗⢾⡯⣯⣿⣾⣯⣟⡷⣿⣾⣺⡯⣵⡯⢷⣿⢷⣝⣽⢕⢽⢮⢌⠡⠁⢕⢯⡜⡑⠪⢐⠄⣈⠁⠂⢀⠀⠈⠄⠈⠐⠐⠄⠀⠀⠁⠀⠀⠀⡀⡁⢀⡑⠠⣀⢲⡆⠙⣳⣟⠁⠀⢊⡓⡢⠢⠳⡪⡹⡵⢞⣛⡵⢫⣼⡽⣮⢿⢯⣞⣕⣯⢯⢿⡾⣽⣷⣗⢷⣿⢾⣻⣟⣿⣷⢿⣯
⣿⣯⣿⣻⢟⣷⣟⣝⢿⡯⣽⣾⣯⣯⣮⣾⣻⢿⣽⣷⢽⡿⡷⣷⣽⣿⣗⣽⡹⡽⣝⣽⣗⣱⢽⡕⠀⢀⠐⢇⣿⣖⠣⡃⢄⡐⢂⡊⠐⢑⠢⠀⠠⡀⠀⠀⢀⠐⠂⠀⠐⠡⠄⠈⠠⠐⠱⠇⢌⢑⣿⣇⡈⠠⠀⠘⣃⢌⡕⣔⡱⡸⣍⢯⡮⢽⡵⣸⡳⣾⢮⢷⣗⣗⣻⣞⣻⣗⣗⣿⣾⣿⣽⣿⣿⢿⡻⢷⣕⡽
⡷⡾⣿⣗⣻⡾⣽⣽⡿⢿⣻⢿⣝⣿⣟⣾⡳⢽⣻⣾⡯⡿⣿⡿⢯⣝⣽⡮⣳⣞⢿⢯⡻⡮⢷⠄⡀⠀⠀⠀⢚⢻⣿⣗⣝⡔⡅⢠⠆⡐⠢⢂⡑⠅⢌⡑⢐⠠⠂⢈⢈⡈⠅⠂⠡⢪⢘⢮⣞⡳⠏⠁⠀⠀⠀⠀⠈⠁⠡⡍⣦⣆⢫⢯⣶⢼⡯⢕⣿⡿⣟⣫⡿⣿⣷⣝⡻⣯⡾⣷⡮⣿⡽⣯⣯⢷⣾⣝⣟⡷
⡽⣿⣗⢯⣟⣞⣽⡾⣮⡯⡾⢿⢽⣻⣻⢯⣽⡿⣟⡯⣺⣿⢽⢾⣗⡽⣻⣝⣾⣞⡻⠼⢋⠁⠀⠁⠀⠀⠀⠀⠀⠀⠈⠫⣟⣕⢾⣶⣪⣔⣌⠄⠰⢱⢣⡕⡂⠠⠐⡐⡈⠌⢌⢌⢥⣽⡽⢿⠹⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠈⠘⢚⣮⣣⣾⡽⣵⢾⢾⣻⣞⣗⡳⣻⣿⣳⣳⢿⣟⣯⡻⢿⢿⡫⣻⡳⢻⣯
⡺⢷⣯⣻⣻⣺⣯⣝⡻⣳⣽⡿⣾⡯⣳⣽⣿⣷⢿⣾⣻⣯⣾⢿⡯⠿⠚⠓⢁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⢻⢷⡷⣫⣿⣳⣿⣯⣻⣿⣝⡳⣻⣽⢞⣕⡺⠽⠙⠌⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠉⠙⠫⢯⣯⢷⣟⣝⡳⣻⡯⡎⣺⣳⡿⢻⣿⡯⣻⢿⣟⡪⢽⢿
⣻⢾⣾⣳⢿⡻⣞⣽⡮⣽⣟⣿⣟⡯⣯⡿⣟⡽⣯⡿⠞⠙⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢯⣿⣽⣯⢷⡽⣳⣺⣇⢼⡟⠃⠄⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠈⡉⠛⡻⢽⢕⣻⢿⢿⣾⢿⡫⡿⣽⢫⣽⢷⣿⣽⣿
⢯⣗⢻⣺⣻⡯⣕⣺⣻⡯⢽⣯⣫⢯⡛⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡯⡟⣺⣮⣯⣗⢷⡯⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠩⠓⢫⢟⢾⣷⣇⢾⣺⣿⡿⢿⣽⢯
⣏⡻⢯⣽⣞⡽⣯⣟⡮⢿⠫⠉⠀⠂⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠁⠅⣜⣫⢯⣏⢝⡽⠂⠀⠠⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⡀⠀⠀⠀⠀⠀⠌⠘⠮⣵⡗⡯⣮⡺⢧
⢝⢷⢯⣫⣟⣻⠽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣺⢧⢺⣗⣪⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠌⢀⠄⠀⠡⠀⠀⠀⠀⠀⠀⠀⢀⠀⡀⠀⠀⠀⡀⠀⠀⠀⠀⢁⠀⠉⠮⢿⣗
⣝⢿⣏⢏⠩⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠑⡛⠓⠊⢓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠊⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⢆⢰⡎⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠈⠀⠀⠀⠀⡀⠂⠈⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠐⠁⠀⠀⠀⢀⠂⠀⠀⠂⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠨⠱⠮⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠌⠀⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠁⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠠⠐⠀⠀⠀⠂⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠠⠀⠀⠀⡀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠂⠀⠈
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⢀⠀⠀⠀⠀⠄⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠁⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠂⠀⠀⠀⠀⠀⠀

Source

<?php
/*
     ______              __ __ __          _____                                  
    |   __ \.----.---.-.|__|  |  |.-----. |     \.----.-----.---.-.--------.-----*
    |   __ <|   _|  _  ||  |  |  ||  -__| |  --  |   _|  -__|  _  |        |__ --|
    |______/|__| |___._||__|__|__||_____| |_____/|__| |_____|___._|__|__|__|_____|

    Convert images to unicode braille with error diffusion.

    This code is a PHP script that converts an image to unicode braille using error diffusion. The
    script starts by setting up the PHP environment, and then checks if the required parameters
    for the image name and width are provided. It then reads the image file, scales it to the
    specified width, and converts it to grayscale and increases the contrast. The script then
    uses the Floyd-Steinberg error diffusion algorithm to process the image. Finally, the script
    maps the image pixels to the appropriate unicode braille characters and outputs the result.

    Note: braille is 4x2 pixels, but it's processed as 5x3 due to the whitespace between characters.


    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⢿⣿⣿⣾⣿⣿⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⢯⣿⣿⣿⡿⣿⣿⣿⣿⣽⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣽⡿⣿⣿⣿⣿⣿⣿⣿⣷⣷⣽⣿⣿⣽⣿⣿⣿⣿⣿⣿⣞⣿⣿⣿⣿⣿⣽⣿⡿⣿⣿
    ⢿⣿⣿⡿⣟⣿⣿⣿⣻⣿⣿⣿⣟⣿⣿⣟⣿⣿⣿⣿⡿⣾⣿⣯⣿⡿⣿⣿⣿⣗⣟⢽⣿⣽⣷⣟⣿⣿⣾⣿⣿⣿⣿⣿⣟⣽⣷⣷⣻⣿⣿⣻⣿⣯⣿⣿⣿⣯⢿⣿⣿⣿⢿⢯⣿⣿⣿⣿⡯⡿⡷⣽⣿⣿⡿⣿⣿⣿⣿⣷
    ⣿⢿⣽⣯⣻⣟⣿⡾⡿⡿⣿⣿⣯⣿⣿⣿⣿⣿⡮⢾⣾⣯⣿⣿⣿⣯⣿⣿⣟⣷⡿⣿⣿⣳⣿⢿⣿⣿⣿⢿⢿⣟⣿⣿⣿⣟⢿⣿⣿⣷⢿⣷⣿⣿⣾⣿⢽⡿⢿⣿⣿⣿⡿⣟⡿⣿⣿⣿⣟⣿⡿⣿⣿⣗⣿⣻⣿⣿⣯⣿
    ⣯⣗⣿⣯⣷⣿⢿⣟⣟⣻⣿⢿⣿⣷⡿⢯⣽⣝⣿⡿⣾⣽⣳⡯⣟⣿⣽⡽⣿⣿⣷⣞⣞⣿⢯⣟⣿⣟⣟⣽⣻⣝⢿⣾⣾⡿⣟⣿⣿⣿⣿⣟⣺⡾⡽⣿⣷⣿⣞⣯⢿⣿⢿⣿⣯⣿⣿⣾⣿⣿⣿⣾⣷⡿⣿⣞⢷⡿⣻⣟
    ⢿⣿⣷⡽⣿⡯⢷⣻⡾⢿⢯⢿⣷⡿⣽⣿⣿⣿⢿⣷⡻⡷⣽⢷⣾⣯⢾⣿⣿⢿⢿⣻⣯⣽⣯⣿⣽⣿⣟⣞⣿⣟⣿⣳⡷⣯⣯⣽⢯⣿⣿⣯⣾⣺⡽⣻⣿⣷⡯⣾⣟⣿⣻⣺⢿⣷⢯⢿⣻⣿⢿⢿⣯⣻⣿⡿⣝⣗⢿⣯
    ⢷⢯⣿⢟⡿⣿⣫⣯⣻⡷⣻⣟⡳⢿⡾⢽⣷⡮⣺⡿⡷⣞⢯⡮⣷⢷⣝⡿⣽⣟⣾⡻⢮⣽⣽⣽⣗⣷⣽⣟⣿⣷⡿⣟⣻⣗⢯⣿⣵⣺⣳⣿⣟⣿⣺⡯⣯⡿⣝⣯⡯⣯⣻⣝⢿⣯⡷⡽⢿⢿⣽⣾⡾⢝⣿⣷⣟⣟⡮⣟
    ⢾⣟⣿⢿⣿⡽⢷⣻⣝⡾⢽⣮⢞⣺⢮⣻⢿⢾⣗⢿⣿⣝⡻⢿⣻⣮⣵⢳⢯⣾⣿⣟⣷⣻⢟⡫⡯⣯⣳⡿⡾⢿⣷⣞⢿⣻⣻⡽⢿⣯⣿⢗⣳⣞⣻⣯⣻⣿⣿⣿⡮⡽⣾⡿⢽⣿⢷⡿⢽⣞⣽⢷⣞⣿⣻⣽⣷⣟⣻⢯
    ⡽⡿⡽⣻⣳⣾⣿⣯⣷⣾⣗⣺⡿⣳⡷⣯⡾⡽⡻⣗⣮⣞⡾⣻⣟⣽⡺⣯⣯⣺⣷⡺⢾⡯⣷⡳⣽⢾⣟⢿⣯⣝⢿⢧⣞⣻⣷⡷⣮⣽⣷⣻⣿⣯⣳⡷⢯⣳⡻⣻⣵⡧⢽⢮⣺⣿⡯⣯⣻⣯⣺⣺⣽⣵⣽⣿⣽⣯⣫⡵
    ⡻⢿⢮⣯⣧⡽⣝⣯⡷⡺⣺⢕⣻⢞⣷⡎⢷⢾⣽⣮⣟⢮⡾⣟⢳⣼⣿⢯⡽⣯⢾⣎⣟⡻⣽⣞⡿⢪⣳⣻⣽⣗⣹⣫⡽⢿⡺⢯⣮⢷⣗⣯⣿⣾⢽⢿⣗⣷⡯⢽⡷⣻⡮⡳⣻⣧⣝⢻⣻⡟⣳⡽⢪⣿⡺⣗⣗⣯⡳⣟
    ⡿⡯⡯⣽⢇⡟⣫⣽⣫⣷⣗⣗⣻⡯⢻⡳⡮⣗⡗⢹⢗⣝⣺⢽⢿⣯⣞⣾⣽⣟⣵⣧⡳⣾⣳⢿⢮⢽⣷⣿⡷⢯⡝⢳⣞⡮⣳⡾⣽⡷⡷⢿⡯⢮⡻⣻⣝⢺⡞⡳⢽⣞⢱⢽⡞⢯⣮⣾⣾⣯⣏⣗⢮⡽⢻⢮⡳⢞⣲⣳
    ⣎⡪⢽⣳⢼⣳⢾⡗⣯⢗⢽⣫⡻⣝⡛⢮⣎⣻⣻⣷⣞⡽⡽⣻⢷⢧⣏⡽⢟⡻⡮⣱⢞⡣⣍⣾⣼⡟⢗⣻⡯⣏⢎⣏⢷⢾⡗⢽⡸⠳⣝⢸⢽⡽⢞⡽⢺⠯⣝⣻⡳⣺⢽⣝⢾⣮⡬⡵⢷⣻⢯⢾⣣⣇⣝⣗⡻⡗⡳⣮
    ⢇⢙⢫⣞⢗⣭⢵⣼⣵⡗⡹⢏⢭⢕⡾⡓⢮⡷⡽⢺⣏⣭⢾⢭⢝⣗⢷⢯⣺⢷⡫⢸⣜⡱⢫⢯⣙⡳⢌⡱⢗⢿⢮⡳⡵⣽⣓⣻⣽⣿⢿⡗⣯⣕⢱⢗⡮⢾⡗⡳⣝⣕⣸⡧⢸⡪⣲⡗⡸⣫⡯⢸⣻⡳⣓⢖⣖⢎⣜⣓
    ⡾⡮⢚⣝⡧⣵⣧⡪⡺⢎⢢⢭⡭⣝⣜⣮⣿⠯⢲⡝⡛⡓⢽⡝⢣⣜⠷⢮⢏⢮⠵⢮⡹⢜⡶⡆⢮⣻⣓⢽⡇⣾⡎⢹⣜⢾⢗⣚⡓⢽⣗⡯⠵⡺⣗⠫⡱⣕⡝⡲⢭⣕⡱⠸⣮⢮⢏⢱⣚⡙⡮⣯⡕⣎⡿⣻⡕⣳⡺⢽
    ⢿⢗⡨⢷⡝⡿⢭⢎⡱⢏⣻⡯⢱⡹⢕⢾⢗⣱⡭⢼⡮⡵⢳⣑⢲⡿⢗⢸⣗⡸⣵⣎⡕⢼⡏⢎⡮⢖⢧⢞⣳⡔⣚⡼⢯⣟⡝⢧⡷⣓⡽⢹⣏⠳⢱⢷⡪⢳⡮⢯⢎⢳⢜⢖⣲⡺⣍⣙⡝⠮⣵⢾⡮⠯⢽⡣⠮⠵⠽⢯
    ⡿⣕⣝⡟⡫⣎⣎⡍⢎⡺⠝⡢⢷⡗⢜⠕⢓⢯⡕⢓⢚⡯⠵⣪⡗⣓⣒⡭⡣⡕⢯⡗⢗⡺⢮⡞⢝⠮⢼⢕⢢⣜⣺⡝⣫⢵⣕⣍⢞⡯⢳⠮⡱⢶⣝⣫⡗⣪⢬⡼⠹⢞⡥⠪⢫⡏⣻⢑⢞⣝⡝⢜⡵⠯⢕⣚⣞⡜⢜⢔
    ⣚⢮⣚⣫⢔⣮⢳⢎⠹⣪⡽⢲⣗⡲⠹⣳⢯⢜⡺⢿⢗⣜⢱⢵⣮⢿⢲⠤⢽⢗⢕⢇⠧⢕⢪⠭⡽⠷⠭⣸⡕⡪⢷⡪⣍⣪⣫⡖⢻⢞⡧⢱⡚⡫⠎⠵⢒⢯⡩⢑⣸⠕⢹⢸⢽⢪⣝⡟⢾⢳⡯⡆⡪⠪⢝⢺⠽⡞⡣⢬
    ⢎⣹⣃⣝⢇⣎⢍⡣⣎⣎⣎⡓⠧⢕⢗⡩⢯⢝⣳⡪⡱⠼⢪⡗⡪⡕⡺⣚⡫⢎⡍⢹⡨⢪⡪⡲⠭⡸⢣⠫⣯⠕⢫⠮⢳⡎⣕⢣⢾⢯⡎⡧⢜⣂⢕⠎⢳⡪⢕⢸⢞⣣⡎⣙⢌⡹⠷⢢⡞⢒⣞⣘⡹⢯⣕⠝⣚⣕⣚⡺
    ⣣⡞⡩⡩⢌⢳⣊⢜⡸⣓⣎⡦⡓⠽⢏⡣⢔⢩⠭⣆⣂⡱⡕⢺⡑⢆⠵⠸⢫⡲⣎⠎⢲⢃⣘⡢⢪⡘⢮⢌⡹⣗⢕⡺⢇⢌⣕⡪⠭⢝⡓⡱⢇⢳⢎⢬⠪⢢⢗⠣⡐⢒⡑⠮⢵⡧⢍⣒⡅⢜⢳⡕⣅⠤⡙⢹⢭⡕⢏⡦
    ⢎⢎⡮⢗⡌⠕⢢⡝⠭⢕⠦⢁⠬⡕⠢⡪⢮⡔⢏⡇⢕⢐⢬⡩⣃⡪⢕⠮⢒⡪⢵⡣⢜⡣⡘⠥⢕⡪⠵⡻⢫⢅⣍⠼⡮⡱⡆⠖⢑⢖⣱⢗⣈⡙⠣⠹⢭⢫⠰⡖⢥⡇⠲⢇⡒⢸⢎⢕⡣⠜⢭⡵⡣⡗⢣⡬⠵⠸⢹⡜
    ⠮⡐⢌⠽⢓⢸⣇⡐⢌⡌⢇⢌⠝⡙⠢⡎⢑⡪⠺⡣⢕⠔⡅⢨⠽⢜⠮⡌⢬⢜⢼⢗⠬⡢⠸⡒⣢⢎⣃⡨⠱⢎⢍⡢⠇⢌⢱⡣⣨⡱⡌⡌⡸⢝⡇⠪⢊⠪⠇⡈⢜⡕⢒⢃⠎⠪⠴⡹⡗⢕⠲⢌⡅⡘⢡⡊⢜⢎⡱⣰
    ⠌⡱⠔⠣⠃⡈⡅⡑⡠⢜⢢⣌⠣⠬⣌⢡⠔⡪⢑⡔⢪⠮⢭⠕⠇⡃⡘⠡⠌⢈⠅⡪⢱⢹⠕⠌⢭⠒⡥⢅⡌⡜⡧⡱⢇⡒⠵⡬⢂⢒⡰⢆⣢⢆⢰⡎⠁⡅⡢⢇⡐⡧⠨⡐⡪⡂⠐⡣⢕⡎⡸⠅⠅⠪⠌⠕⢲⢎⡢⡢
    ⢅⡊⢹⠕⢢⠲⣕⣂⠡⠆⠱⠃⡒⣓⢢⡩⠎⠡⡅⠡⠆⡕⡒⡎⡰⡐⠎⠱⠥⡰⠔⢅⡦⡢⢔⠁⡸⡇⠑⢪⢎⡂⡂⡚⡳⢊⢥⠞⠨⡅⢘⣊⣙⡑⠎⠢⡐⢎⢨⡄⢎⡕⠱⢢⠆⡑⡆⡂⠳⡆⠢⡰⡸⠮⢃⢎⢰⢎⣈⣘
    ⠒⠡⠉⡸⠣⡘⡌⢰⡱⠬⡆⡸⡧⡂⠢⡬⠒⡒⡌⡢⠆⠣⠨⢥⠂⡢⠢⡕⡨⠸⠧⣑⡎⡱⡣⠌⢑⢂⢢⣔⢢⡎⢕⠪⣇⡄⡖⠆⡈⡰⢏⢊⡣⡈⢑⡃⡒⡀⠄⡸⠥⠌⡡⠔⡃⡕⡬⡐⡁⢑⢔⡳⢌⡘⣂⡨⡇⡅⢄⡪
    ⢕⡠⢊⡈⢌⢂⣑⠊⡐⡑⢈⠃⢐⡑⢡⡘⢰⠒⢢⠨⠡⠰⢂⠑⢎⠡⡪⠅⢁⡨⡑⡪⣄⡘⢪⠃⢐⡑⢉⠅⢐⡊⡀⡘⢀⢌⠒⢢⡡⠡⢪⢇⡈⠕⠢⡔⡅⡘⡑⢅⡂⡢⢜⢅⢌⡘⢅⡸⢢⣀⠜⡉⠡⠨⢌⡀⡐⠢⠃⢰
    ⡊⢣⡱⠕⠊⢘⠡⠢⠠⡐⢕⢣⠜⢕⠬⠇⠈⠡⢈⠘⢨⠢⠌⠢⠄⢢⡒⠎⢀⢘⢁⠌⡡⢔⢨⡊⡠⡃⡐⠌⡂⠂⢊⠐⠪⠒⢑⡪⢔⢆⠁⠸⢑⠊⠪⢐⠔⠁⠢⡑⢊⢅⡅⢂⠔⠢⡊⢃⢢⢢⡀⠅⡈⢨⢎⠨⠃⡠⢒⡰
    ⠆⠄⠜⡢⢣⡄⢌⡂⢰⠌⢨⠬⠊⠐⢐⢂⢈⢢⠎⢐⡠⢕⡑⢑⠢⡄⠬⢑⠩⠨⢈⡈⠨⢄⠜⡀⢌⠪⢢⠅⠂⡈⠂⢑⠑⢨⠂⠠⢊⡰⡅⠄⡐⢂⠨⠅⠀⠘⢈⠱⢑⠂⠡⠔⡕⡪⢅⡒⢀⠥⡂⢌⠁⠐⠢⠡⢌⠄⡑⡑
    ⢘⡑⡂⠎⡊⠘⡐⠜⠡⡱⠅⡈⠄⢆⢊⠀⢪⡱⠄⢂⠌⠀⡐⢨⢐⠢⠨⠅⠀⡁⡂⢌⠰⠅⢈⠪⠑⢂⡠⡊⠢⠄⠄⢅⠂⠑⠅⡨⠂⠑⢎⡠⠁⠢⠔⠂⡌⠌⠐⠠⠎⠰⠂⠘⠌⡈⠑⠌⡈⢌⡀⠔⠅⠨⡂⠨⡘⠨⡂⢐
    ⢐⠊⡱⠅⡀⠨⠠⠔⠢⠔⠊⢀⠑⡁⠡⠨⡐⠁⠔⠨⠄⢄⢌⠁⠠⡑⢃⠨⠅⡐⠢⠠⠀⠠⠣⡂⠕⠡⠅⠡⡐⠄⠂⢔⠠⢜⢂⡰⠢⡐⠂⠊⡁⢄⢌⠂⢑⡐⢂⢆⠅⠨⠡⠠⡀⡂⡑⠔⠁⠢⢈⠔⠁⠄⠅⢀⠄⢊⡁⠂
    ⠐⠑⢘⡂⡁⢐⠠⠐⡀⠈⢂⢁⠄⠐⢂⠅⠈⠐⠠⢐⠃⢁⠌⠂⡂⠑⠁⠨⠐⡠⠈⠁⠐⡐⠁⠠⡂⠄⠁⠐⡐⠊⡀⢈⢄⠌⠑⠊⢑⢈⠐⡀⢔⠔⠈⢃⠐⢁⡌⠂⠨⠀⡀⠘⠠⠂⡘⡀⠠⠠⠘⡊⢐⡈⠑⠂⠌⡂⢁⠪
    ⠠⠁⡈⠀⠂⡐⢄⡂⠨⠑⠄⢀⠠⢂⠀⢈⡂⠠⠢⢅⠀⢂⠠⢂⠐⠀⠂⠀⠨⠈⠅⠌⠐⢀⠐⠠⠄⠌⠂⠁⠡⠕⠁⠡⠡⠈⢁⠡⡂⡐⠐⠀⠂⠨⢂⢄⠠⢀⢐⠁⡂⠁⠠⠂⠄⠂⠁⡪⠀⠄⢈⠂⠀⢀⠨⠨⡁⡐⢁⠄
    ⡀⠂⠀⡀⠂⠐⠨⠡⡀⡀⠐⢈⠂⠡⠀⠀⠠⠂⠀⠀⠄⠡⡐⠌⠢⠁⠀⠀⠡⡐⠢⡐⠀⠐⠁⢂⠠⠂⠄⠠⠅⠀⢌⠑⠄⠠⠌⠀⠀⠀⠈⠅⢂⠠⢂⠡⡐⠅⠈⡑⠡⠐⠁⠈⠈⠀⢌⠨⡁⠀⠠⡂⠕⠡⡀⡂⢀⡀⠀⠐
    ⠀⢈⠀⠢⠐⠂⠀⠀⠀⠑⠐⡂⠀⠐⢂⠂⠀⠈⠁⠀⠅⠀⠠⡁⡀⠀⡀⠀⠀⠐⠨⡂⢀⠌⠅⠌⠀⠄⠠⠀⠀⢀⠀⠄⢂⠨⠈⠈⠀⠀⠀⢌⡐⠐⢄⠨⠨⢐⠀⠀⠑⠀⠅⡀⢂⠠⠅⡀⠐⠂⢀⠀⢂⡈⠀⠀⠀⠐⠂⠀
    ⠀⠈⠀⠂⠡⠅⠅⠈⠀⠀⡁⠐⠄⠀⠅⡐⠀⠀⠁⠐⠀⠠⠈⠀⠀⠁⠀⠀⠀⠀⠀⠄⢌⠀⠐⠀⠄⡀⠠⠈⠁⢀⠀⠀⠀⠂⠌⠁⠂⠀⠐⠀⠨⠠⠁⠀⢀⠨⠐⠄⠀⠠⠀⠈⠀⠄⠐⠀⠄⠠⠂⠀⠈⠀⠐⠄⡈⠠⠠⡂
    ⡀⠀⠀⠂⢀⠀⠐⠐⠄⠂⠠⠂⠀⠄⠡⠈⠠⠂⠀⠈⠀⠠⠐⠄⠀⠐⢀⠀⠄⠀⠐⠂⠀⠀⡀⠀⠀⠐⠠⠐⡐⠀⠀⠄⠄⠀⠀⢀⠀⠀⢁⠀⠀⠄⠁⠀⠀⠀⠀⠀⠀⠐⠠⠀⢀⠀⡀⠀⠨⡁⠠⠀⠀⠀⠀⠂⠂⢀⠀⠈
    ⠀⠀⠁⠈⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠐⠐⠈⠀⠀⠀⠀⠀⠐⠁⠀⠀⠠⠀⠅⠀⠀⠠⢂⠂⠈⠐⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠐⢂⠄⠀⠁⠐⠠⠁⠀⠄⠀⠀⠀
    ⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

    Sources:
    https://github.com/505e06b2/Image-to-Braille/blob/master/braille.js
    https://www.ssec.wisc.edu/~tomw/java/unicode.html#x2800
    https://en.wikipedia.org/wiki/Error_diffusion
    https://archive.ph/71e9G#selection-356.0-356.1
    https://thecodingtrain.com/challenges/90-dithering
    https://editor.p5js.org/codingtrain/sketches/-YkMaf9Ea
*/

//setup php environment
ini_set("memory_limit", -1);
error_reporting(E_ERROR);

//output help
if($argc < 2) die("Usage: php {$argv[0]} <image name> [width]\n");

//process parameters
$image = file_get_contents($argv[1]);
$width = ($argv[2] ?? `tput cols`) * 3;

if(!$image = imagecreatefromstring($image)) die("Not a support file format\n");

//preprocess the image
$image = imagescale($image, $width);
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagefilter($image, IMG_FILTER_CONTRAST, -10); //up the contrast to make the image a little more pretty
$height = floor(imagesy($image) / 5) * 5;

//error diffuse the image
$pixels = [];
for($y = 0; $y < $height; $y++) {
    for($x = 0; $x < $width; $x++) {
        $error = $pixel = imagecolorat($image, $x, $y) & 0xff;
        $pixels[$y][$x] += $pixel - rand(0, 255);

        if($pixels[$y][$x] >= 0) $error = $pixel - 255;

        //floyd & steinberg
        $pixels[$y][$x + 1] += $error * 7 / 16;
        $pixels[$y + 1][$x - 1] += $error * 3 / 16;
        $pixels[$y + 1][$x] += $error * 5 / 16;
        $pixels[$y + 1][$x + 1] += $error * 1 / 16;
    }
}

//braille subpixel translation map
$sub_pixel = [[0, 3], [1, 4], [2, 5], [6, 7]];

//generate the braille output
for($y = 0; $y < $height; $y += 5) {
    for($x = 0; $x < $width; $x += 3) {
        $char = 0x2800;

        for($sub_x = 0; $sub_x < 2; $sub_x++)
            for($sub_y = 0; $sub_y < 4; $sub_y++)
                if($pixels[$y + $sub_y][$x + $sub_x] >= 0) $char += 1 << $sub_pixel[$sub_y][$sub_x];

        echo mb_chr($char);
    }
    echo "\n";
}
?>