artscii 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +106 -176
  2. package/arts/animals/bird.txt +10 -21
  3. package/arts/animals/cat.txt +15 -29
  4. package/arts/animals/crow.txt +12 -25
  5. package/arts/animals/dog.txt +15 -31
  6. package/arts/animals/dove.txt +16 -32
  7. package/arts/animals/dragon.txt +12 -25
  8. package/arts/animals/fish.txt +6 -18
  9. package/arts/animals/frog.txt +14 -27
  10. package/arts/animals/horse.txt +14 -28
  11. package/arts/animals/spider.txt +14 -28
  12. package/arts/emoji/alien.txt +16 -32
  13. package/arts/emoji/angry.txt +16 -32
  14. package/arts/emoji/fire.txt +16 -32
  15. package/arts/emoji/ghost.txt +16 -32
  16. package/arts/emoji/lightning.txt +16 -32
  17. package/arts/emoji/masks.txt +12 -25
  18. package/arts/emoji/poop.txt +16 -32
  19. package/arts/emoji/skull.txt +16 -32
  20. package/arts/emoji/smiley.txt +16 -32
  21. package/arts/emoji/thumbsup.txt +16 -32
  22. package/arts/food/apple.txt +8 -0
  23. package/arts/food/cake.txt +8 -0
  24. package/arts/food/hamburger.txt +8 -0
  25. package/arts/food/ice-cream.txt +7 -0
  26. package/arts/food/pizza.txt +7 -0
  27. package/arts/index.json +510 -150
  28. package/arts/kaomoji/kaomoji.json +1445 -0
  29. package/arts/misc/bolt.txt +8 -0
  30. package/arts/misc/crown.txt +7 -0
  31. package/arts/misc/flag.txt +8 -0
  32. package/arts/misc/gift.txt +7 -0
  33. package/arts/misc/key.txt +8 -0
  34. package/arts/misc/lightbulb.txt +8 -0
  35. package/arts/misc/swords.txt +8 -0
  36. package/arts/music/guitar.txt +8 -0
  37. package/arts/nature/moon.txt +16 -32
  38. package/arts/nature/mountain.txt +7 -14
  39. package/arts/nature/sun.txt +16 -32
  40. package/arts/nature/tree.txt +16 -32
  41. package/arts/objects/book.txt +11 -23
  42. package/arts/objects/coffee.txt +12 -25
  43. package/arts/objects/rocket.txt +16 -32
  44. package/arts/people/user.txt +15 -31
  45. package/arts/sports/medal.txt +8 -0
  46. package/arts/sports/soccer.txt +8 -0
  47. package/arts/sports/trophy.txt +8 -0
  48. package/arts/symbols/heart.txt +14 -29
  49. package/arts/symbols/star.txt +15 -30
  50. package/arts/tech/camera.txt +7 -0
  51. package/arts/tech/laptop.txt +8 -0
  52. package/arts/tech/phone.txt +8 -0
  53. package/arts/tools/hammer.txt +8 -0
  54. package/arts/tools/scissors.txt +8 -0
  55. package/arts/transport/airplane.txt +7 -0
  56. package/arts/transport/boat.txt +7 -0
  57. package/arts/transport/car.txt +6 -0
  58. package/arts/weather/cloud.txt +8 -0
  59. package/arts/weather/rain.txt +8 -0
  60. package/arts/weather/snowflake.txt +8 -0
  61. package/arts/weather/umbrella.txt +8 -0
  62. package/dist/constants.d.ts +6 -4
  63. package/dist/constants.js +6 -4
  64. package/dist/converter.d.ts +0 -31
  65. package/dist/converter.js +3 -139
  66. package/dist/index.js +78 -68
  67. package/dist/kaomoji.d.ts +9 -0
  68. package/dist/kaomoji.js +40 -0
  69. package/dist/mcp.js +81 -40
  70. package/dist/rate-limit.d.ts +1 -0
  71. package/dist/rate-limit.js +14 -0
  72. package/dist/resolve.d.ts +6 -0
  73. package/dist/resolve.js +90 -0
  74. package/dist/searchable.d.ts +11 -0
  75. package/dist/searchable.js +22 -0
  76. package/dist/store.d.ts +5 -5
  77. package/dist/store.js +26 -60
  78. package/dist/types.d.ts +22 -4
  79. package/package.json +1 -1
  80. package/arts/animals/bird.32w.txt +0 -10
  81. package/arts/animals/cat.32w.txt +0 -15
  82. package/arts/animals/crow.32w.txt +0 -12
  83. package/arts/animals/dog.32w.txt +0 -16
  84. package/arts/animals/dove.32w.txt +0 -16
  85. package/arts/animals/dragon.32w.txt +0 -12
  86. package/arts/animals/fish.32w.txt +0 -11
  87. package/arts/animals/frog.32w.txt +0 -14
  88. package/arts/animals/horse.32w.txt +0 -14
  89. package/arts/animals/spider.32w.txt +0 -14
  90. package/arts/emoji/alien.32w.txt +0 -16
  91. package/arts/emoji/angry.32w.txt +0 -16
  92. package/arts/emoji/fire.32w.txt +0 -16
  93. package/arts/emoji/ghost.32w.txt +0 -16
  94. package/arts/emoji/lightning.32w.txt +0 -16
  95. package/arts/emoji/masks.32w.txt +0 -12
  96. package/arts/emoji/poop.32w.txt +0 -16
  97. package/arts/emoji/skull.32w.txt +0 -16
  98. package/arts/emoji/smiley.32w.txt +0 -16
  99. package/arts/emoji/thumbsup.32w.txt +0 -16
  100. package/arts/nature/moon.32w.txt +0 -16
  101. package/arts/nature/mountain.32w.txt +0 -7
  102. package/arts/nature/sun.32w.txt +0 -16
  103. package/arts/nature/tree.32w.txt +0 -16
  104. package/arts/objects/book.32w.txt +0 -13
  105. package/arts/objects/coffee.32w.txt +0 -12
  106. package/arts/objects/rocket.32w.txt +0 -16
  107. package/arts/people/user.32w.txt +0 -16
  108. package/arts/symbols/heart.32w.txt +0 -15
  109. package/arts/symbols/star.32w.txt +0 -15
package/README.md CHANGED
@@ -1,221 +1,151 @@
1
1
  # artscii
2
2
 
3
- ASCII art search API for AI agents. Built-in silhouette arts in two sizes (64w / 32w), served via REST API and MCP. Users can submit their own arts via POST.
3
+ [![npm](https://img.shields.io/npm/v/artscii)](https://www.npmjs.com/package/artscii)
4
4
 
5
- ```
6
- :%%:
7
- -+- .%@@%. -+-
8
- *@@%*--#@@@@#--*%@@*
9
- :%@@@@@#****#@@@@@%:
10
- .%@@*-...::...-*@@%.
11
- .#%%%%%@#: :*%%@@%%*: :#@%%%%%#.
12
- -*@@@@%. +@@@@@@@@@@+ .%@@@@*-
13
- .+@@+ -@@@@@@@@@@@@- +@@+.
14
- .+@@+ -@@@@@@@@@@@@- +@@+.
15
- -*@@@@%. +@@@@@@@@@@+ .%@@@@*-
16
- .#%%%%%@#: :*%%@@%%*: :#@%%%%%#.
17
- .%@@*-...::...-*@@%.
18
- :%@@@@@#****#@@@@@%:
19
- *@@%*--#@@@@#--*%@@*
20
- -+- .%@@%. -+-
21
- :%%:
22
- ```
23
-
24
- ## Quick Start
5
+ ASCII art & kaomoji for AI agents, CLI tools, and chatbots.
6
+ 58 built-in arts + 90 kaomoji, searchable via MCP or REST API.
25
7
 
26
- ```bash
27
- npm install
28
- npm run build
29
- npm run start # REST API on :3001
30
8
  ```
31
-
32
- ## REST API
33
-
34
- All content endpoints accept `?width=32` for the compact variant (default: 64).
35
-
36
- | Endpoint | Description |
37
- |---|---|
38
- | `GET /search?q={query}&width=64\|32` | Search by keyword |
39
- | `GET /art/:id?width=64\|32` | Get art by ID (JSON) |
40
- | `GET /art/:id/raw?width=64\|32` | Get raw ASCII text |
41
- | `GET /random?width=64\|32` | Random art |
42
- | `GET /categories` | List categories |
43
- | `GET /categories/:name?width=64\|32` | Arts in category |
44
- | `GET /list` | All arts with metadata |
45
- | `POST /art` | Submit new art (JSON body) |
46
- | `POST /convert` | Convert image to ASCII art |
47
- | `DELETE /art/:id` | Delete user-submitted art |
48
-
49
- ### Example
50
-
51
- ```bash
52
- # 64w (default)
53
- curl http://localhost:3001/art/cat/raw
54
-
55
- # 32w compact
56
- curl 'http://localhost:3001/art/cat/raw?width=32'
9
+ .::-::. .:-::. --- apple (16w) ---
10
+ .=#%@@@@@%#=: .=*%@@@@@%#+: +:
11
+ -%@@@@@@@@@@@%*+%@@@@@@@@@@@%+ :--:#*.--:
12
+ .%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- -#@@@@#%@@@@%=
13
+ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* :@@@%****+#%@@@:
14
+ .%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@= -@%%%+*@@+*@%%@-
15
+ =@@@@@@@@@@@@@@@@@@@@@@@@@@@@* *@@%+*+#=#%@@#
16
+ -#@@@@@@@@@@@@@@@@@@@@@@@@%= +%@@@#@@@@%+
17
+ =%@@@@@@@@@@@@@@@@@@@@%*. .-+**=*+=.
18
+ =#@@@@@@@@@@@@@@@@%+.
19
+ =#@@@@@@@@@@@@%+. ʕ•ᴥ•ʔ (◕‿◕) (╯°□°)╯︵ ┻━┻
20
+ -#@@@@@@@@%+.
21
+ -#@@@@%=.
22
+ -*#=
57
23
  ```
58
24
 
59
- Response (`GET /art/cat`):
60
-
61
- ```json
62
- {
63
- "id": "cat",
64
- "name": "Cat",
65
- "category": "animals",
66
- "tags": ["cat", "pet", "animal", "cute"],
67
- "width": 58,
68
- "height": 29,
69
- "art": "..."
70
- }
71
- ```
25
+ ## Use Cases
72
26
 
73
- ### Submitting Art
27
+ **Give your CLI personality.** Replace boring spinners with ASCII art loading screens, success badges, or error illustrations.
74
28
 
75
- ```bash
76
- curl -X POST http://localhost:3001/art \
77
- -H 'Content-Type: application/json' \
78
- -d '{
79
- "name": "Robot",
80
- "category": "objects",
81
- "tags": ["robot", "tech"],
82
- "art": " [o_o]\n /| |\\\n d b"
83
- }'
29
+ ```javascript
30
+ import { execSync } from 'child_process';
31
+ // npx artscii runs the MCP server — or just fetch from the REST API:
32
+ const art = await fetch('http://localhost:3001/art/trophy/raw').then(r => r.text());
33
+ console.log(art); // 16w trophy on build success
84
34
  ```
85
35
 
86
- Response: `201` with `ArtResult` JSON.
87
-
88
- **Constraints:**
89
- - `name`: max 30 chars
90
- - `tags`: max 5, each max 20 chars
91
- - `art`: max 64 chars wide, 32 lines tall
92
- - `art32` (optional): max 32 chars wide, 16 lines tall
93
- - Rate limit: 5 requests/min per IP
94
- - Max 100 user-submitted arts total
95
-
96
- **Errors:** `400` (validation), `409` (duplicate ID), `429` (rate limit), `507` (limit reached)
97
-
98
- ### Converting Images
99
-
100
- Convert an image URL or base64 data to ASCII art at runtime (no Python required).
36
+ **Make chatbots expressive.** Discord/Slack bots can react with kaomoji that match the mood — no custom emoji uploads needed.
101
37
 
102
- ```bash
103
- curl -X POST http://localhost:3001/convert \
104
- -H 'Content-Type: application/json' \
105
- -d '{"url": "https://example.com/photo.jpg"}'
38
+ ```javascript
39
+ const res = await fetch('http://localhost:3001/kaomoji?q=celebrate');
40
+ const [first] = await res.json();
41
+ bot.reply(`Deploy complete! ${first.text}`); // Deploy complete! (ノ◕ヮ◕)ノ*:・゚✧
106
42
  ```
107
43
 
108
- Body parameters:
109
-
110
- | Field | Type | Default | Description |
111
- |---|---|---|---|
112
- | `url` | string | — | Image URL (one of `url`/`base64` required) |
113
- | `base64` | string | — | Base64 or data-URI encoded image |
114
- | `invert` | boolean | `false` | Invert brightness |
115
- | `contrast` | boolean | `true` | Apply auto-contrast |
116
- | `gamma` | number | `1.0` | Gamma correction (>1 brighter, <1 darker) |
117
- | `save` | object | — | Save result: `{ name, description?, category, tags }` |
118
-
119
- Response returns `art64`, `art32` and their dimensions. With `save`, also returns `saved: { id, name }` (status `201`).
120
-
121
- Rate limit: 3 requests/min per IP.
122
-
123
- ### Deleting Art
124
-
125
- ```bash
126
- curl -X DELETE http://localhost:3001/art/robot
127
- ```
128
-
129
- - `204`: deleted
130
- - `403`: cannot delete built-in art
131
- - `404`: not found
132
-
133
- ## MCP Server
134
-
135
- Add to your MCP client config:
44
+ **Add visuals to AI agents without wasting tokens.** A 16w art is only 8 lines — far cheaper than describing an image in natural language.
136
45
 
137
46
  ```json
138
47
  {
139
48
  "mcpServers": {
140
- "artscii": {
141
- "command": "npx",
142
- "args": ["-y", "artscii"]
143
- }
49
+ "artscii": { "command": "npx", "args": ["-y", "artscii"] }
144
50
  }
145
51
  }
146
52
  ```
147
53
 
148
- <details>
149
- <summary>Local development (from source)</summary>
54
+ > "Show me a cat" → MCP `search("cat")` → returns 32w cat silhouette + `ฅ•ω•ฅ` kaomoji
150
55
 
151
- ```json
152
- {
153
- "mcpServers": {
154
- "artscii": {
155
- "command": "npx",
156
- "args": ["tsx", "src/mcp.ts"],
157
- "cwd": "/path/to/artscii"
158
- }
159
- }
160
- }
161
- ```
56
+ ## Install
162
57
 
163
- </details>
58
+ ```bash
59
+ # MCP server (Claude Desktop, Cursor, etc.)
60
+ npx -y artscii
164
61
 
165
- ### Tools
62
+ # REST API server
63
+ npx artscii # or: npm i artscii && npm start
64
+ ```
65
+
66
+ ## MCP Tools
166
67
 
167
68
  | Tool | Parameters | Description |
168
69
  |---|---|---|
169
- | `search` | `query`, `width?` | Search arts by keyword |
170
- | `get` | `id`, `width?` | Get art by ID |
171
- | `random` | `width?` | Random art |
172
- | `list` | — | List all arts with metadata |
70
+ | `search` | `query`, `type?` | Search art + kaomoji. `type`: `"art"`, `"kaomoji"`, or `"all"` |
71
+ | `kaomoji` | `query?`, `category?` | Get kaomoji by emotion. Omit for random |
72
+ | `get` | `id` | Get art by ID |
73
+ | `random` | — | Random art |
74
+ | `list` | — | List all arts |
173
75
  | `categories` | — | List categories |
174
- | `submit` | `name`, `category`, `tags`, `art`, `art32?` | Submit new art |
175
- | `convert` | `url?`, `base64?`, `invert?`, `contrast?`, `gamma?`, `save?` | Convert image to ASCII art |
76
+ | `submit` | `name`, `category`, `tags`, `size?`, `art` | Submit new art |
77
+ | `convert` | `url?`, `base64?`, `size?`, ... | Convert image to ASCII |
176
78
  | `delete` | `id` | Delete user-submitted art |
177
79
 
178
- `width` accepts `"64"` (default) or `"32"` (compact).
80
+ ## REST API
179
81
 
180
- ## Available Arts
82
+ | Endpoint | Description |
83
+ |---|---|
84
+ | `GET /search?q={query}&type=art\|kaomoji` | Unified search |
85
+ | `GET /art/:id` | Art by ID (JSON) |
86
+ | `GET /art/:id/raw` | Raw ASCII text |
87
+ | `GET /random` | Random art |
88
+ | `GET /categories` | List categories |
89
+ | `GET /categories/:name` | Arts in category |
90
+ | `GET /list` | All arts metadata |
91
+ | `POST /art` | Submit art |
92
+ | `POST /convert` | Image → ASCII |
93
+ | `DELETE /art/:id` | Delete user art |
94
+ | `GET /kaomoji?q={query}` | Search kaomoji |
95
+ | `GET /kaomoji/random` | Random kaomoji |
96
+ | `GET /kaomoji/categories` | Kaomoji categories |
97
+ | `GET /kaomoji/categories/:name` | Kaomoji by category |
98
+
99
+ ### Submit Art
181
100
 
182
- | ID | Category | 64w | 32w |
183
- |---|---|---|---|
184
- | cat | animals | 58x29 | 29x15 |
185
- | bird | animals | 64x21 | 32x10 |
186
- | fish | animals | 62x23 | 31x11 |
187
- | tree | nature | 53x32 | 26x16 |
188
- | mountain | nature | 64x14 | 32x7 |
189
- | sun | nature | 63x32 | 32x16 |
190
- | coffee | objects | 62x25 | 31x12 |
191
- | book | objects | 58x25 | 29x13 |
192
- | heart | symbols | 64x30 | 32x15 |
193
- | star | symbols | 64x30 | 32x15 |
101
+ ```bash
102
+ curl -X POST http://localhost:3001/art \
103
+ -H 'Content-Type: application/json' \
104
+ -d '{"name":"Robot","category":"objects","tags":["robot","tech"],"size":16,"art":" [o_o]\n /| |\\\n d b"}'
105
+ ```
194
106
 
195
- ## Image Conversion
107
+ ### Convert Image
196
108
 
197
- ### Runtime (Node.js / sharp)
109
+ ```bash
110
+ curl -X POST http://localhost:3001/convert \
111
+ -H 'Content-Type: application/json' \
112
+ -d '{"url":"https://example.com/icon.png","size":16}'
113
+ ```
198
114
 
199
- The `POST /convert` endpoint and MCP `convert` tool handle image-to-ASCII conversion at runtime — no Python needed. Just `npm install` and go.
115
+ | Field | Type | Default | Description |
116
+ |---|---|---|---|
117
+ | `url` / `base64` | string | — | Image source (one required) |
118
+ | `size` | 16 / 32 / 64 | 16 | Size tier |
119
+ | `invert` | boolean | false | Invert brightness |
120
+ | `contrast` | boolean | true | Auto-contrast |
121
+ | `gamma` | number | 1.0 | Gamma correction |
122
+ | `save` | object | — | `{ name, category, tags }` to persist |
200
123
 
201
- ### Batch (Python / Pillow)
124
+ ## Size Tiers
202
125
 
203
- The original batch scripts are still available for regenerating the built-in arts:
126
+ Each art is stored at its minimum identifiable size.
204
127
 
205
- ```bash
206
- pip3 install Pillow
207
- npm run convert # download + convert all 10 arts
208
- ```
128
+ | Tier | Dimensions | For |
129
+ |------|-----------|-----|
130
+ | **16w** | 16 x 8 | Icons, symbols, simple shapes |
131
+ | **32w** | 32 x 16 | Animal silhouettes, emoji |
132
+ | **64w** | 64 x 32 | Detailed scenes (rare) |
209
133
 
210
- Single image conversion:
134
+ ## Kaomoji
211
135
 
212
- ```bash
213
- python3 scripts/img2ascii.py <image-or-url> --width 64 --height 32
214
- python3 scripts/img2ascii.py photo.jpg --width 32 --height 16 --invert --gamma 1.2
215
- ```
136
+ 90 curated entries across 22 categories. Source: [kao.moji](https://github.com/bnookala/kao.moji) (MIT).
216
137
 
217
- Options: `--width`, `--height`, `--invert`, `--no-contrast`, `--gamma`
138
+ | Category | Examples |
139
+ |---|---|
140
+ | happy | `(◕‿◕)` `◉‿◉` `(≧◡≦)` |
141
+ | sad | `(ಥ﹏ಥ)` `╥﹏╥` `(;﹏;)` |
142
+ | angry | `ಠ_ಠ` `(¬_¬)` `눈_눈` |
143
+ | love | `♡^▽^♡` `(•ө•)♡` `✿♥‿♥✿` |
144
+ | confused | `¯\_(ツ)_/¯` `◔_◔` `(・・?)` |
145
+ | animals | `ʕ•ᴥ•ʔ` `ฅ•ω•ฅ` `(•ㅅ•)` |
146
+ | table-flip | `(╯°□°)╯︵ ┻━┻` `┬─┬ノ(ಠ_ಠノ)` |
147
+ | + 15 more | excited, greeting, celebrate, hug, surprised, sleepy, nervous, wink, magic, laughing, determined, eating, dancing, hopeful, jealous |
218
148
 
219
149
  ## License
220
150
 
221
- MIT
151
+ MIT. Art icons from [game-icons.net](https://game-icons.net) (CC BY 3.0, Lorc & Delapouite).
@@ -1,21 +1,10 @@
1
- -*#%%%%#=.
2
- =%@@@@@@@@@%%##*+-
3
- -#@@@@@@@@@@@#=:.
4
- -*@@@@@@@@@@@@*
5
- .-+%@@@@@@@@@@@@@*
6
- :+#%@@@@@@@@@@@@@@@@-
7
- -+%@@@@@@@@@@@@@@@@@@@@:
8
- .-*%@@@@@@@@@@@@@@@@@@@@@@@:
9
- .-*%@@@@@@@@@@@@@@@@@@@@@@@@@@:
10
- :=#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
11
- :-+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
12
- ..:-=+*#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+
13
- .:-=+*****+++*##%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*-
14
- .::--:. .-#@@@@@@@@@@@@@@@@@@@@@@@@@@%+:
15
- :#@@@%%##@@@@@@@@@@@@@@@@%%+-
16
- :==--:. :-=%%##%%%%**+-:.
17
- :#- .*-
18
- .#- +=
19
- #= **.
20
- .---+#***=+##=:..
21
- .:. .-----=-==-..
1
+ =#%%%*=-:
2
+ -#@@@@%+.
3
+ :=*%@@@@@@*
4
+ :+#@@@@@@@@@@+
5
+ .-*%@@@@@@@@@@@@@=
6
+ ..::-=*#%@@@@@@@@@@@@@@%*
7
+ .:::.....-#@%%@@@@@@@@%#+:
8
+ .-:..:+#++*-:.
9
+ :- :-
10
+ .:-=-+=:.
@@ -1,29 +1,15 @@
1
-
2
- :+=
3
- :#*=: :*@@@=
4
- -@@@@%##%@@@@@*
5
- .%@@@@@@@@@@@@%
6
- -@@@@@@@@@@@@@-
7
- *@@@@@@@@@@%+.
8
- -@@@@@@@@@@=
9
- ..:-#@@@@@@@@@@:
10
- .-=+*#%%%@@@@@@@@@@@@@*
11
- :+#%@@@@@@@@@@@@@@@@@@@@@%.
12
- =#@@@@@@@@@@@@@@@@@@@@@@@@@%.
13
- -#@@@@@@@@@@@@@@@@@@@@@@@@@@%-
14
- +@@@@@@@@@@@@@@@@@@@@@@@@@@%*.
15
- *@@@@@@@@@@@@@@@@@@@@@@@@@@#:
16
- *@@@@@@@@@@@@@@@@@@@@@@@@@@*
17
- -@@@@@@@@@@@@@@@@@@@@@@@@@@%.
18
- %@@@@@@@@@@@@@@@@@@@@@@@@@@*
19
- =@@@@@@@@@@@@@@@@@@@@@@@@@@@=
20
- .%@@@@@@@@@@@@@@@@@@@*-:-#@@@=
21
- .*@@@@@@@@@@@@@@@@@@%: :@@@#
22
- =%@@@@@@@@@@@@@@@@@@#. #@@@+
23
- :+%@@@@@@@@@@@@@@@@@@@%-:. .*@@@#:
24
- .:=*%@@@%#***%@@@@@@@@@@@@@@@@@%. -#@@@=
25
- .+#%@@%#*=:. :::::::::::::::::: :==.
26
- .%@@%+:.
27
- -@@%.
28
- =%@*:
29
- :=+.
1
+ .:
2
+ +#+=+%@:
3
+ -@@@@@@+
4
+ #@@@@#.
5
+ :-=+*%@@@@*
6
+ -*%@@@@@@@@@@%
7
+ .#@@@@@@@@@@@@%-
8
+ .%@@@@@@@@@@@@+
9
+ #@@@@@@@@@@@@#
10
+ -@@@@@@@@@%+#@*
11
+ -%@@@@@@@@* %%.
12
+ .-+#%##%%%%%%%+= :#%=
13
+ -##+-: ......... ..
14
+ =%-
15
+ .:
@@ -1,25 +1,12 @@
1
- :=#%%@%%*=.
2
- .*%@@@@@@@@@%+----:.
3
- .#@@@@%#*#@@@@@@@@@@%%*-
4
- =@@@@%: -@@@@@@@@@@@@@%-
5
- +@@@@%- .+@@@@@@@@@%%%##*
6
- -*%@@@@@@%#%@@@@@@*-::..
7
- .+#@@@@@@@@@@@@@@@@@@-
8
- .-*%@@@@@@@@@@@@@@@@@@@@-
9
- :+%@@@@@@@@@@@@@@@@@@@@@@@-
10
- .=#@@@@@@@@@@@@@@@@@@@@@@@@@@-
11
- -*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@:
12
- :+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
13
- .-*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:
14
- :+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-
15
- .=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-
16
- -*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+.
17
- :+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+.
18
- .-#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#+:
19
- :+%@@@@@@@@@@%**********%@@@@#****@@@@#:
20
- -#@@@@@@@@@%*=: :%@@@* +@@@%-
21
- %@@@@@@#*=: =@@@@+ #@@@%:
22
- :+##*-: *@@@@- .%@@@#
23
- #@@@%. -@@@@*
24
- :%@@@# +@@@@=
25
- =%%#+ #%#*-
1
+ =#@@%*-::.
2
+ +@%=:#@@@@%#-
3
+ -%@%*+%@@*==-:
4
+ :+%@@@@@@@@@.
5
+ .=#@@@@@@@@@@@@.
6
+ .-*%@@@@@@@@@@@@@#
7
+ :*%@@@@@@@@@@@@@@@%:
8
+ :+#@@@@@@@@@@@@@@@@%+.
9
+ .=#@@@%%%%%%@@%%%@@#+-.
10
+ *@@%#+-. =@%: *@*
11
+ -=-. *@* #@+
12
+ #%- :%%.
@@ -1,32 +1,16 @@
1
1
 
2
-
3
- +%%+.
4
- %@@@%+.
5
- %@@@@@%%%%%%%%#*-
6
- %@@@@@@@@@@@@@@@@=
7
- %@@@@@@@@@@%%@@@@@%%%%%%%%#+
8
- %@@@@@@@@%- -%@@@@@@@@@@@@@
9
- %@@@@@@@@%- -%@@@@@@@@@@@@@
10
- %@@@@@@@@@@%%@@@@@@@@@@@@@@%
11
- =#%%#= %@@@@@@@@@@@@@@@@@@@@@@@@@%-
12
- #@@@@@@* %@@@@@@@@@@@@@@@@@@@@@@@@#:
13
- %@@@@@@%: -+#%%@@@@@@@@@@%%%%%%#*+:
14
- +@@@@@@@%=. .-=*#%@@@@@%.
15
- *@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%#*+-:. .:-+*%%
16
- +%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*=-. .
17
- :+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#+=:.
18
- :+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*
19
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
20
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
21
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
22
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
23
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
24
- %@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@%
25
- %@@@@@@@@@@%. .%@@@@@@@@@@%
26
- %@@@@@@@@@@% %@@@@@@@@@@%
27
- %@@@@@@@@@@% %@@@@@@@@@@%
28
- %@@@@@@@@@@% %@@@@@@@@@@%
29
- %@@@@@@@@@@% %@@@@@@@@@@%
30
- %@@@@@@@@@@% %@@@@@@@@@@%
31
- %@@@@@@@@@@% %@@@@@@@@@@%
32
- +%@@@@@@@@%+ +%@@@@@@@@%+
2
+ ##=.
3
+ %@@%%%%#=
4
+ %@@@%++@@%%%%#
5
+ %@@@%++%@@@@@@
6
+ +%%+ %@@@@@@@@@@@%=
7
+ %@@@- :-+*%%@%===-.
8
+ :#@@@%%%%%%%%%%%%#+=:...:-
9
+ -*%@@@@@@@@@@@@@@@@%#*+-
10
+ %@@@@@@@@@@@@@@@@@@@@%
11
+ %@@@@@@@@@@@@@@@@@@@@%
12
+ %@@@@%%%%%%%%%%%%@@@@%
13
+ %@@@@%. .%@@@@%
14
+ %@@@@% %@@@@%
15
+ %@@@@% %@@@@%
16
+ #@@@@# #@@@@#
@@ -1,32 +1,16 @@
1
- =%%#
2
- .*@@@@=
3
- +%%+ -%@@@@@#
4
- +@@@@* -%@@@@@@@=
5
- :%@@@@@* -%@@@@@@@@%: .=*##%%%%%%%%%%%%%%=
6
- #@@@@@@@#: .%@@@@@@@@@@%. :*%@@@@@@@@@@@@@@@@@=
7
- -@@@@@@@@@%+ :*%@@@@@@@@@%: +@@@@@@@@@@@@@@@@@@@=
8
- *@@@@@@@@@@@%= .=#@@@@@@@@%- =@@@@@@@@%%@@@@@@@@%=
9
- #@@@@@@@@@@@@@#=. :+#%@@@@@@+ #@@@@@@%- -%@@@@@@%
10
- %@@@@@@@@@@@@@@@%*: .-+*%%@% %@@@@@@%- -%@@@@@@%
11
- %@@@@@@@@@@@@@@@@@@%+-. .:- %@@@@@@@@%%@@@@@@@@%
12
- *@@@@@@@@@@@@@@@@@@@@@%#+-:. %@@@@@@@@@@@@@@@@@@%
13
- =@@@@@@@@@@@@@@@@@@@@@@@@@@%#**+=---%@@@@@@@@@@@@@@@@@@%
14
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
15
- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
16
- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
17
- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
18
- +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
19
- -%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
20
- .*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
21
- :#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-
22
- -*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
23
- :+%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
24
- .:=%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+
25
- .:-=+*#%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-
26
- :-=+*#%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*-
27
- #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*=.
28
- -%@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%##*+=:.
29
- .+%@@@@@@@@@@@@@@@@@@@@@@@@#-
30
- .=#%@@@@@@@@@@@@@@@@@@%+:
31
- .=*#%@@@@@@@@@@@@#=.
32
- .-=+*#%%%%%#-
1
+ +%+
2
+ =#+ .#@@%.
3
+ :@@@+ #@@@@* :+#%%%%%%%=
4
+ *@@@@#- :+%@@@*. =@@@%%@@@@=
5
+ %@@@@@@#-..:+#%# %@@%::%@@%
6
+ #@@@@@@@@%*=:... %@@@%%@@@%
7
+ +@@@@@@@@@@@@%#***%@@@@@@@@%
8
+ .#@@@@@@@@@@@@@@@@@@@@@@@@@%
9
+ .#@@@@@@@@@@@@@@@@@@@@@@@@%
10
+ .*@@@@@@@@@@@@@@@@@@@@@@@#
11
+ :*%@@@@@@@@@@@@@@@@@@@@=
12
+ -#@@@@@@@@@@@@@@@@@@+
13
+ .:-=+*#%%%@@@@@@@@@@@@@@@%*:
14
+ *@@@@@@@@@@@@@@%%%%%%##*=.
15
+ -#%@@@@@@@@%*:
16
+ .=*#%%%%+.
@@ -1,25 +1,12 @@
1
- *@@@@@@@@@@@@@@@@@@@@@@@%%+.
2
- :+%@@@@@@@@@@@@@@@@@@@@@@@#-
3
- -#%@@@@@@@@@@@@@@@@@@@@@@*.
4
- .:=*%@@@@@@@@@@@@#:-=+%@@@@@%-
5
- .:::. +%@@@@@@@@@@@@@@@@@%+-:=%@@@@@@@*.
6
- .+#%@@@%#+: .:=*#%@@@@@@@@@@@@@@@@@@@@@@@@@@@%-
7
- :*%@@@@@@@@@@#=. .#@@@@@@@@@@@@@@@@@@@@@@@@@@@%
8
- :*%@@@@@@@@@@@@@@%#=. *@@@@@@@@%#######@@@@@@@@@@%-
9
- :*%@@@@@@@@@@@@@@@@@@@%*-. #@@@@@@@@# -*%@@@@@@#:
10
- :*@@@@@@@@@@@@@@@@@@@@@@@@@%+ #@@@@@@@@# .:----:
11
- -*@@@@@@@@@@@@@%%%%@@@@@@@@@@@% #@@@@@@@@%:
12
- #@@@@%%%##*+=-::-+#%@@@@@@@@@@@% #@@@@@@@@@%+:.
13
- :=--:.. :+%@@@@@@@@@@@@@@%. *@@@@@@@@@@@@%#+:.
14
- :+%@@@@@@@@@@@@@@@@@@- -@@@@@@@@@@@@@@@@%#+-.
15
- .#@@@@@@@@@@@@@@@@@@@@@# #@@@@@@@@@@@@@@@@@@@%#+:
16
- .=++++++++++++++++++++++. :%@@@@@@@@@@@@@@@@@@@@@@*:
17
- :%@@@@@@@@@@@@@@@@@@@@@@%=
18
- .#@@@@@@@@@@@@@@@@@@@@@@@=
19
- =%@@@@@@@@@@@@@@@@@@@@@%
20
- -*%@@@@@@@@@@@@@@@@@@%
21
- ...::---===++++*%@@@@@@@@@@@@@@@@@@*
22
- .::-==+**##%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.
23
- ..:-=+**#%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*.
24
- =*##%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:
25
- #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#*+-.
1
+ .+%%@@@@@@@@@%-
2
+ .=%@@@@@@#+#@@*.
3
+ .=**+- .=*%@@@@@@%*%@@@%=
4
+ .+%@@@@@%+: -@@@@#**#%@@@@*
5
+ :*@@@@@%%@@@@#+ -@@@@- .-==-
6
+ +##**+==*%@@@@@% -@@@@#=:
7
+ :+%@@@@@@@@:.%@@@@@@%*=:
8
+ ===========: =@@@@@@@@@@%+
9
+ -#@@@@@@@@@@*
10
+ ....:*%@@@@@@@@%
11
+ .::-=++**##%%%%%@%%%@@@@@@@%-
12
+ *#%%@@@@@@@@@@@@@@@@@@@@@@%%*=.
@@ -3,21 +3,9 @@
3
3
 
4
4
 
5
5
 
6
-
7
-
8
-
9
-
10
- .
11
- *%+:
12
- *@@@#+-...
13
- -#+=:. ..*@@@@@@@%%%##**+=--:.
14
- #@@@%#*=:. .:-+*#%%@@@@@@@@@@@@@@@@@@@@@%%#*+=:.
15
- .#@@@@@@@%%#***##%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%#+-
16
- :%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-:%@@@*
17
- +%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@%*
18
- :#@@@@@@%#*+====+*##%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#=:
19
- .###*+-:.. .:-+*#%@@@@@@@@@@@@@@@@@@@@@@%%#+-.
20
- .:+%@@@@%%%%%#####**+=-.
21
- +@@%#=:
22
- #%+.
23
- :.
6
+ #*-.
7
+ =#+-. ..:=+%@@%%%##*+=-:.
8
+ #@@@%%#%%@@@@@@@@@@@@@@@@#*#=
9
+ -%@%%#**##%@@@@@@@@@@@@@@@%%#=
10
+ =-:. ..-=*@@%%%%%##*=-.
11
+ -#=.
@@ -1,27 +1,14 @@
1
-
2
- ..::..
3
- -*#%@@@%%#+:
4
- :#@@@@@@@@@@@@*.
5
- -%@@@@@%##%@@@@@%.
6
- .:-=++%@@@@@+ .*@@@@@#=-.
7
- .-=*#%%@@@@@@@@@@@- +@@@@@@@@%%*+-.
8
- -+#%@@@@@@@@@@@@@@@@@%*++#@@@@@@@@@@@@@@%#*=.
9
- -*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+
10
- .+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
11
- .+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
12
- .+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+
13
- -%@@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#-
14
- +@@@@@@@@@@@@@@@#*=:.....:=+#@@@@@@@@@@@@@@@@@@@@@@@%*=:
15
- *@@@@@@@@@@@@@%+: ... :*%@@@@@@@@@@@@@@@@%#+:
16
- *@@@@@@@@@@@%*- :+#%%%%%#+: :#@@@@@@@@@@@@%*-.
17
- +@@@@@@@@@@@@%. .=#@@@@@@@@@@@*. #@@@@@@@%*=:
18
- -@@@@@@@@@@@@@@%*#%@@@@@@@@@@@@@@%. :%@@@%+:.
19
- #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@= %@@@%+.
20
- -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- =%@@@@%+.
21
- *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* .+%@@@@%=
22
- %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%= .*%@@@@%=
23
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*. :*@@@@@#=
24
- #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#---------: :*@@@@@#=------:.
25
- .#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#: :*@@@@@@@@@@@@%+
26
- -*%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@= -#@@@@@@@@@@@#
27
- ..::::::::::::::::::::::::::::::::::. .:::::::::.
1
+ ...
2
+ =#%@%#=
3
+ .::#@@+-*@@*:
4
+ .-+#%%@@@@%=:+@@@@%#+-.
5
+ -*%@@@@@@@@@@@@@@@@@@@@@%+
6
+ =#@@@@@@@@@@@@@@@@@@@@@@@@@%
7
+ .#@@@@@@%*+==+#@@@@@@@@@@@%#=.
8
+ :%@@@@%*-.:-==-.:*@@@@@%#+-.
9
+ .#@@@@@%==#%@@@@%: *@%*-.
10
+ +@@@@@@@@@@@@@@@@* -%@+.
11
+ %@@@@@@@@@@@@@@@#. .*@@+.
12
+ %@@@@@@@@@@@@@@*:.:. :*@%+:::.
13
+ :*%%%%%%%%%%%%%%%%%%#. :*%%%%%*
14
+ .................. ......